From 1a5b97f74d82473bb117f260ccd401946576025e Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Thu, 22 Jan 2026 18:08:34 -0500 Subject: [PATCH 1/2] ide: cte error handling improvements --- .../tests/data/err/select_cte.sql | 5 ++ .../snapshots/tests__select_cte_err.snap | 69 ++++++++++++++++++- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/crates/squawk_parser/tests/data/err/select_cte.sql b/crates/squawk_parser/tests/data/err/select_cte.sql index 2cd0eb0d..2296e6b8 100644 --- a/crates/squawk_parser/tests/data/err/select_cte.sql +++ b/crates/squawk_parser/tests/data/err/select_cte.sql @@ -13,6 +13,11 @@ with t as (select 1) search depth first by a, b c set ordercol select * from t order by ordercol; +-- extra with +with t as (select 1), +with f as (select 2) +select * from t; + with a as ( select 1 diff --git a/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap b/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap index 2c8bde7b..728b27aa 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap @@ -187,6 +187,65 @@ SOURCE_FILE IDENT "ordercol" SEMICOLON ";" WHITESPACE "\n\n" + COMMENT "-- extra with" + WHITESPACE "\n" + SELECT + WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + WITH_TABLE + NAME + IDENT "t" + WHITESPACE " " + AS_KW "as" + WHITESPACE " " + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + R_PAREN ")" + COMMA "," + WHITESPACE "\n" + ERROR + WITH_KW "with" + WHITESPACE " " + WITH_TABLE + NAME + IDENT "f" + WHITESPACE " " + AS_KW "as" + WHITESPACE " " + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE "\n" + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + STAR "*" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "t" + SEMICOLON ";" + WHITESPACE "\n\n" SELECT WITH_CLAUSE WITH_KW "with" @@ -345,15 +404,19 @@ error[syntax-error]: expected COMMA ╭▸ 13 │ search depth first by a, b c set ordercol ╰╴ ━ +error[syntax-error]: unexpected WITH + ╭▸ +18 │ with f as (select 2) + ╰╴━ error[syntax-error]: missing comma ╭▸ -19 │ ) -- <-- missing a comma +24 │ ) -- <-- missing a comma ╰╴ ━ error[syntax-error]: missing comma ╭▸ -29 │ ) -- <-- missing a comma +34 │ ) -- <-- missing a comma ╰╴ ━ error[syntax-error]: unexpected comma ╭▸ -38 │ ), -- <-- extra comma +43 │ ), -- <-- extra comma ╰╴ ━ From 38246cdbaabb4a68b6177d19d44690a764496945 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Thu, 22 Jan 2026 18:12:31 -0500 Subject: [PATCH 2/2] fix --- crates/squawk_parser/src/grammar.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 41a87500..586097fa 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -2559,6 +2559,9 @@ const COMPOUND_SELECT_FIRST: TokenSet = TokenSet::new(&[UNION_KW, INTERSECT_KW, // [ SEARCH { BREADTH | DEPTH } FIRST BY column_name [, ...] SET search_seq_col_name ] // [ CYCLE column_name [, ...] SET cycle_mark_col_name [ TO cycle_mark_value DEFAULT cycle_mark_default ] USING cycle_path_col_name ] fn with_query(p: &mut Parser<'_>) -> CompletedMarker { + if p.at(WITH_KW) { + p.err_and_bump("unexpected WITH"); + } let m = p.start(); name(p); opt_column_list_with(p, ColumnDefKind::Name);