From 1ae028a528164ec607dcbc33ef3d795377936598 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sun, 25 May 2025 17:10:08 -0400 Subject: [PATCH] parser: fix `select select` causing a panic --- crates/squawk_parser/src/grammar.rs | 2 +- crates/squawk_parser/tests/data/err/select.sql | 4 ++++ .../tests/snapshots/tests__select_err.snap | 17 +++++++++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 6b255afb..8687b212 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -4211,7 +4211,7 @@ fn opt_as_col_label(p: &mut Parser<'_>) -> bool { } fn opt_target_list(p: &mut Parser) -> Option { - if !p.at_ts(TARGET_LIST_START) { + if !p.at_ts(TARGET_LIST_START) || p.at(SELECT_KW) { return None; } let m = p.start(); diff --git a/crates/squawk_parser/tests/data/err/select.sql b/crates/squawk_parser/tests/data/err/select.sql index 695d22d0..a039f4cf 100644 --- a/crates/squawk_parser/tests/data/err/select.sql +++ b/crates/squawk_parser/tests/data/err/select.sql @@ -25,5 +25,9 @@ select 1 in c; -- type cast must use a string literal select numeric 1234; +-- regression test: this would cause the parser to get stuck & panic, now it +-- warns about a missing semicolon +select select; + -- trailing comma at EOF select 1, diff --git a/crates/squawk_parser/tests/snapshots/tests__select_err.snap b/crates/squawk_parser/tests/snapshots/tests__select_err.snap index 1ebb745f..c94f939d 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_err.snap @@ -1,7 +1,6 @@ --- source: crates/squawk_parser/tests/tests.rs input_file: crates/squawk_parser/tests/data/err/select.sql -snapshot_kind: text --- SOURCE_FILE COMMENT "--- via https://duckdb.org/docs/stable/sql/dialect/friendly_sql.html#trailing-commas" @@ -209,6 +208,19 @@ SOURCE_FILE INT_NUMBER "1234" SEMICOLON ";" WHITESPACE "\n\n" + COMMENT "-- regression test: this would cause the parser to get stuck & panic, now it" + WHITESPACE "\n" + COMMENT "-- warns about a missing semicolon" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + SELECT + SELECT_CLAUSE + SELECT_KW "select" + SEMICOLON ";" + WHITESPACE "\n\n" COMMENT "-- trailing comma at EOF" WHITESPACE "\n" SELECT @@ -233,4 +245,5 @@ ERROR@395: expected expression ERROR@396: expected expression ERROR@397: expected expression ERROR@520: missing comma -ERROR@561: unexpected trailing comma +ERROR@646: expected SEMICOLON +ERROR@689: unexpected trailing comma