From 7273c224e2a0a3f775f87b5a19c216a6b5fb1d75 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Mon, 24 Nov 2025 15:55:15 -0500 Subject: [PATCH 1/2] parser: fill out the ast more to help with goto def & find refs --- .../src/generated/syntax_kind.rs | 16 +- crates/squawk_parser/src/grammar.rs | 302 ++-- .../squawk_parser/tests/data/ok/explain.sql | 45 + crates/squawk_parser/tests/data/ok/insert.sql | 3 + .../data/ok/select_compound_union_select.sql | 9 + .../snapshots/tests__alter_extension_ok.snap | 450 +++--- .../tests__alter_foreign_table_ok.snap | 80 +- .../snapshots/tests__alter_function_ok.snap | 119 +- .../tests__alter_materialized_view_ok.snap | 42 +- .../tests__alter_operator_family_ok.snap | 127 +- .../snapshots/tests__alter_procedure_ok.snap | 173 ++- .../snapshots/tests__alter_routine_ok.snap | 119 +- .../snapshots/tests__alter_sequence_ok.snap | 166 ++- .../snapshots/tests__alter_table_err.snap | 6 +- .../snapshots/tests__alter_table_ok.snap | 159 +- .../snapshots/tests__alter_table_pg17_ok.snap | 3 +- .../tests/snapshots/tests__cluster_ok.snap | 18 +- .../tests/snapshots/tests__comment_ok.snap | 288 ++-- .../snapshots/tests__create_cast_ok.snap | 83 +- .../snapshots/tests__create_index_ok.snap | 27 +- .../tests__create_materialized_view_ok.snap | 9 +- .../tests__create_operator_class_ok.snap | 139 +- .../snapshots/tests__create_rule_ok.snap | 14 +- .../snapshots/tests__create_sequence_ok.snap | 116 +- .../snapshots/tests__create_table_err.snap | 174 ++- .../snapshots/tests__create_transform_ok.snap | 66 +- .../snapshots/tests__drop_function_ok.snap | 145 +- .../snapshots/tests__drop_procedure_ok.snap | 145 +- .../snapshots/tests__drop_routine_ok.snap | 145 +- .../tests/snapshots/tests__explain_ok.snap | 401 +++++ .../tests/snapshots/tests__grant_ok.snap | 252 ++-- .../tests/snapshots/tests__insert_err.snap | 48 +- .../tests/snapshots/tests__insert_ok.snap | 371 +++-- .../tests/snapshots/tests__merge_ok.snap | 20 +- .../tests/snapshots/tests__merge_pg17_ok.snap | 234 +-- .../tests/snapshots/tests__misc_ok.snap | 222 +-- .../tests/snapshots/tests__prepare_ok.snap | 9 +- .../tests/snapshots/tests__revoke_ok.snap | 252 ++-- .../snapshots/tests__security_label_ok.snap | 305 ++-- ...ests__select_compound_union_select_ok.snap | 166 +++ .../tests/snapshots/tests__select_cte_ok.snap | 9 +- .../tests/snapshots/tests__update_err.snap | 26 +- .../tests/snapshots/tests__update_ok.snap | 294 ++-- .../tests/snapshots/tests__values_ok.snap | 25 +- .../squawk_syntax/src/ast/generated/nodes.rs | 1299 +++++++++++++++-- crates/squawk_syntax/src/ast/node_ext.rs | 44 + crates/squawk_syntax/src/postgresql.ungram | 170 ++- 47 files changed, 4820 insertions(+), 2515 deletions(-) diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index daa9f5cb..eba2388a 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -628,6 +628,12 @@ pub enum SyntaxKind { COMMIT, COMPOUND_SELECT, COMPRESSION_METHOD, + CONFLICT_DO_NOTHING, + CONFLICT_DO_UPDATE_SET, + CONFLICT_INDEX_ITEM, + CONFLICT_INDEX_ITEM_LIST, + CONFLICT_ON_CONSTRAINT, + CONFLICT_ON_INDEX, CONSTRAINT_EXCLUSION, CONSTRAINT_EXCLUSION_LIST, CONSTRAINT_INCLUDE_CLAUSE, @@ -767,6 +773,8 @@ pub enum SyntaxKind { FRAME_CLAUSE, FROM_CLAUSE, FROM_ITEM, + FUNCTION_SIG, + FUNCTION_SIG_LIST, FUNC_OPTION_LIST, GENERATED_CONSTRAINT, GRANT, @@ -784,6 +792,7 @@ pub enum SyntaxKind { INDEX_EXPR, INHERIT, INHERITS, + INHERIT_TABLE, INITIALLY_DEFERRED_CONSTRAINT_OPTION, INITIALLY_IMMEDIATE_CONSTRAINT_OPTION, INSERT, @@ -879,6 +888,7 @@ pub enum SyntaxKind { NO_ACTION, NO_FORCE_RLS, NO_INHERIT, + NO_INHERIT_TABLE, NULLS_DISTINCT, NULLS_FIRST, NULLS_LAST, @@ -888,6 +898,7 @@ pub enum SyntaxKind { OF_TYPE, ON_CLAUSE, ON_COMMIT, + ON_CONFLICT_CLAUSE, ON_DELETE_ACTION, ON_UPDATE_ACTION, OP, @@ -966,12 +977,12 @@ pub enum SyntaxKind { SELECT, SELECT_CLAUSE, SELECT_INTO, + SEQUENCE_OPTION, SEQUENCE_OPTION_LIST, SERIALIZABLE, SET, SET_ACCESS_METHOD, SET_CLAUSE, - SET_COLUMN, SET_COLUMN_LIST, SET_COMPRESSION, SET_CONSTRAINTS, @@ -984,6 +995,7 @@ pub enum SyntaxKind { SET_GENERATED, SET_GENERATED_OPTIONS, SET_LOGGED, + SET_MULTIPLE_COLUMNS, SET_NOT_NULL, SET_NULL_COLUMNS, SET_OPTIONS, @@ -992,6 +1004,7 @@ pub enum SyntaxKind { SET_SCHEMA, SET_SEQUENCE_OPTION, SET_SESSION_AUTH, + SET_SINGLE_COLUMN, SET_STATISTICS, SET_STORAGE, SET_STORAGE_PARAMS, @@ -1031,6 +1044,7 @@ pub enum SyntaxKind { USING_CLAUSE, USING_INDEX, USING_METHOD, + USING_ON_CLAUSE, VACUUM, VACUUM_OPTION, VACUUM_OPTION_LIST, diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 07e21327..5f725257 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -3261,7 +3261,7 @@ fn merge_using_clause(p: &mut Parser<'_>) { if expr(p).is_none() { p.error("expected an expression"); } - m.complete(p, USING_CLAUSE); + m.complete(p, USING_ON_CLAUSE); } // where from_item can be one of: @@ -3403,10 +3403,11 @@ const SEQUENCE_OPTION_FIRST: TokenSet = TokenSet::new(&[ // [ MINVALUE maxvalue ] // [ NO MINVALUE | NO CYCLE | NO MAXVALUE ] // [ CYCLE ] -fn opt_sequence_option(p: &mut Parser<'_>) -> bool { +fn opt_sequence_option(p: &mut Parser<'_>) -> Option { if !p.at_ts(SEQUENCE_OPTION_FIRST) { - return false; + return None; } + let m = p.start(); match p.current() { AS_KW => { p.bump(AS_KW); @@ -3466,26 +3467,28 @@ fn opt_sequence_option(p: &mut Parser<'_>) -> bool { CYCLE_KW => { p.bump(CYCLE_KW); } - _ => return false, + _ => { + m.abandon(p); + return None; + } } - true + Some(m.complete(p, SEQUENCE_OPTION)) } -fn opt_sequence_options(p: &mut Parser<'_>) -> bool { +fn opt_sequence_options(p: &mut Parser<'_>) -> Option { if p.at(L_PAREN) { let m = p.start(); p.bump(L_PAREN); while !p.at(EOF) { // TODO: add validation to make sure we have at least one - if !opt_sequence_option(p) { + if opt_sequence_option(p).is_none() { break; } } p.expect(R_PAREN); - m.complete(p, SEQUENCE_OPTION_LIST); - true + Some(m.complete(p, SEQUENCE_OPTION_LIST)) } else { - false + None } } @@ -5863,7 +5866,7 @@ fn alter_sequence(p: &mut Parser<'_>) -> CompletedMarker { _ => { let mut found_option = false; while !p.at(EOF) { - if !opt_sequence_option(p) { + if opt_sequence_option(p).is_none() { break; } found_option = true; @@ -5943,8 +5946,7 @@ fn alter_routine(p: &mut Parser<'_>) -> CompletedMarker { let m = p.start(); p.bump(ALTER_KW); p.bump(ROUTINE_KW); - name_ref(p); - opt_param_list(p); + function_sig(p); match p.current() { RENAME_KW => { p.bump(RENAME_KW); @@ -6105,8 +6107,7 @@ fn alter_procedure(p: &mut Parser<'_>) -> CompletedMarker { let m = p.start(); p.bump(ALTER_KW); p.bump(PROCEDURE_KW); - path_name_ref(p); - opt_param_list(p); + function_sig(p); match p.current() { RENAME_KW => { p.bump(RENAME_KW); @@ -6613,8 +6614,7 @@ fn alter_function(p: &mut Parser<'_>) -> CompletedMarker { let m = p.start(); p.bump(ALTER_KW); p.bump(FUNCTION_KW); - path_name_ref(p); - opt_param_list(p); + function_sig(p); match p.current() { RENAME_KW => { p.bump(RENAME_KW); @@ -6898,8 +6898,7 @@ fn alter_extension(p: &mut Parser<'_>) -> CompletedMarker { } FUNCTION_KW | PROCEDURE_KW | ROUTINE_KW => { p.bump_any(); - path_name_ref(p); - opt_param_list(p); + function_sig(p); } MATERIALIZED_KW => { p.bump(MATERIALIZED_KW); @@ -8182,8 +8181,7 @@ fn comment(p: &mut Parser<'_>) -> CompletedMarker { } FUNCTION_KW | PROCEDURE_KW | ROUTINE_KW => { p.bump_any(); - path_name_ref(p); - opt_param_list(p); + function_sig(p); } LARGE_KW => { p.bump_any(); @@ -8201,9 +8199,7 @@ fn comment(p: &mut Parser<'_>) -> CompletedMarker { p.bump_any(); p.bump_any(); path_name_ref(p); - if p.eat(USING_KW) { - name_ref(p); - } + opt_using_method(p); } OPERATOR_KW => { p.bump_any(); @@ -8268,9 +8264,7 @@ fn cluster(p: &mut Parser<'_>) -> CompletedMarker { if has_name && p.eat(ON_KW) { path_name_ref(p); } - if p.eat(USING_KW) { - name_ref(p); - } + opt_using_method(p); m.complete(p, CLUSTER) } @@ -8403,8 +8397,7 @@ fn create_cast(p: &mut Parser<'_>) -> CompletedMarker { if p.eat(WITH_KW) { if !p.eat(INOUT_KW) { p.expect(FUNCTION_KW); - path_name_ref(p); - opt_param_list(p); + function_sig(p); } } else { p.expect(WITHOUT_KW); @@ -8779,9 +8772,7 @@ fn create_materialized_view(p: &mut Parser<'_>) -> CompletedMarker { opt_if_not_exists(p); path_name(p); opt_column_list_with(p, ColumnDefKind::Name); - if p.eat(USING_KW) { - name_ref(p); - } + opt_using_method(p); opt_with_params(p); opt_tablespace(p); p.expect(AS_KW); @@ -8886,8 +8877,7 @@ fn operator_class_option(p: &mut Parser<'_>) { p.error("expected number"); } opt_type_name_list(p); - path_name_ref(p); - opt_param_list(p); + function_sig(p); } STORAGE_KW => { p.bump(STORAGE_KW); @@ -9163,7 +9153,7 @@ fn create_sequence(p: &mut Parser<'_>) -> CompletedMarker { opt_if_not_exists(p); path_name(p); while !p.at(EOF) { - if !opt_sequence_option(p) { + if opt_sequence_option(p).is_none() { break; } } @@ -9356,15 +9346,13 @@ fn create_transform(p: &mut Parser<'_>) -> CompletedMarker { p.expect(SQL_KW); p.expect(WITH_KW); p.expect(FUNCTION_KW); - path_name_ref(p); - opt_param_list(p); + function_sig(p); p.expect(COMMA); p.expect(TO_KW); p.expect(SQL_KW); p.expect(WITH_KW); p.expect(FUNCTION_KW); - path_name_ref(p); - opt_param_list(p); + function_sig(p); p.expect(R_PAREN); m.complete(p, CREATE_TRANSFORM) } @@ -9552,14 +9540,26 @@ fn drop_function(p: &mut Parser<'_>) -> CompletedMarker { p.bump(DROP_KW); p.bump(FUNCTION_KW); opt_if_exists(p); + function_sig_list(p); + opt_cascade_or_restrict(p); + m.complete(p, DROP_FUNCTION) +} + +fn function_sig(p: &mut Parser<'_>) { + let m = p.start(); path_name_ref(p); opt_param_list(p); + m.complete(p, FUNCTION_SIG); +} + +// function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] +fn function_sig_list(p: &mut Parser<'_>) { + let m = p.start(); + function_sig(p); while !p.at(EOF) && p.eat(COMMA) { - path_name_ref(p); - opt_param_list(p); + function_sig(p); } - opt_cascade_or_restrict(p); - m.complete(p, DROP_FUNCTION) + m.complete(p, FUNCTION_SIG_LIST); } // DROP FOREIGN DATA WRAPPER [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] @@ -9815,12 +9815,7 @@ fn drop_procedure(p: &mut Parser<'_>) -> CompletedMarker { p.bump(DROP_KW); p.bump(PROCEDURE_KW); opt_if_exists(p); - path_name_ref(p); - opt_param_list(p); - while !p.at(EOF) && p.eat(COMMA) { - path_name_ref(p); - opt_param_list(p); - } + function_sig_list(p); opt_cascade_or_restrict(p); m.complete(p, DROP_PROCEDURE) } @@ -9856,12 +9851,7 @@ fn drop_routine(p: &mut Parser<'_>) -> CompletedMarker { p.bump(DROP_KW); p.bump(ROUTINE_KW); opt_if_exists(p); - path_name_ref(p); - opt_param_list(p); - while !p.at(EOF) && p.eat(COMMA) { - path_name_ref(p); - opt_param_list(p); - } + function_sig_list(p); opt_cascade_or_restrict(p); m.complete(p, DROP_ROUTINE) } @@ -10076,6 +10066,7 @@ fn explain(p: &mut Parser<'_>) -> CompletedMarker { SELECT | COMPOUND_SELECT | SELECT_INTO + | TABLE | VALUES | INSERT | UPDATE @@ -10100,7 +10091,7 @@ fn explain(p: &mut Parser<'_>) -> CompletedMarker { } fn opt_explain_option_list(p: &mut Parser<'_>) { - if !p.at(L_PAREN) { + if !p.at(L_PAREN) || (p.at(L_PAREN) && p.nth_at_ts(1, SELECT_FIRST)) { return; } delimited( @@ -10561,14 +10552,7 @@ fn privilege_target(p: &mut Parser<'_>) { } FUNCTION_KW | PROCEDURE_KW | ROUTINE_KW => { p.bump_any(); - // function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] - path_name_ref(p); - opt_param_list(p); - while !p.at(EOF) && p.eat(COMMA) { - // function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] - path_name_ref(p); - opt_param_list(p); - } + function_sig_list(p); } // TYPE type_name [, ...] TYPE_KW => { @@ -10850,8 +10834,7 @@ fn security_label(p: &mut Parser<'_>) -> CompletedMarker { } FUNCTION_KW | PROCEDURE_KW | ROUTINE_KW => { p.bump_any(); - path_name_ref(p); - opt_param_list(p); + function_sig(p); } AGGREGATE_KW => { p.bump(AGGREGATE_KW); @@ -12117,13 +12100,7 @@ fn insert(p: &mut Parser<'_>, m: Option) -> CompletedMarker { p.bump(INSERT_KW); p.expect(INTO_KW); path_name_ref(p); - // [ AS alias ] - if p.at(AS_KW) { - let m = p.start(); - p.bump(AS_KW); - name(p); - m.complete(p, ALIAS); - } + opt_as_alias_with_as(p); // [ ( column_name [, ...] ) ] opt_column_list(p); // [ OVERRIDING { SYSTEM | USER } VALUE ] @@ -12139,40 +12116,92 @@ fn insert(p: &mut Parser<'_>, m: Option) -> CompletedMarker { } else { query(p); } + opt_on_conflict_clause(p); + // [ RETURNING { * | output_expression [ [ AS ] output_name ] } [, ...] ] + opt_returning_clause(p); + m.complete(p, INSERT) +} + +fn opt_on_conflict_clause(p: &mut Parser<'_>) { + let m = p.start(); // [ ON CONFLICT [ conflict_target ] conflict_action ] if p.eat(ON_KW) { p.expect(CONFLICT_KW); - // ON CONSTRAINT constraint_name - if p.eat(ON_KW) { - p.expect(CONSTRAINT_KW); - name_ref(p); - // ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ] - } else if p.at(L_PAREN) { - on_conflict_index_exprs(p); - // [ WHERE index_predicate ] - // TODO: be more strict? - opt_where_clause(p); - } - // conflict_action is one of: - // DO NOTHING - // DO UPDATE SET { column_name = { expression | DEFAULT } | - // ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | - // ( column_name [, ...] ) = ( sub-SELECT ) - // } [, ...] - // [ WHERE condition ] - if p.eat(DO_KW) && !p.eat(NOTHING_KW) { - p.expect(UPDATE_KW); - set_clause(p); - opt_where_clause(p); - } + opt_conflict_target(p); + conflict_action(p); + m.complete(p, ON_CONFLICT_CLAUSE); + } else { + m.abandon(p); + } +} + +fn conflict_on_constraint(p: &mut Parser<'_>) { + assert!(p.at(ON_KW)); + let m = p.start(); + p.expect(ON_KW); + p.expect(CONSTRAINT_KW); + name_ref(p); + m.complete(p, CONFLICT_ON_CONSTRAINT); +} + +fn opt_conflict_target(p: &mut Parser<'_>) { + // ON CONSTRAINT constraint_name + if p.at(ON_KW) { + conflict_on_constraint(p); + // ( { index_column_name | ( index_expression ) } [ COLLATE collation ] [ opclass ] [, ...] ) [ WHERE index_predicate ] + } else if p.at(L_PAREN) { + conflict_on_index(p); } - // [ RETURNING { * | output_expression [ [ AS ] output_name ] } [, ...] ] - opt_returning_clause(p); - m.complete(p, INSERT) } -fn on_conflict_index_exprs(p: &mut Parser<'_>) { +fn conflict_on_index(p: &mut Parser<'_>) { assert!(p.at(L_PAREN)); + let m = p.start(); + conflict_index_item_list(p); + // [ WHERE index_predicate ] + // TODO: be more strict? + opt_where_clause(p); + m.complete(p, CONFLICT_ON_INDEX); +} + +// conflict_action is one of: +// DO NOTHING +// DO UPDATE SET { column_name = { expression | DEFAULT } | +// ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) | +// ( column_name [, ...] ) = ( sub-SELECT ) +// } [, ...] +// [ WHERE condition ] +fn conflict_action(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(DO_KW); + if p.eat(NOTHING_KW) { + m.complete(p, CONFLICT_DO_NOTHING); + } else { + p.expect(UPDATE_KW); + set_clause(p); + opt_where_clause(p); + m.complete(p, CONFLICT_DO_UPDATE_SET); + } +} + +fn opt_conflict_index_item(p: &mut Parser<'_>) -> bool { + if !p.at_ts(EXPR_FIRST) { + return false; + } + let m = p.start(); + if expr(p).is_none() { + p.error("expected expression"); + } + opt_collate(p); + // [ opclass ] + opt_ident(p); + m.complete(p, CONFLICT_INDEX_ITEM); + true +} + +fn conflict_index_item_list(p: &mut Parser<'_>) { + assert!(p.at(L_PAREN)); + let m = p.start(); delimited( p, L_PAREN, @@ -12180,19 +12209,9 @@ fn on_conflict_index_exprs(p: &mut Parser<'_>) { COMMA, || "unexpected comma".to_string(), EXPR_FIRST, - |p| { - if !p.at_ts(EXPR_FIRST) { - return false; - } - if expr(p).is_none() { - p.error("expected expression"); - } - opt_collate(p); - // [ opclass ] - opt_ident(p); - true - }, + opt_conflict_index_item, ); + m.complete(p, CONFLICT_INDEX_ITEM_LIST); } // SET { column_name = { expression | DEFAULT } | @@ -12233,13 +12252,14 @@ fn opt_set_column(p: &mut Parser<'_>) -> Option { column_list(p); p.expect(EQ); set_expr_list_or_paren_select(p); + Some(m.complete(p, SET_MULTIPLE_COLUMNS)) } else { // column_name = { expression | DEFAULT } column(p, &ColumnDefKind::NameRef); p.expect(EQ); set_expr(p); + Some(m.complete(p, SET_SINGLE_COLUMN)) } - Some(m.complete(p, SET_COLUMN)) } // [ ROW ] ( { expression | DEFAULT } [, ...] ) @@ -12283,12 +12303,15 @@ fn opt_set_expr(p: &mut Parser<'_>) -> bool { const SET_EXPR_FIRST: TokenSet = TokenSet::new(&[DEFAULT_KW]).union(EXPR_FIRST); fn set_expr(p: &mut Parser<'_>) { + let m = p.start(); if !p.eat(DEFAULT_KW) && expr(p).is_none() { p.error("expected expression"); } + m.complete(p, SET_EXPR); } -fn opt_as_alias(p: &mut Parser<'_>) -> Option { +/// Like [`opt_as_alias`] but the `as` is required +fn opt_as_alias_with_as(p: &mut Parser<'_>) -> Option { if p.at(AS_KW) { let m = p.start(); p.bump(AS_KW); @@ -12298,6 +12321,14 @@ fn opt_as_alias(p: &mut Parser<'_>) -> Option { p.error("col id") } Some(m.complete(p, ALIAS)) + } else { + None + } +} + +fn opt_as_alias(p: &mut Parser<'_>) -> Option { + if p.at(AS_KW) { + opt_as_alias_with_as(p) } else if p.at_ts(NAME_FIRST) { let m = p.start(); opt_name(p); @@ -12383,25 +12414,27 @@ fn delete(p: &mut Parser<'_>, m: Option) -> CompletedMarker { p.expect(FROM_KW); relation_name(p); opt_as_alias(p); - { - let m = p.start(); - if p.eat(USING_KW) { - while p.at_ts(FROM_ITEM_FIRST) { - if !opt_from_item(p) || !p.eat(COMMA) { - break; - } - } - m.complete(p, USING_CLAUSE); - } else { - m.abandon(p); - } - } + opt_using_clause(p); // [ WHERE condition | WHERE CURRENT OF cursor_name ] opt_where_or_current_of(p); opt_returning_clause(p); m.complete(p, DELETE) } +fn opt_using_clause(p: &mut Parser<'_>) { + let m = p.start(); + if p.eat(USING_KW) { + while p.at_ts(FROM_ITEM_FIRST) { + if !opt_from_item(p) || !p.eat(COMMA) { + break; + } + } + m.complete(p, USING_CLAUSE); + } else { + m.abandon(p); + } +} + // WHERE CURRENT OF cursor_name fn opt_where_current_of(p: &mut Parser<'_>) { let m = p.start(); @@ -12563,10 +12596,7 @@ fn create_index(p: &mut Parser<'_>) -> CompletedMarker { // ON p.expect(ON_KW); relation_name(p); - // [ USING method ] - if p.eat(USING_KW) { - name_ref(p); - } + opt_using_method(p); // ( // { column_name | ( expression ) } // [ COLLATE collation ] @@ -13543,7 +13573,7 @@ fn opt_alter_table_action(p: &mut Parser<'_>) -> Option { let m = p.start(); p.bump(INHERIT_KW); path_name_ref(p); - m.complete(p, INHERIT) + m.complete(p, INHERIT_TABLE) } // NO INHERIT parent_table NO_KW if p.nth_at(1, INHERIT_KW) => { @@ -13551,7 +13581,7 @@ fn opt_alter_table_action(p: &mut Parser<'_>) -> Option { p.bump(NO_KW); p.bump(INHERIT_KW); path_name_ref(p); - m.complete(p, NO_INHERIT) + m.complete(p, NO_INHERIT_TABLE) } // ENABLE TRIGGER [ trigger_name | ALL | USER ] // ENABLE REPLICA TRIGGER trigger_name @@ -13727,7 +13757,7 @@ fn opt_alter_table_action(p: &mut Parser<'_>) -> Option { p.eat(COLUMN_KW); opt_if_not_exists(p); // column_name - name_ref(p); + name(p); type_name(p); opt_alter_option_list(p); opt_collate(p); @@ -13863,7 +13893,7 @@ fn opt_alter_table_action(p: &mut Parser<'_>) -> Option { } else { p.eat(COLUMN_KW); if p.at_ts(COLUMN_FIRST) { - p.bump_any(); + name_ref(p); } else { p.error("expected column_name"); } @@ -13985,7 +14015,7 @@ fn generated_options(p: &mut Parser<'_>) { } m.complete(p, RESTART); } else if p.eat(SET_KW) { - if opt_sequence_option(p) { + if opt_sequence_option(p).is_some() { m.complete(p, SET_SEQUENCE_OPTION); continue; } else { diff --git a/crates/squawk_parser/tests/data/ok/explain.sql b/crates/squawk_parser/tests/data/ok/explain.sql index 240f568b..0b28709a 100644 --- a/crates/squawk_parser/tests/data/ok/explain.sql +++ b/crates/squawk_parser/tests/data/ok/explain.sql @@ -80,3 +80,48 @@ EXPLAIN (COSTS 1) SELECT * FROM foo WHERE i = 4; -- boolean 0 EXPLAIN (COSTS 0) SELECT * FROM foo WHERE i = 4; + +-- compound select +explain select 1 union select 2; + +-- select into +explain select a, b, c into t from t2; + +-- paren select +explain (select 1); + +-- table +explain table t; + +-- values +explain values (1), (2); + +-- insert +explain insert into t values (1, 2), (3, 4); + +-- update +explain update t set a = 1 where a > 10; + +-- delete +explain delete from t where x > 1; + +-- merge +explain merge into t + using u + on t.id = u.id + when matched then + do nothing; + +-- execute +explain execute foo; + +-- declare +explain declare c cursor for select 1; + +-- create table as +explain create table t as + select * from u where c >= b; + +-- create materialized view +explain create materialized view t + as select 1; diff --git a/crates/squawk_parser/tests/data/ok/insert.sql b/crates/squawk_parser/tests/data/ok/insert.sql index 846093a4..b4e2f8c2 100644 --- a/crates/squawk_parser/tests/data/ok/insert.sql +++ b/crates/squawk_parser/tests/data/ok/insert.sql @@ -69,6 +69,9 @@ INSERT INTO distributors (did, dname) INSERT INTO distributors (did, dname) VALUES (7, 'Redline GmbH') ON CONFLICT (did) DO NOTHING; +insert into t (a, b, c) values (1, 2, 3) + on conflict (a, b) do nothing; + -- Don't update existing distributors based in a certain ZIP code INSERT INTO distributors AS d (did, dname) VALUES (8, 'Anvil Distribution') ON CONFLICT (did) DO UPDATE diff --git a/crates/squawk_parser/tests/data/ok/select_compound_union_select.sql b/crates/squawk_parser/tests/data/ok/select_compound_union_select.sql index d0031789..d816ae85 100644 --- a/crates/squawk_parser/tests/data/ok/select_compound_union_select.sql +++ b/crates/squawk_parser/tests/data/ok/select_compound_union_select.sql @@ -10,3 +10,12 @@ SELECT ( UNION SELECT id FROM code_categories WHERE "language" = 'nl-NL' ORDER BY "id" ASC LIMIT 1 ) LIMIT 1; + +select * from t union table t; +table t union table t; +(select 1) union (table t); + +(select 2) union select a, b, c into t from t2; + +values (1), (2) union values (3), (4); + diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_extension_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_extension_ok.snap index 07a2e609..e6857382 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_extension_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_extension_ok.snap @@ -636,10 +636,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -654,38 +655,39 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -700,10 +702,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -718,47 +721,48 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - R_PAREN ")" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- add_drop_materialized_view" @@ -1105,10 +1109,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1123,38 +1128,39 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1169,10 +1175,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1187,47 +1194,48 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - R_PAREN ")" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- add_drop_routine" @@ -1244,10 +1252,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1262,38 +1271,39 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1308,10 +1318,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n" ALTER_EXTENSION @@ -1326,47 +1337,48 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - R_PAREN ")" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- add_drop_sequence" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_foreign_table_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_foreign_table_ok.snap index c3489a23..76cfe0e6 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_foreign_table_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_foreign_table_ok.snap @@ -174,7 +174,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - NAME_REF + NAME IDENT "c" WHITESPACE " " PATH_TYPE @@ -200,7 +200,7 @@ SOURCE_FILE ADD_COLUMN ADD_KW "add" WHITESPACE " " - NAME_REF + NAME IDENT "c" WHITESPACE " " PATH_TYPE @@ -339,7 +339,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_TYPE TYPE_KW "type" @@ -369,7 +370,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_TYPE SET_KW "set" @@ -413,7 +415,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_DEFAULT SET_KW "set" @@ -446,7 +449,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_DEFAULT SET_KW "set" @@ -483,7 +487,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_DEFAULT DROP_KW "drop" @@ -507,7 +512,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_DEFAULT DROP_KW "drop" @@ -535,7 +541,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_NOT_NULL DROP_KW "drop" @@ -561,7 +568,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_NOT_NULL SET_KW "set" @@ -591,7 +599,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -618,7 +627,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -649,7 +659,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -688,7 +699,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -731,7 +743,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -765,7 +778,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -798,7 +812,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -824,7 +839,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -850,7 +866,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -876,7 +893,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -902,7 +920,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -932,7 +951,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS_LIST ALTER_OPTION_LIST @@ -990,7 +1010,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS_LIST ALTER_OPTION_LIST @@ -1321,7 +1342,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - INHERIT + INHERIT_TABLE INHERIT_KW "inherit" WHITESPACE " " PATH @@ -1348,7 +1369,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - INHERIT + INHERIT_TABLE INHERIT_KW "inherit" WHITESPACE " " PATH @@ -1377,7 +1398,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - NO_INHERIT + NO_INHERIT_TABLE NO_KW "no" WHITESPACE " " INHERIT_KW "inherit" @@ -1406,7 +1427,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - NO_INHERIT + NO_INHERIT_TABLE NO_KW "no" WHITESPACE " " INHERIT_KW "inherit" @@ -1486,7 +1507,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - NAME_REF + NAME IDENT "c" WHITESPACE " " PATH_TYPE @@ -1512,7 +1533,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "e" + NAME_REF + IDENT "e" WHITESPACE " " SET_NOT_NULL SET_KW "set" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_function_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_function_ok.snap index 3ad03248..02b022ed 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_function_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_function_ok.snap @@ -10,10 +10,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " FUNC_OPTION_LIST VOLATILITY_FUNC_OPTION @@ -27,10 +28,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " RENAME_KW "rename" WHITESPACE " " @@ -45,15 +47,16 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" + IDENT "f" WHITESPACE " " RENAME_KW "rename" WHITESPACE " " @@ -70,27 +73,28 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE " " FUNC_OPTION_LIST STRICT_FUNC_OPTION @@ -104,10 +108,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " OWNER_KW "owner" WHITESPACE " " @@ -123,10 +128,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " SET_KW "set" WHITESPACE " " @@ -143,10 +149,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " \n " FUNC_OPTION_LIST STRICT_FUNC_OPTION @@ -321,10 +328,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " DEPENDS_KW "depends" WHITESPACE " " @@ -341,10 +349,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" WHITESPACE " " NO_KW "no" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_materialized_view_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_materialized_view_ok.snap index 98f4bff9..c81b87f0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_materialized_view_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_materialized_view_ok.snap @@ -288,7 +288,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -316,7 +317,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -346,7 +348,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -375,7 +378,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -408,7 +412,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -453,7 +458,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -483,7 +489,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -518,7 +525,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -543,7 +551,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -568,7 +577,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -593,7 +603,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -623,7 +634,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -650,7 +662,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_COMPRESSION SET_KW "set" @@ -677,7 +690,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_COMPRESSION SET_KW "set" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_operator_family_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_operator_family_ok.snap index bcf6a0f6..9a8cf33b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_operator_family_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_operator_family_ok.snap @@ -98,10 +98,11 @@ SOURCE_FILE LITERAL INT_NUMBER "1" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" COMMA "," WHITESPACE "\n " FUNCTION_KW "function" @@ -117,25 +118,26 @@ SOURCE_FILE IDENT "t" R_PAREN ")" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" COMMA "," WHITESPACE "\n " FUNCTION_KW "function" @@ -161,10 +163,11 @@ SOURCE_FILE R_PAREN ")" R_PAREN ")" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- add_op_for_search" @@ -296,19 +299,20 @@ SOURCE_FILE LITERAL INT_NUMBER "1" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- add_func_with_params" @@ -352,27 +356,28 @@ SOURCE_FILE IDENT "u" R_PAREN ")" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- drop_op" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_procedure_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_procedure_ok.snap index afb142e8..0c758d99 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_procedure_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_procedure_ok.snap @@ -10,10 +10,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " RENAME_KW "rename" WHITESPACE " " @@ -28,32 +29,33 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "p" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "p" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE "\n " RENAME_KW "rename" WHITESPACE " " @@ -70,10 +72,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " OWNER_KW "owner" WHITESPACE " " @@ -87,10 +90,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " OWNER_KW "owner" WHITESPACE " " @@ -106,10 +110,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " SET_KW "set" WHITESPACE " " @@ -126,10 +131,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SECURITY_FUNC_OPTION @@ -166,10 +172,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SECURITY_FUNC_OPTION @@ -225,10 +232,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SET_FUNC_OPTION @@ -249,10 +257,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SET_FUNC_OPTION @@ -273,10 +282,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SET_FUNC_OPTION @@ -297,10 +307,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST SET_FUNC_OPTION @@ -323,10 +334,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST RESET_FUNC_OPTION @@ -343,10 +355,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " FUNC_OPTION_LIST RESET_FUNC_OPTION @@ -362,10 +375,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " DEPENDS_KW "depends" WHITESPACE " " @@ -384,10 +398,11 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" WHITESPACE "\n " NO_KW "no" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_routine_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_routine_ok.snap index c7ded31a..d8113dc9 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_routine_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_routine_ok.snap @@ -10,8 +10,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " FUNC_OPTION_LIST VOLATILITY_FUNC_OPTION @@ -25,8 +28,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " RENAME_KW "rename" WHITESPACE " " @@ -43,8 +49,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " OWNER_KW "owner" WHITESPACE " " @@ -60,8 +69,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " SET_KW "set" WHITESPACE " " @@ -78,8 +90,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " DEPENDS_KW "depends" WHITESPACE " " @@ -98,8 +113,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " NO_KW "no" WHITESPACE " " @@ -122,8 +140,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " NO_KW "no" WHITESPACE " " @@ -146,37 +167,40 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" WHITESPACE "\n " FUNC_OPTION_LIST PARALLEL_FUNC_OPTION @@ -192,8 +216,11 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - NAME_REF - IDENT "r" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " FUNC_OPTION_LIST VOLATILITY_FUNC_OPTION diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_sequence_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_sequence_ok.snap index 85b5dd34..bb4ad69b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_sequence_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_sequence_ok.snap @@ -25,98 +25,114 @@ SOURCE_FILE NAME_REF IDENT "s" WHITESPACE "\n " - AS_KW "as" - WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" - WHITESPACE "\n " - INCREMENT_KW "increment" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - LITERAL - INT_NUMBER "2" + SEQUENCE_OPTION + AS_KW "as" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" + WHITESPACE "\n " + SEQUENCE_OPTION + INCREMENT_KW "increment" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + LITERAL + INT_NUMBER "2" WHITESPACE "\n " - MINVALUE_KW "minvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + SEQUENCE_OPTION + MINVALUE_KW "minvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MINVALUE_KW "minvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MINVALUE_KW "minvalue" WHITESPACE "\n " - MAXVALUE_KW "maxvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "100" + SEQUENCE_OPTION + MAXVALUE_KW "maxvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "100" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MAXVALUE_KW "maxvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MAXVALUE_KW "maxvalue" WHITESPACE "\n " - START_KW "start" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + START_KW "start" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - START_KW "start" - WHITESPACE " " - WITH_KW "with" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + START_KW "start" + WHITESPACE " " + WITH_KW "with" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - RESTART_KW "restart" + SEQUENCE_OPTION + RESTART_KW "restart" WHITESPACE "\n " - RESTART_KW "restart" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + RESTART_KW "restart" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - RESTART_KW "restart" - WHITESPACE " " - WITH_KW "with" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + RESTART_KW "restart" + WHITESPACE " " + WITH_KW "with" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - CACHE_KW "cache" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + CACHE_KW "cache" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - CYCLE_KW "cycle" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + CYCLE_KW "cycle" WHITESPACE "\n " - CYCLE_KW "cycle" + SEQUENCE_OPTION + CYCLE_KW "cycle" WHITESPACE "\n " - OWNED_KW "owned" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - PATH + SEQUENCE_OPTION + OWNED_KW "owned" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "c" + IDENT "c" WHITESPACE "\n " - OWNED_KW "owned" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - NONE_KW "none" + SEQUENCE_OPTION + OWNED_KW "owned" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + NONE_KW "none" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- set_logged" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_table_err.snap b/crates/squawk_parser/tests/snapshots/tests__alter_table_err.snap index 838cf0b6..ae3394bd 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_table_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_table_err.snap @@ -139,7 +139,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -179,7 +180,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap index 98330bc2..d966096e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap @@ -21,7 +21,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - NAME_REF + NAME IDENT "description" WHITESPACE " " PATH_TYPE @@ -49,7 +49,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "price" + NAME_REF + IDENT "price" WHITESPACE " " SET_TYPE TYPE_KW "type" @@ -212,7 +213,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "price" + NAME_REF + IDENT "price" WHITESPACE " " SET_DEFAULT SET_KW "set" @@ -241,7 +243,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "price" + NAME_REF + IDENT "price" WHITESPACE " " DROP_DEFAULT DROP_KW "drop" @@ -265,7 +268,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_TYPE SET_KW "set" @@ -314,7 +318,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_TYPE TYPE_KW "type" @@ -340,7 +345,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_DEFAULT SET_KW "set" @@ -371,7 +377,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_DEFAULT DROP_KW "drop" @@ -393,7 +400,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_NOT_NULL SET_KW "set" @@ -417,7 +425,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_NOT_NULL DROP_KW "drop" @@ -441,7 +450,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_EXPRESSION DROP_KW "drop" @@ -463,7 +473,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_EXPRESSION DROP_KW "drop" @@ -490,7 +501,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " ADD_GENERATED ADD_KW "add" @@ -520,7 +532,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " ADD_GENERATED ADD_KW "add" @@ -548,7 +561,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " ADD_GENERATED ADD_KW "add" @@ -564,14 +578,16 @@ SOURCE_FILE SEQUENCE_OPTION_LIST L_PAREN "(" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - NAME_KW "name" - WHITESPACE " " - NAME_REF - IDENT "foo" + SEQUENCE_OPTION + SEQUENCE_KW "sequence" + WHITESPACE " " + NAME_KW "name" + WHITESPACE " " + NAME_REF + IDENT "foo" WHITESPACE " " - CYCLE_KW "cycle" + SEQUENCE_OPTION + CYCLE_KW "cycle" WHITESPACE " " R_PAREN ")" SEMICOLON ";" @@ -590,7 +606,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_GENERATED_OPTIONS SET_GENERATED @@ -603,12 +620,13 @@ SOURCE_FILE SET_SEQUENCE_OPTION SET_KW "set" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - NAME_KW "name" - WHITESPACE " " - NAME_REF - IDENT "bar" + SEQUENCE_OPTION + SEQUENCE_KW "sequence" + WHITESPACE " " + NAME_KW "name" + WHITESPACE " " + NAME_REF + IDENT "bar" WHITESPACE " " RESTART RESTART_KW "restart" @@ -631,7 +649,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_GENERATED_OPTIONS SET_GENERATED @@ -644,12 +663,13 @@ SOURCE_FILE SET_SEQUENCE_OPTION SET_KW "set" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - NAME_KW "name" - WHITESPACE " " - NAME_REF - IDENT "bar" + SEQUENCE_OPTION + SEQUENCE_KW "sequence" + WHITESPACE " " + NAME_KW "name" + WHITESPACE " " + NAME_REF + IDENT "bar" WHITESPACE " " RESTART RESTART_KW "restart" @@ -674,7 +694,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_IDENTITY DROP_KW "drop" @@ -696,7 +717,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " DROP_IDENTITY DROP_KW "drop" @@ -723,7 +745,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STATISTICS SET_KW "set" @@ -748,7 +771,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -798,7 +822,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -837,7 +862,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " RESET_OPTIONS RESET_KW "reset" @@ -879,7 +905,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_OPTIONS SET_KW "set" @@ -950,7 +977,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -974,7 +1002,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -998,7 +1027,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -1022,7 +1052,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -1046,7 +1077,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_STORAGE SET_KW "set" @@ -1070,7 +1102,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_COMPRESSION SET_KW "set" @@ -1094,7 +1127,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_COMPRESSION SET_KW "set" @@ -1118,7 +1152,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_GENERATED_OPTIONS RESTART @@ -1138,7 +1173,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE " " - INHERIT + INHERIT_TABLE INHERIT_KW "inherit" WHITESPACE " " PATH @@ -1158,7 +1193,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE " " - NO_INHERIT + NO_INHERIT_TABLE NO_KW "no" WHITESPACE " " INHERIT_KW "inherit" @@ -1209,7 +1244,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "product_no" + NAME_REF + IDENT "product_no" WHITESPACE " " DROP_NOT_NULL DROP_KW "drop" @@ -1897,7 +1933,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - NAME_REF + NAME IDENT "description" WHITESPACE " " PATH_TYPE @@ -1939,7 +1975,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - IDENT "product_no" + NAME_REF + IDENT "product_no" WHITESPACE " " SET_NOT_NULL SET_KW "set" @@ -1967,7 +2004,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "column" WHITESPACE " " - NAME_REF + NAME IDENT "description" WHITESPACE " " PATH_TYPE @@ -2010,7 +2047,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_TYPE TYPE_KW "type" @@ -3686,7 +3724,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "COLUMN" WHITESPACE " " - NAME_REF + NAME IDENT "status" WHITESPACE " " CHAR_TYPE @@ -3710,7 +3748,8 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "COLUMN" WHITESPACE " " - IDENT "status" + NAME_REF + IDENT "status" WHITESPACE " " SET_DEFAULT SET_KW "SET" diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_table_pg17_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_table_pg17_ok.snap index 086c0352..08f3cab7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_table_pg17_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_table_pg17_ok.snap @@ -18,7 +18,8 @@ SOURCE_FILE ALTER_COLUMN ALTER_KW "alter" WHITESPACE " " - IDENT "c" + NAME_REF + IDENT "c" WHITESPACE " " SET_EXPRESSION SET_KW "set" diff --git a/crates/squawk_parser/tests/snapshots/tests__cluster_ok.snap b/crates/squawk_parser/tests/snapshots/tests__cluster_ok.snap index 198253cc..2b0fccf2 100644 --- a/crates/squawk_parser/tests/snapshots/tests__cluster_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__cluster_ok.snap @@ -33,10 +33,11 @@ SOURCE_FILE NAME_REF IDENT "bar" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "idx" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "idx" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- options_only" @@ -71,10 +72,11 @@ SOURCE_FILE NAME_REF IDENT "bar" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "idx" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "idx" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- pre_17" diff --git a/crates/squawk_parser/tests/snapshots/tests__comment_ok.snap b/crates/squawk_parser/tests/snapshots/tests__comment_ok.snap index 6e54ff7a..075eab13 100644 --- a/crates/squawk_parser/tests/snapshots/tests__comment_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__comment_ok.snap @@ -454,13 +454,14 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -477,44 +478,45 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - COMMA "," - WHITESPACE " " - PARAM - NAME - IDENT "b" + PARAM + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -670,10 +672,11 @@ SOURCE_FILE NAME_REF IDENT "c" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "i" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "i" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -697,10 +700,11 @@ SOURCE_FILE NAME_REF IDENT "f" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "i" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "i" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -784,13 +788,14 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -807,44 +812,45 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "p" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "p" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "date" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "date" - COMMA "," - WHITESPACE " " - PARAM - NAME - IDENT "b" + PARAM + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "date" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "date" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -901,13 +907,14 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -924,47 +931,48 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + JSON_KW "json" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - JSON_KW "json" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__create_cast_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_cast_ok.snap index 18d5febb..a04b745e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_cast_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_cast_ok.snap @@ -100,52 +100,53 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" + IDENT "bar" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE "\n " AS_KW "as" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__create_index_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_index_ok.snap index 4bc69c89..c14e6837 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_index_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_index_ok.snap @@ -59,10 +59,11 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE " \n " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "bar" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "bar" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" @@ -655,10 +656,11 @@ SOURCE_FILE NAME_REF IDENT "documents_table" WHITESPACE " " - USING_KW "USING" - WHITESPACE " " - NAME_REF - IDENT "GIN" + USING_METHOD + USING_KW "USING" + WHITESPACE " " + NAME_REF + IDENT "GIN" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" @@ -729,10 +731,11 @@ SOURCE_FILE NAME_REF IDENT "points" WHITESPACE " " - USING_KW "USING" - WHITESPACE " " - NAME_REF - IDENT "gist" + USING_METHOD + USING_KW "USING" + WHITESPACE " " + NAME_REF + IDENT "gist" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_materialized_view_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_materialized_view_ok.snap index cadb1d0c..fecc407b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_materialized_view_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_materialized_view_ok.snap @@ -72,10 +72,11 @@ SOURCE_FILE IDENT "c" R_PAREN ")" WHITESPACE "\n " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "u" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "u" WHITESPACE "\n " WITH_PARAMS WITH_KW "with" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_operator_class_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_operator_class_ok.snap index aeb896cb..b3e5969f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_operator_class_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_operator_class_ok.snap @@ -200,10 +200,11 @@ SOURCE_FILE LITERAL INT_NUMBER "1010" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" COMMA "," WHITESPACE "\n " FUNCTION_KW "function" @@ -219,52 +220,53 @@ SOURCE_FILE BIGINT_KW "bigint" R_PAREN ")" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "b" + IDENT "bar" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" COMMA "," WHITESPACE "\n " FUNCTION_KW "function" @@ -287,31 +289,32 @@ SOURCE_FILE SMALLINT_KW "smallint" R_PAREN ")" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "bar" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_rule_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_rule_ok.snap index 7bfa361e..472c1020 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_rule_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_rule_ok.snap @@ -183,15 +183,16 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "foo" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" SEMICOLON ";" WHITESPACE "\n " NOTIFY @@ -351,15 +352,16 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF NAME_KW "name" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - STRING "'foo'" + SET_EXPR + LITERAL + STRING "'foo'" WHITESPACE " " WHERE_CLAUSE WHERE_KW "WHERE" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_sequence_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_sequence_ok.snap index 752c6f0f..28dc6c9c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_sequence_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_sequence_ok.snap @@ -37,71 +37,81 @@ SOURCE_FILE NAME IDENT "s" WHITESPACE "\n " - AS_KW "as" - WHITESPACE " " - CHAR_TYPE - VARCHAR_KW "varchar" - ARG_LIST - L_PAREN "(" - ARG - LITERAL - INT_NUMBER "100" - R_PAREN ")" + SEQUENCE_OPTION + AS_KW "as" + WHITESPACE " " + CHAR_TYPE + VARCHAR_KW "varchar" + ARG_LIST + L_PAREN "(" + ARG + LITERAL + INT_NUMBER "100" + R_PAREN ")" WHITESPACE "\n " - INCREMENT_KW "increment" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + INCREMENT_KW "increment" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - MINVALUE_KW "minvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + SEQUENCE_OPTION + MINVALUE_KW "minvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MINVALUE_KW "minvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MINVALUE_KW "minvalue" WHITESPACE "\n " - MAXVALUE_KW "maxvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "100" + SEQUENCE_OPTION + MAXVALUE_KW "maxvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "100" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MAXVALUE_KW "maxvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MAXVALUE_KW "maxvalue" WHITESPACE "\n " - START_KW "start" - WHITESPACE " " - WITH_KW "with" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + START_KW "start" + WHITESPACE " " + WITH_KW "with" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - CACHE_KW "cache" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + CACHE_KW "cache" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - CYCLE_KW "cycle" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + CYCLE_KW "cycle" WHITESPACE "\n " - OWNED_KW "owned" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - PATH + SEQUENCE_OPTION + OWNED_KW "owned" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" + IDENT "bar" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- unlogged" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_table_err.snap b/crates/squawk_parser/tests/snapshots/tests__create_table_err.snap index 109e6a2a..c3f7e22e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_table_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_table_err.snap @@ -318,104 +318,122 @@ SOURCE_FILE SEQUENCE_OPTION_LIST L_PAREN "(" WHITESPACE "\n " - AS_KW "as" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" + SEQUENCE_OPTION + AS_KW "as" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" WHITESPACE "\n " - CACHE_KW "cache" - WHITESPACE " " - LITERAL - INT_NUMBER "100" + SEQUENCE_OPTION + CACHE_KW "cache" + WHITESPACE " " + LITERAL + INT_NUMBER "100" WHITESPACE "\n " - INCREMENT_KW "increment" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + INCREMENT_KW "increment" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - INCREMENT_KW "increment" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + INCREMENT_KW "increment" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - SEQUENCE_KW "sequence" - WHITESPACE " " - NAME_KW "name" - WHITESPACE " " - NAME_REF - IDENT "foo" + SEQUENCE_OPTION + SEQUENCE_KW "sequence" + WHITESPACE " " + NAME_KW "name" + WHITESPACE " " + NAME_REF + IDENT "foo" WHITESPACE "\n " - RESTART_KW "restart" - WHITESPACE " " - WITH_KW "with" - WHITESPACE " " - LITERAL - INT_NUMBER "500" + SEQUENCE_OPTION + RESTART_KW "restart" + WHITESPACE " " + WITH_KW "with" + WHITESPACE " " + LITERAL + INT_NUMBER "500" WHITESPACE "\n " - LOGGED_KW "logged" + SEQUENCE_OPTION + LOGGED_KW "logged" WHITESPACE "\n " - UNLOGGED_KW "unlogged" + SEQUENCE_OPTION + UNLOGGED_KW "unlogged" WHITESPACE "\n " - START_KW "start" - WHITESPACE " " - WITH_KW "with" - WHITESPACE " " - LITERAL - INT_NUMBER "10" + SEQUENCE_OPTION + START_KW "start" + WHITESPACE " " + WITH_KW "with" + WHITESPACE " " + LITERAL + INT_NUMBER "10" WHITESPACE "\n " - START_KW "start" - WHITESPACE " " - LITERAL - INT_NUMBER "25" + SEQUENCE_OPTION + START_KW "start" + WHITESPACE " " + LITERAL + INT_NUMBER "25" WHITESPACE "\n " - OWNED_KW "owned" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - NONE_KW "none" + SEQUENCE_OPTION + OWNED_KW "owned" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + NONE_KW "none" WHITESPACE "\n " - OWNED_KW "owned" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - PATH + SEQUENCE_OPTION + OWNED_KW "owned" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "fooo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "fooo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" + IDENT "bar" WHITESPACE "\n " - MAXVALUE_KW "maxvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "70" + SEQUENCE_OPTION + MAXVALUE_KW "maxvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "70" WHITESPACE "\n " - MINVALUE_KW "minvalue" - WHITESPACE " " - LITERAL - INT_NUMBER "150" + SEQUENCE_OPTION + MINVALUE_KW "minvalue" + WHITESPACE " " + LITERAL + INT_NUMBER "150" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MINVALUE_KW "minvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MINVALUE_KW "minvalue" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - CYCLE_KW "cycle" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + CYCLE_KW "cycle" WHITESPACE "\n " - NO_KW "no" - WHITESPACE " " - MAXVALUE_KW "maxvalue" + SEQUENCE_OPTION + NO_KW "no" + WHITESPACE " " + MAXVALUE_KW "maxvalue" WHITESPACE "\n " - CYCLE_KW "cycle" + SEQUENCE_OPTION + CYCLE_KW "cycle" WHITESPACE "\n " R_PAREN ")" WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_transform_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_transform_ok.snap index e6616f54..227749da 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_transform_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_transform_ok.snap @@ -33,10 +33,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" COMMA "," WHITESPACE "\n " TO_KW "to" @@ -47,10 +48,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "g" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "g" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" @@ -101,32 +103,33 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + DOT "." PATH_SEGMENT NAME_REF - IDENT "bar" + IDENT "foo" DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "f" - PARAM_LIST - L_PAREN "(" - PARAM - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "f" + PARAM_LIST + L_PAREN "(" + PARAM + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" COMMA "," WHITESPACE "\n " TO_KW "to" @@ -137,10 +140,11 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "g" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "g" WHITESPACE "\n" R_PAREN ")" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__drop_function_ok.snap b/crates/squawk_parser/tests/snapshots/tests__drop_function_ok.snap index b942edbe..f8b8c2fa 100644 --- a/crates/squawk_parser/tests/snapshots/tests__drop_function_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__drop_function_ok.snap @@ -10,10 +10,12 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "s" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- full" @@ -28,69 +30,74 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "c" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "f" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - PATH_TYPE + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH PATH PATH_SEGMENT NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "foo" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "c" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "f" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE " " CASCADE_KW "cascade" SEMICOLON ";" @@ -105,10 +112,12 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" WHITESPACE " " RESTRICT_KW "restrict" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__drop_procedure_ok.snap b/crates/squawk_parser/tests/snapshots/tests__drop_procedure_ok.snap index bf493d7e..7252c2ac 100644 --- a/crates/squawk_parser/tests/snapshots/tests__drop_procedure_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__drop_procedure_ok.snap @@ -10,10 +10,12 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "s" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- full" @@ -28,69 +30,74 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "c" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "f" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - PATH_TYPE + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH PATH PATH_SEGMENT NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "foo" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "c" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "f" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE " " CASCADE_KW "cascade" SEMICOLON ";" @@ -105,10 +112,12 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" WHITESPACE " " RESTRICT_KW "restrict" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__drop_routine_ok.snap b/crates/squawk_parser/tests/snapshots/tests__drop_routine_ok.snap index 67b52a4a..36618211 100644 --- a/crates/squawk_parser/tests/snapshots/tests__drop_routine_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__drop_routine_ok.snap @@ -10,10 +10,12 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "s" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- full" @@ -28,69 +30,74 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "c" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "f" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - PATH_TYPE + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH PATH PATH_SEGMENT NAME_REF - TEXT_KW "text" - R_PAREN ")" + IDENT "foo" + DOT "." + PATH_SEGMENT + NAME_REF + IDENT "c" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "f" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + R_PAREN ")" WHITESPACE " " CASCADE_KW "cascade" SEMICOLON ";" @@ -105,10 +112,12 @@ SOURCE_FILE WHITESPACE " " EXISTS_KW "exists" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" WHITESPACE " " RESTRICT_KW "restrict" SEMICOLON ";" diff --git a/crates/squawk_parser/tests/snapshots/tests__explain_ok.snap b/crates/squawk_parser/tests/snapshots/tests__explain_ok.snap index 4a5fef3c..0e1dab45 100644 --- a/crates/squawk_parser/tests/snapshots/tests__explain_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__explain_ok.snap @@ -799,4 +799,405 @@ SOURCE_FILE LITERAL INT_NUMBER "4" SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- compound select" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + COMPOUND_SELECT + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "2" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- select into" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + SELECT_INTO + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + TARGET + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + TARGET + NAME_REF + IDENT "c" + WHITESPACE " " + INTO_CLAUSE + INTO_KW "into" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + IDENT "t" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "t2" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- paren select" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + PAREN_SELECT + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- table" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + TABLE + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- values" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + VALUES + VALUES_KW "values" + WHITESPACE " " + ROW_LIST + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "1" + R_PAREN ")" + COMMA "," + WHITESPACE " " + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "2" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- insert" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + INSERT + INSERT_KW "insert" + WHITESPACE " " + INTO_KW "into" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE " " + VALUES + VALUES_KW "values" + WHITESPACE " " + ROW_LIST + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "1" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + R_PAREN ")" + COMMA "," + WHITESPACE " " + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "3" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "4" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- update" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + UPDATE + UPDATE_KW "update" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE " " + SET_CLAUSE + SET_KW "set" + WHITESPACE " " + SET_COLUMN_LIST + SET_SINGLE_COLUMN + COLUMN + NAME_REF + IDENT "a" + WHITESPACE " " + EQ "=" + WHITESPACE " " + SET_EXPR + LITERAL + INT_NUMBER "1" + WHITESPACE " " + WHERE_CLAUSE + WHERE_KW "where" + WHITESPACE " " + BIN_EXPR + NAME_REF + IDENT "a" + WHITESPACE " " + R_ANGLE ">" + WHITESPACE " " + LITERAL + INT_NUMBER "10" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- delete" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + DELETE + DELETE_KW "delete" + WHITESPACE " " + FROM_KW "from" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE " " + WHERE_CLAUSE + WHERE_KW "where" + WHITESPACE " " + BIN_EXPR + NAME_REF + IDENT "x" + WHITESPACE " " + R_ANGLE ">" + WHITESPACE " " + LITERAL + INT_NUMBER "1" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- merge" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + MERGE + MERGE_KW "merge" + WHITESPACE " " + INTO_KW "into" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE "\n " + USING_ON_CLAUSE + USING_KW "using" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "u" + WHITESPACE "\n " + ON_KW "on" + WHITESPACE " " + BIN_EXPR + FIELD_EXPR + NAME_REF + IDENT "t" + DOT "." + NAME_REF + IDENT "id" + WHITESPACE " " + EQ "=" + WHITESPACE " " + FIELD_EXPR + NAME_REF + IDENT "u" + DOT "." + NAME_REF + IDENT "id" + WHITESPACE "\n " + MERGE_WHEN_MATCHED + WHEN_KW "when" + WHITESPACE " " + MATCHED_KW "matched" + WHITESPACE " " + THEN_KW "then" + WHITESPACE " \n " + MERGE_DO_NOTHING + DO_KW "do" + WHITESPACE " " + NOTHING_KW "nothing" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- execute" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + EXECUTE + EXECUTE_KW "execute" + WHITESPACE " " + NAME_REF + IDENT "foo" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- declare" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + DECLARE + DECLARE_KW "declare" + WHITESPACE " " + NAME + IDENT "c" + WHITESPACE " " + CURSOR_KW "cursor" + WHITESPACE " " + FOR_KW "for" + WHITESPACE " " + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- create table as" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + CREATE_TABLE_AS + CREATE_KW "create" + WHITESPACE " " + TABLE_KW "table" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + IDENT "t" + WHITESPACE " " + AS_KW "as" + WHITESPACE "\n " + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + STAR "*" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "u" + WHITESPACE " " + WHERE_CLAUSE + WHERE_KW "where" + WHITESPACE " " + BIN_EXPR + NAME_REF + IDENT "c" + WHITESPACE " " + GTEQ ">=" + WHITESPACE " " + NAME_REF + IDENT "b" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- create materialized view" + WHITESPACE "\n" + EXPLAIN + EXPLAIN_KW "explain" + WHITESPACE " " + CREATE_MATERIALIZED_VIEW + CREATE_KW "create" + WHITESPACE " " + MATERIALIZED_KW "materialized" + WHITESPACE " " + VIEW_KW "view" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + IDENT "t" + WHITESPACE "\n " + AS_KW "as" + WHITESPACE " " + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + SEMICOLON ";" WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap b/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap index b381b907..b3a76fd7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap @@ -797,16 +797,19 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -828,71 +831,75 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " " + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "z" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "z" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -908,10 +915,12 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1006,53 +1015,56 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " " + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " TO_KW "to" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__insert_err.snap b/crates/squawk_parser/tests/snapshots/tests__insert_err.snap index 4a857214..f3ca7a90 100644 --- a/crates/squawk_parser/tests/snapshots/tests__insert_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__insert_err.snap @@ -49,13 +49,15 @@ SOURCE_FILE INT_NUMBER "3" R_PAREN ")" WHITESPACE "\n " - ON_KW "on" - WHITESPACE " " - CONFLICT_KW "conflict" - WHITESPACE " " - DO_KW "do" - WHITESPACE " " - NOTHING_KW "nothing" + ON_CONFLICT_CLAUSE + ON_KW "on" + WHITESPACE " " + CONFLICT_KW "conflict" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "do" + WHITESPACE " " + NOTHING_KW "nothing" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- missing column in column list & trailing comma" @@ -103,13 +105,15 @@ SOURCE_FILE INT_NUMBER "3" R_PAREN ")" WHITESPACE "\n " - ON_KW "on" - WHITESPACE " " - CONFLICT_KW "conflict" - WHITESPACE " " - DO_KW "do" - WHITESPACE " " - NOTHING_KW "nothing" + ON_CONFLICT_CLAUSE + ON_KW "on" + WHITESPACE " " + CONFLICT_KW "conflict" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "do" + WHITESPACE " " + NOTHING_KW "nothing" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- missing comma in values & trailing comma" @@ -160,13 +164,15 @@ SOURCE_FILE COMMA "," R_PAREN ")" WHITESPACE "\n " - ON_KW "on" - WHITESPACE " " - CONFLICT_KW "conflict" - WHITESPACE " " - DO_KW "do" - WHITESPACE " " - NOTHING_KW "nothing" + ON_CONFLICT_CLAUSE + ON_KW "on" + WHITESPACE " " + CONFLICT_KW "conflict" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "do" + WHITESPACE " " + NOTHING_KW "nothing" SEMICOLON ";" WHITESPACE "\n" --- diff --git a/crates/squawk_parser/tests/snapshots/tests__insert_ok.snap b/crates/squawk_parser/tests/snapshots/tests__insert_ok.snap index 24be80e3..14c8e826 100644 --- a/crates/squawk_parser/tests/snapshots/tests__insert_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__insert_ok.snap @@ -872,21 +872,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "sales_count" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "sales_count" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "sales_count" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE " " WHERE_CLAUSE WHERE_KW "WHERE" @@ -1014,36 +1015,42 @@ SOURCE_FILE STRING "'Associated Computing, Inc'" R_PAREN ")" WHITESPACE "\n " - ON_KW "ON" - WHITESPACE " " - CONFLICT_KW "CONFLICT" - WHITESPACE " " - L_PAREN "(" - NAME_REF - IDENT "did" - R_PAREN ")" - WHITESPACE " " - DO_KW "DO" - WHITESPACE " " - UPDATE_KW "UPDATE" - WHITESPACE " " - SET_CLAUSE - SET_KW "SET" + ON_CONFLICT_CLAUSE + ON_KW "ON" + WHITESPACE " " + CONFLICT_KW "CONFLICT" WHITESPACE " " - SET_COLUMN_LIST - SET_COLUMN - COLUMN + CONFLICT_ON_INDEX + CONFLICT_INDEX_ITEM_LIST + L_PAREN "(" + CONFLICT_INDEX_ITEM NAME_REF - IDENT "dname" - WHITESPACE " " - EQ "=" + IDENT "did" + R_PAREN ")" + WHITESPACE " " + CONFLICT_DO_UPDATE_SET + DO_KW "DO" + WHITESPACE " " + UPDATE_KW "UPDATE" + WHITESPACE " " + SET_CLAUSE + SET_KW "SET" WHITESPACE " " - FIELD_EXPR - NAME_REF - IDENT "EXCLUDED" - DOT "." - NAME_REF - IDENT "dname" + SET_COLUMN_LIST + SET_SINGLE_COLUMN + COLUMN + NAME_REF + IDENT "dname" + WHITESPACE " " + EQ "=" + WHITESPACE " " + SET_EXPR + FIELD_EXPR + NAME_REF + IDENT "EXCLUDED" + DOT "." + NAME_REF + IDENT "dname" SEMICOLON ";" WHITESPACE "\n\n" INSERT @@ -1082,18 +1089,92 @@ SOURCE_FILE STRING "'Redline GmbH'" R_PAREN ")" WHITESPACE "\n " - ON_KW "ON" + ON_CONFLICT_CLAUSE + ON_KW "ON" + WHITESPACE " " + CONFLICT_KW "CONFLICT" + WHITESPACE " " + CONFLICT_ON_INDEX + CONFLICT_INDEX_ITEM_LIST + L_PAREN "(" + CONFLICT_INDEX_ITEM + NAME_REF + IDENT "did" + R_PAREN ")" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "DO" + WHITESPACE " " + NOTHING_KW "NOTHING" + SEMICOLON ";" + WHITESPACE "\n\n" + INSERT + INSERT_KW "insert" WHITESPACE " " - CONFLICT_KW "CONFLICT" + INTO_KW "into" WHITESPACE " " - L_PAREN "(" - NAME_REF - IDENT "did" - R_PAREN ")" + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " " - DO_KW "DO" + COLUMN_LIST + L_PAREN "(" + COLUMN + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + COLUMN + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + COLUMN + NAME_REF + IDENT "c" + R_PAREN ")" WHITESPACE " " - NOTHING_KW "NOTHING" + VALUES + VALUES_KW "values" + WHITESPACE " " + ROW_LIST + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "1" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "3" + R_PAREN ")" + WHITESPACE "\n " + ON_CONFLICT_CLAUSE + ON_KW "on" + WHITESPACE " " + CONFLICT_KW "conflict" + WHITESPACE " " + CONFLICT_ON_INDEX + CONFLICT_INDEX_ITEM_LIST + L_PAREN "(" + CONFLICT_INDEX_ITEM + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + CONFLICT_INDEX_ITEM + NAME_REF + IDENT "b" + R_PAREN ")" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "do" + WHITESPACE " " + NOTHING_KW "nothing" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- Don't update existing distributors based in a certain ZIP code" @@ -1140,80 +1221,86 @@ SOURCE_FILE STRING "'Anvil Distribution'" R_PAREN ")" WHITESPACE "\n " - ON_KW "ON" - WHITESPACE " " - CONFLICT_KW "CONFLICT" - WHITESPACE " " - L_PAREN "(" - NAME_REF - IDENT "did" - R_PAREN ")" - WHITESPACE " " - DO_KW "DO" - WHITESPACE " " - UPDATE_KW "UPDATE" - WHITESPACE "\n " - SET_CLAUSE - SET_KW "SET" + ON_CONFLICT_CLAUSE + ON_KW "ON" WHITESPACE " " - SET_COLUMN_LIST - SET_COLUMN - COLUMN + CONFLICT_KW "CONFLICT" + WHITESPACE " " + CONFLICT_ON_INDEX + CONFLICT_INDEX_ITEM_LIST + L_PAREN "(" + CONFLICT_INDEX_ITEM NAME_REF - IDENT "dname" + IDENT "did" + R_PAREN ")" + WHITESPACE " " + CONFLICT_DO_UPDATE_SET + DO_KW "DO" + WHITESPACE " " + UPDATE_KW "UPDATE" + WHITESPACE "\n " + SET_CLAUSE + SET_KW "SET" WHITESPACE " " - EQ "=" + SET_COLUMN_LIST + SET_SINGLE_COLUMN + COLUMN + NAME_REF + IDENT "dname" + WHITESPACE " " + EQ "=" + WHITESPACE " " + SET_EXPR + BIN_EXPR + FIELD_EXPR + NAME_REF + IDENT "EXCLUDED" + DOT "." + NAME_REF + IDENT "dname" + WHITESPACE " " + CUSTOM_OP + PIPE "|" + PIPE "|" + WHITESPACE " " + BIN_EXPR + LITERAL + STRING "' (formerly '" + WHITESPACE " " + CUSTOM_OP + PIPE "|" + PIPE "|" + WHITESPACE " " + BIN_EXPR + FIELD_EXPR + NAME_REF + IDENT "d" + DOT "." + NAME_REF + IDENT "dname" + WHITESPACE " " + CUSTOM_OP + PIPE "|" + PIPE "|" + WHITESPACE " " + LITERAL + STRING "')'" + WHITESPACE "\n " + WHERE_CLAUSE + WHERE_KW "WHERE" WHITESPACE " " BIN_EXPR FIELD_EXPR NAME_REF - IDENT "EXCLUDED" + IDENT "d" DOT "." NAME_REF - IDENT "dname" + IDENT "zipcode" WHITESPACE " " - CUSTOM_OP - PIPE "|" - PIPE "|" + NEQB "<>" WHITESPACE " " - BIN_EXPR - LITERAL - STRING "' (formerly '" - WHITESPACE " " - CUSTOM_OP - PIPE "|" - PIPE "|" - WHITESPACE " " - BIN_EXPR - FIELD_EXPR - NAME_REF - IDENT "d" - DOT "." - NAME_REF - IDENT "dname" - WHITESPACE " " - CUSTOM_OP - PIPE "|" - PIPE "|" - WHITESPACE " " - LITERAL - STRING "')'" - WHITESPACE "\n " - WHERE_CLAUSE - WHERE_KW "WHERE" - WHITESPACE " " - BIN_EXPR - FIELD_EXPR - NAME_REF - IDENT "d" - DOT "." - NAME_REF - IDENT "zipcode" - WHITESPACE " " - NEQB "<>" - WHITESPACE " " - LITERAL - STRING "'21201'" + LITERAL + STRING "'21201'" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- Name a constraint directly in the statement (uses associated" @@ -1256,20 +1343,23 @@ SOURCE_FILE STRING "'Antwerp Design'" R_PAREN ")" WHITESPACE "\n " - ON_KW "ON" - WHITESPACE " " - CONFLICT_KW "CONFLICT" - WHITESPACE " " - ON_KW "ON" - WHITESPACE " " - CONSTRAINT_KW "CONSTRAINT" - WHITESPACE " " - NAME_REF - IDENT "distributors_pkey" - WHITESPACE " " - DO_KW "DO" - WHITESPACE " " - NOTHING_KW "NOTHING" + ON_CONFLICT_CLAUSE + ON_KW "ON" + WHITESPACE " " + CONFLICT_KW "CONFLICT" + WHITESPACE " " + CONFLICT_ON_CONSTRAINT + ON_KW "ON" + WHITESPACE " " + CONSTRAINT_KW "CONSTRAINT" + WHITESPACE " " + NAME_REF + IDENT "distributors_pkey" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "DO" + WHITESPACE " " + NOTHING_KW "NOTHING" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- This statement could infer a partial unique index on \"did\"" @@ -1314,24 +1404,29 @@ SOURCE_FILE STRING "'Conrad International'" R_PAREN ")" WHITESPACE "\n " - ON_KW "ON" - WHITESPACE " " - CONFLICT_KW "CONFLICT" - WHITESPACE " " - L_PAREN "(" - NAME_REF - IDENT "did" - R_PAREN ")" - WHITESPACE " " - WHERE_CLAUSE - WHERE_KW "WHERE" + ON_CONFLICT_CLAUSE + ON_KW "ON" WHITESPACE " " - NAME_REF - IDENT "is_active" - WHITESPACE " " - DO_KW "DO" - WHITESPACE " " - NOTHING_KW "NOTHING" + CONFLICT_KW "CONFLICT" + WHITESPACE " " + CONFLICT_ON_INDEX + CONFLICT_INDEX_ITEM_LIST + L_PAREN "(" + CONFLICT_INDEX_ITEM + NAME_REF + IDENT "did" + R_PAREN ")" + WHITESPACE " " + WHERE_CLAUSE + WHERE_KW "WHERE" + WHITESPACE " " + NAME_REF + IDENT "is_active" + WHITESPACE " " + CONFLICT_DO_NOTHING + DO_KW "DO" + WHITESPACE " " + NOTHING_KW "NOTHING" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- with schema" diff --git a/crates/squawk_parser/tests/snapshots/tests__merge_ok.snap b/crates/squawk_parser/tests/snapshots/tests__merge_ok.snap index ec227ccc..51ff8042 100644 --- a/crates/squawk_parser/tests/snapshots/tests__merge_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__merge_ok.snap @@ -16,7 +16,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -74,7 +74,7 @@ SOURCE_FILE NAME IDENT "f" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -132,7 +132,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -190,7 +190,7 @@ SOURCE_FILE NAME IDENT "f" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -248,7 +248,7 @@ SOURCE_FILE WHITESPACE " " STAR "*" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -302,7 +302,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -356,7 +356,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -424,7 +424,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -533,7 +533,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -605,7 +605,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM diff --git a/crates/squawk_parser/tests/snapshots/tests__merge_pg17_ok.snap b/crates/squawk_parser/tests/snapshots/tests__merge_pg17_ok.snap index e06e1a58..45a03471 100644 --- a/crates/squawk_parser/tests/snapshots/tests__merge_pg17_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__merge_pg17_ok.snap @@ -17,7 +17,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -101,7 +101,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -204,7 +204,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -295,7 +295,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -423,7 +423,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -479,7 +479,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -558,7 +558,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -654,7 +654,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -694,69 +694,97 @@ SOURCE_FILE SET_KW "set" WHITESPACE "\n " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "a" WHITESPACE " " EQ "=" WHITESPACE " " - DEFAULT_KW "default" + SET_EXPR + DEFAULT_KW "default" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "b" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "c" WHITESPACE " " EQ "=" WHITESPACE " " - NAME_REF - IDENT "d" + SET_EXPR + NAME_REF + IDENT "d" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "e" WHITESPACE " " EQ "=" WHITESPACE " " - PAREN_EXPR - L_PAREN "(" - SELECT - SELECT_CLAUSE - SELECT_KW "select" - WHITESPACE " " - TARGET_LIST - TARGET - LITERAL - INT_NUMBER "1" - R_PAREN ")" + SET_EXPR + PAREN_EXPR + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + R_PAREN ")" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "f" WHITESPACE " " EQ "=" WHITESPACE " " - CALL_EXPR + SET_EXPR + CALL_EXPR + NAME_REF + ROW_KW "row" + ARG_LIST + L_PAREN "(" + LITERAL + INT_NUMBER "1" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "2" + COMMA "," + WHITESPACE " " + LITERAL + DEFAULT_KW "default" + R_PAREN ")" + COMMA "," + WHITESPACE "\n " + SET_SINGLE_COLUMN + COLUMN NAME_REF - ROW_KW "row" - ARG_LIST + IDENT "g" + WHITESPACE " " + EQ "=" + WHITESPACE " " + SET_EXPR + TUPLE_EXPR L_PAREN "(" LITERAL INT_NUMBER "1" @@ -771,40 +799,19 @@ SOURCE_FILE R_PAREN ")" COMMA "," WHITESPACE "\n " - SET_COLUMN - COLUMN - NAME_REF - IDENT "g" - WHITESPACE " " - EQ "=" - WHITESPACE " " - TUPLE_EXPR - L_PAREN "(" - LITERAL - INT_NUMBER "1" - COMMA "," - WHITESPACE " " - LITERAL - INT_NUMBER "2" - COMMA "," - WHITESPACE " " - LITERAL - DEFAULT_KW "default" - R_PAREN ")" - COMMA "," - WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "h" WHITESPACE " " EQ "=" WHITESPACE " " - PAREN_EXPR - L_PAREN "(" - LITERAL - DEFAULT_KW "default" - R_PAREN ")" + SET_EXPR + PAREN_EXPR + L_PAREN "(" + LITERAL + DEFAULT_KW "default" + R_PAREN ")" WHITESPACE "\n " MERGE_WHEN_NOT_MATCHED_SOURCE WHEN_KW "when" @@ -826,15 +833,16 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "foo" WHITESPACE " " EQ "=" WHITESPACE " " - NAME_REF - IDENT "bar" + SET_EXPR + NAME_REF + IDENT "bar" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- merge_delete" @@ -850,7 +858,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -946,7 +954,7 @@ SOURCE_FILE NAME_REF IDENT "u" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -1002,7 +1010,7 @@ SOURCE_FILE NAME IDENT "ca" WHITESPACE "\n" - USING_CLAUSE + USING_ON_CLAUSE USING_KW "USING" WHITESPACE " " FROM_ITEM @@ -1046,21 +1054,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "balance" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "balance" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - NAME_REF - IDENT "transaction_value" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "balance" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + NAME_REF + IDENT "transaction_value" WHITESPACE "\n" MERGE_WHEN_NOT_MATCHED_TARGET WHEN_KW "WHEN" @@ -1126,7 +1135,7 @@ SOURCE_FILE NAME IDENT "ca" WHITESPACE "\n" - USING_CLAUSE + USING_ON_CLAUSE USING_KW "USING" WHITESPACE " " FROM_ITEM @@ -1193,21 +1202,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "balance" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "balance" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - NAME_REF - IDENT "transaction_value" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "balance" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + NAME_REF + IDENT "transaction_value" WHITESPACE "\n" MERGE_WHEN_NOT_MATCHED_TARGET WHEN_KW "WHEN" @@ -1273,7 +1283,7 @@ SOURCE_FILE NAME IDENT "w" WHITESPACE "\n" - USING_CLAUSE + USING_ON_CLAUSE USING_KW "USING" WHITESPACE " " FROM_ITEM @@ -1390,29 +1400,30 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "stock" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - FIELD_EXPR - NAME_REF - IDENT "w" - DOT "." - NAME_REF - IDENT "stock" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - FIELD_EXPR - NAME_REF - IDENT "s" - DOT "." - NAME_REF - IDENT "stock_delta" + SET_EXPR + BIN_EXPR + FIELD_EXPR + NAME_REF + IDENT "w" + DOT "." + NAME_REF + IDENT "stock" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + FIELD_EXPR + NAME_REF + IDENT "s" + DOT "." + NAME_REF + IDENT "stock_delta" WHITESPACE "\n" MERGE_WHEN_MATCHED WHEN_KW "WHEN" @@ -1462,7 +1473,7 @@ SOURCE_FILE NAME IDENT "w" WHITESPACE "\n" - USING_CLAUSE + USING_ON_CLAUSE USING_KW "USING" WHITESPACE " " FROM_ITEM @@ -1562,19 +1573,20 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "stock" WHITESPACE " " EQ "=" WHITESPACE " " - FIELD_EXPR - NAME_REF - IDENT "s" - DOT "." - NAME_REF - IDENT "stock" + SET_EXPR + FIELD_EXPR + NAME_REF + IDENT "s" + DOT "." + NAME_REF + IDENT "stock" WHITESPACE "\n" MERGE_WHEN_NOT_MATCHED_SOURCE WHEN_KW "WHEN" diff --git a/crates/squawk_parser/tests/snapshots/tests__misc_ok.snap b/crates/squawk_parser/tests/snapshots/tests__misc_ok.snap index 9b921aaf..2dffce39 100644 --- a/crates/squawk_parser/tests/snapshots/tests__misc_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__misc_ok.snap @@ -235,77 +235,78 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "embedding" WHITESPACE " " EQ "=" WHITESPACE " " - CALL_EXPR - FIELD_EXPR - NAME_REF - IDENT "ai" - DOT "." - NAME_REF - IDENT "cohere_embed" - ARG_LIST - L_PAREN "(" - WHITESPACE "\n " - LITERAL - STRING "'embed-english-v3.0'" - WHITESPACE "\n " - COMMA "," - WHITESPACE " " - CALL_EXPR + SET_EXPR + CALL_EXPR + FIELD_EXPR NAME_REF - IDENT "CONCAT_WS" - ARG_LIST - L_PAREN "(" - LITERAL - STRING "'. '" - COMMA "," - WHITESPACE "\n " + IDENT "ai" + DOT "." + NAME_REF + IDENT "cohere_embed" + ARG_LIST + L_PAREN "(" + WHITESPACE "\n " + LITERAL + STRING "'embed-english-v3.0'" + WHITESPACE "\n " + COMMA "," + WHITESPACE " " + CALL_EXPR NAME_REF - IDENT "title" - COMMA "," - WHITESPACE "\n " - CALL_EXPR + IDENT "CONCAT_WS" + ARG_LIST + L_PAREN "(" + LITERAL + STRING "'. '" + COMMA "," + WHITESPACE "\n " NAME_REF - COALESCE_KW "COALESCE" - ARG_LIST - L_PAREN "(" + IDENT "title" + COMMA "," + WHITESPACE "\n " + CALL_EXPR NAME_REF - IDENT "overview" - COMMA "," - WHITESPACE " " - LITERAL - STRING "''" - R_PAREN ")" - WHITESPACE "\n " - R_PAREN ")" - WHITESPACE "\n " - COMMA "," - WHITESPACE " " - NAMED_ARG - NAME_REF - IDENT "input_type" - FAT_ARROW "=>" - LITERAL - STRING "'search_document'" - WHITESPACE "\n " - COMMENT "-- , api_key=>%s" - WHITESPACE "\n " - COMMA "," - WHITESPACE " " - NAMED_ARG - NAME_REF - IDENT "api_key" - FAT_ARROW "=>" - LITERAL - POSITIONAL_PARAM "$1" - WHITESPACE "\n" - R_PAREN ")" + COALESCE_KW "COALESCE" + ARG_LIST + L_PAREN "(" + NAME_REF + IDENT "overview" + COMMA "," + WHITESPACE " " + LITERAL + STRING "''" + R_PAREN ")" + WHITESPACE "\n " + R_PAREN ")" + WHITESPACE "\n " + COMMA "," + WHITESPACE " " + NAMED_ARG + NAME_REF + IDENT "input_type" + FAT_ARROW "=>" + LITERAL + STRING "'search_document'" + WHITESPACE "\n " + COMMENT "-- , api_key=>%s" + WHITESPACE "\n " + COMMA "," + WHITESPACE " " + NAMED_ARG + NAME_REF + IDENT "api_key" + FAT_ARROW "=>" + LITERAL + POSITIONAL_PARAM "$1" + WHITESPACE "\n" + R_PAREN ")" WHITESPACE " " WHERE_CLAUSE WHERE_KW "where" @@ -2056,7 +2057,7 @@ SOURCE_FILE WHITESPACE " " COLUMN_KW "COLUMN" WHITESPACE " " - NAME_REF + NAME IDENT "vec" WHITESPACE " " PATH_TYPE @@ -2081,50 +2082,51 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "vec" WHITESPACE " " EQ "=" WHITESPACE " " - CAST_EXPR - CALL_EXPR - FIELD_EXPR - NAME_REF - IDENT "openai" - DOT "." - NAME_REF - IDENT "vector" - ARG_LIST - L_PAREN "(" - BIN_EXPR + SET_EXPR + CAST_EXPR + CALL_EXPR + FIELD_EXPR NAME_REF - IDENT "title" - WHITESPACE " " - CUSTOM_OP - PIPE "|" - PIPE "|" - WHITESPACE " " + IDENT "openai" + DOT "." + NAME_REF + IDENT "vector" + ARG_LIST + L_PAREN "(" BIN_EXPR - LITERAL - STRING "' -- '" + NAME_REF + IDENT "title" WHITESPACE " " CUSTOM_OP PIPE "|" PIPE "|" WHITESPACE " " + BIN_EXPR + LITERAL + STRING "' -- '" + WHITESPACE " " + CUSTOM_OP + PIPE "|" + PIPE "|" + WHITESPACE " " + NAME_REF + IDENT "plot" + R_PAREN ")" + COLON_COLON + COLON ":" + COLON ":" + PATH_TYPE + PATH + PATH_SEGMENT NAME_REF - IDENT "plot" - R_PAREN ")" - COLON_COLON - COLON ":" - COLON ":" - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "vector" + IDENT "vector" SEMICOLON ";" WHITESPACE "\n\n" SELECT @@ -2402,10 +2404,11 @@ SOURCE_FILE NAME_REF IDENT "events" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "brin" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "brin" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" @@ -2678,10 +2681,11 @@ SOURCE_FILE NAME_REF IDENT "events_json" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "brin" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "brin" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" @@ -2791,10 +2795,11 @@ SOURCE_FILE NAME_REF IDENT "events" WHITESPACE " " - USING_KW "using" - WHITESPACE " " - NAME_REF - IDENT "brin" + USING_METHOD + USING_KW "using" + WHITESPACE " " + NAME_REF + IDENT "brin" WHITESPACE " " PARTITION_ITEM_LIST L_PAREN "(" @@ -5776,10 +5781,11 @@ SOURCE_FILE NAME_REF IDENT "event_logs" WHITESPACE "\n" - USING_KW "USING" - WHITESPACE " " - NAME_REF - IDENT "brin" + USING_METHOD + USING_KW "USING" + WHITESPACE " " + NAME_REF + IDENT "brin" PARTITION_ITEM_LIST L_PAREN "(" PARTITION_ITEM diff --git a/crates/squawk_parser/tests/snapshots/tests__prepare_ok.snap b/crates/squawk_parser/tests/snapshots/tests__prepare_ok.snap index 370f9ac0..a2cfc4ab 100644 --- a/crates/squawk_parser/tests/snapshots/tests__prepare_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__prepare_ok.snap @@ -236,15 +236,16 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "x" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" WHITESPACE " " WHERE_CLAUSE WHERE_KW "where" @@ -314,7 +315,7 @@ SOURCE_FILE NAME_REF IDENT "t1" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM diff --git a/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap b/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap index edd6b7e3..16dd2ad7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap @@ -821,16 +821,19 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -846,71 +849,75 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " " + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "z" - PARAM_LIST - L_PAREN "(" - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - INT_KW "int" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "z" + PARAM_LIST + L_PAREN "(" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + R_PAREN ")" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -926,10 +933,12 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1024,53 +1033,56 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - PARAM_LIST - L_PAREN "(" - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + PARAM_LIST + L_PAREN "(" + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " " + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," + WHITESPACE " " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" COMMA "," WHITESPACE " " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - R_PAREN ")" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__security_label_ok.snap b/crates/squawk_parser/tests/snapshots/tests__security_label_ok.snap index 2cd50a36..d3edf3db 100644 --- a/crates/squawk_parser/tests/snapshots/tests__security_label_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__security_label_ok.snap @@ -448,20 +448,21 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH + FUNCTION_SIG PATH PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" + IDENT "bar" DOT "." PATH_SEGMENT NAME_REF - IDENT "bar" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "buzz" + IDENT "buzz" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -477,14 +478,15 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - WHITESPACE " " - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + WHITESPACE " " + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -500,50 +502,51 @@ SOURCE_FILE WHITESPACE " " FUNCTION_KW "function" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - WHITESPACE " " - PARAM_LIST - L_PAREN "(" - WHITESPACE "\n " - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "a" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE "\n " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" - COMMA "," - WHITESPACE "\n " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - BIGINT_KW "bigint" - WHITESPACE "\n" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + WHITESPACE " " + PARAM_LIST + L_PAREN "(" + WHITESPACE "\n " + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE "\n " + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," + WHITESPACE "\n " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + WHITESPACE "\n" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -652,15 +655,16 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" + IDENT "bar" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -676,18 +680,19 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -703,35 +708,36 @@ SOURCE_FILE WHITESPACE " " PROCEDURE_KW "procedure" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - WHITESPACE "\n " - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "foo" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " \n " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" - WHITESPACE "\n" - R_PAREN ")" + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + WHITESPACE "\n " + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME + IDENT "foo" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " \n " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + WHITESPACE "\n" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -791,15 +797,16 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" + IDENT "bar" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -815,18 +822,19 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF - IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " @@ -842,40 +850,41 @@ SOURCE_FILE WHITESPACE " " ROUTINE_KW "routine" WHITESPACE " " - PATH + FUNCTION_SIG PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + DOT "." PATH_SEGMENT NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + WHITESPACE "\n " + PARAM + PARAM_IN + IN_KW "in" + WHITESPACE " " + NAME IDENT "foo" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - WHITESPACE "\n " - PARAM - PARAM_IN - IN_KW "in" - WHITESPACE " " - NAME - IDENT "foo" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " \n " - PARAM - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - NUMERIC_KW "numeric" - WHITESPACE "\n" - R_PAREN ")" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + TEXT_KW "text" + COMMA "," + WHITESPACE " \n " + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + WHITESPACE "\n" + R_PAREN ")" WHITESPACE " " IS_KW "is" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__select_compound_union_select_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_compound_union_select_ok.snap index f7b73751..b0ada995 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_compound_union_select_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_compound_union_select_ok.snap @@ -275,4 +275,170 @@ SOURCE_FILE LITERAL INT_NUMBER "1" SEMICOLON ";" + WHITESPACE "\n\n" + COMPOUND_SELECT + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + STAR "*" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "t" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + TABLE + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + SEMICOLON ";" + WHITESPACE "\n" + COMPOUND_SELECT + SELECT + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + TABLE + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + SEMICOLON ";" WHITESPACE "\n" + COMPOUND_SELECT + PAREN_SELECT + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "1" + R_PAREN ")" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + PAREN_SELECT + L_PAREN "(" + TABLE + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" + COMPOUND_SELECT + PAREN_SELECT + L_PAREN "(" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + SELECT_INTO + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + TARGET + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + TARGET + NAME_REF + IDENT "c" + WHITESPACE " " + INTO_CLAUSE + INTO_KW "into" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + IDENT "t" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "t2" + SEMICOLON ";" + WHITESPACE "\n\n" + COMPOUND_SELECT + VALUES + VALUES_KW "values" + WHITESPACE " " + ROW_LIST + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "1" + R_PAREN ")" + COMMA "," + WHITESPACE " " + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "2" + R_PAREN ")" + WHITESPACE " " + UNION_KW "union" + WHITESPACE " " + VALUES + VALUES_KW "values" + WHITESPACE " " + ROW_LIST + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "3" + R_PAREN ")" + COMMA "," + WHITESPACE " " + ROW + L_PAREN "(" + LITERAL + INT_NUMBER "4" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap index 6f617b16..ac7d3e9a 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap @@ -28,7 +28,7 @@ SOURCE_FILE NAME_REF IDENT "t" WHITESPACE "\n " - USING_CLAUSE + USING_ON_CLAUSE USING_KW "using" WHITESPACE " " FROM_ITEM @@ -1421,15 +1421,16 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "dismissed_at" WHITESPACE " " EQ "=" WHITESPACE " " - NAME_REF - CURRENT_TIMESTAMP_KW "current_timestamp" + SET_EXPR + NAME_REF + CURRENT_TIMESTAMP_KW "current_timestamp" WHITESPACE "\n" WHERE_CLAUSE WHERE_KW "WHERE" diff --git a/crates/squawk_parser/tests/snapshots/tests__update_err.snap b/crates/squawk_parser/tests/snapshots/tests__update_err.snap index 751e76e1..851e452b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__update_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__update_err.snap @@ -16,7 +16,7 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -32,12 +32,14 @@ SOURCE_FILE WHITESPACE " " SET_EXPR_LIST L_PAREN "(" - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" COMMA "," WHITESPACE " " - LITERAL - INT_NUMBER "2" + SET_EXPR + LITERAL + INT_NUMBER "2" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" @@ -56,25 +58,27 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "a" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "b" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "2" + SET_EXPR + LITERAL + INT_NUMBER "2" SEMICOLON ";" WHITESPACE "\n" COMMENT "-- ^ missing comma" diff --git a/crates/squawk_parser/tests/snapshots/tests__update_ok.snap b/crates/squawk_parser/tests/snapshots/tests__update_ok.snap index 324c71fb..8dbd0db4 100644 --- a/crates/squawk_parser/tests/snapshots/tests__update_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__update_ok.snap @@ -20,15 +20,16 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "price" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "10" + SET_EXPR + LITERAL + INT_NUMBER "10" WHITESPACE " " WHERE_CLAUSE WHERE_KW "where" @@ -58,21 +59,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "price" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "price" - WHITESPACE " " - STAR "*" - WHITESPACE " " - LITERAL - FLOAT_NUMBER "1.10" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "price" + WHITESPACE " " + STAR "*" + WHITESPACE " " + LITERAL + FLOAT_NUMBER "1.10" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- set muliple" @@ -90,37 +92,40 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "a" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "5" + SET_EXPR + LITERAL + INT_NUMBER "5" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "b" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "3" + SET_EXPR + LITERAL + INT_NUMBER "3" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "c" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + LITERAL + INT_NUMBER "1" WHITESPACE " " WHERE_CLAUSE WHERE_KW "where" @@ -150,7 +155,7 @@ SOURCE_FILE SET_KW "set" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -210,14 +215,15 @@ SOURCE_FILE SET_KW "set" WHITESPACE " \n " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "foo" WHITESPACE " " EQ "=" WHITESPACE " " - DEFAULT_KW "default" + SET_EXPR + DEFAULT_KW "default" WHITESPACE "\n" FROM_CLAUSE FROM_KW "from" @@ -272,34 +278,36 @@ SOURCE_FILE SET_KW "set" WHITESPACE " \n " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "bar" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "a" - WHITESPACE " " - STAR "*" - WHITESPACE " " - LITERAL - INT_NUMBER "2" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "a" + WHITESPACE " " + STAR "*" + WHITESPACE " " + LITERAL + INT_NUMBER "2" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "foo" WHITESPACE " " EQ "=" WHITESPACE " " - DEFAULT_KW "default" + SET_EXPR + DEFAULT_KW "default" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -312,11 +320,12 @@ SOURCE_FILE SET_EXPR_LIST ROW_KW "row" L_PAREN "(" - DEFAULT_KW "default" + SET_EXPR + DEFAULT_KW "default" R_PAREN ")" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -333,16 +342,18 @@ SOURCE_FILE WHITESPACE " " SET_EXPR_LIST L_PAREN "(" - LITERAL - INT_NUMBER "2" + SET_EXPR + LITERAL + INT_NUMBER "2" COMMA "," WHITESPACE " " - LITERAL - INT_NUMBER "3" + SET_EXPR + LITERAL + INT_NUMBER "3" R_PAREN ")" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -428,15 +439,16 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "kind" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - STRING "'Dramatic'" + SET_EXPR + LITERAL + STRING "'Dramatic'" WHITESPACE " " WHERE_CLAUSE WHERE_KW "WHERE" @@ -464,44 +476,47 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "temp_lo" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "1" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "temp_hi" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "15" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "15" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "prcp" WHITESPACE " " EQ "=" WHITESPACE " " - DEFAULT_KW "DEFAULT" + SET_EXPR + DEFAULT_KW "DEFAULT" WHITESPACE "\n " WHERE_CLAUSE WHERE_KW "WHERE" @@ -541,44 +556,47 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "temp_lo" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "1" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "temp_hi" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "15" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "15" COMMA "," WHITESPACE " " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "prcp" WHITESPACE " " EQ "=" WHITESPACE " " - DEFAULT_KW "DEFAULT" + SET_EXPR + DEFAULT_KW "DEFAULT" WHITESPACE "\n " WHERE_CLAUSE WHERE_KW "WHERE" @@ -636,7 +654,7 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -658,23 +676,26 @@ SOURCE_FILE WHITESPACE " " SET_EXPR_LIST L_PAREN "(" - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "1" COMMA "," WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "temp_lo" - PLUS "+" - LITERAL - INT_NUMBER "15" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "temp_lo" + PLUS "+" + LITERAL + INT_NUMBER "15" COMMA "," WHITESPACE " " - DEFAULT_KW "DEFAULT" + SET_EXPR + DEFAULT_KW "DEFAULT" R_PAREN ")" WHITESPACE "\n " WHERE_CLAUSE @@ -715,21 +736,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "sales_count" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "sales_count" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "sales_count" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE " " FROM_CLAUSE FROM_KW "FROM" @@ -788,21 +810,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "sales_count" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "sales_count" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "sales_count" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE " " WHERE_CLAUSE WHERE_KW "WHERE" @@ -858,7 +881,7 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -931,26 +954,28 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "contact_first_name" WHITESPACE " " EQ "=" WHITESPACE " " - NAME_REF - IDENT "first_name" + SET_EXPR + NAME_REF + IDENT "first_name" COMMA "," WHITESPACE "\n " - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "contact_last_name" WHITESPACE " " EQ "=" WHITESPACE " " - NAME_REF - IDENT "last_name" + SET_EXPR + NAME_REF + IDENT "last_name" WHITESPACE "\n " FROM_CLAUSE FROM_KW "FROM" @@ -997,7 +1022,7 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_MULTIPLE_COLUMNS COLUMN_LIST L_PAREN "(" COLUMN @@ -1168,21 +1193,22 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "stock" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "stock" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - LITERAL - INT_NUMBER "24" + SET_EXPR + BIN_EXPR + NAME_REF + IDENT "stock" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "24" WHITESPACE " " WHERE_CLAUSE WHERE_KW "WHERE" @@ -1216,15 +1242,16 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "kind" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - STRING "'Dramatic'" + SET_EXPR + LITERAL + STRING "'Dramatic'" WHITESPACE " " WHERE_CURRENT_OF WHERE_KW "WHERE" @@ -1346,15 +1373,16 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "status" WHITESPACE " " EQ "=" WHITESPACE " " - LITERAL - STRING "'failed'" + SET_EXPR + LITERAL + STRING "'failed'" WHITESPACE "\n " FROM_CLAUSE FROM_KW "FROM" diff --git a/crates/squawk_parser/tests/snapshots/tests__values_ok.snap b/crates/squawk_parser/tests/snapshots/tests__values_ok.snap index a08e2487..657306d0 100644 --- a/crates/squawk_parser/tests/snapshots/tests__values_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__values_ok.snap @@ -307,25 +307,26 @@ SOURCE_FILE SET_KW "SET" WHITESPACE " " SET_COLUMN_LIST - SET_COLUMN + SET_SINGLE_COLUMN COLUMN NAME_REF IDENT "salary" WHITESPACE " " EQ "=" WHITESPACE " " - BIN_EXPR - NAME_REF - IDENT "salary" - WHITESPACE " " - STAR "*" - WHITESPACE " " - FIELD_EXPR + SET_EXPR + BIN_EXPR NAME_REF - IDENT "v" - DOT "." - NAME_REF - IDENT "increase" + IDENT "salary" + WHITESPACE " " + STAR "*" + WHITESPACE " " + FIELD_EXPR + NAME_REF + IDENT "v" + DOT "." + NAME_REF + IDENT "increase" WHITESPACE "\n" FROM_CLAUSE FROM_KW "FROM" diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index f1008c28..2b6f8679 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -22,7 +22,7 @@ impl AddColumn { support::child(&self.syntax) } #[inline] - pub fn name_ref(&self) -> Option { + pub fn name(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -126,6 +126,10 @@ impl Alias { support::child(&self.syntax) } #[inline] + pub fn name(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn as_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::AS_KW) } @@ -174,6 +178,10 @@ pub struct AlterColumn { pub(crate) syntax: SyntaxNode, } impl AlterColumn { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn option(&self) -> Option { support::child(&self.syntax) @@ -1449,6 +1457,18 @@ impl CallExpr { pub fn expr(&self) -> Option { support::child(&self.syntax) } + #[inline] + pub fn filter_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn over_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn within_clause(&self) -> Option { + support::child(&self.syntax) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1725,6 +1745,10 @@ impl Column { support::child(&self.syntax) } #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn not_deferrable_constraint_option(&self) -> Option { support::child(&self.syntax) } @@ -1829,8 +1853,16 @@ pub struct CompoundSelect { } impl CompoundSelect { #[inline] - pub fn select(&self) -> Option { + pub fn select(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -7889,14 +8202,26 @@ pub struct PartitionBy { pub(crate) syntax: SyntaxNode, } impl PartitionBy { + #[inline] + pub fn partition_item_list(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn by_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::BY_KW) } #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] pub fn partition_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::PARTITION_KW) } + #[inline] + pub fn range_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RANGE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -8488,6 +8813,10 @@ impl RenameColumn { pub fn rename_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::RENAME_KW) } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -8652,12 +8981,8 @@ pub struct ResetStorageParams { } impl ResetStorageParams { #[inline] - pub fn l_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::L_PAREN) - } - #[inline] - pub fn r_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::R_PAREN) + pub fn attribute_list(&self) -> Option { + support::child(&self.syntax) } #[inline] pub fn reset_token(&self) -> Option { @@ -9030,11 +9355,38 @@ impl SelectInto { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SequenceOption { + pub(crate) syntax: SyntaxNode, +} +impl SequenceOption { + #[inline] + pub fn cycle_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CYCLE_KW) + } + #[inline] + pub fn maxvalue_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::MAXVALUE_KW) + } + #[inline] + pub fn minvalue_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::MINVALUE_KW) + } + #[inline] + pub fn no_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NO_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SequenceOptionList { pub(crate) syntax: SyntaxNode, } impl SequenceOptionList { + #[inline] + pub fn sequence_options(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::L_PAREN) @@ -9149,45 +9501,14 @@ impl SetClause { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct SetColumn { - pub(crate) syntax: SyntaxNode, -} -impl SetColumn { - #[inline] - pub fn column(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn column_list(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn paren_select(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn set_expr_list(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn eq_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::EQ) - } -} - #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SetColumnList { pub(crate) syntax: SyntaxNode, } impl SetColumnList { #[inline] - pub fn set_column(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn comma_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::COMMA) + pub fn set_columns(&self) -> AstChildren { + support::children(&self.syntax) } } @@ -9343,6 +9664,10 @@ pub struct SetGeneratedOptions { pub(crate) syntax: SyntaxNode, } impl SetGeneratedOptions { + #[inline] + pub fn generated_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::GENERATED_KW) + } #[inline] pub fn set_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SET_KW) @@ -9364,6 +9689,29 @@ impl SetLogged { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SetMultipleColumns { + pub(crate) syntax: SyntaxNode, +} +impl SetMultipleColumns { + #[inline] + pub fn column_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn paren_select(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_expr_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn eq_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EQ) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SetNotNull { pub(crate) syntax: SyntaxNode, @@ -9427,12 +9775,12 @@ pub struct SetOptionsList { } impl SetOptionsList { #[inline] - pub fn l_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::L_PAREN) + pub fn alter_option_list(&self) -> Option { + support::child(&self.syntax) } #[inline] - pub fn r_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::R_PAREN) + pub fn options_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OPTIONS_KW) } #[inline] pub fn set_token(&self) -> Option { @@ -9504,6 +9852,25 @@ impl SetSessionAuth { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SetSingleColumn { + pub(crate) syntax: SyntaxNode, +} +impl SetSingleColumn { + #[inline] + pub fn column(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn eq_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EQ) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SetStatistics { pub(crate) syntax: SyntaxNode, @@ -9540,12 +9907,8 @@ pub struct SetStorageParams { } impl SetStorageParams { #[inline] - pub fn l_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::L_PAREN) - } - #[inline] - pub fn r_paren_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::R_PAREN) + pub fn attribute_list(&self) -> Option { + support::child(&self.syntax) } #[inline] pub fn set_token(&self) -> Option { @@ -10146,6 +10509,18 @@ pub struct Update { pub(crate) syntax: SyntaxNode, } impl Update { + #[inline] + pub fn alias(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn from_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn relation_name(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn returning_clause(&self) -> Option { support::child(&self.syntax) @@ -10155,6 +10530,10 @@ impl Update { support::child(&self.syntax) } #[inline] + pub fn where_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn update_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::UPDATE_KW) } @@ -10165,6 +10544,10 @@ pub struct UsingClause { pub(crate) syntax: SyntaxNode, } impl UsingClause { + #[inline] + pub fn from_items(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn using_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::USING_KW) @@ -10205,6 +10588,29 @@ impl UsingMethod { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct UsingOnClause { + pub(crate) syntax: SyntaxNode, +} +impl UsingOnClause { + #[inline] + pub fn expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn from_item(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn on_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ON_KW) + } + #[inline] + pub fn using_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::USING_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Vacuum { pub(crate) syntax: SyntaxNode, @@ -10338,10 +10744,6 @@ pub struct WhenClause { pub(crate) syntax: SyntaxNode, } impl WhenClause { - #[inline] - pub fn expr(&self) -> Option { - support::child(&self.syntax) - } #[inline] pub fn then_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::THEN_KW) @@ -10795,6 +11197,7 @@ pub enum AlterColumnOption { SetGeneratedOptions(SetGeneratedOptions), SetNotNull(SetNotNull), SetOptions(SetOptions), + SetOptionsList(SetOptionsList), SetSequenceOption(SetSequenceOption), SetStatistics(SetStatistics), SetStorage(SetStorage), @@ -10838,9 +11241,9 @@ pub enum AlterTableAction { EnableRule(EnableRule), EnableTrigger(EnableTrigger), ForceRls(ForceRls), - Inherit(Inherit), + InheritTable(InheritTable), NoForceRls(NoForceRls), - NoInherit(NoInherit), + NoInheritTable(NoInheritTable), NotOf(NotOf), OfType(OfType), OptionItemList(OptionItemList), @@ -10871,6 +11274,18 @@ pub enum ColumnConstraint { UniqueConstraint(UniqueConstraint), } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum ConflictAction { + ConflictDoNothing(ConflictDoNothing), + ConflictDoUpdateSet(ConflictDoUpdateSet), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum ConflictTarget { + ConflictOnConstraint(ConflictOnConstraint), + ConflictOnIndex(ConflictOnIndex), +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Constraint { CheckConstraint(CheckConstraint), @@ -10884,6 +11299,24 @@ pub enum Constraint { UniqueConstraint(UniqueConstraint), } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum ExplainStmt { + CompoundSelect(CompoundSelect), + CreateMaterializedView(CreateMaterializedView), + CreateTableAs(CreateTableAs), + Declare(Declare), + Delete(Delete), + Execute(Execute), + Insert(Insert), + Merge(Merge), + ParenSelect(ParenSelect), + Select(Select), + SelectInto(SelectInto), + Table(Table), + Update(Update), + Values(Values), +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Expr { ArrayExpr(ArrayExpr), @@ -11006,6 +11439,22 @@ pub enum RefAction { SetNullColumns(SetNullColumns), } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum SelectVariant { + CompoundSelect(CompoundSelect), + ParenSelect(ParenSelect), + Select(Select), + SelectInto(SelectInto), + Table(Table), + Values(Values), +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub enum SetColumn { + SetMultipleColumns(SetMultipleColumns), + SetSingleColumn(SetSingleColumn), +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum Stmt { AlterAggregate(AlterAggregate), @@ -12811,6 +13260,114 @@ impl AstNode for CompressionMethod { &self.syntax } } +impl AstNode for ConflictDoNothing { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_DO_NOTHING + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ConflictDoUpdateSet { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_DO_UPDATE_SET + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ConflictIndexItem { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_INDEX_ITEM + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ConflictIndexItemList { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_INDEX_ITEM_LIST + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ConflictOnConstraint { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_ON_CONSTRAINT + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for ConflictOnIndex { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CONFLICT_ON_INDEX + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for ConstraintExclusion { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -15331,6 +15888,42 @@ impl AstNode for FuncOptionList { &self.syntax } } +impl AstNode for FunctionSig { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::FUNCTION_SIG + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} +impl AstNode for FunctionSigList { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::FUNCTION_SIG_LIST + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for GeneratedConstraint { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -15601,6 +16194,24 @@ impl AstNode for Inherit { &self.syntax } } +impl AstNode for InheritTable { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::INHERIT_TABLE + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for Inherits { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -17095,6 +17706,24 @@ impl AstNode for NoInherit { &self.syntax } } +impl AstNode for NoInheritTable { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::NO_INHERIT_TABLE + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for NonStandardParam { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -17491,6 +18120,24 @@ impl AstNode for OnCommit { &self.syntax } } +impl AstNode for OnConflictClause { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::ON_CONFLICT_CLAUSE + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for OnDeleteAction { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -18895,10 +19542,10 @@ impl AstNode for SelectInto { &self.syntax } } -impl AstNode for SequenceOptionList { +impl AstNode for SequenceOption { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SEQUENCE_OPTION_LIST + kind == SyntaxKind::SEQUENCE_OPTION } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -18913,10 +19560,10 @@ impl AstNode for SequenceOptionList { &self.syntax } } -impl AstNode for Serializable { +impl AstNode for SequenceOptionList { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SERIALIZABLE + kind == SyntaxKind::SEQUENCE_OPTION_LIST } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -18931,10 +19578,10 @@ impl AstNode for Serializable { &self.syntax } } -impl AstNode for Set { +impl AstNode for Serializable { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SET + kind == SyntaxKind::SERIALIZABLE } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -18949,10 +19596,10 @@ impl AstNode for Set { &self.syntax } } -impl AstNode for SetAccessMethod { +impl AstNode for Set { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SET_ACCESS_METHOD + kind == SyntaxKind::SET } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -18967,10 +19614,10 @@ impl AstNode for SetAccessMethod { &self.syntax } } -impl AstNode for SetClause { +impl AstNode for SetAccessMethod { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SET_CLAUSE + kind == SyntaxKind::SET_ACCESS_METHOD } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -18985,10 +19632,10 @@ impl AstNode for SetClause { &self.syntax } } -impl AstNode for SetColumn { +impl AstNode for SetClause { #[inline] fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::SET_COLUMN + kind == SyntaxKind::SET_CLAUSE } #[inline] fn cast(syntax: SyntaxNode) -> Option { @@ -19219,6 +19866,24 @@ impl AstNode for SetLogged { &self.syntax } } +impl AstNode for SetMultipleColumns { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::SET_MULTIPLE_COLUMNS + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for SetNotNull { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -19363,6 +20028,24 @@ impl AstNode for SetSessionAuth { &self.syntax } } +impl AstNode for SetSingleColumn { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::SET_SINGLE_COLUMN + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for SetStatistics { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -20065,6 +20748,24 @@ impl AstNode for UsingMethod { &self.syntax } } +impl AstNode for UsingOnClause { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::USING_ON_CLAUSE + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + if Self::can_cast(syntax.kind()) { + Some(Self { syntax }) + } else { + None + } + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + &self.syntax + } +} impl AstNode for Vacuum { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -20624,6 +21325,7 @@ impl AstNode for AlterColumnOption { | SyntaxKind::SET_GENERATED_OPTIONS | SyntaxKind::SET_NOT_NULL | SyntaxKind::SET_OPTIONS + | SyntaxKind::SET_OPTIONS_LIST | SyntaxKind::SET_SEQUENCE_OPTION | SyntaxKind::SET_STATISTICS | SyntaxKind::SET_STORAGE @@ -20655,6 +21357,9 @@ impl AstNode for AlterColumnOption { } SyntaxKind::SET_NOT_NULL => AlterColumnOption::SetNotNull(SetNotNull { syntax }), SyntaxKind::SET_OPTIONS => AlterColumnOption::SetOptions(SetOptions { syntax }), + SyntaxKind::SET_OPTIONS_LIST => { + AlterColumnOption::SetOptionsList(SetOptionsList { syntax }) + } SyntaxKind::SET_SEQUENCE_OPTION => { AlterColumnOption::SetSequenceOption(SetSequenceOption { syntax }) } @@ -20686,6 +21391,7 @@ impl AstNode for AlterColumnOption { AlterColumnOption::SetGeneratedOptions(it) => &it.syntax, AlterColumnOption::SetNotNull(it) => &it.syntax, AlterColumnOption::SetOptions(it) => &it.syntax, + AlterColumnOption::SetOptionsList(it) => &it.syntax, AlterColumnOption::SetSequenceOption(it) => &it.syntax, AlterColumnOption::SetStatistics(it) => &it.syntax, AlterColumnOption::SetStorage(it) => &it.syntax, @@ -20777,6 +21483,12 @@ impl From for AlterColumnOption { AlterColumnOption::SetOptions(node) } } +impl From for AlterColumnOption { + #[inline] + fn from(node: SetOptionsList) -> AlterColumnOption { + AlterColumnOption::SetOptionsList(node) + } +} impl From for AlterColumnOption { #[inline] fn from(node: SetSequenceOption) -> AlterColumnOption { @@ -20955,9 +21667,9 @@ impl AstNode for AlterTableAction { | SyntaxKind::ENABLE_RULE | SyntaxKind::ENABLE_TRIGGER | SyntaxKind::FORCE_RLS - | SyntaxKind::INHERIT + | SyntaxKind::INHERIT_TABLE | SyntaxKind::NO_FORCE_RLS - | SyntaxKind::NO_INHERIT + | SyntaxKind::NO_INHERIT_TABLE | SyntaxKind::NOT_OF | SyntaxKind::OF_TYPE | SyntaxKind::OPTION_ITEM_LIST @@ -21019,9 +21731,11 @@ impl AstNode for AlterTableAction { SyntaxKind::ENABLE_RULE => AlterTableAction::EnableRule(EnableRule { syntax }), SyntaxKind::ENABLE_TRIGGER => AlterTableAction::EnableTrigger(EnableTrigger { syntax }), SyntaxKind::FORCE_RLS => AlterTableAction::ForceRls(ForceRls { syntax }), - SyntaxKind::INHERIT => AlterTableAction::Inherit(Inherit { syntax }), + SyntaxKind::INHERIT_TABLE => AlterTableAction::InheritTable(InheritTable { syntax }), SyntaxKind::NO_FORCE_RLS => AlterTableAction::NoForceRls(NoForceRls { syntax }), - SyntaxKind::NO_INHERIT => AlterTableAction::NoInherit(NoInherit { syntax }), + SyntaxKind::NO_INHERIT_TABLE => { + AlterTableAction::NoInheritTable(NoInheritTable { syntax }) + } SyntaxKind::NOT_OF => AlterTableAction::NotOf(NotOf { syntax }), SyntaxKind::OF_TYPE => AlterTableAction::OfType(OfType { syntax }), SyntaxKind::OPTION_ITEM_LIST => { @@ -21087,9 +21801,9 @@ impl AstNode for AlterTableAction { AlterTableAction::EnableRule(it) => &it.syntax, AlterTableAction::EnableTrigger(it) => &it.syntax, AlterTableAction::ForceRls(it) => &it.syntax, - AlterTableAction::Inherit(it) => &it.syntax, + AlterTableAction::InheritTable(it) => &it.syntax, AlterTableAction::NoForceRls(it) => &it.syntax, - AlterTableAction::NoInherit(it) => &it.syntax, + AlterTableAction::NoInheritTable(it) => &it.syntax, AlterTableAction::NotOf(it) => &it.syntax, AlterTableAction::OfType(it) => &it.syntax, AlterTableAction::OptionItemList(it) => &it.syntax, @@ -21231,10 +21945,10 @@ impl From for AlterTableAction { AlterTableAction::ForceRls(node) } } -impl From for AlterTableAction { +impl From for AlterTableAction { #[inline] - fn from(node: Inherit) -> AlterTableAction { - AlterTableAction::Inherit(node) + fn from(node: InheritTable) -> AlterTableAction { + AlterTableAction::InheritTable(node) } } impl From for AlterTableAction { @@ -21243,10 +21957,10 @@ impl From for AlterTableAction { AlterTableAction::NoForceRls(node) } } -impl From for AlterTableAction { +impl From for AlterTableAction { #[inline] - fn from(node: NoInherit) -> AlterTableAction { - AlterTableAction::NoInherit(node) + fn from(node: NoInheritTable) -> AlterTableAction { + AlterTableAction::NoInheritTable(node) } } impl From for AlterTableAction { @@ -21445,6 +22159,92 @@ impl From for ColumnConstraint { ColumnConstraint::UniqueConstraint(node) } } +impl AstNode for ConflictAction { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + matches!( + kind, + SyntaxKind::CONFLICT_DO_NOTHING | SyntaxKind::CONFLICT_DO_UPDATE_SET + ) + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + SyntaxKind::CONFLICT_DO_NOTHING => { + ConflictAction::ConflictDoNothing(ConflictDoNothing { syntax }) + } + SyntaxKind::CONFLICT_DO_UPDATE_SET => { + ConflictAction::ConflictDoUpdateSet(ConflictDoUpdateSet { syntax }) + } + _ => { + return None; + } + }; + Some(res) + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + match self { + ConflictAction::ConflictDoNothing(it) => &it.syntax, + ConflictAction::ConflictDoUpdateSet(it) => &it.syntax, + } + } +} +impl From for ConflictAction { + #[inline] + fn from(node: ConflictDoNothing) -> ConflictAction { + ConflictAction::ConflictDoNothing(node) + } +} +impl From for ConflictAction { + #[inline] + fn from(node: ConflictDoUpdateSet) -> ConflictAction { + ConflictAction::ConflictDoUpdateSet(node) + } +} +impl AstNode for ConflictTarget { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + matches!( + kind, + SyntaxKind::CONFLICT_ON_CONSTRAINT | SyntaxKind::CONFLICT_ON_INDEX + ) + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + SyntaxKind::CONFLICT_ON_CONSTRAINT => { + ConflictTarget::ConflictOnConstraint(ConflictOnConstraint { syntax }) + } + SyntaxKind::CONFLICT_ON_INDEX => { + ConflictTarget::ConflictOnIndex(ConflictOnIndex { syntax }) + } + _ => { + return None; + } + }; + Some(res) + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + match self { + ConflictTarget::ConflictOnConstraint(it) => &it.syntax, + ConflictTarget::ConflictOnIndex(it) => &it.syntax, + } + } +} +impl From for ConflictTarget { + #[inline] + fn from(node: ConflictOnConstraint) -> ConflictTarget { + ConflictTarget::ConflictOnConstraint(node) + } +} +impl From for ConflictTarget { + #[inline] + fn from(node: ConflictOnIndex) -> ConflictTarget { + ConflictTarget::ConflictOnIndex(node) + } +} impl AstNode for Constraint { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -21562,6 +22362,156 @@ impl From for Constraint { Constraint::UniqueConstraint(node) } } +impl AstNode for ExplainStmt { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + matches!( + kind, + SyntaxKind::COMPOUND_SELECT + | SyntaxKind::CREATE_MATERIALIZED_VIEW + | SyntaxKind::CREATE_TABLE_AS + | SyntaxKind::DECLARE + | SyntaxKind::DELETE + | SyntaxKind::EXECUTE + | SyntaxKind::INSERT + | SyntaxKind::MERGE + | SyntaxKind::PAREN_SELECT + | SyntaxKind::SELECT + | SyntaxKind::SELECT_INTO + | SyntaxKind::TABLE + | SyntaxKind::UPDATE + | SyntaxKind::VALUES + ) + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + SyntaxKind::COMPOUND_SELECT => ExplainStmt::CompoundSelect(CompoundSelect { syntax }), + SyntaxKind::CREATE_MATERIALIZED_VIEW => { + ExplainStmt::CreateMaterializedView(CreateMaterializedView { syntax }) + } + SyntaxKind::CREATE_TABLE_AS => ExplainStmt::CreateTableAs(CreateTableAs { syntax }), + SyntaxKind::DECLARE => ExplainStmt::Declare(Declare { syntax }), + SyntaxKind::DELETE => ExplainStmt::Delete(Delete { syntax }), + SyntaxKind::EXECUTE => ExplainStmt::Execute(Execute { syntax }), + SyntaxKind::INSERT => ExplainStmt::Insert(Insert { syntax }), + SyntaxKind::MERGE => ExplainStmt::Merge(Merge { syntax }), + SyntaxKind::PAREN_SELECT => ExplainStmt::ParenSelect(ParenSelect { syntax }), + SyntaxKind::SELECT => ExplainStmt::Select(Select { syntax }), + SyntaxKind::SELECT_INTO => ExplainStmt::SelectInto(SelectInto { syntax }), + SyntaxKind::TABLE => ExplainStmt::Table(Table { syntax }), + SyntaxKind::UPDATE => ExplainStmt::Update(Update { syntax }), + SyntaxKind::VALUES => ExplainStmt::Values(Values { syntax }), + _ => { + return None; + } + }; + Some(res) + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + match self { + ExplainStmt::CompoundSelect(it) => &it.syntax, + ExplainStmt::CreateMaterializedView(it) => &it.syntax, + ExplainStmt::CreateTableAs(it) => &it.syntax, + ExplainStmt::Declare(it) => &it.syntax, + ExplainStmt::Delete(it) => &it.syntax, + ExplainStmt::Execute(it) => &it.syntax, + ExplainStmt::Insert(it) => &it.syntax, + ExplainStmt::Merge(it) => &it.syntax, + ExplainStmt::ParenSelect(it) => &it.syntax, + ExplainStmt::Select(it) => &it.syntax, + ExplainStmt::SelectInto(it) => &it.syntax, + ExplainStmt::Table(it) => &it.syntax, + ExplainStmt::Update(it) => &it.syntax, + ExplainStmt::Values(it) => &it.syntax, + } + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: CompoundSelect) -> ExplainStmt { + ExplainStmt::CompoundSelect(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: CreateMaterializedView) -> ExplainStmt { + ExplainStmt::CreateMaterializedView(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: CreateTableAs) -> ExplainStmt { + ExplainStmt::CreateTableAs(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: Declare) -> ExplainStmt { + ExplainStmt::Declare(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: Delete) -> ExplainStmt { + ExplainStmt::Delete(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: Execute) -> ExplainStmt { + ExplainStmt::Execute(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: Insert) -> ExplainStmt { + ExplainStmt::Insert(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: Merge) -> ExplainStmt { + ExplainStmt::Merge(node) + } +} +impl From for ExplainStmt { + #[inline] + fn from(node: ParenSelect) -> ExplainStmt { + ExplainStmt::ParenSelect(node) + } +} +impl From for SelectVariant { + #[inline] + fn from(node: Select) -> SelectVariant { + SelectVariant::Select(node) + } +} +impl From for SelectVariant { + #[inline] + fn from(node: SelectInto) -> SelectVariant { + SelectVariant::SelectInto(node) + } +} +impl From for SelectVariant { + #[inline] + fn from(node: Table) -> SelectVariant { + SelectVariant::Table(node) + } +} +impl From for SelectVariant { + #[inline] + fn from(node: Values) -> SelectVariant { + SelectVariant::Values(node) + } +} +impl AstNode for SetColumn { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + matches!( + kind, + SyntaxKind::SET_MULTIPLE_COLUMNS | SyntaxKind::SET_SINGLE_COLUMN + ) + } + #[inline] + fn cast(syntax: SyntaxNode) -> Option { + let res = match syntax.kind() { + SyntaxKind::SET_MULTIPLE_COLUMNS => { + SetColumn::SetMultipleColumns(SetMultipleColumns { syntax }) + } + SyntaxKind::SET_SINGLE_COLUMN => SetColumn::SetSingleColumn(SetSingleColumn { syntax }), + _ => { + return None; + } + }; + Some(res) + } + #[inline] + fn syntax(&self) -> &SyntaxNode { + match self { + SetColumn::SetMultipleColumns(it) => &it.syntax, + SetColumn::SetSingleColumn(it) => &it.syntax, + } + } +} +impl From for SetColumn { + #[inline] + fn from(node: SetMultipleColumns) -> SetColumn { + SetColumn::SetMultipleColumns(node) + } +} +impl From for SetColumn { + #[inline] + fn from(node: SetSingleColumn) -> SetColumn { + SetColumn::SetSingleColumn(node) + } +} impl AstNode for Stmt { #[inline] fn can_cast(kind: SyntaxKind) -> bool { diff --git a/crates/squawk_syntax/src/ast/node_ext.rs b/crates/squawk_syntax/src/ast/node_ext.rs index ef0df48b..8fb20ae3 100644 --- a/crates/squawk_syntax/src/ast/node_ext.rs +++ b/crates/squawk_syntax/src/ast/node_ext.rs @@ -106,6 +106,28 @@ impl ast::SliceExpr { } } +impl ast::RenameColumn { + #[inline] + pub fn from(&self) -> Option { + support::children(&self.syntax).nth(0) + } + #[inline] + pub fn to(&self) -> Option { + support::children(&self.syntax).nth(1) + } +} + +impl ast::ForeignKeyConstraint { + #[inline] + pub fn from_columns(&self) -> Option { + support::children(&self.syntax).nth(0) + } + #[inline] + pub fn to_columns(&self) -> Option { + support::children(&self.syntax).nth(1) + } +} + impl ast::BetweenExpr { #[inline] pub fn target(&self) -> Option { @@ -121,6 +143,28 @@ impl ast::BetweenExpr { } } +impl ast::WhenClause { + #[inline] + pub fn condition(&self) -> Option { + support::children(&self.syntax).next() + } + #[inline] + pub fn then(&self) -> Option { + support::children(&self.syntax).nth(1) + } +} + +impl ast::CompoundSelect { + #[inline] + pub fn lhs(&self) -> Option { + support::children(&self.syntax).next() + } + #[inline] + pub fn rhs(&self) -> Option { + support::children(&self.syntax).nth(1) + } +} + impl ast::NameRef { #[inline] pub fn text(&self) -> TokenText<'_> { diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 5ab3e23c..33a74e6d 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -67,7 +67,7 @@ ArgList = | '(' args:(Expr (',' Expr)*)? ')' CallExpr = - Expr ArgList + Expr ArgList WithinClause? FilterClause? OverClause? CastExpr = 'cast' '(' Expr 'as' Type ')' @@ -332,8 +332,9 @@ Column = NotEnforced? Enforced? | Name Type Storage? CompressionMethod? Collate? constraint:ColumnConstraint? DeferrableConstraintOption? NotDeferrableConstraintOption? - InitiallyDeferredConstraintOption? InitiallyImmediateConstraintOption? + InitiallyDeferredConstraintOption? InitiallyImmediateConstraintOption? NotEnforced? Enforced? + | NameRef | IndexExpr ) ColumnConstraint = @@ -482,8 +483,8 @@ AlterTableAction = | NotOf | ForceRls | NoForceRls -| Inherit -| NoInherit +| InheritTable +| NoInheritTable | EnableTrigger | EnableReplicaTrigger | EnableReplicaRule @@ -630,19 +631,26 @@ TableArgList = '(' args:((TableArg (',' TableArg)*)?) ')' WhenClause = - 'when' Expr 'then' Expr + 'when' condition:Expr 'then' then:Expr ElseClause = 'else' Expr UsingClause = - 'using' + 'using' (FromItem (',' FromItem)*) + +UsingOnClause = + 'using' FromItem? 'on' Expr Alias = - 'as'? ColumnList? + 'as'? Name ColumnList? SequenceOptionList = - '(' ')' + '(' (SequenceOption (',' SequenceOption)*) ')' + +SequenceOption = + 'cycle' +| 'no' ('minvalue' | 'cycle' | 'maxvalue') ColumnList = '(' (Column (',' Column)*) ')' @@ -690,10 +698,9 @@ Join = JoinExpr = (FromItem | JoinExpr) Join -// TODO: do we even want this in the AST? ParenSelect = '(' - Select + select:SelectVariant ')' Select = @@ -813,13 +820,23 @@ UsingMethod = 'using' NameRef PartitionBy = - 'partition' 'by' + 'partition' 'by' ( + 'range' + | '#ident' // list | hash + ) PartitionItemList CreateTable = 'create' 'table' IfNotExists? Path PartitionOf? OfType? TableArgList Inherits? PartitionBy? UsingMethod? (WithParams | WithoutOids)? OnCommit? Tablespace? CreateIndex = - 'create' 'unique'? 'index' 'concurrently'? (IfNotExists? Name)? 'on' RelationName + 'create' 'unique'? 'index' 'concurrently'? (IfNotExists? Name)? 'on' RelationName + UsingMethod? + PartitionItemList + ConstraintIncludeClause? + (NullsNotDistinct | NullsDistinct)? + WithParams? + Tablespace? + WhereClause? OrReplace = 'or' 'replace' @@ -949,19 +966,58 @@ Table = 'table' RelationName Insert = - 'insert' 'into' RelationName Alias? ColumnList? + 'insert' 'into' Path Alias? ColumnList? ('overriding' ('system' | 'user') 'value')? ('default' 'values' | Values | Stmt) - ('on' 'conflict')? + OnConflictClause? + ReturningClause? + +OnConflictClause = + 'on' 'conflict' ConflictTarget? ConflictAction + +ConflictTarget = + ConflictOnConstraint +| ConflictOnIndex + +ConflictOnIndex = + ConflictIndexItemList WhereClause? + +ConflictOnConstraint = + 'on' 'constraint' NameRef + +ConflictIndexItemList = + '(' (ConflictIndexItem (',' ConflictIndexItem)*) ')' + +ConflictIndexItem = + Expr Collate? '#ident'? + +ConflictAction = + ConflictDoNothing +| ConflictDoUpdateSet + +ConflictDoUpdateSet = + 'do' 'update' SetClause WhereClause? + +ConflictDoNothing = + 'do' 'nothing' SetClause = 'set' SetColumnList SetColumnList = - SetColumn (',' SetColumn) + (SetColumn (',' SetColumn)*) + +SetColumn = + SetSingleColumn +| SetMultipleColumns -SetColumn = - (Column | ColumnList) +SetSingleColumn = + Column + '=' + SetExpr + +SetMultipleColumns = + ColumnList '=' (SetExprList | ParenSelect) @@ -974,7 +1030,11 @@ SetExpr = Update = 'update' + RelationName + Alias? SetClause + FromClause? + WhereClause? ReturningClause? ReturningClause = @@ -995,15 +1055,15 @@ Notify = MergeWhenMatched = 'when' 'matched' - ('and' condition:Expr) 'then' MergeAction + ('and' Expr)? 'then' MergeAction MergeWhenNotMatchedSource = 'when' 'not' 'matched' 'by' 'source' - ('and' condition:Expr) 'then' MergeAction + ('and' Expr)? 'then' MergeAction MergeWhenNotMatchedTarget = 'when' 'not' 'matched' ('by' 'target')? - ('and' condition:Expr) 'then' MergeAction + ('and' Expr)? 'then' MergeAction MergeWhenClause = MergeWhenMatched @@ -1014,10 +1074,12 @@ MergeDelete = 'delete' MergeUpdate = - 'update' 'set' + 'update' 'set' SetClause MergeInsert = - 'insert' + 'insert' ColumnList? + ('overriding' ('system' | 'user'))? + (Values | 'default' 'values') MergeDoNothing = 'do' 'nothing' @@ -1030,7 +1092,7 @@ MergeAction = Merge = 'merge' 'into' RelationName Alias? - UsingClause + UsingOnClause MergeWhenClause* Declare = @@ -1202,8 +1264,13 @@ SelectClause = ('all' | DistinctClause)? TargetList? +SelectVariant = + Select | SelectInto | ParenSelect | Table | Values | CompoundSelect + CompoundSelect = - Select + lhs:SelectVariant + ('union' | 'intersect' | 'except') + rhs:SelectVariant SelectInto = SelectClause @@ -1250,7 +1317,7 @@ SortByList = SortBy (',' SortBy)* FromItem = - 'only'? NameRef Alias? + 'only'? (NameRef | FieldExpr) Alias? | 'lateral'? ParenSelect Alias? | 'lateral'? CallExpr Alias? | 'lateral'? 'rows' 'from' '(' CallExpr ')' Alias? @@ -1542,7 +1609,13 @@ DropGroup = 'drop' 'group' IfExists? NameRef DropFunction = - 'drop' 'function' IfExists? + 'drop' 'function' IfExists? FunctionSigList + +FunctionSigList = + (FunctionSig (',' FunctionSig)*) + +FunctionSig = + Path ParamList? DropForeignDataWrapper = 'drop' 'foreign' 'data' 'wrapper' IfExists? NameRef @@ -1651,6 +1724,23 @@ DropView = Explain = 'explain' + ExplainStmt + +ExplainStmt = + Select +| CompoundSelect +| SelectInto +| ParenSelect +| Table +| Values +| Insert +| Update +| Delete +| Merge +| Execute +| Declare +| CreateTableAs +| CreateMaterializedView ImportForeignSchema = 'import' 'foreign' 'schema' NameRef @@ -1843,11 +1933,18 @@ ForceRls = NoForceRls = 'no' 'force' 'row' 'level' 'security' + +InheritTable = + 'inherit' Path + +NoInheritTable = + 'no' 'inherit' Path + Inherit = - 'inherit' + 'inherit' Path NoInherit = - 'no' 'inherit' + 'no' 'inherit' Path EnableTrigger = 'enable' 'trigger' @@ -1886,10 +1983,10 @@ DetachPartition = 'detach' 'partition' DropColumn = - 'drop' 'column'? IfExists? + 'drop' 'column'? IfExists? NameRef ('restrict' | 'cascade')? AddColumn = - 'add' 'column'? IfNotExists? NameRef Type Collate? (Constraint (',' Constraint)*)? + 'add' 'column'? IfNotExists? Name Type Collate? (Constraint (',' Constraint)*)? PartitionForValuesWith = 'for' 'values' 'with' '(' '#ident' Literal ',' '#ident' Literal ')' @@ -1931,16 +2028,16 @@ SetUnlogged = 'set' 'unlogged' SetStorageParams = - 'set' '(' ')' + 'set' AttributeList ResetStorageParams = - 'reset' '(' ')' + 'reset' AttributeList RenameTable = 'rename' 'to' NameRef RenameColumn = - 'rename' 'column'? + 'rename' 'column'? from:NameRef 'to' to:NameRef AlterColumnOption = DropDefault @@ -1951,6 +2048,7 @@ AlterColumnOption = | AddGenerated | ResetOptions | SetType +| SetOptionsList | SetGeneratedOptions | SetGenerated | SetSequenceOption @@ -1966,7 +2064,7 @@ AlterConstraint = 'alter' 'constraint' option:AlterColumnOption AlterColumn = - 'alter' 'column'? option:AlterColumnOption + 'alter' 'column'? NameRef option:AlterColumnOption Restart = 'restart' 'with'? @@ -1993,10 +2091,10 @@ SetType = 'set' 'type' Type Collate? SetGeneratedOptions = - 'set' + 'set' 'generated' SetOptionsList = - 'set' '(' ')' + 'set' 'options' AlterOptionList SetExpression = 'set' 'expression' Expr From 34d85b3e8d7ba55c9fb04016a0b3e50806664262 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Mon, 24 Nov 2025 15:58:38 -0500 Subject: [PATCH 2/2] expand selection --- crates/squawk_ide/src/expand_selection.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/crates/squawk_ide/src/expand_selection.rs b/crates/squawk_ide/src/expand_selection.rs index 4f438fc5..a11950ab 100644 --- a/crates/squawk_ide/src/expand_selection.rs +++ b/crates/squawk_ide/src/expand_selection.rs @@ -38,7 +38,9 @@ const DELIMITED_LIST_KINDS: &[SyntaxKind] = &[ SyntaxKind::ARG_LIST, SyntaxKind::ATTRIBUTE_LIST, SyntaxKind::COLUMN_LIST, + SyntaxKind::CONFLICT_INDEX_ITEM_LIST, SyntaxKind::CONSTRAINT_EXCLUSION_LIST, + SyntaxKind::FUNCTION_SIG_LIST, SyntaxKind::GROUP_BY_LIST, SyntaxKind::JSON_TABLE_COLUMN_LIST, SyntaxKind::OPTION_ITEM_LIST,