diff --git a/crates/squawk_ide/src/expand_selection.rs b/crates/squawk_ide/src/expand_selection.rs index 665faa23..c6a2f87f 100644 --- a/crates/squawk_ide/src/expand_selection.rs +++ b/crates/squawk_ide/src/expand_selection.rs @@ -49,6 +49,7 @@ const DELIMITED_LIST_KINDS: &[SyntaxKind] = &[ SyntaxKind::EXPLAIN_OPTION_LIST, SyntaxKind::FDW_OPTION_LIST, SyntaxKind::FUNCTION_SIG_LIST, + SyntaxKind::GRANT_ROLE_OPTION_LIST, SyntaxKind::GROUP_BY_LIST, SyntaxKind::JSON_TABLE_COLUMN_LIST, SyntaxKind::OPERATOR_CLASS_OPTION_LIST, diff --git a/crates/squawk_ide/src/folding_ranges.rs b/crates/squawk_ide/src/folding_ranges.rs index e7eb43a6..280e9f9b 100644 --- a/crates/squawk_ide/src/folding_ranges.rs +++ b/crates/squawk_ide/src/folding_ranges.rs @@ -134,6 +134,7 @@ fn fold_kind(kind: SyntaxKind) -> Option { | SyntaxKind::FDW_OPTION_LIST | SyntaxKind::FUNCTION_SIG_LIST | SyntaxKind::FUNC_OPTION_LIST + | SyntaxKind::GRANT_ROLE_OPTION_LIST | SyntaxKind::GROUP_BY_LIST | SyntaxKind::JSON_TABLE_COLUMN_LIST | SyntaxKind::OPERATOR_CLASS_OPTION_LIST diff --git a/crates/squawk_parser/src/generated/syntax_kind.rs b/crates/squawk_parser/src/generated/syntax_kind.rs index e23b6b63..785ce7f6 100644 --- a/crates/squawk_parser/src/generated/syntax_kind.rs +++ b/crates/squawk_parser/src/generated/syntax_kind.rs @@ -644,6 +644,7 @@ pub enum SyntaxKind { ATTRIBUTE_LIST, ATTRIBUTE_OPTION, ATTRIBUTE_VALUE, + AT_LOCAL, AT_TIME_ZONE, BACKWARD, BEFORE_VALUE, @@ -740,6 +741,12 @@ pub enum SyntaxKind { CREATE_VIEW, CURRENT_ROW, CUSTOM_OP, + CYCLE_CLAUSE, + CYCLE_COLUMNS, + CYCLE_COLUMN_TO, + CYCLE_DEFAULT, + CYCLE_PATH, + CYCLE_SET_COLUMN, DATABASE_OPTION, DATABASE_OPTION_LIST, DEALLOCATE, @@ -880,6 +887,9 @@ pub enum SyntaxKind { GENERATED_CONSTRAINT, GRANT, GRANT_DEFAULT_PRIVILEGES, + GRANT_ROLE_OPTION, + GRANT_ROLE_OPTION_LIST, + GRANT_WITH_CLAUSE, GRAPH_PATTERN_QUALIFIER, GRAPH_TABLE_FN, GROUP, @@ -1090,6 +1100,7 @@ pub enum SyntaxKind { PRIMARY_KEY_CONSTRAINT, PRIOR, PRIVILEGES, + PRIVILEGE_OBJECTS, PRIVILEGE_TARGET, PROPERTIES, PUBLICATION_OBJECT, @@ -1149,6 +1160,9 @@ pub enum SyntaxKind { RULE_ON, RULE_STMT_LIST, SAVEPOINT, + SEARCH_CLAUSE, + SEARCH_COLUMNS, + SEARCH_SET_COLUMN, SECURITY_FUNC_OPTION, SECURITY_LABEL, SELECT, @@ -1252,6 +1266,7 @@ pub enum SyntaxKind { VACUUM, VACUUM_OPTION, VACUUM_OPTION_LIST, + VACUUM_OPTION_VALUE, VALIDATE_CONSTRAINT, VALUES, VARIANT, diff --git a/crates/squawk_parser/src/grammar.rs b/crates/squawk_parser/src/grammar.rs index 3f22f33a..8924708f 100644 --- a/crates/squawk_parser/src/grammar.rs +++ b/crates/squawk_parser/src/grammar.rs @@ -1458,10 +1458,9 @@ fn postfix_expr( break; } }, - AT_KW if p.nth_at(1, LOCAL_KW) => { + AT_KW if p.at(AT_LOCAL) => { let m = p.start(); - p.bump(AT_KW); - p.bump(LOCAL_KW); + p.bump(AT_LOCAL); lhs = m.complete(p, POSTFIX_EXPR); break; } @@ -2583,6 +2582,13 @@ fn with_query(p: &mut Parser<'_>) -> CompletedMarker { p.expect(L_PAREN); preparable_stmt(p); p.expect(R_PAREN); + opt_search_clause(p); + opt_cycle_clause(p); + m.complete(p, WITH_TABLE) +} + +fn opt_search_clause(p: &mut Parser<'_>) { + let m = p.start(); // [ SEARCH { BREADTH | DEPTH } FIRST BY column_name [, ...] SET search_seq_col_name ] if p.eat(SEARCH_KW) { if !p.eat(BREADTH_KW) { @@ -2590,19 +2596,32 @@ fn with_query(p: &mut Parser<'_>) -> CompletedMarker { } p.expect(FIRST_KW); p.expect(BY_KW); - separated( - p, - COMMA, - || "unexpected comma, expected a column name".to_string(), - NAME_REF_FIRST, - TokenSet::new(&[SET_KW]), - |p| opt_name_ref(p).is_some(), - ); - p.expect(SET_KW); - name_ref(p); + search_columns(p); + search_set_column(p); + m.complete(p, SEARCH_CLAUSE); + } else { + m.abandon(p); } - opt_cycle_clause(p); - m.complete(p, WITH_TABLE) +} + +fn search_columns(p: &mut Parser<'_>) { + let m = p.start(); + separated( + p, + COMMA, + || "unexpected comma, expected a column name".to_string(), + NAME_REF_FIRST, + TokenSet::new(&[SET_KW]), + |p| opt_name_ref(p).is_some(), + ); + m.complete(p, SEARCH_COLUMNS); +} + +fn search_set_column(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(SET_KW); + name_ref(p); + m.complete(p, SEARCH_SET_COLUMN); } // [ CYCLE column_name [, ...] SET cycle_mark_col_name [ TO cycle_mark_value DEFAULT cycle_mark_default ] USING cycle_path_col_name ] @@ -2610,7 +2629,50 @@ fn opt_cycle_clause(p: &mut Parser<'_>) { if !p.at(CYCLE_KW) { return; } + let m = p.start(); p.expect(CYCLE_KW); + cycle_columns(p); + cycle_set_column(p); + cycle_path(p); + m.complete(p, CYCLE_CLAUSE); +} + +fn cycle_path(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(USING_KW); + // cycle path + name_ref(p); + m.complete(p, CYCLE_PATH); +} + +fn cycle_set_column(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(SET_KW); + name_ref(p); + opt_cycle_column_to(p); + m.complete(p, CYCLE_SET_COLUMN); +} + +fn opt_cycle_column_to(p: &mut Parser<'_>) { + let m = p.start(); + if p.eat(TO_KW) { + expr(p); + cycle_default(p); + m.complete(p, CYCLE_COLUMN_TO); + } else { + m.abandon(p); + } +} + +fn cycle_default(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(DEFAULT_KW); + expr(p); + m.complete(p, CYCLE_DEFAULT); +} + +fn cycle_columns(p: &mut Parser<'_>) { + let m = p.start(); separated( p, COMMA, @@ -2619,15 +2681,7 @@ fn opt_cycle_clause(p: &mut Parser<'_>) { TokenSet::new(&[SET_KW]), |p| opt_name_ref(p).is_some(), ); - p.expect(SET_KW); - name_ref(p); - if p.eat(TO_KW) { - expr(p); - p.expect(DEFAULT_KW); - expr(p); - } - p.expect(USING_KW); - name_ref(p); + m.complete(p, CYCLE_COLUMNS); } // [ [ NOT ] MATERIALIZED ] @@ -11639,8 +11693,8 @@ fn grant(p: &mut Parser<'_>) -> CompletedMarker { // TODO: need more validation here // [ WITH GRANT OPTION ] // [ WITH { ADMIN | INHERIT | SET } { OPTION | TRUE | FALSE } ] - if p.eat(WITH_KW) { - grant_role_option_list(p); + if p.at(WITH_KW) { + grant_with_clause(p); } opt_granted_by(p); p.eat(SEMICOLON); @@ -11656,16 +11710,23 @@ fn revoke_command_list(p: &mut Parser<'_>) { m.complete(p, REVOKE_COMMAND_LIST); } -fn grant_role_option_list(p: &mut Parser<'_>) { +fn grant_with_clause(p: &mut Parser<'_>) { + let m = p.start(); + p.expect(WITH_KW); if p.eat(GRANT_KW) { p.expect(OPTION_KW); - return; + } else { + grant_role_option_list(p); } + m.complete(p, GRANT_WITH_CLAUSE); +} + +fn grant_role_option_list(p: &mut Parser<'_>) { + let m = p.start(); + let mut found_option = false; while p.at_ts(COL_LABEL_FIRST) { - col_label(p); - if !(p.eat(OPTION_KW) || p.eat(TRUE_KW) || p.eat(FALSE_KW)) { - p.error("expected OPTION, TRUE, or FALSE") - } + grant_role_option(p); + found_option = true; if !p.eat(COMMA) { if p.at_ts(COL_LABEL_FIRST) && !p.at(GRANTED_KW) { p.error("missing comma"); @@ -11674,9 +11735,25 @@ fn grant_role_option_list(p: &mut Parser<'_>) { } } } + if found_option { + m.complete(p, GRANT_ROLE_OPTION_LIST); + } else { + p.error("expected GRANT OPTION or role option"); + m.abandon(p); + } +} + +fn grant_role_option(p: &mut Parser<'_>) { + let m = p.start(); + col_label(p); + if !(p.eat(OPTION_KW) || p.eat(TRUE_KW) || p.eat(FALSE_KW)) { + p.error("expected OPTION, TRUE, or FALSE") + } + m.complete(p, GRANT_ROLE_OPTION); } fn privilege_target(p: &mut Parser<'_>) { + let m = p.start(); if p.eat(ALL_KW) { match p.current() { TABLES_KW | SEQUENCES_KW | FUNCTIONS_KW | PROCEDURES_KW | ROUTINES_KW => { @@ -11749,6 +11826,7 @@ fn privilege_target(p: &mut Parser<'_>) { _ => (), } } + m.complete(p, PRIVILEGE_OBJECTS); } // [ GRANTED BY role_specification ] @@ -12853,23 +12931,24 @@ fn opt_vacuum_option(p: &mut Parser<'_>) -> Option { let m = p.start(); // utility_option_name if p.at_ts(NON_RESERVED_WORD) || p.at(ANALYZE_KW) || p.at(ANALYSE_KW) || p.at(FORMAT_KW) { - p.bump_any(); + col_label(p); } + opt_vacuum_option_value(p); + Some(m.complete(p, VACUUM_OPTION)) +} + +// utility_option_arg +fn opt_vacuum_option_value(p: &mut Parser<'_>) -> Option { + let m = p.start(); if p.at_ts(NON_RESERVED_WORD) || p.at(ON_KW) { - p.bump_any(); - return Some(m.complete(p, VACUUM_OPTION)); - } - // utility_option_arg - if opt_numeric_literal(p).is_some() { - return Some(m.complete(p, VACUUM_OPTION)); - } - if opt_string_literal(p).is_some() { - return Some(m.complete(p, VACUUM_OPTION)); + col_label(p); + return Some(m.complete(p, VACUUM_OPTION_VALUE)); } - if opt_bool_literal(p) { - return Some(m.complete(p, VACUUM_OPTION)); + if opt_numeric_literal(p).is_some() || opt_string_literal(p).is_some() || opt_bool_literal(p) { + return Some(m.complete(p, VACUUM_OPTION_VALUE)); } - Some(m.complete(p, VACUUM_OPTION)) + m.abandon(p); + None } // copy_generic_opt_elem: diff --git a/crates/squawk_parser/src/lib.rs b/crates/squawk_parser/src/lib.rs index 8a41adf4..bca8b33b 100644 --- a/crates/squawk_parser/src/lib.rs +++ b/crates/squawk_parser/src/lib.rs @@ -210,6 +210,13 @@ impl<'t> Parser<'t> { m.complete(self, SyntaxKind::AT_TIME_ZONE); return true; } + SyntaxKind::AT_LOCAL => { + let m = self.start(); + self.bump(SyntaxKind::AT_KW); + self.bump(SyntaxKind::LOCAL_KW); + m.complete(self, SyntaxKind::AT_LOCAL); + return true; + } SyntaxKind::IS_NOT_NORMALIZED => { let m = self.start(); self.bump(SyntaxKind::IS_KW); @@ -700,6 +707,13 @@ impl<'t> Parser<'t> { SyntaxKind::TIME_KW, SyntaxKind::ZONE_KW, ), + // at local + SyntaxKind::AT_LOCAL => self.at_composite2( + n, + SyntaxKind::AT_KW, + SyntaxKind::LOCAL_KW, + TrivaBetween::Allowed, + ), // is distinct from SyntaxKind::IS_DISTINCT_FROM => self.at_composite3( n, diff --git a/crates/squawk_parser/tests/data/ok/alter_table.sql b/crates/squawk_parser/tests/data/ok/alter_table.sql index fcde6c75..bf177e43 100644 --- a/crates/squawk_parser/tests/data/ok/alter_table.sql +++ b/crates/squawk_parser/tests/data/ok/alter_table.sql @@ -10,6 +10,7 @@ alter table t alter constraint c; alter table t alter constraint c deferrable; alter table t alter constraint c not deferrable; alter table t alter constraint c not deferrable initially immediate; +alter table t alter constraint c deferrable initially deferred; -- validate_constraint diff --git a/crates/squawk_parser/tests/data/ok/create_table.sql b/crates/squawk_parser/tests/data/ok/create_table.sql index 35c75812..51f350ca 100644 --- a/crates/squawk_parser/tests/data/ok/create_table.sql +++ b/crates/squawk_parser/tests/data/ok/create_table.sql @@ -180,6 +180,13 @@ create unlogged table t ( ) stored ); +-- generated virtual (pg18) +create table t ( + a int, + b int generated always as (a + 1) virtual, + c int generated always as (a + 1) +); + -- create_table_table_constraints -- named constraint diff --git a/crates/squawk_parser/tests/data/ok/select_funcs.sql b/crates/squawk_parser/tests/data/ok/select_funcs.sql index 8b5b8c91..6fd03406 100644 --- a/crates/squawk_parser/tests/data/ok/select_funcs.sql +++ b/crates/squawk_parser/tests/data/ok/select_funcs.sql @@ -210,6 +210,12 @@ select string_agg(a, ',' order by a) from t; -- order by param 1 select string_agg(a order by a, ',') from "table"; +-- distinct with multiple args +select count(distinct a, b) from t; + +-- distinct with order by +select array_agg(distinct v order by v) from vals; + -- within group select foo(0.5) within group (order by c) from t; 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 86fc3657..b45b9a33 100644 --- a/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__alter_table_ok.snap @@ -170,6 +170,34 @@ SOURCE_FILE WHITESPACE " " IMMEDIATE_KW "immediate" SEMICOLON ";" + WHITESPACE "\n" + ALTER_TABLE + ALTER_KW "alter" + WHITESPACE " " + TABLE_KW "table" + WHITESPACE " " + RELATION_NAME + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + WHITESPACE " " + ALTER_CONSTRAINT + ALTER_KW "alter" + WHITESPACE " " + CONSTRAINT_KW "constraint" + WHITESPACE " " + NAME_REF + IDENT "c" + WHITESPACE " " + DEFERRABLE_CONSTRAINT_OPTION + DEFERRABLE_KW "deferrable" + WHITESPACE " " + INITIALLY_DEFERRED_CONSTRAINT_OPTION + INITIALLY_KW "initially" + WHITESPACE " " + DEFERRED_KW "deferred" + SEMICOLON ";" WHITESPACE "\n\n\n" COMMENT "-- validate_constraint" WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__create_table_ok.snap b/crates/squawk_parser/tests/snapshots/tests__create_table_ok.snap index 790361e0..e851df9f 100644 --- a/crates/squawk_parser/tests/snapshots/tests__create_table_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__create_table_ok.snap @@ -1614,6 +1614,94 @@ SOURCE_FILE R_PAREN ")" SEMICOLON ";" WHITESPACE "\n\n" + CREATE_TABLE + COMMENT "-- generated virtual (pg18)" + WHITESPACE "\n" + CREATE_KW "create" + WHITESPACE " " + TABLE_KW "table" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME + IDENT "t" + WHITESPACE " " + TABLE_ARG_LIST + L_PAREN "(" + WHITESPACE "\n " + COLUMN + NAME + IDENT "a" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + COMMA "," + WHITESPACE "\n " + COLUMN + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + WHITESPACE " " + GENERATED_CONSTRAINT + GENERATED_KW "generated" + WHITESPACE " " + ALWAYS_KW "always" + WHITESPACE " " + AS_KW "as" + WHITESPACE " " + L_PAREN "(" + BIN_EXPR + NAME_REF + IDENT "a" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "1" + R_PAREN ")" + WHITESPACE " " + VIRTUAL_KW "virtual" + COMMA "," + WHITESPACE "\n " + COLUMN + NAME + IDENT "c" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + INT_KW "int" + WHITESPACE " " + GENERATED_CONSTRAINT + GENERATED_KW "generated" + WHITESPACE " " + ALWAYS_KW "always" + WHITESPACE " " + AS_KW "as" + WHITESPACE " " + L_PAREN "(" + BIN_EXPR + NAME_REF + IDENT "a" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + LITERAL + INT_NUMBER "1" + R_PAREN ")" + WHITESPACE "\n" + R_PAREN ")" + SEMICOLON ";" + WHITESPACE "\n\n" COMMENT "-- create_table_table_constraints" WHITESPACE "\n\n" CREATE_TABLE diff --git a/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap b/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap index d7d18971..66aabbb7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__grant_ok.snap @@ -54,10 +54,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -77,24 +78,25 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TABLE_KW "table" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + TABLE_KW "table" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -106,11 +108,12 @@ SOURCE_FILE ROLE_REF CURRENT_ROLE_KW "current_role" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" WHITESPACE "\n " GRANTED_KW "granted" WHITESPACE " " @@ -130,17 +133,18 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TABLE_KW "table" - WHITESPACE " " - PATH + PRIVILEGE_OBJECTS + TABLE_KW "table" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" + IDENT "t" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -158,10 +162,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -181,20 +186,21 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - TABLES_KW "tables" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + TABLES_KW "tables" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -202,11 +208,12 @@ SOURCE_FILE ROLE_REF CURRENT_ROLE_KW "current_role" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- columns" @@ -236,10 +243,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -275,10 +283,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -314,10 +323,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -351,10 +361,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -378,10 +389,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -403,10 +415,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " TO_KW "to" WHITESPACE " " @@ -426,12 +439,13 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -449,17 +463,18 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "public" + DOT "." PATH_SEGMENT NAME_REF - IDENT "public" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "s" + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -479,24 +494,25 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -516,12 +532,13 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "x" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "x" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -537,16 +554,17 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - SEQUENCES_KW "sequences" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + SEQUENCES_KW "sequences" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -564,24 +582,25 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - SEQUENCES_KW "sequences" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + SEQUENCES_KW "sequences" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -601,18 +620,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -620,11 +640,12 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -654,10 +675,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -673,10 +695,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -698,24 +721,25 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DOMAIN_KW "domain" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + DOMAIN_KW "domain" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -723,11 +747,12 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -739,12 +764,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DOMAIN_KW "domain" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + DOMAIN_KW "domain" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "d" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -762,17 +788,18 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DOMAIN_KW "domain" - WHITESPACE " " - PATH + PRIVILEGE_OBJECTS + DOMAIN_KW "domain" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "d" + IDENT "d" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -794,22 +821,23 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - DATA_KW "data" - WHITESPACE " " - WRAPPER_KW "wrapper" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + DATA_KW "data" + WHITESPACE " " + WRAPPER_KW "wrapper" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -817,11 +845,12 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -833,14 +862,15 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - DATA_KW "data" - WHITESPACE " " - WRAPPER_KW "wrapper" - WHITESPACE " " - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + DATA_KW "data" + WHITESPACE " " + WRAPPER_KW "wrapper" + WHITESPACE " " + NAME_REF + IDENT "d" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -862,20 +892,21 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - SERVER_KW "server" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + SERVER_KW "server" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -883,11 +914,12 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -899,12 +931,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - SERVER_KW "server" - WHITESPACE " " - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + SERVER_KW "server" + WHITESPACE " " + NAME_REF + IDENT "d" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -926,21 +959,22 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FUNCTION_KW "function" - WHITESPACE " " - FUNCTION_SIG_LIST - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," + PRIVILEGE_OBJECTS + FUNCTION_KW "function" WHITESPACE " " - FUNCTION_SIG - 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 " " @@ -948,11 +982,12 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - GRANT_KW "grant" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_KW "grant" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -966,77 +1001,78 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PROCEDURE_KW "procedure" - WHITESPACE " " - 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" + PRIVILEGE_OBJECTS + PROCEDURE_KW "procedure" + WHITESPACE " " + 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 " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," 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 " " - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - COMMA "," - WHITESPACE " " - 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 ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + COMMA "," + WHITESPACE " " + 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 " " @@ -1052,14 +1088,15 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ROUTINE_KW "routine" - WHITESPACE " " - FUNCTION_SIG_LIST - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" + PRIVILEGE_OBJECTS + ROUTINE_KW "routine" + WHITESPACE " " + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1073,26 +1110,27 @@ SOURCE_FILE WHITESPACE " " ALL_KW "all" WHITESPACE "\n " - ON_KW "on" - WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - FUNCTIONS_KW "functions" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," + ON_KW "on" WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + FUNCTIONS_KW "functions" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1108,16 +1146,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - PROCEDURES_KW "procedures" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + PROCEDURES_KW "procedures" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1133,16 +1172,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - ROUTINES_KW "routines" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + ROUTINES_KW "routines" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1160,58 +1200,59 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PROCEDURE_KW "procedure" - WHITESPACE " " - 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" + PRIVILEGE_OBJECTS + PROCEDURE_KW "procedure" + WHITESPACE " " + 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 " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," 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 " " - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1233,18 +1274,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1260,18 +1302,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1289,18 +1332,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1326,16 +1370,17 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LARGE_KW "large" - WHITESPACE " " - OBJECT_KW "object" - WHITESPACE " " - LITERAL - INT_NUMBER "1012" - COMMA "," - WHITESPACE " " - LITERAL - INT_NUMBER "1231" + PRIVILEGE_OBJECTS + LARGE_KW "large" + WHITESPACE " " + OBJECT_KW "object" + WHITESPACE " " + LITERAL + INT_NUMBER "1012" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "1231" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1353,16 +1398,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - LARGE_KW "large" - WHITESPACE " " - OBJECT_KW "object" - WHITESPACE " " - LITERAL - INT_NUMBER "1012" - COMMA "," - WHITESPACE " " - LITERAL - INT_NUMBER "1231" + PRIVILEGE_OBJECTS + LARGE_KW "large" + WHITESPACE " " + OBJECT_KW "object" + WHITESPACE " " + LITERAL + INT_NUMBER "1012" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "1231" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1390,24 +1436,25 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1427,12 +1474,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - BEGIN_KW "begin" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + BEGIN_KW "begin" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1448,12 +1496,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - BEGIN_KW "begin" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + BEGIN_KW "begin" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1491,12 +1540,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - SET_KW "set" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + SET_KW "set" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE " \n\n" GRANT @@ -1538,10 +1590,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1565,18 +1618,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1612,18 +1666,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1643,18 +1698,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TABLESPACE_KW "tablespace" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + TABLESPACE_KW "tablespace" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1670,18 +1726,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TABLESPACE_KW "tablespace" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + TABLESPACE_KW "tablespace" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1703,27 +1760,28 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1739,13 +1797,14 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1761,18 +1820,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" + IDENT "t" WHITESPACE "\n " TO_KW "to" WHITESPACE " " @@ -1798,12 +1858,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - ADMIN_KW "admin" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + ADMIN_KW "admin" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -1821,12 +1884,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - INHERIT_KW "inherit" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + INHERIT_KW "inherit" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -1844,12 +1910,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - INHERIT_KW "inherit" - WHITESPACE " " - TRUE_KW "true" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + INHERIT_KW "inherit" + WHITESPACE " " + TRUE_KW "true" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -1867,12 +1936,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - SET_KW "set" - WHITESPACE " " - FALSE_KW "false" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + SET_KW "set" + WHITESPACE " " + FALSE_KW "false" SEMICOLON ";" WHITESPACE "\n\n" GRANT @@ -1907,12 +1979,15 @@ SOURCE_FILE ROLE_REF CURRENT_USER_KW "current_user" WHITESPACE "\n " - WITH_KW "with" - WHITESPACE " " - NAME - SET_KW "set" - WHITESPACE " " - OPTION_KW "option" + GRANT_WITH_CLAUSE + WITH_KW "with" + WHITESPACE " " + GRANT_ROLE_OPTION_LIST + GRANT_ROLE_OPTION + NAME + SET_KW "set" + WHITESPACE " " + OPTION_KW "option" SEMICOLON ";" WHITESPACE "\n\n" GRANT diff --git a/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap b/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap index 48c42cae..3d9ba78c 100644 --- a/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__revoke_ok.snap @@ -55,10 +55,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -85,24 +86,25 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TABLE_KW "table" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + TABLE_KW "table" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -141,17 +143,18 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TABLE_KW "table" - WHITESPACE " " - PATH + PRIVILEGE_OBJECTS + TABLE_KW "table" + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -190,10 +193,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -218,26 +222,27 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH + PRIVILEGE_OBJECTS PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" - COMMA "," - WHITESPACE " " - PATH + IDENT "t" + COMMA "," + WHITESPACE " " PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + DOT "." PATH_SEGMENT NAME_REF - IDENT "b" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -264,20 +269,21 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - TABLES_KW "tables" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + TABLES_KW "tables" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -316,10 +322,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -356,10 +363,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -396,10 +404,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -434,10 +443,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -462,10 +472,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -488,10 +499,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " \n " FROM_KW "from" WHITESPACE " " @@ -512,12 +524,13 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -538,24 +551,25 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -576,12 +590,13 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - SEQUENCE_KW "sequence" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "x" + PRIVILEGE_OBJECTS + SEQUENCE_KW "sequence" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "x" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -598,16 +613,17 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - SEQUENCES_KW "sequences" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + SEQUENCES_KW "sequences" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -626,24 +642,25 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - SEQUENCES_KW "sequences" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + SEQUENCES_KW "sequences" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -670,18 +687,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -718,10 +736,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -738,10 +757,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DATABASE_KW "database" - WHITESPACE " " - NAME_REF - IDENT "a" + PRIVILEGE_OBJECTS + DATABASE_KW "database" + WHITESPACE " " + NAME_REF + IDENT "a" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -770,24 +790,25 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DOMAIN_KW "domain" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + DOMAIN_KW "domain" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -806,12 +827,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - DOMAIN_KW "domain" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + DOMAIN_KW "domain" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "d" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -840,22 +862,23 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - DATA_KW "data" - WHITESPACE " " - WRAPPER_KW "wrapper" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + DATA_KW "data" + WHITESPACE " " + WRAPPER_KW "wrapper" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -874,14 +897,15 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - DATA_KW "data" - WHITESPACE " " - WRAPPER_KW "wrapper" - WHITESPACE " " - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + DATA_KW "data" + WHITESPACE " " + WRAPPER_KW "wrapper" + WHITESPACE " " + NAME_REF + IDENT "d" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -910,20 +934,21 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - SERVER_KW "server" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + SERVER_KW "server" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -942,12 +967,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FOREIGN_KW "foreign" - WHITESPACE " " - SERVER_KW "server" - WHITESPACE " " - NAME_REF - IDENT "d" + PRIVILEGE_OBJECTS + FOREIGN_KW "foreign" + WHITESPACE " " + SERVER_KW "server" + WHITESPACE " " + NAME_REF + IDENT "d" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -976,21 +1002,22 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - FUNCTION_KW "function" - WHITESPACE " " - FUNCTION_SIG_LIST - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," + PRIVILEGE_OBJECTS + FUNCTION_KW "function" WHITESPACE " " - FUNCTION_SIG - 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 " " @@ -1011,77 +1038,78 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PROCEDURE_KW "procedure" - WHITESPACE " " - 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" + PRIVILEGE_OBJECTS + PROCEDURE_KW "procedure" + WHITESPACE " " + 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 " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - TEXT_KW "text" - COMMA "," - WHITESPACE " " - PARAM - PARAM_OUT - OUT_KW "out" - WHITESPACE " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," 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 " " - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - COMMA "," - WHITESPACE " " - 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 ")" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + COMMA "," + WHITESPACE " " + 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 " " @@ -1098,14 +1126,15 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ROUTINE_KW "routine" - WHITESPACE " " - FUNCTION_SIG_LIST - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "r" + PRIVILEGE_OBJECTS + ROUTINE_KW "routine" + WHITESPACE " " + FUNCTION_SIG_LIST + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "r" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1122,24 +1151,25 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - FUNCTIONS_KW "functions" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + FUNCTIONS_KW "functions" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1156,16 +1186,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - PROCEDURES_KW "procedures" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + PROCEDURES_KW "procedures" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1182,16 +1213,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - ALL_KW "all" - WHITESPACE " " - ROUTINES_KW "routines" - WHITESPACE " " - IN_KW "in" - WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + ALL_KW "all" + WHITESPACE " " + ROUTINES_KW "routines" + WHITESPACE " " + IN_KW "in" + WHITESPACE " " + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1210,58 +1242,59 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PROCEDURE_KW "procedure" - WHITESPACE " " - 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" + PRIVILEGE_OBJECTS + PROCEDURE_KW "procedure" + WHITESPACE " " + 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 " " - NAME - IDENT "b" + PARAM + PARAM_OUT + OUT_KW "out" + WHITESPACE " " + NAME + IDENT "b" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + NUMERIC_KW "numeric" + COMMA "," 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 " " - FUNCTION_SIG - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + PARAM + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + BIGINT_KW "bigint" + R_PAREN ")" + COMMA "," + WHITESPACE " " + FUNCTION_SIG + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1284,18 +1317,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1312,18 +1346,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1342,18 +1377,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LANGUAGE_KW "language" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + LANGUAGE_KW "language" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1380,16 +1416,17 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - LARGE_KW "large" - WHITESPACE " " - OBJECT_KW "object" - WHITESPACE " " - LITERAL - INT_NUMBER "1012" - COMMA "," - WHITESPACE " " - LITERAL - INT_NUMBER "1231" + PRIVILEGE_OBJECTS + LARGE_KW "large" + WHITESPACE " " + OBJECT_KW "object" + WHITESPACE " " + LITERAL + INT_NUMBER "1012" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "1231" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1408,16 +1445,17 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - LARGE_KW "large" - WHITESPACE " " - OBJECT_KW "object" - WHITESPACE " " - LITERAL - INT_NUMBER "1012" - COMMA "," - WHITESPACE " " - LITERAL - INT_NUMBER "1231" + PRIVILEGE_OBJECTS + LARGE_KW "large" + WHITESPACE " " + OBJECT_KW "object" + WHITESPACE " " + LITERAL + INT_NUMBER "1012" + COMMA "," + WHITESPACE " " + LITERAL + INT_NUMBER "1231" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1446,24 +1484,25 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1484,12 +1523,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - BEGIN_KW "begin" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + BEGIN_KW "begin" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1506,12 +1546,13 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - PARAMETER_KW "parameter" - WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - BEGIN_KW "begin" + PRIVILEGE_OBJECTS + PARAMETER_KW "parameter" + WHITESPACE " " + PATH + PATH_SEGMENT + NAME_REF + BEGIN_KW "begin" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1598,10 +1639,11 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "s" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "s" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1626,18 +1668,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1654,18 +1697,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - SCHEMA_KW "schema" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + SCHEMA_KW "schema" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1686,18 +1730,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TABLESPACE_KW "tablespace" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + TABLESPACE_KW "tablespace" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1714,18 +1759,19 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TABLESPACE_KW "tablespace" - WHITESPACE " " - NAME_REF - IDENT "foo" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "bar" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "buzz" + PRIVILEGE_OBJECTS + TABLESPACE_KW "tablespace" + WHITESPACE " " + NAME_REF + IDENT "foo" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "bar" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "buzz" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1748,27 +1794,28 @@ SOURCE_FILE WHITESPACE "\n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "b" - COMMA "," - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "c" + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "b" + COMMA "," + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "c" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1785,13 +1832,14 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " @@ -1808,18 +1856,19 @@ SOURCE_FILE WHITESPACE " \n " ON_KW "on" WHITESPACE " " - TYPE_KW "type" - WHITESPACE " " - PATH_TYPE - PATH + PRIVILEGE_OBJECTS + TYPE_KW "type" + WHITESPACE " " + PATH_TYPE PATH + PATH + PATH_SEGMENT + NAME_REF + IDENT "s" + DOT "." PATH_SEGMENT NAME_REF - IDENT "s" - DOT "." - PATH_SEGMENT - NAME_REF - IDENT "t" + IDENT "t" WHITESPACE "\n " FROM_KW "from" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap index 497f223e..30021736 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_casts_ok.snap @@ -1081,9 +1081,10 @@ SOURCE_FILE LITERAL STRING "'20:38:40-05'" WHITESPACE " " - AT_KW "at" - WHITESPACE " " - LOCAL_KW "local" + AT_LOCAL + AT_KW "at" + WHITESPACE " " + LOCAL_KW "local" SEMICOLON ";" WHITESPACE "\n\n" SELECT @@ -1096,9 +1097,10 @@ SOURCE_FILE NAME_REF IDENT "c" WHITESPACE " " - AT_KW "at" - WHITESPACE " " - LOCAL_KW "local" + AT_LOCAL + AT_KW "at" + WHITESPACE " " + LOCAL_KW "local" SEMICOLON ";" WHITESPACE "\n" SELECT @@ -1122,9 +1124,10 @@ SOURCE_FILE LITERAL STRING "'2001-02-16 20:38:40-05'" WHITESPACE " " - AT_KW "at" - WHITESPACE " " - LOCAL_KW "local" + AT_LOCAL + AT_KW "at" + WHITESPACE " " + LOCAL_KW "local" SEMICOLON ";" WHITESPACE "\n\n" COMMENT "-- ConstInterval" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap b/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap index c2ab852c..7610084b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_cte_err.snap @@ -68,28 +68,31 @@ SOURCE_FILE INT_NUMBER "1" R_PAREN ")" WHITESPACE "\n" - SEARCH_KW "search" - WHITESPACE " " - DEPTH_KW "depth" - WHITESPACE " " - FIRST_KW "first" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - ERROR - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "c" - WHITESPACE " " - SET_KW "set" - WHITESPACE " " - NAME_REF - IDENT "ordercol" + SEARCH_CLAUSE + SEARCH_KW "search" + WHITESPACE " " + DEPTH_KW "depth" + WHITESPACE " " + FIRST_KW "first" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + SEARCH_COLUMNS + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + ERROR + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "c" + WHITESPACE " " + SEARCH_SET_COLUMN + SET_KW "set" + WHITESPACE " " + NAME_REF + IDENT "ordercol" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "select" @@ -139,28 +142,31 @@ SOURCE_FILE INT_NUMBER "1" R_PAREN ")" WHITESPACE "\n" - SEARCH_KW "search" - WHITESPACE " " - DEPTH_KW "depth" - WHITESPACE " " - FIRST_KW "first" - WHITESPACE " " - BY_KW "by" - WHITESPACE " " - NAME_REF - IDENT "a" - COMMA "," - WHITESPACE " " - NAME_REF - IDENT "b" - WHITESPACE " " - NAME_REF - IDENT "c" - WHITESPACE " " - SET_KW "set" - WHITESPACE " " - NAME_REF - IDENT "ordercol" + SEARCH_CLAUSE + SEARCH_KW "search" + WHITESPACE " " + DEPTH_KW "depth" + WHITESPACE " " + FIRST_KW "first" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + SEARCH_COLUMNS + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + WHITESPACE " " + NAME_REF + IDENT "c" + WHITESPACE " " + SEARCH_SET_COLUMN + SET_KW "set" + WHITESPACE " " + NAME_REF + IDENT "ordercol" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "select" 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 2145b020..0d3fd8cc 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_cte_ok.snap @@ -521,21 +521,24 @@ SOURCE_FILE WHITESPACE "\n" R_PAREN ")" WHITESPACE " " - SEARCH_KW "SEARCH" - WHITESPACE " " - DEPTH_KW "DEPTH" - WHITESPACE " " - FIRST_KW "FIRST" - WHITESPACE " " - BY_KW "BY" - WHITESPACE " " - NAME_REF - IDENT "id" - WHITESPACE " " - SET_KW "SET" - WHITESPACE " " - NAME_REF - IDENT "ordercol" + SEARCH_CLAUSE + SEARCH_KW "SEARCH" + WHITESPACE " " + DEPTH_KW "DEPTH" + WHITESPACE " " + FIRST_KW "FIRST" + WHITESPACE " " + BY_KW "BY" + WHITESPACE " " + SEARCH_COLUMNS + NAME_REF + IDENT "id" + WHITESPACE " " + SEARCH_SET_COLUMN + SET_KW "SET" + WHITESPACE " " + NAME_REF + IDENT "ordercol" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "SELECT" @@ -714,21 +717,24 @@ SOURCE_FILE WHITESPACE "\n" R_PAREN ")" WHITESPACE " " - SEARCH_KW "SEARCH" - WHITESPACE " " - BREADTH_KW "BREADTH" - WHITESPACE " " - FIRST_KW "FIRST" - WHITESPACE " " - BY_KW "BY" - WHITESPACE " " - NAME_REF - IDENT "id" - WHITESPACE " " - SET_KW "SET" - WHITESPACE " " - NAME_REF - IDENT "ordercol" + SEARCH_CLAUSE + SEARCH_KW "SEARCH" + WHITESPACE " " + BREADTH_KW "BREADTH" + WHITESPACE " " + FIRST_KW "FIRST" + WHITESPACE " " + BY_KW "BY" + WHITESPACE " " + SEARCH_COLUMNS + NAME_REF + IDENT "id" + WHITESPACE " " + SEARCH_SET_COLUMN + SET_KW "SET" + WHITESPACE " " + NAME_REF + IDENT "ordercol" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "SELECT" @@ -932,20 +938,24 @@ SOURCE_FILE WHITESPACE "\n" R_PAREN ")" WHITESPACE " " - CYCLE_KW "CYCLE" - WHITESPACE " " - NAME_REF - IDENT "id" - WHITESPACE " " - SET_KW "SET" - WHITESPACE " " - NAME_REF - IDENT "is_cycle" - WHITESPACE " " - USING_KW "USING" - WHITESPACE " " - NAME_REF - PATH_KW "path" + CYCLE_CLAUSE + CYCLE_KW "CYCLE" + WHITESPACE " " + CYCLE_COLUMNS + NAME_REF + IDENT "id" + WHITESPACE " " + CYCLE_SET_COLUMN + SET_KW "SET" + WHITESPACE " " + NAME_REF + IDENT "is_cycle" + WHITESPACE " " + CYCLE_PATH + USING_KW "USING" + WHITESPACE " " + NAME_REF + PATH_KW "path" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "SELECT" @@ -1015,30 +1025,36 @@ SOURCE_FILE WHITESPACE "\n" R_PAREN ")" WHITESPACE " " - CYCLE_KW "CYCLE" - WHITESPACE " " - NAME_REF - IDENT "id" - WHITESPACE " " - SET_KW "SET" - WHITESPACE " " - NAME_REF - IDENT "is_cycle" - WHITESPACE " " - TO_KW "TO" - WHITESPACE " " - LITERAL - TRUE_KW "true" - WHITESPACE " " - DEFAULT_KW "DEFAULT" - WHITESPACE " " - LITERAL - FALSE_KW "false" - WHITESPACE " " - USING_KW "USING" - WHITESPACE " " - NAME_REF - PATH_KW "path" + CYCLE_CLAUSE + CYCLE_KW "CYCLE" + WHITESPACE " " + CYCLE_COLUMNS + NAME_REF + IDENT "id" + WHITESPACE " " + CYCLE_SET_COLUMN + SET_KW "SET" + WHITESPACE " " + NAME_REF + IDENT "is_cycle" + WHITESPACE " " + CYCLE_COLUMN_TO + TO_KW "TO" + WHITESPACE " " + LITERAL + TRUE_KW "true" + WHITESPACE " " + CYCLE_DEFAULT + DEFAULT_KW "DEFAULT" + WHITESPACE " " + LITERAL + FALSE_KW "false" + WHITESPACE " " + CYCLE_PATH + USING_KW "USING" + WHITESPACE " " + NAME_REF + PATH_KW "path" WHITESPACE "\n" SELECT_CLAUSE SELECT_KW "SELECT" diff --git a/crates/squawk_parser/tests/snapshots/tests__select_err.snap b/crates/squawk_parser/tests/snapshots/tests__select_err.snap index 716c50fd..5a7333ae 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_err.snap @@ -763,10 +763,11 @@ SOURCE_FILE WHITESPACE " " ON_KW "on" WHITESPACE " " - PATH - PATH_SEGMENT - NAME_REF - IDENT "t" + PRIVILEGE_OBJECTS + PATH + PATH_SEGMENT + NAME_REF + IDENT "t" WHITESPACE " " TO_KW "to" WHITESPACE " " diff --git a/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap b/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap index c33bdf31..b194ca34 100644 --- a/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__select_funcs_ok.snap @@ -3284,6 +3284,74 @@ SOURCE_FILE IDENT "\"table\"" SEMICOLON ";" WHITESPACE "\n\n" + COMMENT "-- distinct with multiple args" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CALL_EXPR + NAME_REF + IDENT "count" + ARG_LIST + L_PAREN "(" + DISTINCT_KW "distinct" + WHITESPACE " " + NAME_REF + IDENT "a" + COMMA "," + WHITESPACE " " + NAME_REF + IDENT "b" + R_PAREN ")" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "t" + SEMICOLON ";" + WHITESPACE "\n\n" + COMMENT "-- distinct with order by" + WHITESPACE "\n" + SELECT + SELECT_CLAUSE + SELECT_KW "select" + WHITESPACE " " + TARGET_LIST + TARGET + CALL_EXPR + NAME_REF + IDENT "array_agg" + ARG_LIST + L_PAREN "(" + DISTINCT_KW "distinct" + WHITESPACE " " + NAME_REF + IDENT "v" + WHITESPACE " " + ORDER_BY_CLAUSE + ORDER_KW "order" + WHITESPACE " " + BY_KW "by" + WHITESPACE " " + SORT_BY_LIST + SORT_BY + NAME_REF + IDENT "v" + R_PAREN ")" + WHITESPACE " " + FROM_CLAUSE + FROM_KW "from" + WHITESPACE " " + FROM_ITEM + NAME_REF + IDENT "vals" + SEMICOLON ";" + WHITESPACE "\n\n" COMMENT "-- within group" WHITESPACE "\n" SELECT diff --git a/crates/squawk_parser/tests/snapshots/tests__vacuum_err.snap b/crates/squawk_parser/tests/snapshots/tests__vacuum_err.snap index 1cd9d4ee..731323c7 100644 --- a/crates/squawk_parser/tests/snapshots/tests__vacuum_err.snap +++ b/crates/squawk_parser/tests/snapshots/tests__vacuum_err.snap @@ -11,19 +11,24 @@ SOURCE_FILE VACUUM_OPTION_LIST L_PAREN "(" VACUUM_OPTION - FULL_KW "full" + NAME + FULL_KW "full" WHITESPACE " " VACUUM_OPTION - ANALYZE_KW "analyze" + NAME + ANALYZE_KW "analyze" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" WHITESPACE " " VACUUM_OPTION - IDENT "skip_locked" + NAME + IDENT "skip_locked" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" R_PAREN ")" SEMICOLON ";" WHITESPACE "\n" diff --git a/crates/squawk_parser/tests/snapshots/tests__vacuum_ok.snap b/crates/squawk_parser/tests/snapshots/tests__vacuum_ok.snap index f9dcb423..582b7b4b 100644 --- a/crates/squawk_parser/tests/snapshots/tests__vacuum_ok.snap +++ b/crates/squawk_parser/tests/snapshots/tests__vacuum_ok.snap @@ -17,11 +17,13 @@ SOURCE_FILE VACUUM_OPTION_LIST L_PAREN "(" VACUUM_OPTION - VERBOSE_KW "VERBOSE" + NAME + VERBOSE_KW "VERBOSE" COMMA "," WHITESPACE " " VACUUM_OPTION - ANALYZE_KW "ANALYZE" + NAME + ANALYZE_KW "ANALYZE" R_PAREN ")" WHITESPACE " " TABLE_AND_COLUMNS_LIST @@ -42,186 +44,241 @@ SOURCE_FILE L_PAREN "(" WHITESPACE "\n " VACUUM_OPTION - FULL_KW "full" + NAME + FULL_KW "full" COMMA "," WHITESPACE " \n " VACUUM_OPTION - FULL_KW "full" + NAME + FULL_KW "full" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE " \n " VACUUM_OPTION - FULL_KW "full" + NAME + FULL_KW "full" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE " \n " VACUUM_OPTION - ANALYZE_KW "analyze" + NAME + ANALYZE_KW "analyze" COMMA "," WHITESPACE "\n " VACUUM_OPTION - ANALYZE_KW "analyze" + NAME + ANALYZE_KW "analyze" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - ANALYZE_KW "analyze" + NAME + ANALYZE_KW "analyze" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "disable_page_skipping" + NAME + IDENT "disable_page_skipping" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "disable_page_skipping" + NAME + IDENT "disable_page_skipping" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "disable_page_skipping" + NAME + IDENT "disable_page_skipping" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_locked" + NAME + IDENT "skip_locked" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_locked" + NAME + IDENT "skip_locked" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_locked" + NAME + IDENT "skip_locked" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "index_cleanup" + NAME + IDENT "index_cleanup" WHITESPACE " " - IDENT "auto" + VACUUM_OPTION_VALUE + NAME + IDENT "auto" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "index_cleanup" + NAME + IDENT "index_cleanup" WHITESPACE " " - ON_KW "on" + VACUUM_OPTION_VALUE + NAME + ON_KW "on" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "index_cleanup" + NAME + IDENT "index_cleanup" WHITESPACE " " - OFF_KW "off" + VACUUM_OPTION_VALUE + NAME + OFF_KW "off" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "process_main" + NAME + IDENT "process_main" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "process_main" + NAME + IDENT "process_main" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "process_main" + NAME + IDENT "process_main" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - TRUNCATE_KW "truncate" + NAME + TRUNCATE_KW "truncate" COMMA "," WHITESPACE "\n " VACUUM_OPTION - TRUNCATE_KW "truncate" + NAME + TRUNCATE_KW "truncate" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - TRUNCATE_KW "truncate" + NAME + TRUNCATE_KW "truncate" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - PARALLEL_KW "parallel" + NAME + PARALLEL_KW "parallel" WHITESPACE " " - LITERAL - INT_NUMBER "100" + VACUUM_OPTION_VALUE + LITERAL + INT_NUMBER "100" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_database_stats" + NAME + IDENT "skip_database_stats" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_database_stats" + NAME + IDENT "skip_database_stats" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "skip_database_stats" + NAME + IDENT "skip_database_stats" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "only_database_stats" + NAME + IDENT "only_database_stats" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "only_database_stats" + NAME + IDENT "only_database_stats" WHITESPACE " " - LITERAL - TRUE_KW "true" + VACUUM_OPTION_VALUE + LITERAL + TRUE_KW "true" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "only_database_stats" + NAME + IDENT "only_database_stats" WHITESPACE " " - LITERAL - FALSE_KW "false" + VACUUM_OPTION_VALUE + LITERAL + FALSE_KW "false" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "buffer_usage_limit" + NAME + IDENT "buffer_usage_limit" WHITESPACE " " - LITERAL - INT_NUMBER "10" + VACUUM_OPTION_VALUE + LITERAL + INT_NUMBER "10" COMMA "," WHITESPACE "\n " VACUUM_OPTION - IDENT "buffer_usage_limit" + NAME + IDENT "buffer_usage_limit" WHITESPACE " " - LITERAL - STRING "'10 TB'" + VACUUM_OPTION_VALUE + LITERAL + STRING "'10 TB'" WHITESPACE "\n" R_PAREN ")" WHITESPACE " " diff --git a/crates/squawk_syntax/src/ast/generated/nodes.rs b/crates/squawk_syntax/src/ast/generated/nodes.rs index ec2e2d4e..310b044e 100644 --- a/crates/squawk_syntax/src/ast/generated/nodes.rs +++ b/crates/squawk_syntax/src/ast/generated/nodes.rs @@ -611,7 +611,27 @@ pub struct AlterConstraint { } impl AlterConstraint { #[inline] - pub fn option(&self) -> Option { + pub fn deferrable_constraint_option(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn initially_deferred_constraint_option( + &self, + ) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn initially_immediate_constraint_option( + &self, + ) -> Option { + 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) } #[inline] @@ -3035,7 +3055,7 @@ impl ArgList { support::children(&self.syntax) } #[inline] - pub fn expr(&self) -> Option { + pub fn order_by_clause(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -3187,6 +3207,21 @@ impl AsPolicyType { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct AtLocal { + pub(crate) syntax: SyntaxNode, +} +impl AtLocal { + #[inline] + pub fn at_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::AT_KW) + } + #[inline] + pub fn local_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LOCAL_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct AtTimeZone { pub(crate) syntax: SyntaxNode, @@ -4429,6 +4464,10 @@ impl CompoundSelect { support::token(&self.syntax, SyntaxKind::ALL_KW) } #[inline] + pub fn distinct_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DISTINCT_KW) + } + #[inline] pub fn except_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::EXCEPT_KW) } @@ -4637,6 +4676,10 @@ pub struct ConstraintIncludeClause { pub(crate) syntax: SyntaxNode, } impl ConstraintIncludeClause { + #[inline] + pub fn column_list(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn include_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::INCLUDE_KW) @@ -7058,6 +7101,108 @@ impl CustomOp { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CycleClause { + pub(crate) syntax: SyntaxNode, +} +impl CycleClause { + #[inline] + pub fn columns(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn path(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_column(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn cycle_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::CYCLE_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CycleColumnTo { + pub(crate) syntax: SyntaxNode, +} +impl CycleColumnTo { + #[inline] + pub fn default(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn to_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TO_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CycleColumns { + pub(crate) syntax: SyntaxNode, +} +impl CycleColumns { + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CycleDefault { + pub(crate) syntax: SyntaxNode, +} +impl CycleDefault { + #[inline] + pub fn expr(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn default_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEFAULT_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CyclePath { + pub(crate) syntax: SyntaxNode, +} +impl CyclePath { + #[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) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct CycleSetColumn { + pub(crate) syntax: SyntaxNode, +} +impl CycleSetColumn { + #[inline] + pub fn column_to(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct DatabaseOption { pub(crate) syntax: SyntaxNode, @@ -10099,10 +10244,18 @@ impl ExcludeConstraint { support::child(&self.syntax) } #[inline] + pub fn constraint_include_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn constraint_index_method(&self) -> Option { support::child(&self.syntax) } #[inline] + pub fn constraint_index_tablespace(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn constraint_name(&self) -> Option { support::child(&self.syntax) } @@ -10111,6 +10264,10 @@ impl ExcludeConstraint { support::child(&self.syntax) } #[inline] + pub fn with_params(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn exclude_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::EXCLUDE_KW) } @@ -11102,6 +11259,10 @@ impl GeneratedConstraint { pub fn stored_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::STORED_KW) } + #[inline] + pub fn virtual_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::VIRTUAL_KW) + } } #[derive(Debug, Clone, PartialEq, Eq, Hash)] @@ -11110,12 +11271,16 @@ pub struct Grant { } impl Grant { #[inline] - pub fn name_refs(&self) -> AstChildren { - support::children(&self.syntax) + pub fn column_list(&self) -> Option { + support::child(&self.syntax) } #[inline] - pub fn paths(&self) -> AstChildren { - support::children(&self.syntax) + pub fn grant_with_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn privilege_objects(&self) -> Option { + support::child(&self.syntax) } #[inline] pub fn revoke_command_list(&self) -> Option { @@ -11150,41 +11315,17 @@ impl Grant { support::token(&self.syntax, SyntaxKind::GRANTED_KW) } #[inline] - pub fn in_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::IN_KW) - } - #[inline] pub fn on_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::ON_KW) } #[inline] - pub fn option_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::OPTION_KW) - } - #[inline] pub fn privileges_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::PRIVILEGES_KW) } #[inline] - pub fn schema_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::SCHEMA_KW) - } - #[inline] - pub fn table_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TABLE_KW) - } - #[inline] - pub fn tables_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TABLES_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)] @@ -11226,6 +11367,63 @@ impl GrantDefaultPrivileges { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct GrantRoleOption { + pub(crate) syntax: SyntaxNode, +} +impl GrantRoleOption { + #[inline] + pub fn name(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn false_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FALSE_KW) + } + #[inline] + pub fn option_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OPTION_KW) + } + #[inline] + pub fn true_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TRUE_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct GrantRoleOptionList { + pub(crate) syntax: SyntaxNode, +} +impl GrantRoleOptionList { + #[inline] + pub fn grant_role_options(&self) -> AstChildren { + support::children(&self.syntax) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct GrantWithClause { + pub(crate) syntax: SyntaxNode, +} +impl GrantWithClause { + #[inline] + pub fn grant_role_option_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn grant_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::GRANT_KW) + } + #[inline] + pub fn option_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OPTION_KW) + } + #[inline] + pub fn with_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WITH_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct GraphPatternQualifier { pub(crate) syntax: SyntaxNode, @@ -14645,6 +14843,10 @@ pub struct Op { pub(crate) syntax: SyntaxNode, } impl Op { + #[inline] + pub fn at_local(&self) -> Option { + support::child(&self.syntax) + } #[inline] pub fn at_time_zone(&self) -> Option { support::child(&self.syntax) @@ -14830,6 +15032,10 @@ impl Op { support::token(&self.syntax, SyntaxKind::LIKE_KW) } #[inline] + pub fn notnull_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::NOTNULL_KW) + } + #[inline] pub fn or_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::OR_KW) } @@ -15912,11 +16118,15 @@ impl PrimaryKeyConstraint { support::child(&self.syntax) } #[inline] - pub fn constraint_name(&self) -> Option { + pub fn constraint_include_clause(&self) -> Option { support::child(&self.syntax) } #[inline] - pub fn partition_item_list(&self) -> Option { + pub fn constraint_index_tablespace(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn constraint_name(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -15924,6 +16134,10 @@ impl PrimaryKeyConstraint { support::child(&self.syntax) } #[inline] + pub fn with_params(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn key_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::KEY_KW) } @@ -15944,6 +16158,141 @@ impl Prior { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct PrivilegeObjects { + pub(crate) syntax: SyntaxNode, +} +impl PrivilegeObjects { + #[inline] + pub fn function_sig_list(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn literals(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn paths(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn types(&self) -> AstChildren { + support::children(&self.syntax) + } + #[inline] + pub fn all_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ALL_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 domain_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DOMAIN_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 functions_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FUNCTIONS_KW) + } + #[inline] + pub fn graph_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::GRAPH_KW) + } + #[inline] + pub fn in_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::IN_KW) + } + #[inline] + pub fn language_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LANGUAGE_KW) + } + #[inline] + pub fn large_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::LARGE_KW) + } + #[inline] + pub fn object_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::OBJECT_KW) + } + #[inline] + pub fn parameter_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PARAMETER_KW) + } + #[inline] + pub fn procedure_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROCEDURE_KW) + } + #[inline] + pub fn procedures_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROCEDURES_KW) + } + #[inline] + pub fn property_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::PROPERTY_KW) + } + #[inline] + pub fn routine_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROUTINE_KW) + } + #[inline] + pub fn routines_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ROUTINES_KW) + } + #[inline] + pub fn schema_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SCHEMA_KW) + } + #[inline] + pub fn sequence_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEQUENCE_KW) + } + #[inline] + pub fn sequences_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEQUENCES_KW) + } + #[inline] + pub fn server_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SERVER_KW) + } + #[inline] + pub fn table_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLE_KW) + } + #[inline] + pub fn tables_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLES_KW) + } + #[inline] + pub fn tablespace_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TABLESPACE_KW) + } + #[inline] + pub fn type_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::TYPE_KW) + } + #[inline] + pub fn wrapper_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::WRAPPER_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct PrivilegeTarget { pub(crate) syntax: SyntaxNode, @@ -17001,15 +17350,11 @@ pub struct Revoke { } impl Revoke { #[inline] - pub fn name_refs(&self) -> AstChildren { - support::children(&self.syntax) - } - #[inline] - pub fn paths(&self) -> AstChildren { - support::children(&self.syntax) + pub fn privilege_objects(&self) -> Option { + support::child(&self.syntax) } #[inline] - pub fn revoke_command_list(&self) -> Option { + pub fn privileges(&self) -> Option { support::child(&self.syntax) } #[inline] @@ -17025,8 +17370,8 @@ impl Revoke { support::token(&self.syntax, SyntaxKind::SEMICOLON) } #[inline] - pub fn all_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::ALL_KW) + pub fn admin_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::ADMIN_KW) } #[inline] pub fn by_token(&self) -> Option { @@ -17053,8 +17398,8 @@ impl Revoke { support::token(&self.syntax, SyntaxKind::GRANTED_KW) } #[inline] - pub fn in_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::IN_KW) + pub fn inherit_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::INHERIT_KW) } #[inline] pub fn on_token(&self) -> Option { @@ -17065,10 +17410,6 @@ impl Revoke { support::token(&self.syntax, SyntaxKind::OPTION_KW) } #[inline] - pub fn privileges_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::PRIVILEGES_KW) - } - #[inline] pub fn restrict_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::RESTRICT_KW) } @@ -17077,16 +17418,8 @@ impl Revoke { support::token(&self.syntax, SyntaxKind::REVOKE_KW) } #[inline] - pub fn schema_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::SCHEMA_KW) - } - #[inline] - pub fn table_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TABLE_KW) - } - #[inline] - pub fn tables_token(&self) -> Option { - support::token(&self.syntax, SyntaxKind::TABLES_KW) + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) } } @@ -17608,6 +17941,67 @@ impl Savepoint { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SearchClause { + pub(crate) syntax: SyntaxNode, +} +impl SearchClause { + #[inline] + pub fn columns(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_column(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn breadth_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BREADTH_KW) + } + #[inline] + pub fn by_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::BY_KW) + } + #[inline] + pub fn depth_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::DEPTH_KW) + } + #[inline] + pub fn first_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::FIRST_KW) + } + #[inline] + pub fn search_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SEARCH_KW) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SearchColumns { + pub(crate) syntax: SyntaxNode, +} +impl SearchColumns { + #[inline] + pub fn name_refs(&self) -> AstChildren { + support::children(&self.syntax) + } +} + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SearchSetColumn { + pub(crate) syntax: SyntaxNode, +} +impl SearchSetColumn { + #[inline] + pub fn name_ref(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn set_token(&self) -> Option { + support::token(&self.syntax, SyntaxKind::SET_KW) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct SecurityFuncOption { pub(crate) syntax: SyntaxNode, @@ -19875,6 +20269,14 @@ impl UniqueConstraint { support::child(&self.syntax) } #[inline] + pub fn constraint_include_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn constraint_index_tablespace(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn constraint_name(&self) -> Option { support::child(&self.syntax) } @@ -19891,6 +20293,10 @@ impl UniqueConstraint { support::child(&self.syntax) } #[inline] + pub fn with_params(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn unique_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::UNIQUE_KW) } @@ -20117,7 +20523,11 @@ pub struct VacuumOption { } impl VacuumOption { #[inline] - pub fn literal(&self) -> Option { + pub fn name(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn vacuum_option_value(&self) -> Option { support::child(&self.syntax) } } @@ -20141,6 +20551,21 @@ impl VacuumOptionList { } } +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct VacuumOptionValue { + pub(crate) syntax: SyntaxNode, +} +impl VacuumOptionValue { + #[inline] + pub fn literal(&self) -> Option { + support::child(&self.syntax) + } + #[inline] + pub fn name(&self) -> Option { + support::child(&self.syntax) + } +} + #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct ValidateConstraint { pub(crate) syntax: SyntaxNode, @@ -20647,6 +21072,10 @@ impl WithTable { support::child(&self.syntax) } #[inline] + pub fn cycle_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn materialized(&self) -> Option { support::child(&self.syntax) } @@ -20663,6 +21092,10 @@ impl WithTable { support::child(&self.syntax) } #[inline] + pub fn search_clause(&self) -> Option { + support::child(&self.syntax) + } + #[inline] pub fn l_paren_token(&self) -> Option { support::token(&self.syntax, SyntaxKind::L_PAREN) } @@ -23285,6 +23718,24 @@ impl AstNode for AsPolicyType { &self.syntax } } +impl AstNode for AtLocal { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::AT_LOCAL + } + #[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 AtTimeZone { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -25085,6 +25536,114 @@ impl AstNode for CustomOp { &self.syntax } } +impl AstNode for CycleClause { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_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 CycleColumnTo { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_COLUMN_TO + } + #[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 CycleColumns { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_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 CycleDefault { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_DEFAULT + } + #[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 CyclePath { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_PATH + } + #[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 CycleSetColumn { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::CYCLE_SET_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 DatabaseOption { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -27605,6 +28164,60 @@ impl AstNode for GrantDefaultPrivileges { &self.syntax } } +impl AstNode for GrantRoleOption { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::GRANT_ROLE_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 GrantRoleOptionList { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::GRANT_ROLE_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 GrantWithClause { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::GRANT_WITH_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 GraphPatternQualifier { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -31367,6 +31980,24 @@ impl AstNode for Prior { &self.syntax } } +impl AstNode for PrivilegeObjects { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::PRIVILEGE_OBJECTS + } + #[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 PrivilegeTarget { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -32447,6 +33078,60 @@ impl AstNode for Savepoint { &self.syntax } } +impl AstNode for SearchClause { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::SEARCH_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 SearchColumns { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::SEARCH_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 SearchSetColumn { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::SEARCH_SET_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 SecurityFuncOption { #[inline] fn can_cast(kind: SyntaxKind) -> bool { @@ -34301,6 +34986,24 @@ impl AstNode for VacuumOptionList { &self.syntax } } +impl AstNode for VacuumOptionValue { + #[inline] + fn can_cast(kind: SyntaxKind) -> bool { + kind == SyntaxKind::VACUUM_OPTION_VALUE + } + #[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 ValidateConstraint { #[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 849b9b0e..2acaa719 100644 --- a/crates/squawk_syntax/src/ast/node_ext.rs +++ b/crates/squawk_syntax/src/ast/node_ext.rs @@ -129,7 +129,7 @@ pub enum BinOp { #[derive(Debug, Clone, PartialEq, Eq)] pub enum PostfixOp { - AtLocal(SyntaxToken), + AtLocal(ast::AtLocal), IsJson(ast::IsJson), IsJsonArray(ast::IsJsonArray), IsJsonObject(ast::IsJsonObject), @@ -235,7 +235,6 @@ impl ast::PostfixExpr { match child { NodeOrToken::Token(token) => { let op = match token.kind() { - SyntaxKind::AT_KW => PostfixOp::AtLocal(token), SyntaxKind::ISNULL_KW => PostfixOp::IsNull(token), SyntaxKind::NOTNULL_KW => PostfixOp::NotNull(token), _ => continue, @@ -244,6 +243,7 @@ impl ast::PostfixExpr { } NodeOrToken::Node(node) => { let op = match node.kind() { + SyntaxKind::AT_LOCAL => PostfixOp::AtLocal(ast::AtLocal { syntax: node }), SyntaxKind::IS_JSON => PostfixOp::IsJson(ast::IsJson { syntax: node }), SyntaxKind::IS_JSON_ARRAY => { PostfixOp::IsJsonArray(ast::IsJsonArray { syntax: node }) diff --git a/crates/squawk_syntax/src/postgresql.ungram b/crates/squawk_syntax/src/postgresql.ungram index 39f3bb6c..47c8a8fc 100644 --- a/crates/squawk_syntax/src/postgresql.ungram +++ b/crates/squawk_syntax/src/postgresql.ungram @@ -62,8 +62,7 @@ ParamList = ArgList = '(' '*' ')' -| '(' ('distinct' | 'all') 'variadic'? Expr ')' -| '(' args:(Arg (',' Arg)*)? ')' +| '(' ('distinct' | 'all')? 'variadic'? args:(Arg (',' Arg)*)? OrderByClause? ')' CallExpr = Expr ArgList WithinClause? FilterClause? OverClause? @@ -442,6 +441,9 @@ NotSimilarTo = AtTimeZone = 'at' 'time' 'zone' +AtLocal = + 'at' 'local' + IsNot = 'is' 'not' @@ -462,11 +464,13 @@ Op = | 'in' | 'is' | 'isnull' -| 'like' -| 'overlaps' -| 'value' -| AtTimeZone -| ColonColon +| 'notnull' +| 'like' +| 'overlaps' +| 'value' +| AtLocal +| AtTimeZone +| ColonColon | ColonEq | CustomOp | FatArrow @@ -704,12 +708,22 @@ UniqueConstraint = 'unique' ( UsingIndex - | (NullsNotDistinct | NullsDistinct)? ColumnList + | (NullsNotDistinct | NullsDistinct)? ColumnList? + ConstraintIncludeClause? + WithParams? + ConstraintIndexTablespace? ) PrimaryKeyConstraint = ConstraintName? - 'primary' 'key' (UsingIndex | ColumnList PartitionItemList?) + 'primary' 'key' + ( + UsingIndex + | ColumnList? + ConstraintIncludeClause? + WithParams? + ConstraintIndexTablespace? + ) SetNullColumns = 'set' 'null' ColumnList? @@ -797,7 +811,7 @@ DefaultConstraint = GeneratedConstraint = ConstraintName? 'generated' - ('always' 'as' '(' Expr ')' 'stored' | ('always' | 'by' 'default') 'as' 'identity' SequenceOptionList? ) + ('always' 'as' '(' Expr ')' ('stored' | 'virtual')? | ('always' | 'by' 'default') 'as' 'identity' SequenceOptionList? ) ReferencesConstraint = ConstraintName? @@ -1008,7 +1022,7 @@ ColumnList = '(' (Column (',' Column)*) ')' ConstraintIncludeClause = - 'include' + 'include' ColumnList WithParams = 'with' AttributeList @@ -1335,9 +1349,9 @@ AlterTable = ) ';'? Revoke = - 'revoke' ('grant' 'option' 'for')? - (('all' 'privileges'?) | RevokeCommandList) - 'on' ('table' (Path (',' Path)*) | 'all' 'tables' 'in' 'schema' (NameRef (',' NameRef)*)) + 'revoke' (('admin' | 'inherit' | 'grant' | 'set') 'option' 'for')? + Privileges + ('on' PrivilegeObjects)? 'from' RoleRefList ('granted' 'by' RoleRef)? ('cascade' | 'restrict')? ';'? @@ -1725,6 +1739,49 @@ WithQuery = WithTable = Name ColumnList? 'as'? (Materialized | NotMaterialized)? '(' query:WithQuery ')' + SearchClause? + CycleClause? + +SearchClause = + 'search' + ('breadth' | 'depth') + 'first' + 'by' + columns:SearchColumns + set_column:SearchSetColumn + +SearchColumns = + (NameRef (',' NameRef)*) + +SearchSetColumn = + 'set' + NameRef + +CycleClause = + 'cycle' + columns:CycleColumns + set_column:CycleSetColumn + path:CyclePath + +CycleColumns = + (NameRef (',' NameRef)*) + +CycleSetColumn = + 'set' + NameRef + column_to:CycleColumnTo? + +CycleColumnTo = + 'to' + Expr + default:CycleDefault + +CycleDefault = + 'default' Expr + +CyclePath = + 'using' + NameRef WithClause = 'with' 'recursive'? (WithTable (',' WithTable)*) @@ -1745,7 +1802,7 @@ SelectVariant = CompoundSelect = lhs:SelectVariant ('union' | 'intersect' | 'except' ) - 'all'? + ('all' | 'distinct')? rhs:SelectVariant ';'? @@ -1866,6 +1923,9 @@ WhereConditionClause = ExcludeConstraint = ConstraintName? 'exclude' ConstraintIndexMethod? ConstraintExclusionList + ConstraintIncludeClause? + WithParams? + ConstraintIndexTablespace? WhereConditionClause? FrameClause = @@ -3179,19 +3239,48 @@ Refresh = Grant = 'grant' - (('all' 'privileges'?) | RevokeCommandList) - 'on' ('table' (Path (',' Path)*) | 'all' 'tables' 'in' 'schema' (NameRef (',' NameRef)*)) + ( + 'all' 'privileges'? ColumnList? + | RevokeCommandList + )? + ('on' PrivilegeObjects)? 'to' RoleRefList - ('with' 'grant' 'option')? + GrantWithClause? ('granted' 'by' RoleRef)? ';'? +GrantWithClause = + 'with' + ( + 'grant' 'option' + | GrantRoleOptionList + ) + +GrantRoleOptionList = + GrantRoleOption (',' GrantRoleOption)* + +GrantRoleOption = + Name ('option' | 'true' | 'false') + +PrivilegeObjects = + 'all' ('tables' | 'sequences' | 'functions' | 'procedures' | 'routines') + 'in' 'schema' (NameRef (',' NameRef)*) +| 'parameter' (Path (',' Path)*) +| ('function' | 'procedure' | 'routine') FunctionSigList +| 'type' (Type (',' Type)*) +| ('database' | 'tablespace' | 'schema' | 'language') (NameRef (',' NameRef)*) +| ('table' | 'sequence' | 'domain') (Path (',' Path)*) +| 'foreign' ('data' 'wrapper' | 'server') (NameRef (',' NameRef)*) +| 'large' 'object' (Literal (',' Literal)*) +| 'property' 'graph' (Path (',' Path)*) +| (Path (',' Path)*) + RevokeCommandList = (RevokeCommand (',' RevokeCommand)*) RevokeCommand = ( RoleRef | 'alter' 'system' -| ('select' | 'insert' | 'update' | 'delete' | 'truncate' | 'references' | 'trigger' | 'ident' | 'all' | 'alter' | 'create' | 'temporary' | 'temp' | 'execute') +| ('select' | 'insert' | 'update' | 'delete' | 'truncate' | 'references' | 'trigger' | '#ident' | 'all' | 'alter' | 'create' | 'temporary' | 'temp' | 'execute') ) SecurityLabel = @@ -3388,7 +3477,10 @@ TableAndColumns = RelationName ColumnList? VacuumOption = - Literal? + Name VacuumOptionValue? + +VacuumOptionValue = + Literal? Name? Copy = 'copy' @@ -3761,7 +3853,11 @@ AlterColumnOption = | NoInherit AlterConstraint = - 'alter' 'constraint' option:AlterColumnOption + 'alter' 'constraint' NameRef + DeferrableConstraintOption? + NotDeferrableConstraintOption? + InitiallyDeferredConstraintOption? + InitiallyImmediateConstraintOption? AlterColumn = 'alter' 'column'? NameRef option:AlterColumnOption