From 2201b43c3e3cab895a3f000bd33816192a63382c Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 6 Jun 2026 12:51:52 -0400 Subject: [PATCH 1/3] parser: fix various ast gaps --- crates/squawk_ide/src/expand_selection.rs | 2 +- crates/squawk_ide/src/folding_ranges.rs | 2 +- .../src/rules/require_table_schema.rs | 4 +- .../src/generated/syntax_kind.rs | 7 +- crates/squawk_parser/src/grammar.rs | 53 +- .../squawk_syntax/src/ast/generated/nodes.rs | 1659 +++++++++++++++-- crates/squawk_syntax/src/postgresql.ungram | 345 +++- 7 files changed, 1824 insertions(+), 248 deletions(-) diff --git a/crates/squawk_ide/src/expand_selection.rs b/crates/squawk_ide/src/expand_selection.rs index 3c059d89..0b435c88 100644 --- a/crates/squawk_ide/src/expand_selection.rs +++ b/crates/squawk_ide/src/expand_selection.rs @@ -552,7 +552,7 @@ $0 #[test] fn list_variants() { let delimited_ws_list_kinds = &[ - SyntaxKind::CREATE_DATABASE_OPTION_LIST, + SyntaxKind::DATABASE_OPTION_LIST, SyntaxKind::FUNC_OPTION_LIST, SyntaxKind::ROLE_OPTION_LIST, SyntaxKind::SEQUENCE_OPTION_LIST, diff --git a/crates/squawk_ide/src/folding_ranges.rs b/crates/squawk_ide/src/folding_ranges.rs index 13dca43a..84bb13de 100644 --- a/crates/squawk_ide/src/folding_ranges.rs +++ b/crates/squawk_ide/src/folding_ranges.rs @@ -127,7 +127,7 @@ fn fold_kind(kind: SyntaxKind) -> Option { | SyntaxKind::CONFLICT_INDEX_ITEM_LIST | SyntaxKind::CONSTRAINT_EXCLUSION_LIST | SyntaxKind::COPY_OPTION_LIST - | SyntaxKind::CREATE_DATABASE_OPTION_LIST + | SyntaxKind::DATABASE_OPTION_LIST | SyntaxKind::DROP_OP_CLASS_OPTION_LIST | SyntaxKind::FDW_OPTION_LIST | SyntaxKind::FUNCTION_SIG_LIST diff --git a/crates/squawk_linter/src/rules/require_table_schema.rs b/crates/squawk_linter/src/rules/require_table_schema.rs index 753bafec..9ae9885b 100644 --- a/crates/squawk_linter/src/rules/require_table_schema.rs +++ b/crates/squawk_linter/src/rules/require_table_schema.rs @@ -19,7 +19,9 @@ pub(crate) fn require_table_schema(ctx: &mut Linter, parse: &Parse) check_path(ctx, alter_table.relation_name().and_then(|r| r.path())); } ast::Stmt::DropTable(drop_table) => { - check_path(ctx, drop_table.path()); + for path in drop_table.paths() { + check_path(ctx, Some(path)); + } } _ => (), } diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index a3af1559..d4253176 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -662,6 +662,7 @@ pub enum SyntaxKind { CLUSTER_ON, COLLATE, COLLATION_FOR_FN, + COLLATION_FROM, COLON_COLON, COLON_EQ, COLUMN, @@ -684,6 +685,7 @@ pub enum SyntaxKind { CONSTRAINT_INDEX_TABLESPACE, CONSTRAINT_NAME, COPY, + COPY_LEGACY_OPTION, COPY_OPTION, COPY_OPTION_LIST, COST_FUNC_OPTION, @@ -693,8 +695,6 @@ pub enum SyntaxKind { CREATE_COLLATION, CREATE_CONVERSION, CREATE_DATABASE, - CREATE_DATABASE_OPTION, - CREATE_DATABASE_OPTION_LIST, CREATE_DOMAIN, CREATE_EVENT_TRIGGER, CREATE_EXTENSION, @@ -733,6 +733,8 @@ pub enum SyntaxKind { CREATE_USER_MAPPING, CREATE_VIEW, CUSTOM_OP, + DATABASE_OPTION, + DATABASE_OPTION_LIST, DEALLOCATE, DECLARE, DEFAULT_CONSTRAINT, @@ -1047,6 +1049,7 @@ pub enum SyntaxKind { PARTITION_OF, PATH, PATH_FACTOR, + PATH_LIST, PATH_PATTERN, PATH_PATTERN_LIST, PATH_SEGMENT, diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index c8661411..5fb15ec6 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -7570,7 +7570,7 @@ fn alter_database(p: &mut Parser<'_>) -> CompletedMarker { m.complete(p, REFRESH_COLLATION_VERSION); } _ => { - opt_create_database_option_list(p); + opt_database_option_list(p); } } p.eat(SEMICOLON); @@ -7586,15 +7586,15 @@ fn set_tablespace(p: &mut Parser<'_>) { m.complete(p, SET_TABLESPACE); } -fn opt_create_database_option_list(p: &mut Parser<'_>) { +fn opt_database_option_list(p: &mut Parser<'_>) { let m = p.start(); p.eat(WITH_KW); while !p.at(EOF) { - if !opt_create_database_option(p) { + if !opt_database_option(p) { break; } } - m.complete(p, CREATE_DATABASE_OPTION_LIST); + m.complete(p, DATABASE_OPTION_LIST); } // ALTER CONVERSION name RENAME TO new_name @@ -8008,6 +8008,14 @@ fn path_name_ref_list(p: &mut Parser<'_>) { } } +fn path_list(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(L_PAREN); + path_name_ref_list(p); + p.expect(R_PAREN); + m.complete(p, PATH_LIST); +} + // ALTER TEXT SEARCH TEMPLATE name RENAME TO new_name // ALTER TEXT SEARCH TEMPLATE name SET SCHEMA new_schema fn alter_text_search_template(p: &mut Parser<'_>) -> CompletedMarker { @@ -9276,8 +9284,11 @@ fn create_collation(p: &mut Parser<'_>) -> CompletedMarker { p.bump(COLLATION_KW); opt_if_not_exists(p); path_name(p); - if p.eat(FROM_KW) { + if p.at(FROM_KW) { + let from = p.start(); + p.bump(FROM_KW); path_name_ref(p); + from.complete(p, COLLATION_FROM); } else { attribute_list(p); } @@ -9320,7 +9331,7 @@ fn opt_option_value(p: &mut Parser<'_>) -> bool { true } -fn opt_create_database_option(p: &mut Parser<'_>) -> bool { +fn opt_database_option(p: &mut Parser<'_>) -> bool { let m = p.start(); // option name match p.current() { @@ -9339,10 +9350,10 @@ fn opt_create_database_option(p: &mut Parser<'_>) -> bool { p.eat(EQ); if !opt_option_value(p) { p.error("expected create database option value"); - m.complete(p, CREATE_DATABASE_OPTION); + m.complete(p, DATABASE_OPTION); return false; } - m.complete(p, CREATE_DATABASE_OPTION); + m.complete(p, DATABASE_OPTION); true } @@ -9370,7 +9381,7 @@ fn create_database(p: &mut Parser<'_>) -> CompletedMarker { p.bump(CREATE_KW); p.bump(DATABASE_KW); name(p); - opt_create_database_option_list(p); + opt_database_option_list(p); p.eat(SEMICOLON); m.complete(p, CREATE_DATABASE) } @@ -12763,18 +12774,22 @@ fn copy_option_list(p: &mut Parser<'_>) { } fn opt_copy_option_item(p: &mut Parser<'_>) -> bool { - match p.current() { + let m = p.start(); + let parsed = match p.current() { BINARY_KW | FREEZE_KW | CSV_KW | HEADER_KW | JSON_KW => { p.bump_any(); + true } DELIMITER_KW | NULL_KW | QUOTE_KW | ESCAPE_KW => { p.bump_any(); p.eat(AS_KW); string_literal(p); + true } ENCODING_KW => { p.bump_any(); string_literal(p); + true } FORCE_KW => { p.bump_any(); @@ -12785,20 +12800,26 @@ fn opt_copy_option_item(p: &mut Parser<'_>) -> bool { if !p.eat(STAR) { name_ref_list(p); } + true } QUOTE_KW | NULL_KW => { p.bump_any(); if !p.eat(STAR) { name_ref_list(p); } + true } - _ => return false, + _ => false, } } - - _ => return false, + _ => false, + }; + if parsed { + m.complete(p, COPY_LEGACY_OPTION); + } else { + m.abandon(p); } - true + parsed } // COPY table_name [ ( column_name [, ...] ) ] @@ -14999,9 +15020,7 @@ fn opt_alter_table_action(p: &mut Parser<'_>) -> Option { let m = p.start(); p.bump(MERGE_KW); p.expect(PARTITIONS_KW); - p.expect(L_PAREN); - path_name_ref_list(p); - p.expect(R_PAREN); + path_list(p); p.eat(INTO_KW); path_name(p); m.complete(p, MERGE_PARTITIONS) diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index 7419b1ca..36513fe2 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -387,6 +387,18 @@ impl AlterAggregate { support::child(&self.syntax) } #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_schema(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -410,10 +422,22 @@ impl AlterAttribute { support::child(&self.syntax) } #[inline] + pub fn collate(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn restrict(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn ty(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } @@ -421,6 +445,18 @@ impl AlterAttribute { pub fn attribute_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ATTRIBUTE_KW) } + #[inline] + pub fn data_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DATA_KW) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } + #[inline] + pub fn type_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TYPE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -545,7 +581,7 @@ pub struct AlterDatabase { } impl AlterDatabase { #[inline] - pub fn create_database_option_list(&self) -> Option { + pub fn database_option_list(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -732,22 +768,258 @@ pub struct AlterExtension { pub(crate) syntax: SyntaxNode, } impl AlterExtension { + #[inline] + pub fn aggregate(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn cast_sig(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn function_sig(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name_ref(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn op(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_schema(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn ty(&self) -> Option { + support::child(&self.syntax) + } + #[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) + } + #[inline] + pub fn comma_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::COMMA) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn access_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ACCESS_KW) + } + #[inline] + pub fn add_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADD_KW) + } + #[inline] + pub fn aggregate_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AGGREGATE_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn cast_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CAST_KW) + } + #[inline] + pub fn class_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CLASS_KW) + } + #[inline] + pub fn collation_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::COLLATION_KW) + } + #[inline] + pub fn configuration_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONFIGURATION_KW) + } + #[inline] + pub fn conversion_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONVERSION_KW) + } + #[inline] + pub fn data_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DATA_KW) + } + #[inline] + pub fn database_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DATABASE_KW) + } + #[inline] + pub fn dictionary_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DICTIONARY_KW) + } + #[inline] + pub fn domain_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DOMAIN_KW) + } + #[inline] + pub fn drop_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DROP_KW) + } + #[inline] + pub fn event_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EVENT_KW) + } + #[inline] pub fn extension_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::EXTENSION_KW) } + #[inline] + pub fn family_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FAMILY_KW) + } + #[inline] + pub fn for_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FOR_KW) + } + #[inline] + pub fn foreign_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FOREIGN_KW) + } + #[inline] + pub fn function_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FUNCTION_KW) + } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn index_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::INDEX_KW) + } + #[inline] + pub fn language_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LANGUAGE_KW) + } + #[inline] + pub fn materialized_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::MATERIALIZED_KW) + } + #[inline] + pub fn method_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::METHOD_KW) + } + #[inline] + pub fn operator_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OPERATOR_KW) + } + #[inline] + pub fn parser_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PARSER_KW) + } + #[inline] + pub fn procedural_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROCEDURAL_KW) + } + #[inline] + pub fn procedure_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROCEDURE_KW) + } + #[inline] + pub fn publication_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PUBLICATION_KW) + } + #[inline] + pub fn role_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROLE_KW) + } + #[inline] + pub fn routine_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROUTINE_KW) + } + #[inline] + pub fn schema_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SCHEMA_KW) + } + #[inline] + pub fn search_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEARCH_KW) + } + #[inline] + pub fn sequence_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEQUENCE_KW) + } + #[inline] + pub fn server_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SERVER_KW) + } + #[inline] + pub fn statistics_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::STATISTICS_KW) + } + #[inline] + pub fn subscription_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SUBSCRIPTION_KW) + } + #[inline] + pub fn table_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLE_KW) + } + #[inline] + pub fn tablespace_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLESPACE_KW) + } + #[inline] + pub fn template_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TEMPLATE_KW) + } + #[inline] + pub fn text_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TEXT_KW) + } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } + #[inline] + pub fn transform_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TRANSFORM_KW) + } + #[inline] + pub fn trigger_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TRIGGER_KW) + } + #[inline] + pub fn type_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TYPE_KW) + } + #[inline] + pub fn update_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UPDATE_KW) + } + #[inline] + pub fn using_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::USING_KW) + } + #[inline] + pub fn view_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::VIEW_KW) + } + #[inline] + pub fn wrapper_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WRAPPER_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1029,6 +1301,14 @@ pub struct AlterLargeObject { pub(crate) syntax: SyntaxNode, } impl AlterLargeObject { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn role_ref(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) @@ -1045,6 +1325,14 @@ impl AlterLargeObject { pub fn object_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::OBJECT_KW) } + #[inline] + pub fn owner_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OWNER_KW) + } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1261,7 +1549,7 @@ impl AlterOption { support::child(&self.syntax) } #[inline] - pub fn name_ref(&self) -> Option { + pub fn name(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -1287,6 +1575,18 @@ impl AlterOptionList { pub fn alter_options(&self) -> AstChildren { support::children(&self.syntax) } + #[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) + } + #[inline] + pub fn options_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OPTIONS_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1427,22 +1727,66 @@ pub struct AlterPublication { pub(crate) syntax: SyntaxNode, } impl AlterPublication { + #[inline] + pub fn except_table_clause(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name_ref(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn publication_objects(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_options(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn add_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADD_KW) + } + #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn drop_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DROP_KW) + } + #[inline] pub fn publication_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::PUBLICATION_KW) } + #[inline] + pub fn sequences_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEQUENCES_KW) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } + #[inline] + pub fn tables_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLES_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1450,19 +1794,55 @@ pub struct AlterRole { pub(crate) syntax: SyntaxNode, } impl AlterRole { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn role_option_list(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn role_ref(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn set_config_param(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn database_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DATABASE_KW) + } + #[inline] + pub fn in_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IN_KW) + } + #[inline] + pub fn reset_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RESET_KW) + } + #[inline] pub fn role_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ROLE_KW) } @@ -1595,10 +1975,30 @@ impl AlterSequence { support::child(&self.syntax) } #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn path(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn sequence_option(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn sequence_options(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn set_schema(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -1607,9 +2007,21 @@ impl AlterSequence { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn logged_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LOGGED_KW) + } + #[inline] pub fn sequence_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEQUENCE_KW) } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } + #[inline] + pub fn unlogged_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UNLOGGED_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1622,10 +2034,22 @@ impl AlterServer { support::child(&self.syntax) } #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn name_ref(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -1637,6 +2061,10 @@ impl AlterServer { pub fn server_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SERVER_KW) } + #[inline] + pub fn version_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::VERSION_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1671,11 +2099,27 @@ pub struct AlterStatistics { pub(crate) syntax: SyntaxNode, } impl AlterStatistics { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn path(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_schema(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -1684,32 +2128,112 @@ impl AlterStatistics { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } + #[inline] pub fn statistics_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::STATISTICS_KW) } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct AlterSubscription { - pub(crate) syntax: SyntaxNode, -} -impl AlterSubscription { +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct AlterSubscription { + pub(crate) syntax: SyntaxNode, +} +impl AlterSubscription { + #[inline] + pub fn attribute_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn names(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_options(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn semicolon_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEMICOLON) + } + #[inline] + pub fn add_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADD_KW) + } + #[inline] + pub fn alter_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALTER_KW) + } + #[inline] + pub fn connection_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONNECTION_KW) + } + #[inline] + pub fn disable_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DISABLE_KW) + } + #[inline] + pub fn drop_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DROP_KW) + } + #[inline] + pub fn enable_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ENABLE_KW) + } + #[inline] + pub fn publication_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PUBLICATION_KW) + } + #[inline] + pub fn refresh_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::REFRESH_KW) + } #[inline] - pub fn name_ref(&self) -> Option { - support::child(&self.syntax) + pub fn server_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SERVER_KW) } #[inline] - pub fn semicolon_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::SEMICOLON) + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) } #[inline] - pub fn alter_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::ALTER_KW) + pub fn skip_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SKIP_KW) } #[inline] pub fn subscription_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SUBSCRIPTION_KW) } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -1717,17 +2241,29 @@ pub struct AlterSystem { pub(crate) syntax: SyntaxNode, } impl AlterSystem { + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_config_param(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] - pub fn set_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::SET_KW) + pub fn reset_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RESET_KW) } #[inline] pub fn system_token(&self) -> Option { @@ -1806,6 +2342,14 @@ pub struct AlterTextSearchConfiguration { pub(crate) syntax: SyntaxNode, } impl AlterTextSearchConfiguration { + #[inline] + pub fn if_exists(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn owner_to(&self) -> Option { support::child(&self.syntax) @@ -1815,6 +2359,10 @@ impl AlterTextSearchConfiguration { support::child(&self.syntax) } #[inline] + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] pub fn rename_to(&self) -> Option { support::child(&self.syntax) } @@ -1827,6 +2375,10 @@ impl AlterTextSearchConfiguration { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn add_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADD_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } @@ -1835,6 +2387,22 @@ impl AlterTextSearchConfiguration { support::token(&self.syntax, SyntaxKind::CONFIGURATION_KW) } #[inline] + pub fn drop_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DROP_KW) + } + #[inline] + pub fn for_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FOR_KW) + } + #[inline] + pub fn mapping_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::MAPPING_KW) + } + #[inline] + pub fn replace_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::REPLACE_KW) + } + #[inline] pub fn search_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEARCH_KW) } @@ -1842,6 +2410,10 @@ impl AlterTextSearchConfiguration { pub fn text_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::TEXT_KW) } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -2068,19 +2640,51 @@ pub struct AlterUser { pub(crate) syntax: SyntaxNode, } impl AlterUser { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn role_option_list(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn role_ref(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn set_config_param(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] pub fn alter_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn database_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DATABASE_KW) + } + #[inline] + pub fn in_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IN_KW) + } + #[inline] + pub fn reset_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RESET_KW) + } + #[inline] pub fn user_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::USER_KW) } @@ -2173,11 +2777,47 @@ pub struct AlterView { pub(crate) syntax: SyntaxNode, } impl AlterView { + #[inline] + pub fn expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn if_exists(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn owner_to(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn path(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn rename_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn reset_options(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_options(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_schema(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -2186,6 +2826,30 @@ impl AlterView { support::token(&self.syntax, SyntaxKind::ALTER_KW) } #[inline] + pub fn column_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::COLUMN_KW) + } + #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } + #[inline] + pub fn drop_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DROP_KW) + } + #[inline] + pub fn rename_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RENAME_KW) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } + #[inline] pub fn view_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::VIEW_KW) } @@ -3023,6 +3687,10 @@ impl Close { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] pub fn close_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::CLOSE_KW) } @@ -3120,6 +3788,21 @@ impl CollationForFn { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CollationFrom { + pub(crate) syntax: SyntaxNode, +} +impl CollationFrom { + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn from_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FROM_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ColonColon { pub(crate) syntax: SyntaxNode, @@ -3799,6 +4482,10 @@ pub struct ConstraintIndexMethod { pub(crate) syntax: SyntaxNode, } impl ConstraintIndexMethod { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn using_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::USING_KW) @@ -3853,6 +4540,14 @@ impl Copy { support::child(&self.syntax) } #[inline] + pub fn copy_legacy_options(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn copy_option_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn literal(&self) -> Option { support::child(&self.syntax) } @@ -3881,36 +4576,107 @@ impl Copy { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] - pub fn binary_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::BINARY_KW) + pub fn binary_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BINARY_KW) + } + #[inline] + pub fn copy_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::COPY_KW) + } + #[inline] + pub fn from_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FROM_KW) + } + #[inline] + pub fn program_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROGRAM_KW) + } + #[inline] + pub fn stdin_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::STDIN_KW) + } + #[inline] + pub fn stdout_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::STDOUT_KW) + } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CopyLegacyOption { + pub(crate) syntax: SyntaxNode, +} +impl CopyLegacyOption { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn star_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::STAR) + } + #[inline] + pub fn as_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AS_KW) + } + #[inline] + pub fn binary_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BINARY_KW) + } + #[inline] + pub fn csv_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CSV_KW) + } + #[inline] + pub fn delimiter_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DELIMITER_KW) + } + #[inline] + pub fn encoding_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ENCODING_KW) + } + #[inline] + pub fn escape_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ESCAPE_KW) } #[inline] - pub fn copy_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::COPY_KW) + pub fn force_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FORCE_KW) } #[inline] - pub fn from_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::FROM_KW) + pub fn freeze_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FREEZE_KW) } #[inline] - pub fn program_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::PROGRAM_KW) + pub fn header_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::HEADER_KW) } #[inline] - pub fn stdin_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::STDIN_KW) + pub fn json_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::JSON_KW) } #[inline] - pub fn stdout_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::STDOUT_KW) + pub fn not_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NOT_KW) } #[inline] - pub fn to_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TO_KW) + pub fn null_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NULL_KW) } #[inline] - pub fn with_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::WITH_KW) + pub fn quote_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::QUOTE_KW) } } @@ -3919,10 +4685,38 @@ pub struct CopyOption { pub(crate) syntax: SyntaxNode, } impl CopyOption { + #[inline] + pub fn copy_option_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name(&self) -> Option { support::child(&self.syntax) } + #[inline] + pub fn star_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::STAR) + } + #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn off_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OFF_KW) + } + #[inline] + pub fn on_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ON_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -4003,6 +4797,10 @@ pub struct CreateAggregate { pub(crate) syntax: SyntaxNode, } impl CreateAggregate { + #[inline] + pub fn attribute_list(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn or_replace(&self) -> Option { support::child(&self.syntax) @@ -4089,6 +4887,18 @@ pub struct CreateCollation { pub(crate) syntax: SyntaxNode, } impl CreateCollation { + #[inline] + pub fn attribute_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn collation_from(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn if_not_exists(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn path(&self) -> Option { support::child(&self.syntax) @@ -4156,7 +4966,7 @@ pub struct CreateDatabase { } impl CreateDatabase { #[inline] - pub fn create_database_option_list(&self) -> Option { + pub fn database_option_list(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -4177,68 +4987,6 @@ impl CreateDatabase { } } -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct CreateDatabaseOption { - pub(crate) syntax: SyntaxNode, -} -impl CreateDatabaseOption { - #[inline] - pub fn literal(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn eq_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::EQ) - } - #[inline] - pub fn connection_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::CONNECTION_KW) - } - #[inline] - pub fn default_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::DEFAULT_KW) - } - #[inline] - pub fn encoding_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::ENCODING_KW) - } - #[inline] - pub fn ident_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::IDENT) - } - #[inline] - pub fn limit_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::LIMIT_KW) - } - #[inline] - pub fn owner_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::OWNER_KW) - } - #[inline] - pub fn tablespace_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TABLESPACE_KW) - } - #[inline] - pub fn template_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TEMPLATE_KW) - } -} - -#[derive(Debug, Clone, PartialEq, Eq, Hash)] -pub struct CreateDatabaseOptionList { - pub(crate) syntax: SyntaxNode, -} -impl CreateDatabaseOptionList { - #[inline] - pub fn create_database_options(&self) -> AstChildren { - support::children(&self.syntax) - } - #[inline] - pub fn with_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::WITH_KW) - } -} - #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct CreateDomain { pub(crate) syntax: SyntaxNode, @@ -4343,14 +5091,26 @@ impl CreateExtension { support::child(&self.syntax) } #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn name(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn cascade_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CASCADE_KW) + } + #[inline] pub fn create_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::CREATE_KW) } @@ -4358,6 +5118,22 @@ impl CreateExtension { pub fn extension_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::EXTENSION_KW) } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn schema_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SCHEMA_KW) + } + #[inline] + pub fn version_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::VERSION_KW) + } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -5025,6 +5801,10 @@ impl CreatePublication { support::token(&self.syntax, SyntaxKind::PUBLICATION_KW) } #[inline] + pub fn sequences_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEQUENCES_KW) + } + #[inline] pub fn tables_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::TABLES_KW) } @@ -5238,11 +6018,19 @@ pub struct CreateStatistics { pub(crate) syntax: SyntaxNode, } impl CreateStatistics { + #[inline] + pub fn exprs(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn from_table(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn if_not_exists(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn name_refs(&self) -> AstChildren { support::children(&self.syntax) } @@ -5251,6 +6039,14 @@ impl CreateStatistics { support::child(&self.syntax) } #[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) + } + #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } @@ -6069,6 +6865,68 @@ impl CustomOp { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct DatabaseOption { + pub(crate) syntax: SyntaxNode, +} +impl DatabaseOption { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn eq_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EQ) + } + #[inline] + pub fn connection_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONNECTION_KW) + } + #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } + #[inline] + pub fn encoding_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ENCODING_KW) + } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn limit_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LIMIT_KW) + } + #[inline] + pub fn owner_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OWNER_KW) + } + #[inline] + pub fn tablespace_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLESPACE_KW) + } + #[inline] + pub fn template_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TEMPLATE_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct DatabaseOptionList { + pub(crate) syntax: SyntaxNode, +} +impl DatabaseOptionList { + #[inline] + pub fn database_options(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct Deallocate { pub(crate) syntax: SyntaxNode, @@ -6475,6 +7333,10 @@ pub struct Do { pub(crate) syntax: SyntaxNode, } impl Do { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) @@ -6483,6 +7345,14 @@ impl Do { pub fn do_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::DO_KW) } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn language_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LANGUAGE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -6603,6 +7473,10 @@ impl DropAttribute { support::child(&self.syntax) } #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn restrict(&self) -> Option { support::child(&self.syntax) } @@ -7049,8 +7923,8 @@ impl DropForeignTable { support::child(&self.syntax) } #[inline] - pub fn path(&self) -> Option { - support::child(&self.syntax) + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) } #[inline] pub fn semicolon_token(&self) -> Option { @@ -7938,16 +8812,12 @@ pub struct DropTable { } impl DropTable { #[inline] - pub fn if_exists(&self) -> Option { - support::child(&self.syntax) - } - #[inline] - pub fn path(&self) -> Option { + pub fn if_exists(&self) -> Option { support::child(&self.syntax) } #[inline] - pub fn comma_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::COMMA) + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) } #[inline] pub fn semicolon_token(&self) -> Option { @@ -8528,8 +9398,8 @@ impl DropView { support::child(&self.syntax) } #[inline] - pub fn path(&self) -> Option { - support::child(&self.syntax) + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) } #[inline] pub fn semicolon_token(&self) -> Option { @@ -9223,10 +10093,6 @@ impl FdwOption { support::token(&self.syntax, SyntaxKind::NO_KW) } #[inline] - pub fn options_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::OPTIONS_KW) - } - #[inline] pub fn validator_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::VALIDATOR_KW) } @@ -9248,6 +10114,10 @@ pub struct Fetch { pub(crate) syntax: SyntaxNode, } impl Fetch { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name_ref(&self) -> Option { support::child(&self.syntax) @@ -9257,10 +10127,30 @@ impl Fetch { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn absolute_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ABSOLUTE_KW) + } + #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] + pub fn backward_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BACKWARD_KW) + } + #[inline] pub fn fetch_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::FETCH_KW) } #[inline] + pub fn first_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FIRST_KW) + } + #[inline] + pub fn forward_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FORWARD_KW) + } + #[inline] pub fn from_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::FROM_KW) } @@ -9268,6 +10158,22 @@ impl Fetch { pub fn in_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::IN_KW) } + #[inline] + pub fn last_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LAST_KW) + } + #[inline] + pub fn next_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NEXT_KW) + } + #[inline] + pub fn prior_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PRIOR_KW) + } + #[inline] + pub fn relative_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RELATIVE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -9484,18 +10390,70 @@ pub struct FrameClause { pub(crate) syntax: SyntaxNode, } impl FrameClause { + #[inline] + pub fn expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn and_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AND_KW) + } + #[inline] + pub fn between_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BETWEEN_KW) + } + #[inline] + pub fn current_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CURRENT_KW) + } + #[inline] + pub fn exclude_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EXCLUDE_KW) + } + #[inline] + pub fn following_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FOLLOWING_KW) + } + #[inline] + pub fn group_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::GROUP_KW) + } #[inline] pub fn groups_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::GROUPS_KW) } #[inline] + pub fn no_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NO_KW) + } + #[inline] + pub fn others_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OTHERS_KW) + } + #[inline] + pub fn preceding_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PRECEDING_KW) + } + #[inline] pub fn range_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::RANGE_KW) } #[inline] + pub fn row_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROW_KW) + } + #[inline] pub fn rows_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ROWS_KW) } + #[inline] + pub fn ties_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TIES_KW) + } + #[inline] + pub fn unbounded_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UNBOUNDED_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -12057,13 +13015,45 @@ impl Lock { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn access_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ACCESS_KW) + } + #[inline] + pub fn exclusive_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EXCLUSIVE_KW) + } + #[inline] + pub fn in_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IN_KW) + } + #[inline] pub fn lock_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::LOCK_KW) } #[inline] + pub fn mode_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::MODE_KW) + } + #[inline] + pub fn nowait_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NOWAIT_KW) + } + #[inline] + pub fn row_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROW_KW) + } + #[inline] + pub fn share_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SHARE_KW) + } + #[inline] pub fn table_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::TABLE_KW) } + #[inline] + pub fn update_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UPDATE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -12071,10 +13061,46 @@ pub struct LockingClause { pub(crate) syntax: SyntaxNode, } impl LockingClause { + #[inline] + pub fn exprs(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn for_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::FOR_KW) } + #[inline] + pub fn key_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::KEY_KW) + } + #[inline] + pub fn locked_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LOCKED_KW) + } + #[inline] + pub fn no_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NO_KW) + } + #[inline] + pub fn nowait_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NOWAIT_KW) + } + #[inline] + pub fn of_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OF_KW) + } + #[inline] + pub fn share_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SHARE_KW) + } + #[inline] + pub fn skip_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SKIP_KW) + } + #[inline] + pub fn update_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UPDATE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -12266,12 +13292,8 @@ impl MergePartitions { support::child(&self.syntax) } #[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 path_list(&self) -> Option { + support::child(&self.syntax) } #[inline] pub fn into_token(&self) -> Option { @@ -12428,6 +13450,10 @@ pub struct Move { pub(crate) syntax: SyntaxNode, } impl Move { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name_ref(&self) -> Option { support::child(&self.syntax) @@ -12437,6 +13463,26 @@ impl Move { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn absolute_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ABSOLUTE_KW) + } + #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] + pub fn backward_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BACKWARD_KW) + } + #[inline] + pub fn first_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FIRST_KW) + } + #[inline] + pub fn forward_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FORWARD_KW) + } + #[inline] pub fn from_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::FROM_KW) } @@ -12445,9 +13491,25 @@ impl Move { support::token(&self.syntax, SyntaxKind::IN_KW) } #[inline] + pub fn last_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LAST_KW) + } + #[inline] pub fn move_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::MOVE_KW) } + #[inline] + pub fn next_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NEXT_KW) + } + #[inline] + pub fn prior_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PRIOR_KW) + } + #[inline] + pub fn relative_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RELATIVE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -13550,6 +14612,14 @@ pub struct OverClause { pub(crate) syntax: SyntaxNode, } impl OverClause { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn window_spec(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::L_PAREN) @@ -13559,9 +14629,21 @@ impl OverClause { support::token(&self.syntax, SyntaxKind::R_PAREN) } #[inline] + pub fn ignore_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IGNORE_KW) + } + #[inline] + pub fn nulls_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NULLS_KW) + } + #[inline] pub fn over_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::OVER_KW) } + #[inline] + pub fn respect_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RESPECT_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -14134,6 +15216,25 @@ impl PathFactor { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct PathList { + pub(crate) syntax: SyntaxNode, +} +impl PathList { + #[inline] + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) + } + #[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) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct PathPattern { pub(crate) syntax: SyntaxNode, @@ -14283,6 +15384,10 @@ impl Prepare { support::child(&self.syntax) } #[inline] + pub fn param_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn preparable_stmt(&self) -> Option { support::child(&self.syntax) } @@ -14907,6 +16012,10 @@ pub struct RenameAttribute { pub(crate) syntax: SyntaxNode, } impl RenameAttribute { + #[inline] + pub fn cascade(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn name(&self) -> Option { support::child(&self.syntax) @@ -14916,6 +16025,10 @@ impl RenameAttribute { support::child(&self.syntax) } #[inline] + pub fn restrict(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn attribute_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ATTRIBUTE_KW) } @@ -15119,20 +16232,48 @@ pub struct Reset { } impl Reset { #[inline] - pub fn name_ref(&self) -> Option { + pub fn path(&self) -> Option { support::child(&self.syntax) } #[inline] - pub fn semicolon_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::SEMICOLON) + pub fn semicolon_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEMICOLON) + } + #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] + pub fn authorization_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AUTHORIZATION_KW) + } + #[inline] + pub fn isolation_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ISOLATION_KW) + } + #[inline] + pub fn level_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LEVEL_KW) + } + #[inline] + pub fn reset_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::RESET_KW) + } + #[inline] + pub fn session_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SESSION_KW) + } + #[inline] + pub fn time_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TIME_KW) } #[inline] - pub fn all_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::ALL_KW) + pub fn transaction_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TRANSACTION_KW) } #[inline] - pub fn reset_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::RESET_KW) + pub fn zone_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ZONE_KW) } } @@ -15176,12 +16317,8 @@ pub struct ResetOptions { } impl ResetOptions { #[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 { @@ -15605,10 +16742,74 @@ pub struct RoleOption { pub(crate) syntax: SyntaxNode, } impl RoleOption { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn role_ref_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn admin_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADMIN_KW) + } + #[inline] + pub fn connection_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CONNECTION_KW) + } + #[inline] + pub fn encrypted_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ENCRYPTED_KW) + } + #[inline] + pub fn group_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::GROUP_KW) + } + #[inline] + pub fn ident_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IDENT) + } + #[inline] + pub fn in_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IN_KW) + } #[inline] pub fn inherit_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::INHERIT_KW) } + #[inline] + pub fn limit_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LIMIT_KW) + } + #[inline] + pub fn null_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NULL_KW) + } + #[inline] + pub fn password_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PASSWORD_KW) + } + #[inline] + pub fn role_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROLE_KW) + } + #[inline] + pub fn sysid_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SYSID_KW) + } + #[inline] + pub fn until_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::UNTIL_KW) + } + #[inline] + pub fn user_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::USER_KW) + } + #[inline] + pub fn valid_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::VALID_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -16205,6 +17406,10 @@ impl SequenceOption { support::token(&self.syntax, SyntaxKind::BY_KW) } #[inline] + pub fn cache_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CACHE_KW) + } + #[inline] pub fn cycle_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::CYCLE_KW) } @@ -16475,14 +17680,46 @@ pub struct SetConfigParam { pub(crate) syntax: SyntaxNode, } impl SetConfigParam { + #[inline] + pub fn literals(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } #[inline] pub fn path(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn eq_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::EQ) + } + #[inline] + pub fn current_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CURRENT_KW) + } + #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } + #[inline] + pub fn from_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FROM_KW) + } + #[inline] + pub fn null_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NULL_KW) + } + #[inline] pub fn set_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SET_KW) } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -17062,14 +18299,50 @@ pub struct Show { pub(crate) syntax: SyntaxNode, } impl Show { + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn semicolon_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_KW) + } + #[inline] + pub fn authorization_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AUTHORIZATION_KW) + } + #[inline] + pub fn isolation_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ISOLATION_KW) + } + #[inline] + pub fn level_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LEVEL_KW) + } + #[inline] + pub fn session_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SESSION_KW) + } + #[inline] pub fn show_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::SHOW_KW) } + #[inline] + pub fn time_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TIME_KW) + } + #[inline] + pub fn transaction_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TRANSACTION_KW) + } + #[inline] + pub fn zone_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ZONE_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -21657,6 +22930,24 @@ impl AstNode for CollationForFn { &self.syntax } } +impl AstNode for CollationFrom { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::COLLATION_FROM + } + #[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 ColonColon { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -22053,6 +23344,24 @@ impl AstNode for Copy { &self.syntax } } +impl AstNode for CopyLegacyOption { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::COPY_LEGACY_OPTION + } + #[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 CopyOption { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -22215,42 +23524,6 @@ impl AstNode for CreateDatabase { &self.syntax } } -impl AstNode for CreateDatabaseOption { - #[inline] - fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::CREATE_DATABASE_OPTION - } - #[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 CreateDatabaseOptionList { - #[inline] - fn can_cast(kind: SyntaxKind) -> bool { - kind == SyntaxKind::CREATE_DATABASE_OPTION_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 CreateDomain { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -22935,6 +24208,42 @@ impl AstNode for CustomOp { &self.syntax } } +impl AstNode for DatabaseOption { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::DATABASE_OPTION + } + #[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 DatabaseOptionList { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::DATABASE_OPTION_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 Deallocate { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -28587,6 +29896,24 @@ impl AstNode for PathFactor { &self.syntax } } +impl AstNode for PathList { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::PATH_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 PathPattern { #[inline] fn can_cast(kind: SyntaxKind) -> bool { diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 73bc9c12..7a34eb30 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -29,6 +29,9 @@ Path = '.' segment:PathSegment? +PathList = + '(' (Path (',' Path)*) ')' + ParamVariadic = 'variadic' @@ -982,6 +985,7 @@ SequenceOptionList = SequenceOption = 'as' Type +| 'cache' Literal | 'increment' 'by'? Literal | 'sequence' 'name' NameRef | 'restart' ('with'? Literal)? @@ -1115,7 +1119,7 @@ Rollback = | 'rollback' 'prepared' Literal ';'? CreateAggregate = - 'create' OrReplace? 'aggregate' Path ParamList ';'? + 'create' OrReplace? 'aggregate' Path ParamList? AttributeList ';'? IfExists = 'if' 'exists' @@ -1129,7 +1133,7 @@ DropIndex = ('cascade' | 'restrict')? ';'? DropTable = - 'drop' 'table' IfExists? (Path (',' Path)) + 'drop' 'table' IfExists? (Path (',' Path)*) ('cascade' | 'restrict')? ';'? DropDatabase = @@ -1678,13 +1682,13 @@ AttributeValue = | Type AttributeList = - '(' ( AttributeOption (',' AttributeOption)* ) ')' + '(' (AttributeOption (',' AttributeOption)*)? ')' FilterClause = 'filter' '(' 'where' Expr ')' OverClause = - 'over' '(' ')' + (('respect' | 'ignore') 'nulls')? 'over' (NameRef | '(' WindowSpec? ')') WithinClause = 'within' 'group' '(' OrderByClause ')' @@ -1752,6 +1756,14 @@ IntoClause = LockingClause = 'for' + ( + 'no' 'key' 'update' + | 'key' 'share' + | 'share' + | 'update' + ) + ('of' (Expr (',' Expr)*))? + ('skip' 'locked' | 'nowait')? NullsFirst = 'nulls' 'first' @@ -1815,7 +1827,7 @@ XmlColumnOption = | 'path' Expr ConstraintIndexMethod = - 'using' + 'using' NameRef ConstraintExclusionList = '(' (ConstraintExclusion (',' ConstraintExclusion)*) ')' @@ -1832,27 +1844,64 @@ ExcludeConstraint = WhereConditionClause? FrameClause = - 'range' | 'rows' | 'groups' + ('range' | 'rows' | 'groups') + ( + 'between' + ( + 'current' 'row' + | 'unbounded' ('preceding' | 'following') + | Expr ('preceding' | 'following') + ) + 'and' + ( + 'current' 'row' + | 'unbounded' ('preceding' | 'following') + | Expr ('preceding' | 'following') + ) + | ( + 'current' 'row' + | 'unbounded' ('preceding' | 'following') + | Expr ('preceding' | 'following') + ) + ) + ('exclude' ('current' 'row' | 'group' | 'ties' | 'no' 'others'))? WindowSpec = '#ident'? ('partition' 'by' (Expr (',' Expr)*))? OrderByClause? FrameClause? AlterStatistics = - 'alter' 'statistics' Path ';'? + 'alter' 'statistics' Path + ( + OwnerTo + | RenameTo + | SetSchema + | 'set' 'statistics' ('default' | Literal) + ) ';'? AlterServer = - 'alter' 'server' NameRef AlterOptionList ';'? + 'alter' 'server' NameRef + ( + OwnerTo + | RenameTo + | ('version' Literal)? AlterOptionList? + ) ';'? AlterOptionList = - AlterOption (',' AlterOption)* + 'options' '(' (AlterOption (',' AlterOption)*)? ')' AlterOption = - 'add' NameRef Literal -| 'set' NameRef Literal -| 'drop' NameRef + ('add' | 'set')? Name Literal +| 'drop' Name AlterSequence = - 'alter' 'sequence' IfExists? Path ';'? + 'alter' 'sequence' IfExists? Path + ( + SetSchema + | 'set' ('logged' | 'unlogged') + | OwnerTo + | RenameTo + | SequenceOption SequenceOption* + ) ';'? AlterSchema = 'alter' 'schema' NameRef @@ -1875,10 +1924,24 @@ AlterRoutine = 'restrict'? ';'? AlterRole = - 'alter' 'role' RoleRef ';'? + 'alter' 'role' ('all' | RoleRef) + ( + RenameTo + | ('in' 'database' NameRef)? SetConfigParam + | ('in' 'database' NameRef)? 'reset' ('all' | Path) + | RoleOptionList + )? ';'? AlterPublication = - 'alter' 'publication' NameRef ';'? + 'alter' 'publication' NameRef + ( + ('add' | 'drop') (PublicationObject (',' PublicationObject)*) + | SetOptions + | 'set' 'all' ('tables' | 'sequences') ExceptTableClause? + | 'set' (PublicationObject (',' PublicationObject)*) + | OwnerTo + | RenameTo + ) ';'? AlterProcedure = 'alter' 'procedure' FunctionSig @@ -1968,7 +2031,7 @@ AlterMaterializedView = ) ';'? AlterLargeObject = - 'alter' 'large' 'object' ';'? + 'alter' 'large' 'object' Literal 'owner' 'to' RoleRef ';'? AlterLanguage = 'alter' 'language' NameRef @@ -2032,7 +2095,7 @@ FdwOptionList = FdwOption* FdwOption = - 'options' AlterOptionList + AlterOptionList | 'connection' Path | 'handler' Path | 'validator' Path @@ -2045,7 +2108,33 @@ AlterEventTrigger = ('disable' | 'enable' | 'enable' 'replica' | 'enable' 'always' | OwnerTo | RenameTo)? ';'? AlterExtension = - 'alter' 'extension' NameRef ';'? + 'alter' 'extension' NameRef + ( + 'update' ('to' ('#ident' | Literal))? + | SetSchema + | ('add' | 'drop') + ( + ('schema' | 'domain' | 'table' | 'type' | 'extension' | 'publication' + | 'server' | 'database' | 'role' | 'subscription' | 'tablespace') NameRef + | ('collation' | 'conversion' | 'sequence' | 'view' | 'index' | 'statistics') Path + | 'access' 'method' NameRef + | 'aggregate' Aggregate + | 'cast' CastSig + | 'event' 'trigger' NameRef + | 'foreign' ('data' 'wrapper' NameRef | 'table' Path) + | ('function' | 'procedure' | 'routine') FunctionSig + | 'materialized' 'view' Path + | 'operator' + ( + 'class' NameRef 'using' NameRef + | 'family' NameRef 'using' NameRef + | Op '(' Type ',' Type ')' + ) + | 'procedural'? 'language' NameRef + | 'text' 'search' ('configuration' | 'dictionary' | 'parser' | 'template') Path + | 'transform' 'for' NameRef 'language' NameRef + ) + )? ';'? AlterDefaultPrivileges = 'alter' 'default' 'privileges' @@ -2084,13 +2173,13 @@ AlterDatabase = | SetConfigParam | ResetConfigParam | RefreshCollationVersion - | CreateDatabaseOptionList + | DatabaseOptionList )? ';'? -CreateDatabaseOptionList = - 'with'? CreateDatabaseOption* +DatabaseOptionList = + 'with'? DatabaseOption* -CreateDatabaseOption = +DatabaseOption = ('owner' | 'template' | 'encoding' @@ -2102,6 +2191,10 @@ CreateDatabaseOption = SetConfigParam = 'set' Path + ( + 'from' 'current' + | ('to' | '=') ('default' | 'null' | (Literal (',' Literal)*) | (NameRef (',' NameRef)*)) + ) ResetConfigParam = 'reset' ('all' | Path) @@ -2129,13 +2222,35 @@ RefreshVersion = 'refresh' 'version' AlterAggregate = - 'alter' 'aggregate' Aggregate ';'? + 'alter' 'aggregate' Aggregate + ( + RenameTo + | OwnerTo + | SetSchema + ) ';'? AlterSubscription = - 'alter' 'subscription' NameRef ';'? + 'alter' 'subscription' NameRef + ( + 'connection' Literal + | 'server' NameRef + | SetOptions + | ('set' | 'add') 'publication' (Name (',' Name)*) ('with' AttributeList)? + | 'drop' 'publication' (NameRef (',' NameRef)*) ('with' AttributeList)? + | 'refresh' 'publication' ('with' AttributeList)? + | 'enable' + | 'disable' + | 'skip' AttributeList + | OwnerTo + | RenameTo + ) ';'? AlterSystem = - 'alter' 'system' 'set' ';'? + 'alter' 'system' + ( + SetConfigParam + | 'reset' ('all' | Path) + ) ';'? AlterTablespace = 'alter' 'tablespace' Path @@ -2162,7 +2277,15 @@ AlterTextSearchDictionary = AlterTextSearchConfiguration = 'alter' 'text' 'search' 'configuration' Path ( - RenameTo + 'add' 'mapping' 'for' (NameRef (',' NameRef)*) 'with' (Path (',' Path)*) + | 'alter' 'mapping' + ( + 'for' (NameRef (',' NameRef)*) + ('with' (Path (',' Path)*) | 'replace' Path 'with' Path) + | 'replace' Path 'with' Path + ) + | 'drop' 'mapping' IfExists? 'for' (NameRef (',' NameRef)*) + | RenameTo | OwnerTo | SetSchema ) ';'? @@ -2193,7 +2316,7 @@ AlterType = ) ';'? RenameAttribute = - 'rename' 'attribute' NameRef 'to' Name + 'rename' 'attribute' NameRef 'to' Name (Cascade | Restrict)? RenameValue = 'rename' 'value' Literal 'to' Literal @@ -2207,10 +2330,10 @@ AddAttribute = 'add' 'attribute' Name Type Collate? (Cascade | Restrict)? DropAttribute = - 'drop' 'attribute' IfExists? (Cascade | Restrict)? + 'drop' 'attribute' IfExists? NameRef (Cascade | Restrict)? AlterAttribute = - 'alter' 'attribute' (Cascade | Restrict)? + 'alter' 'attribute' NameRef ('set' 'data'?)? 'type' Type Collate? (Cascade | Restrict)? AddValue = 'add' 'value' IfNotExists? Literal ValuePosition? @@ -2226,13 +2349,28 @@ AfterValue = 'after' Literal AlterUser = - 'alter' 'user' RoleRef ';'? + 'alter' 'user' ('all' | RoleRef) + ( + RoleOptionList + | RenameTo + | ('in' 'database' NameRef)? SetConfigParam + | ('in' 'database' NameRef)? 'reset' ('all' | NameRef) + )? ';'? AlterUserMapping = 'alter' 'user' 'mapping' 'for' RoleRef ServerName AlterOptionList ';'? AlterView = - 'alter' 'view' Path ';'? + 'alter' 'view' IfExists? Path + ( + 'alter' 'column'? NameRef (('set' 'default' Expr) | ('drop' 'default')) + | OwnerTo + | RenameTo + | 'rename' 'column'? NameRef 'to' Name + | SetSchema + | SetOptions + | ResetOptions + ) ';'? Analyze = ('analyze' | 'analyse') @@ -2506,7 +2644,12 @@ CreateCast = ('as' 'assignment' | 'as' 'implicit')? ';'? CreateCollation = - 'create' 'collation' Path ';'? + 'create' 'collation' IfNotExists? Path + (CollationFrom | AttributeList) + ';'? + +CollationFrom = + 'from' Path CreateConversion = 'create' 'default'? 'conversion' Path @@ -2515,7 +2658,7 @@ CreateConversion = 'from' Path ';'? CreateDatabase = - 'create' 'database' Name CreateDatabaseOptionList ';'? + 'create' 'database' Name DatabaseOptionList ';'? CreateDomain = 'create' 'domain' Path 'as'? Type Collate? Constraint* ';'? @@ -2551,16 +2694,24 @@ ServerName = 'server' NameRef CreateGroup = - 'create' 'group' Name RoleOptionList ';'? + 'create' 'group' Name RoleOptionList? ';'? RoleOptionList = 'with'? RoleOption* RoleOption = - 'inherit' + '#ident' +| 'inherit' +| 'connection' 'limit' Literal +| 'encrypted' 'password' Literal +| 'password' ('null' | Literal) +| 'valid' 'until' Literal +| 'in' ('group' | 'role') RoleRefList +| ('admin' | 'role' | 'user') RoleRefList +| 'sysid' Literal CreateLanguage = - 'create' OrReplace 'trusted'? 'procedural'? 'language' Name + 'create' OrReplace? 'trusted'? 'procedural'? 'language' Name ('handler' Path ('inline' Path)? ('validator' Path)?)? ';'? CreateOperator = @@ -2571,7 +2722,7 @@ CreateOperator = CreateOperatorClass = 'create' 'operator' 'class' Path 'default'? 'for' 'type' Type - 'using' NameRef ('family' Path) + 'using' NameRef ('family' Path)? 'as' OperatorClassOptionList ';'? @@ -2603,7 +2754,13 @@ CreateProcedure = CreatePublication = 'create' 'publication' Name - ('for' 'all' 'tables' ExceptTableClause? | 'for' (PublicationObject (',' PublicationObject)*)) + ( + 'for' + ( + 'all' ('tables' | 'sequences') ExceptTableClause? + | (PublicationObject (',' PublicationObject)*) + ) + )? WithParams? ';'? ExceptTableClause = @@ -2615,7 +2772,7 @@ PublicationObject = | 'current_schema' CreateRole = - 'create' 'role' Name RoleOptionList ';'? + 'create' 'role' Name RoleOptionList? ';'? CreateRule = 'create' OrReplace? 'rule' Name 'as' @@ -2662,7 +2819,10 @@ CreateServer = CreateStatistics = - 'create' 'statistics' Path ('on' (NameRef (',' NameRef)*))? FromTable? ';'? + 'create' 'statistics' IfNotExists? Path? + ('(' (NameRef (',' NameRef)*) ')')? + ('on' (Expr (',' Expr)*))? + FromTable ';'? CreateSubscription = 'create' 'subscription' Name @@ -2729,7 +2889,7 @@ DropForeignDataWrapper = ('cascade' | 'restrict')? ';'? DropForeignTable = - 'drop' 'foreign' 'table' IfExists? Path + 'drop' 'foreign' 'table' IfExists? (Path (',' Path)*) ('cascade' | 'restrict')? ';'? DropAccessMethod = @@ -2865,7 +3025,7 @@ DropUserMapping = 'drop' 'user' 'mapping' IfExists? 'for' RoleRef ServerName ';'? DropView = - 'drop' 'view' IfExists? Path + 'drop' 'view' IfExists? (Path (',' Path)*) ('cascade' | 'restrict')? ';'? Explain = @@ -2906,7 +3066,21 @@ IntoSchema = 'into' NameRef Lock = - 'lock' 'table'? TableList? ';'? + 'lock' 'table'? TableList + ('in' + ( + 'access' 'share' + | 'row' 'share' + | 'access' 'exclusive' + | 'row' 'exclusive' + | 'share' 'row' 'exclusive' + | 'share' 'update' 'exclusive' + | 'share' + | 'exclusive' + ) + 'mode' + )? + 'nowait'? ';'? Reassign = 'reassign' 'owned' 'by' old_roles:RoleRefList 'to' new_roles:RoleRefList ';'? @@ -2963,12 +3137,12 @@ SecurityLabel = ('null' | Literal) ';'? ForProvider = - 'for' Literal | NameRef + 'for' (Literal | NameRef) SetConstraints = 'set' 'constraints' ('all' | (Path (',' Path)*)) - 'deferred' | 'immediate' ';'? + ('deferred' | 'immediate') ';'? SetRole = 'set' ('session' | 'local')? 'role' (RoleRef | 'none')? ';'? @@ -2998,7 +3172,7 @@ CreateView = ('with' ('cascaded' | 'local')? 'check' 'option')? ';'? Prepare = - 'prepare' Name 'as' PreparableStmt ';'? + 'prepare' Name ParamList? 'as' PreparableStmt ';'? PreparableStmt = Select @@ -3027,22 +3201,51 @@ Listen = 'listen' Name ';'? Reset = - 'reset' (NameRef | 'all') ';'? + 'reset' + ( + 'all' + | 'session' 'authorization' + | 'transaction' 'isolation' 'level' + | 'time' 'zone' + | Path + ) ';'? Discard = 'discard' ('all' | 'temp' | 'temporary' | 'plans' | 'sequences') ';'? Do = - 'do' ';'? + 'do' ('language' ('#ident' | Literal))? Literal ';'? Move = - 'move' ('from' | 'in')? NameRef ';'? + 'move' + ( + 'next' + | 'prior' + | 'first' + | 'last' + | 'all' + | ('relative' | 'absolute') Literal + | ('forward' | 'backward') ('all' | Literal)? + | Literal + )? + ('from' | 'in')? NameRef ';'? Fetch = - 'fetch' ('from' | 'in')? NameRef ';'? + 'fetch' + ( + 'next' + | 'prior' + | 'first' + | 'last' + | 'all' + | ('relative' | 'absolute') Literal + | ('forward' | 'backward') ('all' | Literal)? + | Literal + )? + ('from' | 'in')? NameRef ';'? Close = - 'close' NameRef ';'? + 'close' ('all' | NameRef) ';'? VacuumOptionList = '(' (VacuumOption (',' VacuumOption)*)? ')' @@ -3069,17 +3272,28 @@ Copy = 'copy' ('(' PreparableStmt ')' | 'binary'? Path ColumnList?) ( - ('from' ('stdin' | 'program'? Literal)) + ('from' ('stdin' | 'stdout' | 'program'? Literal)) | ('to' ('stdout' | 'program'? Literal)) - ) + )? 'with'? + (CopyOptionList | CopyLegacyOption*)? WhereClause? ';'? CopyOptionList = - '(' (CopyOption (',' CopyOption)*) ')' + '(' (CopyOption (',' CopyOption)*)? ')' CopyOption = - Name + Name (CopyOptionList | Literal | 'default' | 'on' | 'off' | '*' | '#ident')? + +CopyLegacyOption = + 'binary' +| 'freeze' +| 'csv' +| 'header' +| 'json' +| ('delimiter' | 'null' | 'quote' | 'escape') 'as'? Literal +| 'encoding' Literal +| 'force' ('not' 'null' | 'quote' | 'null') ('*' | (NameRef (',' NameRef)*)) Call = 'call' Path ArgList ';'? @@ -3182,7 +3396,11 @@ Variant = Literal CreateExtension = - 'create' 'extension' IfNotExists? Name ';'? + 'create' 'extension' IfNotExists? Name + 'with'? + ('schema' NameRef)? + ('version' (Literal | '#ident'))? + 'cascade'? ';'? Set = 'set' @@ -3201,7 +3419,14 @@ ConfigValue = | NameRef Show = - 'show' ';'? + 'show' + ( + 'all' + | 'session' 'authorization' + | 'transaction' 'isolation' 'level' + | 'time' 'zone' + | Path + ) ';'? LanguageFuncOption = 'language' NameRef @@ -3313,8 +3538,8 @@ DetachPartition = MergePartitions = 'merge' 'partitions' - '(' ')' - 'into' + PathList + 'into'? Path SplitPartition = @@ -3426,7 +3651,7 @@ AddGenerated = 'add' ResetOptions = - 'reset' '(' ')' + 'reset' AttributeList SetType = 'set' 'type' Type Collate? From c384d8d6297f7dc418d3f231805b0346a8e30fb1 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 6 Jun 2026 12:52:47 -0400 Subject: [PATCH 2/3] fix-snaps --- .../snapshots/tests__alter_database_ok.snap | 20 +++++----- .../snapshots/tests__create_collation_ok.snap | 30 ++++++++------- .../snapshots/tests__create_database_ok.snap | 38 +++++++++---------- 3 files changed, 45 insertions(+), 43 deletions(-) diff --git a/crates/squawk_parser/tests/snapshots/tests__alter_database_ok.snap b/crates/squawk_parser/tests/snapshots/tests__alter_database_ok.snap index fff32b5d..f0d6814e 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_database_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_database_ok.snap @@ -227,10 +227,10 @@ SOURCE_FILE NAME_REF IDENT "d" WHITESPACE " " - CREATE_DATABASE_OPTION_LIST + DATABASE_OPTION_LIST WITH_KW "with" WHITESPACE " " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "allow_connections" WHITESPACE " " LITERAL @@ -247,8 +247,8 @@ SOURCE_FILE NAME_REF IDENT "d" WHITESPACE " " - CREATE_DATABASE_OPTION_LIST - CREATE_DATABASE_OPTION + DATABASE_OPTION_LIST + DATABASE_OPTION CONNECTION_KW "connection" WHITESPACE " " LIMIT_KW "limit" @@ -267,8 +267,8 @@ SOURCE_FILE NAME_REF IDENT "d" WHITESPACE " " - CREATE_DATABASE_OPTION_LIST - CREATE_DATABASE_OPTION + DATABASE_OPTION_LIST + DATABASE_OPTION IDENT "is_template" WHITESPACE " " LITERAL @@ -285,16 +285,16 @@ SOURCE_FILE NAME_REF IDENT "d" WHITESPACE " " - CREATE_DATABASE_OPTION_LIST + DATABASE_OPTION_LIST WITH_KW "with" WHITESPACE " " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "allow_connections" WHITESPACE " " LITERAL TRUE_KW "true" WHITESPACE " " - CREATE_DATABASE_OPTION + DATABASE_OPTION CONNECTION_KW "connection" WHITESPACE " " LIMIT_KW "limit" @@ -302,7 +302,7 @@ SOURCE_FILE LITERAL INT_NUMBER "10" WHITESPACE " " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "is_template" WHITESPACE " " LITERAL diff --git a/crates/squawk_parser/tests/snapshots/tests__create_collation_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_collation_ok.snap index f3cdb101..f154ccd1 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_collation_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_collation_ok.snap @@ -15,12 +15,13 @@ SOURCE_FILE NAME IDENT "c" WHITESPACE " " - FROM_KW "from" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "d" + COLLATION_FROM + FROM_KW "from" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "d" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- from_full" @@ -47,17 +48,18 @@ SOURCE_FILE NAME IDENT "c" WHITESPACE " " - FROM_KW "from" - WHITESPACE " " - PATH + COLLATION_FROM + FROM_KW "from" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + DOT "." PATH_SEGMENT NAME_REF - IDENT "bar" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "d" + IDENT "d" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- with_options" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_database_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_database_ok.snap index 5453a00e..388d384c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_database_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_database_ok.snap @@ -12,7 +12,7 @@ SOURCE_FILE WHITESPACE " " NAME IDENT "d" - CREATE_DATABASE_OPTION_LIST + DATABASE_OPTION_LIST SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- full" @@ -25,16 +25,16 @@ SOURCE_FILE NAME IDENT "d" WHITESPACE "\n " - CREATE_DATABASE_OPTION_LIST + DATABASE_OPTION_LIST WITH_KW "with" WHITESPACE " " - CREATE_DATABASE_OPTION + DATABASE_OPTION OWNER_KW "owner" WHITESPACE " " LITERAL STRING "'foo'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION TEMPLATE_KW "template" WHITESPACE " " EQ "=" @@ -42,7 +42,7 @@ SOURCE_FILE LITERAL STRING "'foo'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION ENCODING_KW "encoding" WHITESPACE " " EQ "=" @@ -50,7 +50,7 @@ SOURCE_FILE LITERAL STRING "'utf-8'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "strategy" WHITESPACE " " EQ "=" @@ -58,7 +58,7 @@ SOURCE_FILE LITERAL INT_NUMBER "10" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "locale" WHITESPACE " " EQ "=" @@ -66,7 +66,7 @@ SOURCE_FILE LITERAL STRING "'fr_FR'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "lc_collate" WHITESPACE " " EQ "=" @@ -74,7 +74,7 @@ SOURCE_FILE LITERAL STRING "'fr_FR'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "lc_ctyep" WHITESPACE " " EQ "=" @@ -82,7 +82,7 @@ SOURCE_FILE LITERAL INT_NUMBER "10" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "builtin_locale" WHITESPACE " " EQ "=" @@ -90,7 +90,7 @@ SOURCE_FILE LITERAL STRING "'en'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "icu_locale" WHITESPACE " " EQ "=" @@ -98,7 +98,7 @@ SOURCE_FILE LITERAL STRING "'en'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "icu_rules" WHITESPACE " " EQ "=" @@ -106,7 +106,7 @@ SOURCE_FILE LITERAL STRING "''" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "locale_provider" WHITESPACE " " EQ "=" @@ -114,7 +114,7 @@ SOURCE_FILE LITERAL STRING "'./foo/bar'" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "collation_version" WHITESPACE " " EQ "=" @@ -122,14 +122,14 @@ SOURCE_FILE LITERAL INT_NUMBER "10" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION TABLESPACE_KW "tablespace" WHITESPACE " " EQ "=" WHITESPACE " " FULL_KW "full" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "allow_connections" WHITESPACE " " EQ "=" @@ -137,7 +137,7 @@ SOURCE_FILE LITERAL FALSE_KW "false" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION CONNECTION_KW "connection" WHITESPACE " " LIMIT_KW "limit" @@ -147,7 +147,7 @@ SOURCE_FILE LITERAL INT_NUMBER "1000" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "is_template" WHITESPACE " " EQ "=" @@ -155,7 +155,7 @@ SOURCE_FILE LITERAL FALSE_KW "false" WHITESPACE "\n " - CREATE_DATABASE_OPTION + DATABASE_OPTION IDENT "oid" WHITESPACE " " LITERAL From ec631453cbe43818a4f1304bc6954b52bd8b396d Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Sat, 6 Jun 2026 12:55:15 -0400 Subject: [PATCH 3/3] fix tests --- crates/squawk_ide/src/expand_selection.rs | 1 + crates/squawk_ide/src/folding_ranges.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/crates/squawk_ide/src/expand_selection.rs b/crates/squawk_ide/src/expand_selection.rs index 0b435c88..0de6f2e0 100644 --- a/crates/squawk_ide/src/expand_selection.rs +++ b/crates/squawk_ide/src/expand_selection.rs @@ -55,6 +55,7 @@ const DELIMITED_LIST_KINDS: &[SyntaxKind] = &[ SyntaxKind::PARAM_LIST, SyntaxKind::PARTITION_ITEM_LIST, SyntaxKind::PARTITION_LIST, + SyntaxKind::PATH_LIST, SyntaxKind::RETURNING_OPTION_LIST, SyntaxKind::REVOKE_COMMAND_LIST, SyntaxKind::ROLE_REF_LIST, diff --git a/crates/squawk_ide/src/folding_ranges.rs b/crates/squawk_ide/src/folding_ranges.rs index 84bb13de..5d6cb7ba 100644 --- a/crates/squawk_ide/src/folding_ranges.rs +++ b/crates/squawk_ide/src/folding_ranges.rs @@ -139,6 +139,7 @@ fn fold_kind(kind: SyntaxKind) -> Option { | SyntaxKind::OP_SIG_LIST | SyntaxKind::PARTITION_ITEM_LIST | SyntaxKind::PARTITION_LIST + | SyntaxKind::PATH_LIST | SyntaxKind::RETURNING_OPTION_LIST | SyntaxKind::REVOKE_COMMAND_LIST | SyntaxKind::ROLE_OPTION_LIST