From 41e31bf19040f061e3cfb59eb8c9228abe8d2cc8 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sun, 22 Mar 2026 20:00:37 -0400 Subject: [PATCH 1/2] parser: improve error recovery for expr_as_name_list --- crates/squawk_parser/src/grammar.rs | 47 +++++++++---------- .../tests/data/err/select_graph_table_fn.sql | 4 ++ .../squawk_syntax/src/ast/generated/nodes.rs | 38 ++++++++++++--- crates/squawk_syntax/src/postgresql.ungram | 9 ++-- 4 files changed, 62 insertions(+), 36 deletions(-) create mode 100644 crates/squawk_parser/tests/data/err/select_graph_table_fn.sql diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 51ac663c..aa0c8881 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -983,10 +983,7 @@ fn xmlelement_fn(p: &mut Parser<'_>) -> CompletedMarker { col_label(p); if p.eat(COMMA) { if p.eat(XMLATTRIBUTES_KW) { - // TODO: use delimited - p.expect(L_PAREN); expr_as_name_list(p); - p.expect(R_PAREN); if p.eat(COMMA) && !opt_expr_list(p) { p.error("expected expression list"); } @@ -1002,20 +999,27 @@ fn xmlelement_fn(p: &mut Parser<'_>) -> CompletedMarker { fn expr_as_name_list(p: &mut Parser<'_>) { let m = p.start(); - // TODO: use delimited - while !p.at(EOF) && !p.at(R_PAREN) { - let m = p.start(); - if expr(p).is_none() { - p.error("expected expression"); - } - if p.eat(AS_KW) { - col_label(p); - } - m.complete(p, EXPR_AS_NAME); - if !p.eat(COMMA) { - break; - } - } + delimited( + p, + L_PAREN, + R_PAREN, + COMMA, + || "unexpected comma".to_string(), + EXPR_FIRST, + |p| { + let m = p.start(); + if opt_expr(p).is_none() { + p.error("expected expression"); + m.abandon(p); + return false; + } + if p.eat(AS_KW) { + col_label(p); + } + m.complete(p, EXPR_AS_NAME); + true + }, + ); m.complete(p, EXPR_AS_NAME_LIST); } @@ -1024,9 +1028,7 @@ fn xmlforest_fn(p: &mut Parser<'_>) -> CompletedMarker { assert!(p.at(XMLFOREST_KW)); let m = p.start(); p.expect(XMLFOREST_KW); - p.expect(L_PAREN); expr_as_name_list(p); - p.expect(R_PAREN); let m = m.complete(p, XML_FOREST_FN).precede(p); opt_agg_clauses(p); m.complete(p, CALL_EXPR) @@ -1865,7 +1867,6 @@ fn opt_type_name_with(p: &mut Parser<'_>, type_args_enabled: bool) -> Option { @@ -8560,9 +8561,7 @@ fn opt_element_table_properties_clause(p: &mut Parser<'_>) -> bool { p.expect(COLUMNS_KW); ALL_PROPERTIES } else { - p.expect(L_PAREN); expr_as_name_list(p); - p.expect(R_PAREN); PROPERTIES_LIST } }; @@ -8758,9 +8757,7 @@ fn alter_element_table_actions(p: &mut Parser<'_>) -> SyntaxKind { name_ref(p); if p.eat(ADD_KW) { p.expect(PROPERTIES_KW); - p.expect(L_PAREN); expr_as_name_list(p); - p.expect(R_PAREN); ADD_VERTEX_EDGE_LABEL_PROPERTIES } else { p.expect(DROP_KW); @@ -8806,10 +8803,8 @@ fn graph_table_fn(p: &mut Parser<'_>) -> CompletedMarker { path_pattern_list(p); opt_where_clause(p); p.expect(COLUMNS_KW); - p.expect(L_PAREN); expr_as_name_list(p); p.expect(R_PAREN); - p.expect(R_PAREN); m.complete(p, GRAPH_TABLE_FN) } diff --git a/crates/squawk_parser/tests/data/err/select_graph_table_fn.sql b/crates/squawk_parser/tests/data/err/select_graph_table_fn.sql new file mode 100644 index 00000000..81febe65 --- /dev/null +++ b/crates/squawk_parser/tests/data/err/select_graph_table_fn.sql @@ -0,0 +1,4 @@ +select * from graph_table( + foo match - columns (a b) +-- ^ comma missing +); diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index d6c043b2..43484ac8 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -2492,6 +2492,10 @@ impl BitType { support::token(&self.syntax, SyntaxKind::BIT_KW) } #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } + #[inline] pub fn varying_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::VARYING_KW) } @@ -2773,6 +2777,10 @@ impl CharType { support::token(&self.syntax, SyntaxKind::NCHAR_KW) } #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } + #[inline] pub fn varchar_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::VARCHAR_KW) } @@ -6145,6 +6153,10 @@ impl DoubleType { pub fn precision_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::PRECISION_KW) } + #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -8026,7 +8038,7 @@ pub struct EdgeAny { } impl EdgeAny { #[inline] - pub fn is_label_expression(&self) -> Option { + pub fn is_label(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -8057,7 +8069,7 @@ pub struct EdgeLeft { } impl EdgeLeft { #[inline] - pub fn is_label_expression(&self) -> Option { + pub fn is_label(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -8092,7 +8104,7 @@ pub struct EdgeRight { } impl EdgeRight { #[inline] - pub fn is_label_expression(&self) -> Option { + pub fn is_label(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -9739,6 +9751,10 @@ impl IntervalType { support::token(&self.syntax, SyntaxKind::SECOND_KW) } #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } + #[inline] pub fn to_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::TO_KW) } @@ -9917,10 +9933,10 @@ impl IsJsonValue { } #[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct IsLabelExpression { +pub struct IsLabel { pub(crate) syntax: SyntaxNode, } -impl IsLabelExpression { +impl IsLabel { #[inline] pub fn expr(&self) -> Option { support::child(&self.syntax) @@ -13483,6 +13499,10 @@ impl PathType { pub fn path(&self) -> Option { support::child(&self.syntax) } + #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -16660,6 +16680,10 @@ impl TimeType { support::token(&self.syntax, SyntaxKind::R_PAREN) } #[inline] + pub fn setof_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SETOF_KW) + } + #[inline] pub fn time_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::TIME_KW) } @@ -17279,7 +17303,7 @@ pub struct VertexPattern { } impl VertexPattern { #[inline] - pub fn is_label_expression(&self) -> Option { + pub fn is_label(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -24721,7 +24745,7 @@ impl AstNode for IsJsonValue { &self.syntax } } -impl AstNode for IsLabelExpression { +impl AstNode for IsLabel { #[inline] fn can_cast(kind: SyntaxKind) -> bool { kind == SyntaxKind::IS_LABEL diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 794433e0..5ef98e05 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -513,28 +513,31 @@ PercentType = '%' 'type' PathType = - Path ArgList? + 'setof'? Path ArgList? CharType = + 'setof'? ('varchar' | ( 'character' | 'char' | 'nchar' ) 'varying'? ) ArgList? BitType = - 'bit' 'varying'? ArgList? + 'setof'? 'bit' 'varying'? ArgList? DoubleType = - 'double' 'precision' + 'setof'? 'double' 'precision' Timezone = WithTimezone | WithoutTimezone TimeType = + 'setof'? ('time' | 'timestamp') ('(' Literal ')')? Timezone? IntervalType = + 'setof'? 'interval' ( 'year' From 29487886b70aa5553ade0f7ef93d884a457cd479 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sun, 22 Mar 2026 20:02:04 -0400 Subject: [PATCH 2/2] fix tests --- .../tests__alter_property_graph_ok.snap | 8 +- .../tests__create_property_graph_ok.snap | 4 +- .../snapshots/tests__select_funcs_ok.snap | 12 +-- .../tests__select_graph_table_fn_err.snap | 57 +++++++++++++ .../tests__select_graph_table_fn_ok.snap | 84 +++++++++---------- .../tests/snapshots/tests__sql_pgq_ok.snap | 48 +++++------ 6 files changed, 135 insertions(+), 78 deletions(-) create mode 100644 crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_err.snap diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_property_graph_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_property_graph_ok.snap index 67eae12e..366e6418 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_property_graph_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_property_graph_ok.snap @@ -272,8 +272,8 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "properties" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "o" @@ -293,7 +293,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "p" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n " LABEL_AND_PROPERTIES LABEL_KW "label" @@ -304,8 +304,8 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "properties" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "i" @@ -314,7 +314,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "x" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n " R_PAREN ")" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_property_graph_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_property_graph_ok.snap index dfd6f33a..33e6771a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_property_graph_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_property_graph_ok.snap @@ -402,8 +402,8 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "properties" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" @@ -422,7 +422,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "y" - R_PAREN ")" + R_PAREN ")" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap index e4a5c9ac..483feab3 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap @@ -847,8 +847,8 @@ SOURCE_FILE COMMA "," WHITESPACE " " XMLATTRIBUTES_KW "xmlattributes" - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "foo" @@ -862,7 +862,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "b" - R_PAREN ")" + R_PAREN ")" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" @@ -912,8 +912,8 @@ SOURCE_FILE COMMA "," WHITESPACE " " XMLATTRIBUTES_KW "xmlattributes" - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "buzz" @@ -927,7 +927,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "c" - R_PAREN ")" + R_PAREN ")" COMMA "," WHITESPACE " " NAME_REF @@ -1056,8 +1056,8 @@ SOURCE_FILE CALL_EXPR XML_FOREST_FN XMLFOREST_KW "xmlforest" - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "foo" @@ -1071,7 +1071,7 @@ SOURCE_FILE EXPR_AS_NAME NAME_REF IDENT "buzz" - R_PAREN ")" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- xmlparse" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_err.snap b/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_err.snap new file mode 100644 index 00000000..c9f2b2d6 --- /dev/null +++ b/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_err.snap @@ -0,0 +1,57 @@ +--- +source: crates/squawk_parser/tests/tests.rs +input_file: crates/squawk_parser/tests/data/err/select_graph_table_fn.sql +--- +SOURCE_FILE + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + STAR "*" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + GRAPH_TABLE_FN + GRAPH_TABLE_KW "graph_table" + L_PAREN "(" + WHITESPACE "\n " + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + WHITESPACE " " + MATCH_KW "match" + WHITESPACE " " + PATH_PATTERN_LIST + PATH_PATTERN + PATH_FACTOR + EDGE_ANY + MINUS "-" + WHITESPACE " " + COLUMNS_KW "columns" + WHITESPACE " " + EXPR_AS_NAME_LIST + L_PAREN "(" + EXPR_AS_NAME + NAME_REF + IDENT "a" + WHITESPACE " " + EXPR_AS_NAME + NAME_REF + IDENT "b" + R_PAREN ")" + WHITESPACE "\n" + COMMENT "-- ^ comma missing" + WHITESPACE "\n" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n" +--- +error[syntax-error]: expected COMMA + ╭▸ +2 │ foo match - columns (a b) + ╰╴ ━ diff --git a/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_ok.snap index 75d0a4af..caa79144 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_graph_table_fn_ok.snap @@ -37,12 +37,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -130,12 +130,12 @@ SOURCE_FILE WHITESPACE " \n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -172,12 +172,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -265,12 +265,12 @@ SOURCE_FILE WHITESPACE " \n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -307,12 +307,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -385,12 +385,12 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -426,12 +426,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -490,12 +490,12 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -562,12 +562,12 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -609,12 +609,12 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -659,12 +659,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -709,12 +709,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -757,12 +757,12 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -825,12 +825,12 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME NAME_REF IDENT "a" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -925,8 +925,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -943,7 +943,7 @@ SOURCE_FILE DOT "." NAME_REF IDENT "address" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -1131,8 +1131,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1167,7 +1167,7 @@ SOURCE_FILE DOT "." NAME_REF IDENT "wishlist_name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -1314,8 +1314,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1350,7 +1350,7 @@ SOURCE_FILE DOT "." NAME_REF IDENT "wishlist_name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -1519,8 +1519,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1537,7 +1537,7 @@ SOURCE_FILE DOT "." NAME_REF NAME_KW "name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -1696,8 +1696,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1741,7 +1741,7 @@ SOURCE_FILE DOT "." NAME_REF NAME_KW "name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -1895,8 +1895,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1913,7 +1913,7 @@ SOURCE_FILE DOT "." NAME_REF NAME_KW "name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -2089,8 +2089,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "columns" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -2116,7 +2116,7 @@ SOURCE_FILE DOT "." NAME_REF NAME_KW "name" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__sql_pgq_ok.snap b/crates/squawk_parser/tests/snapshots/tests__sql_pgq_ok.snap index 50284e0c..2eb37526 100644 --- a/crates/squawk_parser/tests/snapshots/tests__sql_pgq_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__sql_pgq_ok.snap @@ -520,8 +520,8 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "COLUMNS" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -534,7 +534,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "customer_name" - R_PAREN ")" + R_PAREN ")" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" @@ -1026,8 +1026,8 @@ SOURCE_FILE WHITESPACE " " COLUMNS_KW "COLUMNS" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1040,7 +1040,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "customer_name" - R_PAREN ")" + R_PAREN ")" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n\n" @@ -1111,8 +1111,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "COLUMNS" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1153,7 +1153,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "account_number" - R_PAREN ")" + R_PAREN ")" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" @@ -1470,14 +1470,14 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "PROPERTIES" WHITESPACE " " - L_PAREN "(" - WHITESPACE " " EXPR_AS_NAME_LIST + L_PAREN "(" + WHITESPACE " " EXPR_AS_NAME NAME_REF NAME_KW "name" - WHITESPACE " " - R_PAREN ")" + WHITESPACE " " + R_PAREN ")" COMMA "," WHITESPACE "\n " VERTEX_TABLE_DEF @@ -1496,14 +1496,14 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "PROPERTIES" WHITESPACE " " - L_PAREN "(" - WHITESPACE " " EXPR_AS_NAME_LIST + L_PAREN "(" + WHITESPACE " " EXPR_AS_NAME NAME_REF NAME_KW "name" - WHITESPACE " " - R_PAREN ")" + WHITESPACE " " + R_PAREN ")" COMMA "," WHITESPACE "\n " VERTEX_TABLE_DEF @@ -1522,14 +1522,14 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "PROPERTIES" WHITESPACE " " - L_PAREN "(" - WHITESPACE " " EXPR_AS_NAME_LIST + L_PAREN "(" + WHITESPACE " " EXPR_AS_NAME NAME_REF IDENT "number" - WHITESPACE " " - R_PAREN ")" + WHITESPACE " " + R_PAREN ")" WHITESPACE "\n " R_PAREN ")" WHITESPACE "\n " @@ -1612,14 +1612,14 @@ SOURCE_FILE PROPERTIES_LIST PROPERTIES_KW "PROPERTIES" WHITESPACE " " - L_PAREN "(" - WHITESPACE " " EXPR_AS_NAME_LIST + L_PAREN "(" + WHITESPACE " " EXPR_AS_NAME NAME_REF IDENT "amount" - WHITESPACE " " - R_PAREN ")" + WHITESPACE " " + R_PAREN ")" COMMA "," WHITESPACE "\n " EDGE_TABLE_DEF @@ -1971,8 +1971,8 @@ SOURCE_FILE WHITESPACE "\n " COLUMNS_KW "COLUMNS" WHITESPACE " " - L_PAREN "(" EXPR_AS_NAME_LIST + L_PAREN "(" EXPR_AS_NAME FIELD_EXPR NAME_REF @@ -1994,7 +1994,7 @@ SOURCE_FILE DOT "." NAME_REF IDENT "amount" - R_PAREN ")" + R_PAREN ")" WHITESPACE "\n" R_PAREN ")" WHITESPACE "\n"