'use strict';
module.exports = grammar({
name: 'postgres',
extras: $ => [
/\s+/,
$.comment,
],
word: $ => $.identifier,
externals: $ => [
$.dollar_quoted_string,
],
conflicts: $ => [
[$.utility_option_name, $.unreserved_keyword],
[$.ConstDatetime, $.col_name_keyword],
[$.simple_select, $.simple_select],
[$.a_expr, $.a_expr],
[$.target_el, $.target_el],
[$.ConstDatetime, $.ConstDatetime],
[$.table_ref, $.table_ref],
[$.OptTempTableName, $.unreserved_keyword],
[$.func_table, $.func_table],
],
rules: {
source_file: $ => seq(
repeat(seq(optional($.toplevel_stmt), ';')),
optional($.toplevel_stmt)
),
toplevel_stmt: $ => choice(
$.stmt,
$.TransactionStmtLegacy
),
stmt: $ => choice(
$.AlterEventTrigStmt,
$.AlterCollationStmt,
$.AlterDatabaseStmt,
$.AlterDatabaseSetStmt,
$.AlterDefaultPrivilegesStmt,
$.AlterDomainStmt,
$.AlterEnumStmt,
$.AlterExtensionStmt,
$.AlterExtensionContentsStmt,
$.AlterFdwStmt,
$.AlterForeignServerStmt,
$.AlterFunctionStmt,
$.AlterGroupStmt,
$.AlterObjectDependsStmt,
$.AlterObjectSchemaStmt,
$.AlterOwnerStmt,
$.AlterOperatorStmt,
$.AlterTypeStmt,
$.AlterPolicyStmt,
$.AlterSeqStmt,
$.AlterSystemStmt,
$.AlterTableStmt,
$.AlterTblSpcStmt,
$.AlterCompositeTypeStmt,
$.AlterPublicationStmt,
$.AlterRoleSetStmt,
$.AlterRoleStmt,
$.AlterSubscriptionStmt,
$.AlterStatsStmt,
$.AlterTSConfigurationStmt,
$.AlterTSDictionaryStmt,
$.AlterUserMappingStmt,
$.AnalyzeStmt,
$.CallStmt,
$.CheckPointStmt,
$.ClosePortalStmt,
$.ClusterStmt,
$.CommentStmt,
$.ConstraintsSetStmt,
$.CopyStmt,
$.CreateAmStmt,
$.CreateAsStmt,
$.CreateAssertionStmt,
$.CreateCastStmt,
$.CreateConversionStmt,
$.CreateDomainStmt,
$.CreateExtensionStmt,
$.CreateFdwStmt,
$.CreateForeignServerStmt,
$.CreateForeignTableStmt,
$.CreateFunctionStmt,
$.CreateGroupStmt,
$.CreateMatViewStmt,
$.CreateOpClassStmt,
$.CreateOpFamilyStmt,
$.CreatePublicationStmt,
$.AlterOpFamilyStmt,
$.CreatePolicyStmt,
$.CreatePLangStmt,
$.CreateSchemaStmt,
$.CreateSeqStmt,
$.CreateStmt,
$.CreateSubscriptionStmt,
$.CreateStatsStmt,
$.CreateTableSpaceStmt,
$.CreateTransformStmt,
$.CreateTrigStmt,
$.CreateEventTrigStmt,
$.CreateRoleStmt,
$.CreateUserStmt,
$.CreateUserMappingStmt,
$.CreatedbStmt,
$.DeallocateStmt,
$.DeclareCursorStmt,
$.DefineStmt,
$.DeleteStmt,
$.DiscardStmt,
$.DoStmt,
$.DropCastStmt,
$.DropOpClassStmt,
$.DropOpFamilyStmt,
$.DropOwnedStmt,
$.DropStmt,
$.DropSubscriptionStmt,
$.DropTableSpaceStmt,
$.DropTransformStmt,
$.DropRoleStmt,
$.DropUserMappingStmt,
$.DropdbStmt,
$.ExecuteStmt,
$.ExplainStmt,
$.FetchStmt,
$.GrantStmt,
$.GrantRoleStmt,
$.ImportForeignSchemaStmt,
$.IndexStmt,
$.InsertStmt,
$.ListenStmt,
$.RefreshMatViewStmt,
$.LoadStmt,
$.LockStmt,
$.MergeStmt,
$.NotifyStmt,
$.PrepareStmt,
$.ReassignOwnedStmt,
$.ReindexStmt,
$.RemoveAggrStmt,
$.RemoveFuncStmt,
$.RemoveOperStmt,
$.RenameStmt,
$.RevokeStmt,
$.RevokeRoleStmt,
$.RuleStmt,
$.SecLabelStmt,
$.SelectStmt,
$.TransactionStmt,
$.TruncateStmt,
$.UnlistenStmt,
$.UpdateStmt,
$.VacuumStmt,
$.VariableResetStmt,
$.VariableSetStmt,
$.VariableShowStmt,
$.ViewStmt
),
opt_single_name: $ => $.ColId,
opt_qualified_name: $ => $.any_name,
opt_concurrently: $ => $.kw_concurrently,
opt_drop_behavior: $ => choice(
$.kw_cascade,
$.kw_restrict
),
CallStmt: $ => seq($.kw_call, $.func_application),
CreateRoleStmt: $ => seq($.kw_create, $.kw_role, $.RoleId, optional($.opt_with), optional($.OptRoleList)),
opt_with: $ => choice(
prec.left(11, prec.dynamic(11, $.kw_with)),
$.kw_with
),
OptRoleList: $ => seq(optional($.OptRoleList), $.CreateOptRoleElem),
AlterOptRoleList: $ => seq(optional($.AlterOptRoleList), $.AlterOptRoleElem),
AlterOptRoleElem: $ => choice(
seq($.kw_password, $.Sconst),
seq($.kw_password, $.kw_null),
seq($.kw_encrypted, $.kw_password, $.Sconst),
seq($.kw_unencrypted, $.kw_password, $.Sconst),
$.kw_inherit,
seq($.kw_connection, $.kw_limit, $.SignedIconst),
seq($.kw_valid, $.kw_until, $.Sconst),
seq($.kw_user, $.role_list),
prec.left(11, prec.dynamic(11, $._ident))
),
CreateOptRoleElem: $ => choice(
$.AlterOptRoleElem,
seq($.kw_sysid, $.Iconst),
seq($.kw_admin, $.role_list),
seq($.kw_role, $.role_list),
prec.left(8, prec.dynamic(8, seq($.kw_in, $.kw_role, $.role_list))),
prec.left(8, prec.dynamic(8, seq($.kw_in, $.kw_group, $.role_list)))
),
CreateUserStmt: $ => seq($.kw_create, $.kw_user, $.RoleId, optional($.opt_with), optional($.OptRoleList)),
AlterRoleStmt: $ => choice(
seq($.kw_alter, $.kw_role, $.RoleSpec, optional($.opt_with), optional($.AlterOptRoleList)),
seq($.kw_alter, $.kw_user, $.RoleSpec, optional($.opt_with), optional($.AlterOptRoleList))
),
opt_in_database: $ => prec.left(8, prec.dynamic(8, seq($.kw_in, $.kw_database, $.name))),
AlterRoleSetStmt: $ => choice(
seq($.kw_alter, $.kw_role, $.RoleSpec, optional($.opt_in_database), $.SetResetClause),
seq($.kw_alter, $.kw_role, $.kw_all, optional($.opt_in_database), $.SetResetClause),
seq($.kw_alter, $.kw_user, $.RoleSpec, optional($.opt_in_database), $.SetResetClause),
seq($.kw_alter, $.kw_user, $.kw_all, optional($.opt_in_database), $.SetResetClause)
),
DropRoleStmt: $ => choice(
seq($.kw_drop, $.kw_role, $.role_list),
seq($.kw_drop, $.kw_role, $.kw_if, $.kw_exists, $.role_list),
seq($.kw_drop, $.kw_user, $.role_list),
seq($.kw_drop, $.kw_user, $.kw_if, $.kw_exists, $.role_list),
seq($.kw_drop, $.kw_group, $.role_list),
seq($.kw_drop, $.kw_group, $.kw_if, $.kw_exists, $.role_list)
),
CreateGroupStmt: $ => seq($.kw_create, $.kw_group, $.RoleId, optional($.opt_with), optional($.OptRoleList)),
AlterGroupStmt: $ => seq($.kw_alter, $.kw_group, $.RoleSpec, $.add_drop, $.kw_user, $.role_list),
add_drop: $ => choice(
$.kw_add,
$.kw_drop
),
CreateSchemaStmt: $ => choice(
seq($.kw_create, $.kw_schema, optional($.opt_single_name), $.kw_authorization, $.RoleSpec, optional($.OptSchemaEltList)),
seq($.kw_create, $.kw_schema, $.ColId, optional($.OptSchemaEltList)),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_schema, $.kw_if, $.kw_not, $.kw_exists, optional($.opt_single_name), $.kw_authorization, $.RoleSpec, optional($.OptSchemaEltList)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_schema, $.kw_if, $.kw_not, $.kw_exists, $.ColId, optional($.OptSchemaEltList))))
),
OptSchemaEltList: $ => seq(optional($.OptSchemaEltList), $.schema_stmt),
schema_stmt: $ => choice(
$.CreateStmt,
$.IndexStmt,
$.CreateSeqStmt,
$.CreateTrigStmt,
$.GrantStmt,
$.ViewStmt
),
VariableSetStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_set, $.set_rest))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_local, $.set_rest))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_session, $.set_rest)))
),
set_rest: $ => choice(
seq($.kw_transaction, $.transaction_mode_list),
seq($.kw_session, $.kw_characteristics, $.kw_as, $.kw_transaction, $.transaction_mode_list),
$.set_rest_more
),
generic_set: $ => choice(
seq($.var_name, $.kw_to, $.var_list),
prec.left(7, prec.dynamic(7, seq($.var_name, '=', $.var_list))),
seq($.var_name, $.kw_to, $.kw_default),
prec.left(7, prec.dynamic(7, seq($.var_name, '=', $.kw_default)))
),
set_rest_more: $ => choice(
$.generic_set,
seq($.var_name, $.kw_from, $.kw_current),
seq($.kw_time, $.kw_zone, $.zone_value),
seq($.kw_catalog, $.Sconst),
seq($.kw_schema, $.Sconst),
seq($.kw_names, optional($.opt_encoding)),
seq($.kw_role, $.NonReservedWord_or_Sconst),
seq($.kw_session, $.kw_authorization, $.NonReservedWord_or_Sconst),
seq($.kw_session, $.kw_authorization, $.kw_default),
seq($.kw_xml, $.kw_option, $.document_or_content),
seq($.kw_transaction, $.kw_snapshot, $.Sconst)
),
var_name: $ => choice(
$.ColId,
prec.left(22, prec.dynamic(22, seq($.var_name, '.', $.ColId)))
),
var_list: $ => choice(
$.var_value,
seq($.var_list, ',', $.var_value)
),
var_value: $ => choice(
$.opt_boolean_or_string,
$.NumericOnly
),
iso_level: $ => choice(
seq($.kw_read, $.kw_uncommitted),
seq($.kw_read, $.kw_committed),
seq($.kw_repeatable, $.kw_read),
$.kw_serializable
),
opt_boolean_or_string: $ => choice(
$.kw_true,
$.kw_false,
$.kw_on,
$.NonReservedWord_or_Sconst
),
zone_value: $ => choice(
$.Sconst,
prec.left(11, prec.dynamic(11, $._ident)),
seq($.ConstInterval, $.Sconst, optional($.opt_interval)),
prec.left(20, prec.dynamic(20, seq($.ConstInterval, '(', $.Iconst, ')', $.Sconst))),
$.NumericOnly,
$.kw_default,
$.kw_local
),
opt_encoding: $ => choice(
$.Sconst,
$.kw_default
),
NonReservedWord_or_Sconst: $ => choice(
$.NonReservedWord,
$.Sconst
),
VariableResetStmt: $ => seq($.kw_reset, $.reset_rest),
reset_rest: $ => choice(
$.generic_reset,
seq($.kw_time, $.kw_zone),
seq($.kw_transaction, $.kw_isolation, $.kw_level),
seq($.kw_session, $.kw_authorization)
),
generic_reset: $ => choice(
$.var_name,
$.kw_all
),
SetResetClause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_set, $.set_rest))),
$.VariableResetStmt
),
FunctionSetResetClause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_set, $.set_rest_more))),
$.VariableResetStmt
),
VariableShowStmt: $ => choice(
seq($.kw_show, $.var_name),
seq($.kw_show, $.kw_time, $.kw_zone),
seq($.kw_show, $.kw_transaction, $.kw_isolation, $.kw_level),
seq($.kw_show, $.kw_session, $.kw_authorization),
seq($.kw_show, $.kw_all)
),
ConstraintsSetStmt: $ => prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_constraints, $.constraints_set_list, $.constraints_set_mode))),
constraints_set_list: $ => choice(
$.kw_all,
$.qualified_name_list
),
constraints_set_mode: $ => choice(
$.kw_deferred,
$.kw_immediate
),
CheckPointStmt: $ => $.kw_checkpoint,
DiscardStmt: $ => choice(
seq($.kw_discard, $.kw_all),
seq($.kw_discard, $.kw_temp),
seq($.kw_discard, $.kw_temporary),
seq($.kw_discard, $.kw_plans),
seq($.kw_discard, $.kw_sequences)
),
AlterTableStmt: $ => choice(
seq($.kw_alter, $.kw_table, $.relation_expr, $.alter_table_cmds),
seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.alter_table_cmds),
seq($.kw_alter, $.kw_table, $.relation_expr, $.partition_cmd),
seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.partition_cmd),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_table, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_table, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_owned, $.kw_by, $.role_list, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
seq($.kw_alter, $.kw_index, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_index, $.kw_if, $.kw_exists, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_index, $.qualified_name, $.index_partition_cmd),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_index, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_index, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_owned, $.kw_by, $.role_list, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
seq($.kw_alter, $.kw_sequence, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_sequence, $.kw_if, $.kw_exists, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_view, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.qualified_name, $.alter_table_cmds),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.alter_table_cmds),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
prec.left(8, prec.dynamic(8, seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_all, $.kw_in, $.kw_tablespace, $.name, $.kw_owned, $.kw_by, $.role_list, $.kw_set, $.kw_tablespace, $.name, optional($.opt_nowait)))),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.relation_expr, $.alter_table_cmds),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.alter_table_cmds)
),
alter_table_cmds: $ => choice(
$.alter_table_cmd,
seq($.alter_table_cmds, ',', $.alter_table_cmd)
),
partition_cmd: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_attach, $.kw_partition, $.qualified_name, $.PartitionBoundSpec))),
prec.left(11, prec.dynamic(11, seq($.kw_detach, $.kw_partition, $.qualified_name, optional($.opt_concurrently)))),
prec.left(11, prec.dynamic(11, seq($.kw_detach, $.kw_partition, $.qualified_name, $.kw_finalize)))
),
index_partition_cmd: $ => prec.left(11, prec.dynamic(11, seq($.kw_attach, $.kw_partition, $.qualified_name))),
alter_table_cmd: $ => choice(
seq($.kw_add, $.columnDef),
prec.right(5, prec.dynamic(5, seq($.kw_add, $.kw_if, $.kw_not, $.kw_exists, $.columnDef))),
seq($.kw_add, $.kw_column, $.columnDef),
prec.right(5, prec.dynamic(5, seq($.kw_add, $.kw_column, $.kw_if, $.kw_not, $.kw_exists, $.columnDef))),
seq($.kw_alter, optional($.opt_column), $.ColId, $.alter_column_default),
prec.right(5, prec.dynamic(5, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_drop, $.kw_not, $.kw_null))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.kw_not, $.kw_null))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.kw_expression, $.kw_as, '(', $.a_expr, ')'))),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_drop, $.kw_expression),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_drop, $.kw_expression, $.kw_if, $.kw_exists),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.kw_statistics, $.set_statistics_value))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.Iconst, $.kw_set, $.kw_statistics, $.set_statistics_value))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.reloptions))),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_reset, $.reloptions),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.column_storage))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_set, $.column_compression))),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_add, $.kw_generated, $.generated_when, $.kw_as, $.kw_identity, optional($.OptParenthesizedSeqOptList)),
seq($.kw_alter, optional($.opt_column), $.ColId, $.alter_identity_column_option_list),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_drop, $.kw_identity),
seq($.kw_alter, optional($.opt_column), $.ColId, $.kw_drop, $.kw_identity, $.kw_if, $.kw_exists),
seq($.kw_drop, optional($.opt_column), $.kw_if, $.kw_exists, $.ColId, optional($.opt_drop_behavior)),
seq($.kw_drop, optional($.opt_column), $.ColId, optional($.opt_drop_behavior)),
seq($.kw_alter, optional($.opt_column), $.ColId, optional($.opt_set_data), $.kw_type, $.Typename, optional($.opt_collate_clause), optional($.alter_using)),
seq($.kw_alter, optional($.opt_column), $.ColId, $.alter_generic_options),
seq($.kw_add, $.TableConstraint),
seq($.kw_alter, $.kw_constraint, $.name, optional($.ConstraintAttributeSpec)),
seq($.kw_alter, $.kw_constraint, $.name, $.kw_inherit),
seq($.kw_validate, $.kw_constraint, $.name),
seq($.kw_drop, $.kw_constraint, $.kw_if, $.kw_exists, $.name, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_constraint, $.name, optional($.opt_drop_behavior)),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_without, $.kw_oids))),
seq($.kw_cluster, $.kw_on, $.name),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_without, $.kw_cluster))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_logged))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_unlogged))),
seq($.kw_enable, $.kw_trigger, $.name),
seq($.kw_enable, $.kw_always, $.kw_trigger, $.name),
seq($.kw_enable, $.kw_replica, $.kw_trigger, $.name),
seq($.kw_enable, $.kw_trigger, $.kw_all),
seq($.kw_enable, $.kw_trigger, $.kw_user),
seq($.kw_disable, $.kw_trigger, $.name),
seq($.kw_disable, $.kw_trigger, $.kw_all),
seq($.kw_disable, $.kw_trigger, $.kw_user),
seq($.kw_enable, $.kw_rule, $.name),
seq($.kw_enable, $.kw_always, $.kw_rule, $.name),
seq($.kw_enable, $.kw_replica, $.kw_rule, $.name),
seq($.kw_disable, $.kw_rule, $.name),
seq($.kw_inherit, $.qualified_name),
seq($.kw_no, $.kw_inherit, $.qualified_name),
seq($.kw_of, $.any_name),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_of))),
seq($.kw_owner, $.kw_to, $.RoleSpec),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_access, $.kw_method, $.set_access_method_name))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_tablespace, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.reloptions))),
seq($.kw_reset, $.reloptions),
seq($.kw_replica, $.kw_identity, $.replica_identity),
seq($.kw_enable, $.kw_row, $.kw_level, $.kw_security),
seq($.kw_disable, $.kw_row, $.kw_level, $.kw_security),
seq($.kw_force, $.kw_row, $.kw_level, $.kw_security),
seq($.kw_no, $.kw_force, $.kw_row, $.kw_level, $.kw_security),
$.alter_generic_options
),
alter_column_default: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_default, $.a_expr))),
seq($.kw_drop, $.kw_default)
),
opt_collate_clause: $ => prec.left(17, prec.dynamic(17, seq($.kw_collate, $.any_name))),
alter_using: $ => seq($.kw_using, $.a_expr),
replica_identity: $ => choice(
$.kw_nothing,
prec.left(23, prec.dynamic(23, $.kw_full)),
$.kw_default,
seq($.kw_using, $.kw_index, $.name)
),
reloptions: $ => prec.left(20, prec.dynamic(20, seq('(', $.reloption_list, ')'))),
opt_reloptions: $ => prec.left(11, prec.dynamic(11, seq($.kw_with, $.reloptions))),
reloption_list: $ => choice(
$.reloption_elem,
seq($.reloption_list, ',', $.reloption_elem)
),
reloption_elem: $ => choice(
prec.left(7, prec.dynamic(7, seq($.ColLabel, '=', $.def_arg))),
$.ColLabel,
prec.left(22, prec.dynamic(22, seq($.ColLabel, '.', $.ColLabel, '=', $.def_arg))),
prec.left(22, prec.dynamic(22, seq($.ColLabel, '.', $.ColLabel)))
),
alter_identity_column_option_list: $ => choice(
$.alter_identity_column_option,
seq($.alter_identity_column_option_list, $.alter_identity_column_option)
),
alter_identity_column_option: $ => choice(
$.kw_restart,
seq($.kw_restart, optional($.opt_with), $.NumericOnly),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.SeqOptElem))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_generated, $.generated_when)))
),
set_statistics_value: $ => choice(
$.SignedIconst,
$.kw_default
),
set_access_method_name: $ => choice(
$.ColId,
$.kw_default
),
PartitionBoundSpec: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_for, $.kw_values, $.kw_with, '(', $.hash_partbound, ')'))),
prec.left(8, prec.dynamic(8, seq($.kw_for, $.kw_values, $.kw_in, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_for, $.kw_values, $.kw_from, '(', $.expr_list, ')', $.kw_to, '(', $.expr_list, ')'))),
$.kw_default
),
hash_partbound_elem: $ => seq($.NonReservedWord, $.Iconst),
hash_partbound: $ => choice(
$.hash_partbound_elem,
seq($.hash_partbound, ',', $.hash_partbound_elem)
),
AlterCompositeTypeStmt: $ => seq($.kw_alter, $.kw_type, $.any_name, $.alter_type_cmds),
alter_type_cmds: $ => choice(
$.alter_type_cmd,
seq($.alter_type_cmds, ',', $.alter_type_cmd)
),
alter_type_cmd: $ => choice(
seq($.kw_add, $.kw_attribute, $.TableFuncElement, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_attribute, $.kw_if, $.kw_exists, $.ColId, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_attribute, $.ColId, optional($.opt_drop_behavior)),
seq($.kw_alter, $.kw_attribute, $.ColId, optional($.opt_set_data), $.kw_type, $.Typename, optional($.opt_collate_clause), optional($.opt_drop_behavior))
),
ClosePortalStmt: $ => choice(
seq($.kw_close, $.cursor_name),
seq($.kw_close, $.kw_all)
),
CopyStmt: $ => choice(
seq($.kw_copy, optional($.opt_binary), $.qualified_name, optional($.opt_column_list), $.copy_from, optional($.opt_program), $.copy_file_name, optional($.copy_delimiter), optional($.opt_with), optional($.copy_options), optional($.where_clause)),
prec.left(20, prec.dynamic(20, seq($.kw_copy, '(', $.PreparableStmt, ')', $.kw_to, optional($.opt_program), $.copy_file_name, optional($.opt_with), optional($.copy_options))))
),
copy_from: $ => choice(
$.kw_from,
$.kw_to
),
opt_program: $ => $.kw_program,
copy_file_name: $ => choice(
$.Sconst,
$.kw_stdin,
$.kw_stdout
),
copy_options: $ => choice(
$.copy_opt_list,
prec.left(20, prec.dynamic(20, seq('(', $.copy_generic_opt_list, ')')))
),
copy_opt_list: $ => seq(optional($.copy_opt_list), $.copy_opt_item),
copy_opt_item: $ => choice(
$.kw_binary,
$.kw_freeze,
seq($.kw_delimiter, optional($.opt_as), $.Sconst),
seq($.kw_null, optional($.opt_as), $.Sconst),
$.kw_csv,
$.kw_header,
seq($.kw_quote, optional($.opt_as), $.Sconst),
prec.left(9, prec.dynamic(9, seq($.kw_escape, optional($.opt_as), $.Sconst))),
seq($.kw_force, $.kw_quote, $.columnList),
prec.left(14, prec.dynamic(14, seq($.kw_force, $.kw_quote, '*'))),
prec.right(5, prec.dynamic(5, seq($.kw_force, $.kw_not, $.kw_null, $.columnList))),
prec.right(5, prec.dynamic(5, seq($.kw_force, $.kw_not, $.kw_null, '*'))),
seq($.kw_force, $.kw_null, $.columnList),
prec.left(14, prec.dynamic(14, seq($.kw_force, $.kw_null, '*'))),
seq($.kw_encoding, $.Sconst)
),
opt_binary: $ => $.kw_binary,
copy_delimiter: $ => seq(optional($.opt_using), $.kw_delimiters, $.Sconst),
opt_using: $ => $.kw_using,
copy_generic_opt_list: $ => choice(
$.copy_generic_opt_elem,
seq($.copy_generic_opt_list, ',', $.copy_generic_opt_elem)
),
copy_generic_opt_elem: $ => seq($.ColLabel, optional($.copy_generic_opt_arg)),
copy_generic_opt_arg: $ => choice(
$.opt_boolean_or_string,
$.NumericOnly,
prec.left(14, prec.dynamic(14, '*')),
$.kw_default,
prec.left(20, prec.dynamic(20, seq('(', $.copy_generic_opt_arg_list, ')')))
),
copy_generic_opt_arg_list: $ => choice(
$.copy_generic_opt_arg_list_item,
seq($.copy_generic_opt_arg_list, ',', $.copy_generic_opt_arg_list_item)
),
copy_generic_opt_arg_list_item: $ => $.opt_boolean_or_string,
CreateStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.OptTemp), $.kw_table, $.qualified_name, '(', optional($.OptTableElementList), ')', optional($.OptInherit), optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, '(', optional($.OptTableElementList), ')', optional($.OptInherit), optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)))),
seq($.kw_create, optional($.OptTemp), $.kw_table, $.qualified_name, $.kw_of, $.any_name, optional($.OptTypedTableElementList), optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, $.kw_of, $.any_name, optional($.OptTypedTableElementList), optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)))),
prec.left(11, prec.dynamic(11, seq($.kw_create, optional($.OptTemp), $.kw_table, $.qualified_name, $.kw_partition, $.kw_of, $.qualified_name, optional($.OptTypedTableElementList), $.PartitionBoundSpec, optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, $.kw_partition, $.kw_of, $.qualified_name, optional($.OptTypedTableElementList), $.PartitionBoundSpec, optional($.OptPartitionSpec), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace))))
),
OptTemp: $ => choice(
$.kw_temporary,
$.kw_temp,
seq($.kw_local, $.kw_temporary),
seq($.kw_local, $.kw_temp),
seq($.kw_global, $.kw_temporary),
seq($.kw_global, $.kw_temp),
$.kw_unlogged
),
OptTableElementList: $ => $.TableElementList,
OptTypedTableElementList: $ => prec.left(20, prec.dynamic(20, seq('(', $.TypedTableElementList, ')'))),
TableElementList: $ => choice(
$.TableElement,
seq($.TableElementList, ',', $.TableElement)
),
TypedTableElementList: $ => choice(
$.TypedTableElement,
seq($.TypedTableElementList, ',', $.TypedTableElement)
),
TableElement: $ => choice(
$.columnDef,
$.TableLikeClause,
$.TableConstraint
),
TypedTableElement: $ => choice(
$.columnOptions,
$.TableConstraint
),
columnDef: $ => seq($.ColId, $.Typename, optional($.opt_column_storage), optional($.opt_column_compression), optional($.create_generic_options), optional($.ColQualList)),
columnOptions: $ => choice(
seq($.ColId, optional($.ColQualList)),
prec.left(11, prec.dynamic(11, seq($.ColId, $.kw_with, $.kw_options, optional($.ColQualList))))
),
column_compression: $ => choice(
seq($.kw_compression, $.ColId),
seq($.kw_compression, $.kw_default)
),
opt_column_compression: $ => $.column_compression,
column_storage: $ => choice(
seq($.kw_storage, $.ColId),
seq($.kw_storage, $.kw_default)
),
opt_column_storage: $ => $.column_storage,
ColQualList: $ => seq(optional($.ColQualList), $.ColConstraint),
ColConstraint: $ => choice(
seq($.kw_constraint, $.name, $.ColConstraintElem),
$.ColConstraintElem,
$.ConstraintAttr,
prec.left(17, prec.dynamic(17, seq($.kw_collate, $.any_name)))
),
ColConstraintElem: $ => choice(
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_null, optional($.opt_no_inherit)))),
$.kw_null,
seq($.kw_unique, optional($.opt_unique_null_treatment), optional($.opt_definition), optional($.OptConsTableSpace)),
seq($.kw_primary, $.kw_key, optional($.opt_definition), optional($.OptConsTableSpace)),
prec.left(20, prec.dynamic(20, seq($.kw_check, '(', $.a_expr, ')', optional($.opt_no_inherit)))),
seq($.kw_default, $.b_expr),
seq($.kw_generated, $.generated_when, $.kw_as, $.kw_identity, optional($.OptParenthesizedSeqOptList)),
prec.left(20, prec.dynamic(20, seq($.kw_generated, $.generated_when, $.kw_as, '(', $.a_expr, ')', optional($.opt_virtual_or_stored)))),
seq($.kw_references, $.qualified_name, optional($.opt_column_list), optional($.key_match), optional($.key_actions))
),
opt_unique_null_treatment: $ => choice(
seq($.kw_nulls, $.kw_distinct),
prec.right(5, prec.dynamic(5, seq($.kw_nulls, $.kw_not, $.kw_distinct)))
),
generated_when: $ => choice(
$.kw_always,
seq($.kw_by, $.kw_default)
),
opt_virtual_or_stored: $ => choice(
$.kw_stored,
$.kw_virtual
),
ConstraintAttr: $ => choice(
$.kw_deferrable,
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_deferrable))),
seq($.kw_initially, $.kw_deferred),
seq($.kw_initially, $.kw_immediate),
$.kw_enforced,
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_enforced)))
),
TableLikeClause: $ => prec.left(8, prec.dynamic(8, seq($.kw_like, $.qualified_name, optional($.TableLikeOptionList)))),
TableLikeOptionList: $ => choice(
seq(optional($.TableLikeOptionList), $.kw_including, $.TableLikeOption),
seq(optional($.TableLikeOptionList), $.kw_excluding, $.TableLikeOption)
),
TableLikeOption: $ => choice(
$.kw_comments,
$.kw_compression,
$.kw_constraints,
$.kw_defaults,
$.kw_identity,
$.kw_generated,
$.kw_indexes,
$.kw_statistics,
$.kw_storage,
$.kw_all
),
TableConstraint: $ => choice(
seq($.kw_constraint, $.name, $.ConstraintElem),
$.ConstraintElem
),
ConstraintElem: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_check, '(', $.a_expr, ')', optional($.ConstraintAttributeSpec)))),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_null, $.ColId, optional($.ConstraintAttributeSpec)))),
prec.left(20, prec.dynamic(20, seq($.kw_unique, optional($.opt_unique_null_treatment), '(', $.columnList, optional($.opt_without_overlaps), ')', optional($.opt_c_include), optional($.opt_definition), optional($.OptConsTableSpace), optional($.ConstraintAttributeSpec)))),
seq($.kw_unique, $.ExistingIndex, optional($.ConstraintAttributeSpec)),
prec.left(20, prec.dynamic(20, seq($.kw_primary, $.kw_key, '(', $.columnList, optional($.opt_without_overlaps), ')', optional($.opt_c_include), optional($.opt_definition), optional($.OptConsTableSpace), optional($.ConstraintAttributeSpec)))),
seq($.kw_primary, $.kw_key, $.ExistingIndex, optional($.ConstraintAttributeSpec)),
prec.left(20, prec.dynamic(20, seq($.kw_exclude, optional($.access_method_clause), '(', $.ExclusionConstraintList, ')', optional($.opt_c_include), optional($.opt_definition), optional($.OptConsTableSpace), optional($.OptWhereClause), optional($.ConstraintAttributeSpec)))),
prec.left(20, prec.dynamic(20, seq($.kw_foreign, $.kw_key, '(', $.columnList, optional($.optionalPeriodName), ')', $.kw_references, $.qualified_name, optional($.opt_column_and_period_list), optional($.key_match), optional($.key_actions), optional($.ConstraintAttributeSpec))))
),
DomainConstraint: $ => choice(
seq($.kw_constraint, $.name, $.DomainConstraintElem),
$.DomainConstraintElem
),
DomainConstraintElem: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_check, '(', $.a_expr, ')', optional($.ConstraintAttributeSpec)))),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_null, optional($.ConstraintAttributeSpec))))
),
opt_no_inherit: $ => seq($.kw_no, $.kw_inherit),
opt_without_overlaps: $ => prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_overlaps))),
opt_column_list: $ => prec.left(20, prec.dynamic(20, seq('(', $.columnList, ')'))),
columnList: $ => choice(
$.columnElem,
seq($.columnList, ',', $.columnElem)
),
optionalPeriodName: $ => seq(',', $.kw_period, $.columnElem),
opt_column_and_period_list: $ => prec.left(20, prec.dynamic(20, seq('(', $.columnList, optional($.optionalPeriodName), ')'))),
columnElem: $ => $.ColId,
opt_c_include: $ => prec.left(20, prec.dynamic(20, seq($.kw_include, '(', $.columnList, ')'))),
key_match: $ => choice(
prec.left(23, prec.dynamic(23, seq($.kw_match, $.kw_full))),
seq($.kw_match, $.kw_partial),
seq($.kw_match, $.kw_simple)
),
ExclusionConstraintList: $ => choice(
$.ExclusionConstraintElem,
seq($.ExclusionConstraintList, ',', $.ExclusionConstraintElem)
),
ExclusionConstraintElem: $ => choice(
prec.left(11, prec.dynamic(11, seq($.index_elem, $.kw_with, $.any_operator))),
prec.left(11, prec.dynamic(11, seq($.index_elem, $.kw_with, $.kw_operator, '(', $.any_operator, ')')))
),
OptWhereClause: $ => prec.left(20, prec.dynamic(20, seq($.kw_where, '(', $.a_expr, ')'))),
key_actions: $ => choice(
$.key_update,
$.key_delete,
seq($.key_update, $.key_delete),
seq($.key_delete, $.key_update)
),
key_update: $ => seq($.kw_on, $.kw_update, $.key_action),
key_delete: $ => seq($.kw_on, $.kw_delete, $.key_action),
key_action: $ => choice(
seq($.kw_no, $.kw_action),
$.kw_restrict,
$.kw_cascade,
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_null, optional($.opt_column_list)))),
prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_default, optional($.opt_column_list))))
),
OptInherit: $ => prec.left(20, prec.dynamic(20, seq($.kw_inherits, '(', $.qualified_name_list, ')'))),
OptPartitionSpec: $ => $.PartitionSpec,
PartitionSpec: $ => prec.left(11, prec.dynamic(11, seq($.kw_partition, $.kw_by, $.ColId, '(', $.part_params, ')'))),
part_params: $ => choice(
$.part_elem,
seq($.part_params, ',', $.part_elem)
),
part_elem: $ => choice(
seq($.ColId, optional($.opt_collate), optional($.opt_qualified_name)),
seq($.func_expr_windowless, optional($.opt_collate), optional($.opt_qualified_name)),
prec.left(20, prec.dynamic(20, seq('(', $.a_expr, ')', optional($.opt_collate), optional($.opt_qualified_name))))
),
table_access_method_clause: $ => seq($.kw_using, $.name),
OptWith: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.reloptions))),
prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_oids)))
),
OnCommitOption: $ => choice(
seq($.kw_on, $.kw_commit, $.kw_drop),
prec.left(11, prec.dynamic(11, seq($.kw_on, $.kw_commit, $.kw_delete, $.kw_rows))),
prec.left(11, prec.dynamic(11, seq($.kw_on, $.kw_commit, $.kw_preserve, $.kw_rows)))
),
OptTableSpace: $ => seq($.kw_tablespace, $.name),
OptConsTableSpace: $ => seq($.kw_using, $.kw_index, $.kw_tablespace, $.name),
ExistingIndex: $ => seq($.kw_using, $.kw_index, $.name),
CreateStatsStmt: $ => choice(
seq($.kw_create, $.kw_statistics, optional($.opt_qualified_name), optional($.opt_name_list), $.kw_on, $.stats_params, $.kw_from, $.from_list),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_statistics, $.kw_if, $.kw_not, $.kw_exists, $.any_name, optional($.opt_name_list), $.kw_on, $.stats_params, $.kw_from, $.from_list)))
),
stats_params: $ => choice(
$.stats_param,
seq($.stats_params, ',', $.stats_param)
),
stats_param: $ => choice(
$.ColId,
$.func_expr_windowless,
prec.left(20, prec.dynamic(20, seq('(', $.a_expr, ')')))
),
AlterStatsStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_statistics, $.any_name, $.kw_set, $.kw_statistics, $.set_statistics_value))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_statistics, $.kw_if, $.kw_exists, $.any_name, $.kw_set, $.kw_statistics, $.set_statistics_value)))
),
CreateAsStmt: $ => choice(
seq($.kw_create, optional($.OptTemp), $.kw_table, $.create_as_target, $.kw_as, $.SelectStmt, optional($.opt_with_data)),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.create_as_target, $.kw_as, $.SelectStmt, optional($.opt_with_data))))
),
create_as_target: $ => seq($.qualified_name, optional($.opt_column_list), optional($.table_access_method_clause), optional($.OptWith), optional($.OnCommitOption), optional($.OptTableSpace)),
opt_with_data: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_data))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_no, $.kw_data)))
),
CreateMatViewStmt: $ => choice(
seq($.kw_create, optional($.OptNoLog), $.kw_materialized, $.kw_view, $.create_mv_target, $.kw_as, $.SelectStmt, optional($.opt_with_data)),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptNoLog), $.kw_materialized, $.kw_view, $.kw_if, $.kw_not, $.kw_exists, $.create_mv_target, $.kw_as, $.SelectStmt, optional($.opt_with_data))))
),
create_mv_target: $ => seq($.qualified_name, optional($.opt_column_list), optional($.table_access_method_clause), optional($.opt_reloptions), optional($.OptTableSpace)),
OptNoLog: $ => $.kw_unlogged,
RefreshMatViewStmt: $ => seq($.kw_refresh, $.kw_materialized, $.kw_view, optional($.opt_concurrently), $.qualified_name, optional($.opt_with_data)),
CreateSeqStmt: $ => choice(
seq($.kw_create, optional($.OptTemp), $.kw_sequence, $.qualified_name, optional($.OptSeqOptList)),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_sequence, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, optional($.OptSeqOptList))))
),
AlterSeqStmt: $ => choice(
seq($.kw_alter, $.kw_sequence, $.qualified_name, $.SeqOptList),
seq($.kw_alter, $.kw_sequence, $.kw_if, $.kw_exists, $.qualified_name, $.SeqOptList)
),
OptSeqOptList: $ => $.SeqOptList,
OptParenthesizedSeqOptList: $ => prec.left(20, prec.dynamic(20, seq('(', $.SeqOptList, ')'))),
SeqOptList: $ => choice(
$.SeqOptElem,
seq($.SeqOptList, $.SeqOptElem)
),
SeqOptElem: $ => choice(
seq($.kw_as, $.SimpleTypename),
seq($.kw_cache, $.NumericOnly),
$.kw_cycle,
seq($.kw_no, $.kw_cycle),
seq($.kw_increment, optional($.opt_by), $.NumericOnly),
$.kw_logged,
seq($.kw_maxvalue, $.NumericOnly),
seq($.kw_minvalue, $.NumericOnly),
seq($.kw_no, $.kw_maxvalue),
seq($.kw_no, $.kw_minvalue),
seq($.kw_owned, $.kw_by, $.any_name),
seq($.kw_sequence, $.kw_name, $.any_name),
seq($.kw_start, optional($.opt_with), $.NumericOnly),
$.kw_restart,
seq($.kw_restart, optional($.opt_with), $.NumericOnly),
$.kw_unlogged
),
opt_by: $ => $.kw_by,
NumericOnly: $ => choice(
$.float_literal,
prec.left(13, prec.dynamic(13, seq('+', $.float_literal))),
prec.left(13, prec.dynamic(13, seq('-', $.float_literal))),
$.SignedIconst
),
NumericOnly_list: $ => choice(
$.NumericOnly,
seq($.NumericOnly_list, ',', $.NumericOnly)
),
CreatePLangStmt: $ => choice(
seq($.kw_create, optional($.opt_or_replace), optional($.opt_trusted), optional($.opt_procedural), $.kw_language, $.name),
seq($.kw_create, optional($.opt_or_replace), optional($.opt_trusted), optional($.opt_procedural), $.kw_language, $.name, $.kw_handler, $.handler_name, optional($.opt_inline_handler), optional($.opt_validator))
),
opt_trusted: $ => $.kw_trusted,
handler_name: $ => choice(
$.name,
seq($.name, $.attrs)
),
opt_inline_handler: $ => seq($.kw_inline, $.handler_name),
validator_clause: $ => choice(
seq($.kw_validator, $.handler_name),
seq($.kw_no, $.kw_validator)
),
opt_validator: $ => $.validator_clause,
opt_procedural: $ => $.kw_procedural,
CreateTableSpaceStmt: $ => seq($.kw_create, $.kw_tablespace, $.name, optional($.OptTableSpaceOwner), $.kw_location, $.Sconst, optional($.opt_reloptions)),
OptTableSpaceOwner: $ => seq($.kw_owner, $.RoleSpec),
DropTableSpaceStmt: $ => choice(
seq($.kw_drop, $.kw_tablespace, $.name),
seq($.kw_drop, $.kw_tablespace, $.kw_if, $.kw_exists, $.name)
),
CreateExtensionStmt: $ => choice(
seq($.kw_create, $.kw_extension, $.name, optional($.opt_with), optional($.create_extension_opt_list)),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_extension, $.kw_if, $.kw_not, $.kw_exists, $.name, optional($.opt_with), optional($.create_extension_opt_list))))
),
create_extension_opt_list: $ => seq(optional($.create_extension_opt_list), $.create_extension_opt_item),
create_extension_opt_item: $ => choice(
seq($.kw_schema, $.name),
seq($.kw_version, $.NonReservedWord_or_Sconst),
seq($.kw_from, $.NonReservedWord_or_Sconst),
$.kw_cascade
),
AlterExtensionStmt: $ => seq($.kw_alter, $.kw_extension, $.name, $.kw_update, optional($.alter_extension_opt_list)),
alter_extension_opt_list: $ => seq(optional($.alter_extension_opt_list), $.alter_extension_opt_item),
alter_extension_opt_item: $ => seq($.kw_to, $.NonReservedWord_or_Sconst),
AlterExtensionContentsStmt: $ => choice(
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.object_type_name, $.name),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.object_type_any_name, $.any_name),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_aggregate, $.aggregate_with_argtypes),
prec.left(20, prec.dynamic(20, seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_cast, '(', $.Typename, $.kw_as, $.Typename, ')'))),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_domain, $.Typename),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_function, $.function_with_argtypes),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_operator, $.operator_with_argtypes))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name))),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_procedure, $.function_with_argtypes),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_routine, $.function_with_argtypes),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_transform, $.kw_for, $.Typename, $.kw_language, $.name),
seq($.kw_alter, $.kw_extension, $.name, $.add_drop, $.kw_type, $.Typename)
),
CreateFdwStmt: $ => seq($.kw_create, $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, optional($.opt_fdw_options), optional($.create_generic_options)),
fdw_option: $ => choice(
seq($.kw_handler, $.handler_name),
seq($.kw_no, $.kw_handler),
seq($.kw_validator, $.handler_name),
seq($.kw_no, $.kw_validator)
),
fdw_options: $ => choice(
$.fdw_option,
seq($.fdw_options, $.fdw_option)
),
opt_fdw_options: $ => $.fdw_options,
AlterFdwStmt: $ => choice(
seq($.kw_alter, $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, optional($.opt_fdw_options), $.alter_generic_options),
seq($.kw_alter, $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, $.fdw_options)
),
create_generic_options: $ => prec.left(20, prec.dynamic(20, seq($.kw_options, '(', $.generic_option_list, ')'))),
generic_option_list: $ => choice(
$.generic_option_elem,
seq($.generic_option_list, ',', $.generic_option_elem)
),
alter_generic_options: $ => prec.left(20, prec.dynamic(20, seq($.kw_options, '(', $.alter_generic_option_list, ')'))),
alter_generic_option_list: $ => choice(
$.alter_generic_option_elem,
seq($.alter_generic_option_list, ',', $.alter_generic_option_elem)
),
alter_generic_option_elem: $ => choice(
$.generic_option_elem,
prec.left(11, prec.dynamic(11, seq($.kw_set, $.generic_option_elem))),
seq($.kw_add, $.generic_option_elem),
seq($.kw_drop, $.generic_option_name)
),
generic_option_elem: $ => seq($.generic_option_name, $.generic_option_arg),
generic_option_name: $ => $.ColLabel,
generic_option_arg: $ => $.Sconst,
CreateForeignServerStmt: $ => choice(
seq($.kw_create, $.kw_server, $.name, optional($.opt_type), optional($.opt_foreign_server_version), $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, optional($.create_generic_options)),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_server, $.kw_if, $.kw_not, $.kw_exists, $.name, optional($.opt_type), optional($.opt_foreign_server_version), $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, optional($.create_generic_options))))
),
opt_type: $ => seq($.kw_type, $.Sconst),
foreign_server_version: $ => choice(
seq($.kw_version, $.Sconst),
seq($.kw_version, $.kw_null)
),
opt_foreign_server_version: $ => $.foreign_server_version,
AlterForeignServerStmt: $ => choice(
seq($.kw_alter, $.kw_server, $.name, $.foreign_server_version, $.alter_generic_options),
seq($.kw_alter, $.kw_server, $.name, $.foreign_server_version),
seq($.kw_alter, $.kw_server, $.name, $.alter_generic_options)
),
CreateForeignTableStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_foreign, $.kw_table, $.qualified_name, '(', optional($.OptTableElementList), ')', optional($.OptInherit), $.kw_server, $.name, optional($.create_generic_options)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_foreign, $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, '(', optional($.OptTableElementList), ')', optional($.OptInherit), $.kw_server, $.name, optional($.create_generic_options)))),
prec.left(11, prec.dynamic(11, seq($.kw_create, $.kw_foreign, $.kw_table, $.qualified_name, $.kw_partition, $.kw_of, $.qualified_name, optional($.OptTypedTableElementList), $.PartitionBoundSpec, $.kw_server, $.name, optional($.create_generic_options)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_foreign, $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.qualified_name, $.kw_partition, $.kw_of, $.qualified_name, optional($.OptTypedTableElementList), $.PartitionBoundSpec, $.kw_server, $.name, optional($.create_generic_options))))
),
ImportForeignSchemaStmt: $ => seq($.kw_import, $.kw_foreign, $.kw_schema, $.name, optional($.import_qualification), $.kw_from, $.kw_server, $.name, $.kw_into, $.name, optional($.create_generic_options)),
import_qualification_type: $ => choice(
seq($.kw_limit, $.kw_to),
prec.left(1, prec.dynamic(1, $.kw_except))
),
import_qualification: $ => prec.left(20, prec.dynamic(20, seq($.import_qualification_type, '(', $.relation_expr_list, ')'))),
CreateUserMappingStmt: $ => choice(
seq($.kw_create, $.kw_user, $.kw_mapping, $.kw_for, $.auth_ident, $.kw_server, $.name, optional($.create_generic_options)),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_user, $.kw_mapping, $.kw_if, $.kw_not, $.kw_exists, $.kw_for, $.auth_ident, $.kw_server, $.name, optional($.create_generic_options))))
),
auth_ident: $ => choice(
$.RoleSpec,
$.kw_user
),
DropUserMappingStmt: $ => choice(
seq($.kw_drop, $.kw_user, $.kw_mapping, $.kw_for, $.auth_ident, $.kw_server, $.name),
seq($.kw_drop, $.kw_user, $.kw_mapping, $.kw_if, $.kw_exists, $.kw_for, $.auth_ident, $.kw_server, $.name)
),
AlterUserMappingStmt: $ => seq($.kw_alter, $.kw_user, $.kw_mapping, $.kw_for, $.auth_ident, $.kw_server, $.name, $.alter_generic_options),
CreatePolicyStmt: $ => seq($.kw_create, $.kw_policy, $.name, $.kw_on, $.qualified_name, optional($.RowSecurityDefaultPermissive), optional($.RowSecurityDefaultForCmd), optional($.RowSecurityDefaultToRole), optional($.RowSecurityOptionalExpr), optional($.RowSecurityOptionalWithCheck)),
AlterPolicyStmt: $ => seq($.kw_alter, $.kw_policy, $.name, $.kw_on, $.qualified_name, optional($.RowSecurityOptionalToRole), optional($.RowSecurityOptionalExpr), optional($.RowSecurityOptionalWithCheck)),
RowSecurityOptionalExpr: $ => prec.left(20, prec.dynamic(20, seq($.kw_using, '(', $.a_expr, ')'))),
RowSecurityOptionalWithCheck: $ => prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_check, '(', $.a_expr, ')'))),
RowSecurityDefaultToRole: $ => seq($.kw_to, $.role_list),
RowSecurityOptionalToRole: $ => seq($.kw_to, $.role_list),
RowSecurityDefaultPermissive: $ => prec.left(11, prec.dynamic(11, seq($.kw_as, $._ident))),
RowSecurityDefaultForCmd: $ => seq($.kw_for, $.row_security_cmd),
row_security_cmd: $ => choice(
$.kw_all,
$.kw_select,
$.kw_insert,
$.kw_update,
$.kw_delete
),
CreateAmStmt: $ => seq($.kw_create, $.kw_access, $.kw_method, $.name, $.kw_type, $.am_type, $.kw_handler, $.handler_name),
am_type: $ => choice(
$.kw_index,
$.kw_table
),
CreateTrigStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.opt_or_replace), $.kw_trigger, $.name, $.TriggerActionTime, $.TriggerEvents, $.kw_on, $.qualified_name, optional($.TriggerReferencing), optional($.TriggerForSpec), optional($.TriggerWhen), $.kw_execute, $.FUNCTION_or_PROCEDURE, $.func_name, '(', optional($.TriggerFuncArgs), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.opt_or_replace), $.kw_constraint, $.kw_trigger, $.name, $.kw_after, $.TriggerEvents, $.kw_on, $.qualified_name, optional($.OptConstrFromTable), optional($.ConstraintAttributeSpec), $.kw_for, $.kw_each, $.kw_row, optional($.TriggerWhen), $.kw_execute, $.FUNCTION_or_PROCEDURE, $.func_name, '(', optional($.TriggerFuncArgs), ')')))
),
TriggerActionTime: $ => choice(
$.kw_before,
$.kw_after,
seq($.kw_instead, $.kw_of)
),
TriggerEvents: $ => choice(
$.TriggerOneEvent,
prec.left(3, prec.dynamic(3, seq($.TriggerEvents, $.kw_or, $.TriggerOneEvent)))
),
TriggerOneEvent: $ => choice(
$.kw_insert,
$.kw_delete,
$.kw_update,
seq($.kw_update, $.kw_of, $.columnList),
$.kw_truncate
),
TriggerReferencing: $ => seq($.kw_referencing, $.TriggerTransitions),
TriggerTransitions: $ => choice(
$.TriggerTransition,
seq($.TriggerTransitions, $.TriggerTransition)
),
TriggerTransition: $ => seq($.TransitionOldOrNew, $.TransitionRowOrTable, optional($.opt_as), $.TransitionRelName),
TransitionOldOrNew: $ => choice(
$.kw_new,
$.kw_old
),
TransitionRowOrTable: $ => choice(
$.kw_table,
$.kw_row
),
TransitionRelName: $ => $.ColId,
TriggerForSpec: $ => seq($.kw_for, optional($.TriggerForOptEach), $.TriggerForType),
TriggerForOptEach: $ => $.kw_each,
TriggerForType: $ => choice(
$.kw_row,
$.kw_statement
),
TriggerWhen: $ => prec.left(20, prec.dynamic(20, seq($.kw_when, '(', $.a_expr, ')'))),
FUNCTION_or_PROCEDURE: $ => choice(
$.kw_function,
$.kw_procedure
),
TriggerFuncArgs: $ => choice(
$.TriggerFuncArg,
seq(optional($.TriggerFuncArgs), ',', $.TriggerFuncArg)
),
TriggerFuncArg: $ => choice(
$.Iconst,
$.float_literal,
$.Sconst,
$.ColLabel
),
OptConstrFromTable: $ => seq($.kw_from, $.qualified_name),
ConstraintAttributeSpec: $ => seq(optional($.ConstraintAttributeSpec), $.ConstraintAttributeElem),
ConstraintAttributeElem: $ => choice(
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_deferrable))),
$.kw_deferrable,
seq($.kw_initially, $.kw_immediate),
seq($.kw_initially, $.kw_deferred),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_valid))),
seq($.kw_no, $.kw_inherit),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_enforced))),
$.kw_enforced
),
CreateEventTrigStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_event, $.kw_trigger, $.name, $.kw_on, $.ColLabel, $.kw_execute, $.FUNCTION_or_PROCEDURE, $.func_name, '(', ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_event, $.kw_trigger, $.name, $.kw_on, $.ColLabel, $.kw_when, $.event_trigger_when_list, $.kw_execute, $.FUNCTION_or_PROCEDURE, $.func_name, '(', ')')))
),
event_trigger_when_list: $ => choice(
$.event_trigger_when_item,
prec.left(4, prec.dynamic(4, seq($.event_trigger_when_list, $.kw_and, $.event_trigger_when_item)))
),
event_trigger_when_item: $ => prec.left(8, prec.dynamic(8, seq($.ColId, $.kw_in, '(', $.event_trigger_value_list, ')'))),
event_trigger_value_list: $ => choice(
choice($.string_literal, $.dollar_quoted_string),
seq($.event_trigger_value_list, ',', choice($.string_literal, $.dollar_quoted_string))
),
AlterEventTrigStmt: $ => seq($.kw_alter, $.kw_event, $.kw_trigger, $.name, $.enable_trigger),
enable_trigger: $ => choice(
$.kw_enable,
seq($.kw_enable, $.kw_replica),
seq($.kw_enable, $.kw_always),
$.kw_disable
),
CreateAssertionStmt: $ => prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_assertion, $.any_name, $.kw_check, '(', $.a_expr, ')', optional($.ConstraintAttributeSpec)))),
DefineStmt: $ => choice(
seq($.kw_create, optional($.opt_or_replace), $.kw_aggregate, $.func_name, $.aggr_args, $.definition),
seq($.kw_create, optional($.opt_or_replace), $.kw_aggregate, $.func_name, $.old_aggr_definition),
prec.left(12, prec.dynamic(12, seq($.kw_create, $.kw_operator, $.any_operator, $.definition))),
seq($.kw_create, $.kw_type, $.any_name, $.definition),
seq($.kw_create, $.kw_type, $.any_name),
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_type, $.any_name, $.kw_as, '(', optional($.OptTableFuncElementList), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_type, $.any_name, $.kw_as, $.kw_enum, '(', optional($.opt_enum_val_list), ')'))),
prec.left(11, prec.dynamic(11, seq($.kw_create, $.kw_type, $.any_name, $.kw_as, $.kw_range, $.definition))),
seq($.kw_create, $.kw_text, $.kw_search, $.kw_parser, $.any_name, $.definition),
seq($.kw_create, $.kw_text, $.kw_search, $.kw_dictionary, $.any_name, $.definition),
seq($.kw_create, $.kw_text, $.kw_search, $.kw_template, $.any_name, $.definition),
seq($.kw_create, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.definition),
seq($.kw_create, $.kw_collation, $.any_name, $.definition),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_collation, $.kw_if, $.kw_not, $.kw_exists, $.any_name, $.definition))),
seq($.kw_create, $.kw_collation, $.any_name, $.kw_from, $.any_name),
prec.right(5, prec.dynamic(5, seq($.kw_create, $.kw_collation, $.kw_if, $.kw_not, $.kw_exists, $.any_name, $.kw_from, $.any_name)))
),
definition: $ => prec.left(20, prec.dynamic(20, seq('(', $.def_list, ')'))),
def_list: $ => choice(
$.def_elem,
seq($.def_list, ',', $.def_elem)
),
def_elem: $ => choice(
prec.left(7, prec.dynamic(7, seq($.ColLabel, '=', $.def_arg))),
$.ColLabel
),
def_arg: $ => choice(
$.func_type,
$.reserved_keyword,
$.qual_all_Op,
$.NumericOnly,
$.Sconst,
$.kw_none
),
old_aggr_definition: $ => prec.left(20, prec.dynamic(20, seq('(', $.old_aggr_list, ')'))),
old_aggr_list: $ => choice(
$.old_aggr_elem,
seq($.old_aggr_list, ',', $.old_aggr_elem)
),
old_aggr_elem: $ => prec.left(11, prec.dynamic(11, seq($._ident, '=', $.def_arg))),
opt_enum_val_list: $ => $.enum_val_list,
enum_val_list: $ => choice(
$.Sconst,
seq($.enum_val_list, ',', $.Sconst)
),
AlterEnumStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_add, $.kw_value, optional($.opt_if_not_exists), $.Sconst))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_add, $.kw_value, optional($.opt_if_not_exists), $.Sconst, $.kw_before, $.Sconst))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_add, $.kw_value, optional($.opt_if_not_exists), $.Sconst, $.kw_after, $.Sconst))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_rename, $.kw_value, $.Sconst, $.kw_to, $.Sconst))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_drop, $.kw_value, $.Sconst)))
),
opt_if_not_exists: $ => prec.right(5, prec.dynamic(5, seq($.kw_if, $.kw_not, $.kw_exists))),
CreateOpClassStmt: $ => prec.left(12, prec.dynamic(12, seq($.kw_create, $.kw_operator, $.kw_class, $.any_name, optional($.opt_default), $.kw_for, $.kw_type, $.Typename, $.kw_using, $.name, optional($.opt_opfamily), $.kw_as, $.opclass_item_list))),
opclass_item_list: $ => choice(
$.opclass_item,
seq($.opclass_item_list, ',', $.opclass_item)
),
opclass_item: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_operator, $.Iconst, $.any_operator, optional($.opclass_purpose)))),
prec.left(12, prec.dynamic(12, seq($.kw_operator, $.Iconst, $.operator_with_argtypes, optional($.opclass_purpose)))),
seq($.kw_function, $.Iconst, $.function_with_argtypes),
prec.left(20, prec.dynamic(20, seq($.kw_function, $.Iconst, '(', $.type_list, ')', $.function_with_argtypes))),
seq($.kw_storage, $.Typename)
),
opt_default: $ => $.kw_default,
opt_opfamily: $ => seq($.kw_family, $.any_name),
opclass_purpose: $ => choice(
seq($.kw_for, $.kw_search),
seq($.kw_for, $.kw_order, $.kw_by, $.any_name)
),
CreateOpFamilyStmt: $ => prec.left(12, prec.dynamic(12, seq($.kw_create, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name))),
AlterOpFamilyStmt: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_add, $.opclass_item_list))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_drop, $.opclass_drop_list)))
),
opclass_drop_list: $ => choice(
$.opclass_drop,
seq($.opclass_drop_list, ',', $.opclass_drop)
),
opclass_drop: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_operator, $.Iconst, '(', $.type_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_function, $.Iconst, '(', $.type_list, ')')))
),
DropOpClassStmt: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name, optional($.opt_drop_behavior)))),
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.kw_class, $.kw_if, $.kw_exists, $.any_name, $.kw_using, $.name, optional($.opt_drop_behavior))))
),
DropOpFamilyStmt: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, optional($.opt_drop_behavior)))),
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.kw_family, $.kw_if, $.kw_exists, $.any_name, $.kw_using, $.name, optional($.opt_drop_behavior))))
),
DropOwnedStmt: $ => seq($.kw_drop, $.kw_owned, $.kw_by, $.role_list, optional($.opt_drop_behavior)),
ReassignOwnedStmt: $ => seq($.kw_reassign, $.kw_owned, $.kw_by, $.role_list, $.kw_to, $.RoleSpec),
DropStmt: $ => choice(
seq($.kw_drop, $.object_type_any_name, $.kw_if, $.kw_exists, $.any_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.object_type_any_name, $.any_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.drop_type_name, $.kw_if, $.kw_exists, $.name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.drop_type_name, $.name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.object_type_name_on_any_name, $.name, $.kw_on, $.any_name, optional($.opt_drop_behavior)),
seq($.kw_drop, $.object_type_name_on_any_name, $.kw_if, $.kw_exists, $.name, $.kw_on, $.any_name, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_type, $.type_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_type, $.kw_if, $.kw_exists, $.type_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_domain, $.type_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_domain, $.kw_if, $.kw_exists, $.type_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_index, $.kw_concurrently, $.any_name_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_index, $.kw_concurrently, $.kw_if, $.kw_exists, $.any_name_list, optional($.opt_drop_behavior))
),
object_type_any_name: $ => choice(
$.kw_table,
$.kw_sequence,
$.kw_view,
seq($.kw_materialized, $.kw_view),
$.kw_index,
seq($.kw_foreign, $.kw_table),
$.kw_collation,
$.kw_conversion,
$.kw_statistics,
seq($.kw_text, $.kw_search, $.kw_parser),
seq($.kw_text, $.kw_search, $.kw_dictionary),
seq($.kw_text, $.kw_search, $.kw_template),
seq($.kw_text, $.kw_search, $.kw_configuration)
),
object_type_name: $ => choice(
$.drop_type_name,
$.kw_database,
$.kw_role,
$.kw_subscription,
$.kw_tablespace
),
drop_type_name: $ => choice(
seq($.kw_access, $.kw_method),
seq($.kw_event, $.kw_trigger),
$.kw_extension,
seq($.kw_foreign, $.kw_data, $.kw_wrapper),
seq(optional($.opt_procedural), $.kw_language),
$.kw_publication,
$.kw_schema,
$.kw_server
),
object_type_name_on_any_name: $ => choice(
$.kw_policy,
$.kw_rule,
$.kw_trigger
),
any_name_list: $ => choice(
$.any_name,
seq($.any_name_list, ',', $.any_name)
),
any_name: $ => choice(
$.ColId,
seq($.ColId, $.attrs)
),
attrs: $ => choice(
prec.left(22, prec.dynamic(22, seq('.', $.attr_name))),
prec.left(22, prec.dynamic(22, seq($.attrs, '.', $.attr_name)))
),
type_name_list: $ => choice(
$.Typename,
seq($.type_name_list, ',', $.Typename)
),
TruncateStmt: $ => seq($.kw_truncate, optional($.opt_table), $.relation_expr_list, optional($.opt_restart_seqs), optional($.opt_drop_behavior)),
opt_restart_seqs: $ => choice(
seq($.kw_continue, $.kw_identity),
seq($.kw_restart, $.kw_identity)
),
CommentStmt: $ => choice(
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.object_type_any_name, $.any_name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_column, $.any_name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.object_type_name, $.name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_type, $.Typename, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_domain, $.Typename, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_aggregate, $.aggregate_with_argtypes, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_function, $.function_with_argtypes, $.kw_is, $.comment_text))),
prec.left(12, prec.dynamic(12, seq($.kw_comment, $.kw_on, $.kw_operator, $.operator_with_argtypes, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_constraint, $.name, $.kw_on, $.any_name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_constraint, $.name, $.kw_on, $.kw_domain, $.any_name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.object_type_name_on_any_name, $.name, $.kw_on, $.any_name, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_procedure, $.function_with_argtypes, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_routine, $.function_with_argtypes, $.kw_is, $.comment_text))),
prec.left(6, prec.dynamic(6, seq($.kw_comment, $.kw_on, $.kw_transform, $.kw_for, $.Typename, $.kw_language, $.name, $.kw_is, $.comment_text))),
prec.left(12, prec.dynamic(12, seq($.kw_comment, $.kw_on, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name, $.kw_is, $.comment_text))),
prec.left(12, prec.dynamic(12, seq($.kw_comment, $.kw_on, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_is, $.comment_text))),
prec.left(11, prec.dynamic(11, seq($.kw_comment, $.kw_on, $.kw_large, $.kw_object, $.NumericOnly, $.kw_is, $.comment_text))),
prec.left(20, prec.dynamic(20, seq($.kw_comment, $.kw_on, $.kw_cast, '(', $.Typename, $.kw_as, $.Typename, ')', $.kw_is, $.comment_text)))
),
comment_text: $ => choice(
$.Sconst,
$.kw_null
),
SecLabelStmt: $ => choice(
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.object_type_any_name, $.any_name, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_column, $.any_name, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.object_type_name, $.name, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_type, $.Typename, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_domain, $.Typename, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_aggregate, $.aggregate_with_argtypes, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_function, $.function_with_argtypes, $.kw_is, $.security_label))),
prec.left(11, prec.dynamic(11, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_large, $.kw_object, $.NumericOnly, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_procedure, $.function_with_argtypes, $.kw_is, $.security_label))),
prec.left(6, prec.dynamic(6, seq($.kw_security, $.kw_label, optional($.opt_provider), $.kw_on, $.kw_routine, $.function_with_argtypes, $.kw_is, $.security_label)))
),
opt_provider: $ => seq($.kw_for, $.NonReservedWord_or_Sconst),
security_label: $ => choice(
$.Sconst,
$.kw_null
),
FetchStmt: $ => choice(
seq($.kw_fetch, $.fetch_args),
seq($.kw_move, $.fetch_args)
),
fetch_args: $ => choice(
$.cursor_name,
seq($.from_in, $.cursor_name),
seq($.kw_next, optional($.opt_from_in), $.cursor_name),
seq($.kw_prior, optional($.opt_from_in), $.cursor_name),
seq($.kw_first, optional($.opt_from_in), $.cursor_name),
seq($.kw_last, optional($.opt_from_in), $.cursor_name),
seq($.kw_absolute, $.SignedIconst, optional($.opt_from_in), $.cursor_name),
seq($.kw_relative, $.SignedIconst, optional($.opt_from_in), $.cursor_name),
seq($.SignedIconst, optional($.opt_from_in), $.cursor_name),
seq($.kw_all, optional($.opt_from_in), $.cursor_name),
seq($.kw_forward, optional($.opt_from_in), $.cursor_name),
seq($.kw_forward, $.SignedIconst, optional($.opt_from_in), $.cursor_name),
seq($.kw_forward, $.kw_all, optional($.opt_from_in), $.cursor_name),
seq($.kw_backward, optional($.opt_from_in), $.cursor_name),
seq($.kw_backward, $.SignedIconst, optional($.opt_from_in), $.cursor_name),
seq($.kw_backward, $.kw_all, optional($.opt_from_in), $.cursor_name)
),
from_in: $ => choice(
$.kw_from,
prec.left(8, prec.dynamic(8, $.kw_in))
),
opt_from_in: $ => $.from_in,
GrantStmt: $ => seq($.kw_grant, $.privileges, $.kw_on, $.privilege_target, $.kw_to, $.grantee_list, optional($.opt_grant_grant_option), optional($.opt_granted_by)),
RevokeStmt: $ => choice(
seq($.kw_revoke, $.privileges, $.kw_on, $.privilege_target, $.kw_from, $.grantee_list, optional($.opt_granted_by), optional($.opt_drop_behavior)),
seq($.kw_revoke, $.kw_grant, $.kw_option, $.kw_for, $.privileges, $.kw_on, $.privilege_target, $.kw_from, $.grantee_list, optional($.opt_granted_by), optional($.opt_drop_behavior))
),
privileges: $ => choice(
$.privilege_list,
$.kw_all,
seq($.kw_all, $.kw_privileges),
prec.left(20, prec.dynamic(20, seq($.kw_all, '(', $.columnList, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_all, $.kw_privileges, '(', $.columnList, ')')))
),
privilege_list: $ => choice(
$.privilege,
seq($.privilege_list, ',', $.privilege)
),
privilege: $ => choice(
seq($.kw_select, optional($.opt_column_list)),
seq($.kw_references, optional($.opt_column_list)),
seq($.kw_create, optional($.opt_column_list)),
seq($.kw_alter, $.kw_system),
seq($.ColId, optional($.opt_column_list))
),
parameter_name_list: $ => choice(
$.parameter_name,
seq($.parameter_name_list, ',', $.parameter_name)
),
parameter_name: $ => choice(
$.ColId,
prec.left(22, prec.dynamic(22, seq($.parameter_name, '.', $.ColId)))
),
privilege_target: $ => choice(
$.qualified_name_list,
seq($.kw_table, $.qualified_name_list),
seq($.kw_sequence, $.qualified_name_list),
seq($.kw_foreign, $.kw_data, $.kw_wrapper, $.name_list),
seq($.kw_foreign, $.kw_server, $.name_list),
seq($.kw_function, $.function_with_argtypes_list),
seq($.kw_procedure, $.function_with_argtypes_list),
seq($.kw_routine, $.function_with_argtypes_list),
seq($.kw_database, $.name_list),
seq($.kw_domain, $.any_name_list),
seq($.kw_language, $.name_list),
prec.left(11, prec.dynamic(11, seq($.kw_large, $.kw_object, $.NumericOnly_list))),
seq($.kw_parameter, $.parameter_name_list),
seq($.kw_schema, $.name_list),
seq($.kw_tablespace, $.name_list),
seq($.kw_type, $.any_name_list),
prec.left(8, prec.dynamic(8, seq($.kw_all, $.kw_tables, $.kw_in, $.kw_schema, $.name_list))),
prec.left(8, prec.dynamic(8, seq($.kw_all, $.kw_sequences, $.kw_in, $.kw_schema, $.name_list))),
prec.left(8, prec.dynamic(8, seq($.kw_all, $.kw_functions, $.kw_in, $.kw_schema, $.name_list))),
prec.left(8, prec.dynamic(8, seq($.kw_all, $.kw_procedures, $.kw_in, $.kw_schema, $.name_list))),
prec.left(8, prec.dynamic(8, seq($.kw_all, $.kw_routines, $.kw_in, $.kw_schema, $.name_list)))
),
grantee_list: $ => choice(
$.grantee,
seq($.grantee_list, ',', $.grantee)
),
grantee: $ => choice(
$.RoleSpec,
seq($.kw_group, $.RoleSpec)
),
opt_grant_grant_option: $ => prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_grant, $.kw_option))),
GrantRoleStmt: $ => choice(
seq($.kw_grant, $.privilege_list, $.kw_to, $.role_list, optional($.opt_granted_by)),
prec.left(11, prec.dynamic(11, seq($.kw_grant, $.privilege_list, $.kw_to, $.role_list, $.kw_with, $.grant_role_opt_list, optional($.opt_granted_by))))
),
RevokeRoleStmt: $ => choice(
seq($.kw_revoke, $.privilege_list, $.kw_from, $.role_list, optional($.opt_granted_by), optional($.opt_drop_behavior)),
seq($.kw_revoke, $.ColId, $.kw_option, $.kw_for, $.privilege_list, $.kw_from, $.role_list, optional($.opt_granted_by), optional($.opt_drop_behavior))
),
grant_role_opt_list: $ => choice(
seq($.grant_role_opt_list, ',', $.grant_role_opt),
$.grant_role_opt
),
grant_role_opt: $ => seq($.ColLabel, $.grant_role_opt_value),
grant_role_opt_value: $ => choice(
$.kw_option,
$.kw_true,
$.kw_false
),
opt_granted_by: $ => seq($.kw_granted, $.kw_by, $.RoleSpec),
AlterDefaultPrivilegesStmt: $ => seq($.kw_alter, $.kw_default, $.kw_privileges, optional($.DefACLOptionList), $.DefACLAction),
DefACLOptionList: $ => seq(optional($.DefACLOptionList), $.DefACLOption),
DefACLOption: $ => choice(
prec.left(8, prec.dynamic(8, seq($.kw_in, $.kw_schema, $.name_list))),
seq($.kw_for, $.kw_role, $.role_list),
seq($.kw_for, $.kw_user, $.role_list)
),
DefACLAction: $ => choice(
seq($.kw_grant, $.privileges, $.kw_on, $.defacl_privilege_target, $.kw_to, $.grantee_list, optional($.opt_grant_grant_option)),
seq($.kw_revoke, $.privileges, $.kw_on, $.defacl_privilege_target, $.kw_from, $.grantee_list, optional($.opt_drop_behavior)),
seq($.kw_revoke, $.kw_grant, $.kw_option, $.kw_for, $.privileges, $.kw_on, $.defacl_privilege_target, $.kw_from, $.grantee_list, optional($.opt_drop_behavior))
),
defacl_privilege_target: $ => choice(
$.kw_tables,
$.kw_functions,
$.kw_routines,
$.kw_sequences,
$.kw_types,
$.kw_schemas,
seq($.kw_large, $.kw_objects)
),
IndexStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.opt_unique), $.kw_index, optional($.opt_concurrently), optional($.opt_single_name), $.kw_on, $.relation_expr, optional($.access_method_clause), '(', $.index_params, ')', optional($.opt_include), optional($.opt_unique_null_treatment), optional($.opt_reloptions), optional($.OptTableSpace), optional($.where_clause)))),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.opt_unique), $.kw_index, optional($.opt_concurrently), $.kw_if, $.kw_not, $.kw_exists, $.name, $.kw_on, $.relation_expr, optional($.access_method_clause), '(', $.index_params, ')', optional($.opt_include), optional($.opt_unique_null_treatment), optional($.opt_reloptions), optional($.OptTableSpace), optional($.where_clause))))
),
opt_unique: $ => $.kw_unique,
access_method_clause: $ => seq($.kw_using, $.name),
index_params: $ => choice(
$.index_elem,
seq($.index_params, ',', $.index_elem)
),
index_elem_options: $ => choice(
choice(
seq($.opt_collate, optional($.opt_qualified_name), optional($.opt_asc_desc), optional($.opt_nulls_order)),
seq($.opt_qualified_name, optional($.opt_asc_desc), optional($.opt_nulls_order)),
seq($.opt_asc_desc, optional($.opt_nulls_order)),
$.opt_nulls_order
),
seq(optional($.opt_collate), $.any_name, $.reloptions, optional($.opt_asc_desc), optional($.opt_nulls_order))
),
index_elem: $ => choice(
seq($.ColId, optional($.index_elem_options)),
seq($.func_expr_windowless, optional($.index_elem_options)),
prec.left(20, prec.dynamic(20, seq('(', $.a_expr, ')', optional($.index_elem_options))))
),
opt_include: $ => prec.left(20, prec.dynamic(20, seq($.kw_include, '(', $.index_including_params, ')'))),
index_including_params: $ => choice(
$.index_elem,
seq($.index_including_params, ',', $.index_elem)
),
opt_collate: $ => prec.left(17, prec.dynamic(17, seq($.kw_collate, $.any_name))),
opt_asc_desc: $ => choice(
$.kw_asc,
$.kw_desc
),
opt_nulls_order: $ => choice(
seq($.kw_nulls, $.kw_first),
seq($.kw_nulls, $.kw_last)
),
CreateFunctionStmt: $ => choice(
seq($.kw_create, optional($.opt_or_replace), $.kw_function, $.func_name, $.func_args_with_defaults, $.kw_returns, $.func_return, optional($.opt_createfunc_opt_list), optional($.opt_routine_body)),
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.opt_or_replace), $.kw_function, $.func_name, $.func_args_with_defaults, $.kw_returns, $.kw_table, '(', $.table_func_column_list, ')', optional($.opt_createfunc_opt_list), optional($.opt_routine_body)))),
seq($.kw_create, optional($.opt_or_replace), $.kw_function, $.func_name, $.func_args_with_defaults, optional($.opt_createfunc_opt_list), optional($.opt_routine_body)),
seq($.kw_create, optional($.opt_or_replace), $.kw_procedure, $.func_name, $.func_args_with_defaults, optional($.opt_createfunc_opt_list), optional($.opt_routine_body))
),
opt_or_replace: $ => prec.left(3, prec.dynamic(3, seq($.kw_or, $.kw_replace))),
func_args: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.func_args_list, ')'))),
prec.left(20, prec.dynamic(20, seq('(', ')')))
),
func_args_list: $ => choice(
$.func_arg,
seq($.func_args_list, ',', $.func_arg)
),
function_with_argtypes_list: $ => choice(
$.function_with_argtypes,
seq($.function_with_argtypes_list, ',', $.function_with_argtypes)
),
function_with_argtypes: $ => choice(
seq($.func_name, $.func_args),
$.type_func_name_keyword,
$.ColId,
seq($.ColId, $.indirection)
),
func_args_with_defaults: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.func_args_with_defaults_list, ')'))),
prec.left(20, prec.dynamic(20, seq('(', ')')))
),
func_args_with_defaults_list: $ => choice(
$.func_arg_with_default,
seq($.func_args_with_defaults_list, ',', $.func_arg_with_default)
),
func_arg: $ => choice(
seq($.arg_class, $.param_name, $.func_type),
seq($.param_name, $.arg_class, $.func_type),
seq($.param_name, $.func_type),
seq($.arg_class, $.func_type),
$.func_type
),
arg_class: $ => choice(
prec.left(8, prec.dynamic(8, $.kw_in)),
$.kw_out,
$.kw_inout,
prec.left(8, prec.dynamic(8, seq($.kw_in, $.kw_out))),
$.kw_variadic
),
param_name: $ => $.type_function_name,
func_return: $ => $.func_type,
func_type: $ => choice(
$.Typename,
prec.left(14, prec.dynamic(14, seq($.type_function_name, $.attrs, '%', $.kw_type))),
prec.left(14, prec.dynamic(14, seq($.kw_setof, $.type_function_name, $.attrs, '%', $.kw_type)))
),
func_arg_with_default: $ => choice(
$.func_arg,
seq($.func_arg, $.kw_default, $.a_expr),
prec.left(7, prec.dynamic(7, seq($.func_arg, '=', $.a_expr)))
),
aggr_arg: $ => $.func_arg,
aggr_args: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', '*', ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.aggr_args_list, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.kw_order, $.kw_by, $.aggr_args_list, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.aggr_args_list, $.kw_order, $.kw_by, $.aggr_args_list, ')')))
),
aggr_args_list: $ => choice(
$.aggr_arg,
seq($.aggr_args_list, ',', $.aggr_arg)
),
aggregate_with_argtypes: $ => seq($.func_name, $.aggr_args),
aggregate_with_argtypes_list: $ => choice(
$.aggregate_with_argtypes,
seq($.aggregate_with_argtypes_list, ',', $.aggregate_with_argtypes)
),
opt_createfunc_opt_list: $ => $.createfunc_opt_list,
createfunc_opt_list: $ => choice(
$.createfunc_opt_item,
seq($.createfunc_opt_list, $.createfunc_opt_item)
),
common_func_opt_item: $ => choice(
seq($.kw_called, $.kw_on, $.kw_null, $.kw_input),
seq($.kw_returns, $.kw_null, $.kw_on, $.kw_null, $.kw_input),
$.kw_strict,
$.kw_immutable,
$.kw_stable,
$.kw_volatile,
seq($.kw_external, $.kw_security, $.kw_definer),
seq($.kw_external, $.kw_security, $.kw_invoker),
seq($.kw_security, $.kw_definer),
seq($.kw_security, $.kw_invoker),
$.kw_leakproof,
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_leakproof))),
seq($.kw_cost, $.NumericOnly),
prec.left(11, prec.dynamic(11, seq($.kw_rows, $.NumericOnly))),
seq($.kw_support, $.any_name),
$.FunctionSetResetClause,
seq($.kw_parallel, $.ColId)
),
createfunc_opt_item: $ => choice(
seq($.kw_as, $.func_as),
seq($.kw_language, $.NonReservedWord_or_Sconst),
seq($.kw_transform, $.transform_type_list),
$.kw_window,
$.common_func_opt_item
),
func_as: $ => choice(
$.Sconst,
seq($.Sconst, ',', $.Sconst)
),
ReturnStmt: $ => seq($.kw_return, $.a_expr),
opt_routine_body: $ => choice(
$.ReturnStmt,
seq($.kw_begin, $.kw_atomic, optional($.routine_body_stmt_list), $.kw_end)
),
routine_body_stmt_list: $ => seq(optional($.routine_body_stmt_list), optional($.routine_body_stmt), ';'),
routine_body_stmt: $ => choice(
$.stmt,
$.ReturnStmt
),
transform_type_list: $ => choice(
seq($.kw_for, $.kw_type, $.Typename),
seq($.transform_type_list, ',', $.kw_for, $.kw_type, $.Typename)
),
opt_definition: $ => prec.left(11, prec.dynamic(11, seq($.kw_with, $.definition))),
table_func_column: $ => seq($.param_name, $.func_type),
table_func_column_list: $ => choice(
$.table_func_column,
seq($.table_func_column_list, ',', $.table_func_column)
),
AlterFunctionStmt: $ => choice(
seq($.kw_alter, $.kw_function, $.function_with_argtypes, $.alterfunc_opt_list, optional($.opt_restrict)),
seq($.kw_alter, $.kw_procedure, $.function_with_argtypes, $.alterfunc_opt_list, optional($.opt_restrict)),
seq($.kw_alter, $.kw_routine, $.function_with_argtypes, $.alterfunc_opt_list, optional($.opt_restrict))
),
alterfunc_opt_list: $ => choice(
$.common_func_opt_item,
seq($.alterfunc_opt_list, $.common_func_opt_item)
),
opt_restrict: $ => $.kw_restrict,
RemoveFuncStmt: $ => choice(
seq($.kw_drop, $.kw_function, $.function_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_function, $.kw_if, $.kw_exists, $.function_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_procedure, $.function_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_procedure, $.kw_if, $.kw_exists, $.function_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_routine, $.function_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_routine, $.kw_if, $.kw_exists, $.function_with_argtypes_list, optional($.opt_drop_behavior))
),
RemoveAggrStmt: $ => choice(
seq($.kw_drop, $.kw_aggregate, $.aggregate_with_argtypes_list, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_aggregate, $.kw_if, $.kw_exists, $.aggregate_with_argtypes_list, optional($.opt_drop_behavior))
),
RemoveOperStmt: $ => choice(
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.operator_with_argtypes_list, optional($.opt_drop_behavior)))),
prec.left(12, prec.dynamic(12, seq($.kw_drop, $.kw_operator, $.kw_if, $.kw_exists, $.operator_with_argtypes_list, optional($.opt_drop_behavior))))
),
oper_argtypes: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.Typename, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.Typename, ',', $.Typename, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.kw_none, ',', $.Typename, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.Typename, ',', $.kw_none, ')')))
),
any_operator: $ => choice(
$.all_Op,
prec.left(22, prec.dynamic(22, seq($.ColId, '.', $.any_operator)))
),
operator_with_argtypes_list: $ => choice(
$.operator_with_argtypes,
seq($.operator_with_argtypes_list, ',', $.operator_with_argtypes)
),
operator_with_argtypes: $ => seq($.any_operator, $.oper_argtypes),
DoStmt: $ => seq($.kw_do, $.dostmt_opt_list),
dostmt_opt_list: $ => choice(
$.dostmt_opt_item,
seq($.dostmt_opt_list, $.dostmt_opt_item)
),
dostmt_opt_item: $ => choice(
$.Sconst,
seq($.kw_language, $.NonReservedWord_or_Sconst)
),
CreateCastStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_cast, '(', $.Typename, $.kw_as, $.Typename, ')', $.kw_with, $.kw_function, $.function_with_argtypes, optional($.cast_context)))),
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_cast, '(', $.Typename, $.kw_as, $.Typename, ')', $.kw_without, $.kw_function, optional($.cast_context)))),
prec.left(20, prec.dynamic(20, seq($.kw_create, $.kw_cast, '(', $.Typename, $.kw_as, $.Typename, ')', $.kw_with, $.kw_inout, optional($.cast_context))))
),
cast_context: $ => choice(
seq($.kw_as, $.kw_implicit),
seq($.kw_as, $.kw_assignment)
),
DropCastStmt: $ => prec.left(20, prec.dynamic(20, seq($.kw_drop, $.kw_cast, optional($.opt_if_exists), '(', $.Typename, $.kw_as, $.Typename, ')', optional($.opt_drop_behavior)))),
opt_if_exists: $ => seq($.kw_if, $.kw_exists),
CreateTransformStmt: $ => prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.opt_or_replace), $.kw_transform, $.kw_for, $.Typename, $.kw_language, $.name, '(', $.transform_element_list, ')'))),
transform_element_list: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_from, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes, ',', $.kw_to, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes))),
prec.left(11, prec.dynamic(11, seq($.kw_to, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes, ',', $.kw_from, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes))),
prec.left(11, prec.dynamic(11, seq($.kw_from, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes))),
prec.left(11, prec.dynamic(11, seq($.kw_to, $.kw_sql, $.kw_with, $.kw_function, $.function_with_argtypes)))
),
DropTransformStmt: $ => seq($.kw_drop, $.kw_transform, optional($.opt_if_exists), $.kw_for, $.Typename, $.kw_language, $.name, optional($.opt_drop_behavior)),
ReindexStmt: $ => choice(
seq($.kw_reindex, optional($.opt_reindex_option_list), $.reindex_target_relation, optional($.opt_concurrently), $.qualified_name),
seq($.kw_reindex, optional($.opt_reindex_option_list), $.kw_schema, optional($.opt_concurrently), $.name),
seq($.kw_reindex, optional($.opt_reindex_option_list), $.reindex_target_all, optional($.opt_concurrently), optional($.opt_single_name))
),
reindex_target_relation: $ => choice(
$.kw_index,
$.kw_table
),
reindex_target_all: $ => choice(
$.kw_system,
$.kw_database
),
opt_reindex_option_list: $ => prec.left(20, prec.dynamic(20, seq('(', $.utility_option_list, ')'))),
AlterTblSpcStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_tablespace, $.name, $.kw_set, $.reloptions))),
seq($.kw_alter, $.kw_tablespace, $.name, $.kw_reset, $.reloptions)
),
RenameStmt: $ => choice(
seq($.kw_alter, $.kw_aggregate, $.aggregate_with_argtypes, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_collation, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_conversion, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_database, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_rename, $.kw_constraint, $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_function, $.function_with_argtypes, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_group, $.RoleId, $.kw_rename, $.kw_to, $.RoleId),
seq($.kw_alter, optional($.opt_procedural), $.kw_language, $.name, $.kw_rename, $.kw_to, $.name),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name, $.kw_rename, $.kw_to, $.name))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_rename, $.kw_to, $.name))),
seq($.kw_alter, $.kw_policy, $.name, $.kw_on, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_policy, $.kw_if, $.kw_exists, $.name, $.kw_on, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_procedure, $.function_with_argtypes, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_publication, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_routine, $.function_with_argtypes, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_schema, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_server, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.relation_expr, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_sequence, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_sequence, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_view, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_index, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_index, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.relation_expr, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.relation_expr, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_view, $.qualified_name, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.qualified_name, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.relation_expr, $.kw_rename, $.kw_constraint, $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_rename, $.kw_constraint, $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.relation_expr, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_foreign, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_rename, optional($.opt_column), $.name, $.kw_to, $.name),
seq($.kw_alter, $.kw_rule, $.name, $.kw_on, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_trigger, $.name, $.kw_on, $.qualified_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_event, $.kw_trigger, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_role, $.RoleId, $.kw_rename, $.kw_to, $.RoleId),
seq($.kw_alter, $.kw_user, $.RoleId, $.kw_rename, $.kw_to, $.RoleId),
seq($.kw_alter, $.kw_tablespace, $.name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_statistics, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_parser, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_dictionary, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_template, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_type, $.any_name, $.kw_rename, $.kw_to, $.name),
seq($.kw_alter, $.kw_type, $.any_name, $.kw_rename, $.kw_attribute, $.name, $.kw_to, $.name, optional($.opt_drop_behavior))
),
opt_column: $ => $.kw_column,
opt_set_data: $ => prec.left(11, prec.dynamic(11, seq($.kw_set, $.kw_data))),
AlterObjectDependsStmt: $ => choice(
seq($.kw_alter, $.kw_function, $.function_with_argtypes, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name),
seq($.kw_alter, $.kw_procedure, $.function_with_argtypes, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name),
seq($.kw_alter, $.kw_routine, $.function_with_argtypes, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name),
seq($.kw_alter, $.kw_trigger, $.name, $.kw_on, $.qualified_name, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name),
seq($.kw_alter, $.kw_materialized, $.kw_view, $.qualified_name, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name),
seq($.kw_alter, $.kw_index, $.qualified_name, optional($.opt_no), $.kw_depends, $.kw_on, $.kw_extension, $.name)
),
opt_no: $ => $.kw_no,
AlterObjectSchemaStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_aggregate, $.aggregate_with_argtypes, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_collation, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_conversion, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_domain, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_extension, $.name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_function, $.function_with_argtypes, $.kw_set, $.kw_schema, $.name))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.operator_with_argtypes, $.kw_set, $.kw_schema, $.name))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name, $.kw_set, $.kw_schema, $.name))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_procedure, $.function_with_argtypes, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_routine, $.function_with_argtypes, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_table, $.relation_expr, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_statistics, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_text, $.kw_search, $.kw_parser, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_text, $.kw_search, $.kw_dictionary, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_text, $.kw_search, $.kw_template, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_sequence, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_sequence, $.kw_if, $.kw_exists, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_view, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_materialized, $.kw_view, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_materialized, $.kw_view, $.kw_if, $.kw_exists, $.qualified_name, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_foreign, $.kw_table, $.relation_expr, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_foreign, $.kw_table, $.kw_if, $.kw_exists, $.relation_expr, $.kw_set, $.kw_schema, $.name))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_set, $.kw_schema, $.name)))
),
AlterOperatorStmt: $ => prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.operator_with_argtypes, $.kw_set, '(', $.operator_def_list, ')'))),
operator_def_list: $ => choice(
$.operator_def_elem,
seq($.operator_def_list, ',', $.operator_def_elem)
),
operator_def_elem: $ => choice(
prec.left(7, prec.dynamic(7, seq($.ColLabel, '=', $.kw_none))),
prec.left(7, prec.dynamic(7, seq($.ColLabel, '=', $.operator_def_arg))),
$.ColLabel
),
operator_def_arg: $ => choice(
$.func_type,
$.reserved_keyword,
$.qual_all_Op,
$.NumericOnly,
$.Sconst
),
AlterTypeStmt: $ => prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_type, $.any_name, $.kw_set, '(', $.operator_def_list, ')'))),
AlterOwnerStmt: $ => choice(
seq($.kw_alter, $.kw_aggregate, $.aggregate_with_argtypes, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_collation, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_conversion, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_database, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_function, $.function_with_argtypes, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, optional($.opt_procedural), $.kw_language, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_large, $.kw_object, $.NumericOnly, $.kw_owner, $.kw_to, $.RoleSpec))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.operator_with_argtypes, $.kw_owner, $.kw_to, $.RoleSpec))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_class, $.any_name, $.kw_using, $.name, $.kw_owner, $.kw_to, $.RoleSpec))),
prec.left(12, prec.dynamic(12, seq($.kw_alter, $.kw_operator, $.kw_family, $.any_name, $.kw_using, $.name, $.kw_owner, $.kw_to, $.RoleSpec))),
seq($.kw_alter, $.kw_procedure, $.function_with_argtypes, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_routine, $.function_with_argtypes, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_schema, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_type, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_tablespace, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_statistics, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_dictionary, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_foreign, $.kw_data, $.kw_wrapper, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_server, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_event, $.kw_trigger, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_publication, $.name, $.kw_owner, $.kw_to, $.RoleSpec),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_owner, $.kw_to, $.RoleSpec)
),
CreatePublicationStmt: $ => choice(
seq($.kw_create, $.kw_publication, $.name, optional($.opt_definition)),
seq($.kw_create, $.kw_publication, $.name, $.kw_for, $.kw_all, $.kw_tables, optional($.opt_definition)),
seq($.kw_create, $.kw_publication, $.name, $.kw_for, $.pub_obj_list, optional($.opt_definition))
),
PublicationObjSpec: $ => choice(
seq($.kw_table, $.relation_expr, optional($.opt_column_list), optional($.OptWhereClause)),
prec.left(8, prec.dynamic(8, seq($.kw_tables, $.kw_in, $.kw_schema, $.ColId))),
prec.left(8, prec.dynamic(8, seq($.kw_tables, $.kw_in, $.kw_schema, $.kw_current_schema))),
seq($.ColId, optional($.opt_column_list), optional($.OptWhereClause)),
seq($.ColId, $.indirection, optional($.opt_column_list), optional($.OptWhereClause)),
seq($.extended_relation_expr, optional($.opt_column_list), optional($.OptWhereClause)),
$.kw_current_schema
),
pub_obj_list: $ => choice(
$.PublicationObjSpec,
seq($.pub_obj_list, ',', $.PublicationObjSpec)
),
AlterPublicationStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_publication, $.name, $.kw_set, $.definition))),
seq($.kw_alter, $.kw_publication, $.name, $.kw_add, $.pub_obj_list),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_publication, $.name, $.kw_set, $.pub_obj_list))),
seq($.kw_alter, $.kw_publication, $.name, $.kw_drop, $.pub_obj_list)
),
CreateSubscriptionStmt: $ => seq($.kw_create, $.kw_subscription, $.name, $.kw_connection, $.Sconst, $.kw_publication, $.name_list, optional($.opt_definition)),
AlterSubscriptionStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_subscription, $.name, $.kw_set, $.definition))),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_connection, $.Sconst),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_refresh, $.kw_publication, optional($.opt_definition)),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_add, $.kw_publication, $.name_list, optional($.opt_definition)),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_drop, $.kw_publication, $.name_list, optional($.opt_definition)),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_subscription, $.name, $.kw_set, $.kw_publication, $.name_list, optional($.opt_definition)))),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_enable),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_disable),
seq($.kw_alter, $.kw_subscription, $.name, $.kw_skip, $.definition)
),
DropSubscriptionStmt: $ => choice(
seq($.kw_drop, $.kw_subscription, $.name, optional($.opt_drop_behavior)),
seq($.kw_drop, $.kw_subscription, $.kw_if, $.kw_exists, $.name, optional($.opt_drop_behavior))
),
RuleStmt: $ => seq($.kw_create, optional($.opt_or_replace), $.kw_rule, $.name, $.kw_as, $.kw_on, $.event, $.kw_to, $.qualified_name, optional($.where_clause), $.kw_do, optional($.opt_instead), $.RuleActionList),
RuleActionList: $ => choice(
$.kw_nothing,
$.RuleActionStmt,
prec.left(20, prec.dynamic(20, seq('(', optional($.RuleActionMulti), ')')))
),
RuleActionMulti: $ => choice(
seq(optional($.RuleActionMulti), ';', optional($.RuleActionStmtOrEmpty)),
$.RuleActionStmtOrEmpty
),
RuleActionStmt: $ => choice(
$.SelectStmt,
$.InsertStmt,
$.UpdateStmt,
$.DeleteStmt,
$.NotifyStmt
),
RuleActionStmtOrEmpty: $ => $.RuleActionStmt,
event: $ => choice(
$.kw_select,
$.kw_update,
$.kw_delete,
$.kw_insert
),
opt_instead: $ => choice(
$.kw_instead,
$.kw_also
),
NotifyStmt: $ => seq($.kw_notify, $.ColId, optional($.notify_payload)),
notify_payload: $ => seq(',', $.Sconst),
ListenStmt: $ => seq($.kw_listen, $.ColId),
UnlistenStmt: $ => choice(
seq($.kw_unlisten, $.ColId),
prec.left(14, prec.dynamic(14, seq($.kw_unlisten, '*')))
),
TransactionStmt: $ => choice(
seq($.kw_abort, optional($.opt_transaction), optional($.opt_transaction_chain)),
seq($.kw_start, $.kw_transaction, optional($.transaction_mode_list_or_empty)),
seq($.kw_commit, optional($.opt_transaction), optional($.opt_transaction_chain)),
seq($.kw_rollback, optional($.opt_transaction), optional($.opt_transaction_chain)),
seq($.kw_savepoint, $.ColId),
seq($.kw_release, $.kw_savepoint, $.ColId),
seq($.kw_release, $.ColId),
seq($.kw_rollback, optional($.opt_transaction), $.kw_to, $.kw_savepoint, $.ColId),
seq($.kw_rollback, optional($.opt_transaction), $.kw_to, $.ColId),
seq($.kw_prepare, $.kw_transaction, $.Sconst),
seq($.kw_commit, $.kw_prepared, $.Sconst),
seq($.kw_rollback, $.kw_prepared, $.Sconst)
),
TransactionStmtLegacy: $ => choice(
seq($.kw_begin, optional($.opt_transaction), optional($.transaction_mode_list_or_empty)),
seq($.kw_end, optional($.opt_transaction), optional($.opt_transaction_chain))
),
opt_transaction: $ => choice(
$.kw_work,
$.kw_transaction
),
transaction_mode_item: $ => choice(
seq($.kw_isolation, $.kw_level, $.iso_level),
seq($.kw_read, $.kw_only),
seq($.kw_read, $.kw_write),
$.kw_deferrable,
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_deferrable)))
),
transaction_mode_list: $ => choice(
$.transaction_mode_item,
seq($.transaction_mode_list, ',', $.transaction_mode_item),
seq($.transaction_mode_list, $.transaction_mode_item)
),
transaction_mode_list_or_empty: $ => $.transaction_mode_list,
opt_transaction_chain: $ => choice(
prec.left(4, prec.dynamic(4, seq($.kw_and, $.kw_chain))),
prec.left(4, prec.dynamic(4, seq($.kw_and, $.kw_no, $.kw_chain)))
),
ViewStmt: $ => choice(
seq($.kw_create, optional($.OptTemp), $.kw_view, $.qualified_name, optional($.opt_column_list), optional($.opt_reloptions), $.kw_as, $.SelectStmt, optional($.opt_check_option)),
prec.left(3, prec.dynamic(3, seq($.kw_create, $.kw_or, $.kw_replace, optional($.OptTemp), $.kw_view, $.qualified_name, optional($.opt_column_list), optional($.opt_reloptions), $.kw_as, $.SelectStmt, optional($.opt_check_option)))),
prec.left(20, prec.dynamic(20, seq($.kw_create, optional($.OptTemp), $.kw_recursive, $.kw_view, $.qualified_name, '(', $.columnList, ')', optional($.opt_reloptions), $.kw_as, $.SelectStmt, optional($.opt_check_option)))),
prec.left(3, prec.dynamic(3, seq($.kw_create, $.kw_or, $.kw_replace, optional($.OptTemp), $.kw_recursive, $.kw_view, $.qualified_name, '(', $.columnList, ')', optional($.opt_reloptions), $.kw_as, $.SelectStmt, optional($.opt_check_option))))
),
opt_check_option: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_check, $.kw_option))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_cascaded, $.kw_check, $.kw_option))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_local, $.kw_check, $.kw_option)))
),
LoadStmt: $ => seq($.kw_load, $.file_name),
CreatedbStmt: $ => seq($.kw_create, $.kw_database, $.name, optional($.opt_with), optional($.createdb_opt_list)),
createdb_opt_list: $ => $.createdb_opt_items,
createdb_opt_items: $ => choice(
$.createdb_opt_item,
seq($.createdb_opt_items, $.createdb_opt_item)
),
createdb_opt_item: $ => choice(
seq($.createdb_opt_name, optional($.opt_equal), $.NumericOnly),
seq($.createdb_opt_name, optional($.opt_equal), $.opt_boolean_or_string),
seq($.createdb_opt_name, optional($.opt_equal), $.kw_default)
),
createdb_opt_name: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
seq($.kw_connection, $.kw_limit),
$.kw_encoding,
$.kw_location,
$.kw_owner,
$.kw_tablespace,
$.kw_template
),
opt_equal: $ => prec.left(7, prec.dynamic(7, '=')),
AlterDatabaseStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_database, $.name, $.kw_with, optional($.createdb_opt_list)))),
seq($.kw_alter, $.kw_database, $.name, optional($.createdb_opt_list)),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_database, $.name, $.kw_set, $.kw_tablespace, $.name))),
seq($.kw_alter, $.kw_database, $.name, $.kw_refresh, $.kw_collation, $.kw_version)
),
AlterDatabaseSetStmt: $ => seq($.kw_alter, $.kw_database, $.name, $.SetResetClause),
DropdbStmt: $ => choice(
seq($.kw_drop, $.kw_database, $.name),
seq($.kw_drop, $.kw_database, $.kw_if, $.kw_exists, $.name),
prec.left(20, prec.dynamic(20, seq($.kw_drop, $.kw_database, $.name, optional($.opt_with), '(', $.drop_option_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_drop, $.kw_database, $.kw_if, $.kw_exists, $.name, optional($.opt_with), '(', $.drop_option_list, ')')))
),
drop_option_list: $ => choice(
$.drop_option,
seq($.drop_option_list, ',', $.drop_option)
),
drop_option: $ => $.kw_force,
AlterCollationStmt: $ => seq($.kw_alter, $.kw_collation, $.any_name, $.kw_refresh, $.kw_version),
AlterSystemStmt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_system, $.kw_set, $.generic_set))),
seq($.kw_alter, $.kw_system, $.kw_reset, $.generic_reset)
),
CreateDomainStmt: $ => seq($.kw_create, $.kw_domain, $.any_name, optional($.opt_as), $.Typename, optional($.ColQualList)),
AlterDomainStmt: $ => choice(
seq($.kw_alter, $.kw_domain, $.any_name, $.alter_column_default),
prec.right(5, prec.dynamic(5, seq($.kw_alter, $.kw_domain, $.any_name, $.kw_drop, $.kw_not, $.kw_null))),
prec.left(11, prec.dynamic(11, seq($.kw_alter, $.kw_domain, $.any_name, $.kw_set, $.kw_not, $.kw_null))),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_add, $.DomainConstraint),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_drop, $.kw_constraint, $.name, optional($.opt_drop_behavior)),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_drop, $.kw_constraint, $.kw_if, $.kw_exists, $.name, optional($.opt_drop_behavior)),
seq($.kw_alter, $.kw_domain, $.any_name, $.kw_validate, $.kw_constraint, $.name)
),
opt_as: $ => $.kw_as,
AlterTSDictionaryStmt: $ => seq($.kw_alter, $.kw_text, $.kw_search, $.kw_dictionary, $.any_name, $.definition),
AlterTSConfigurationStmt: $ => choice(
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_add, $.kw_mapping, $.kw_for, $.name_list, $.any_with, $.any_name_list),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_alter, $.kw_mapping, $.kw_for, $.name_list, $.any_with, $.any_name_list),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_alter, $.kw_mapping, $.kw_replace, $.any_name, $.any_with, $.any_name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_alter, $.kw_mapping, $.kw_for, $.name_list, $.kw_replace, $.any_name, $.any_with, $.any_name),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_drop, $.kw_mapping, $.kw_for, $.name_list),
seq($.kw_alter, $.kw_text, $.kw_search, $.kw_configuration, $.any_name, $.kw_drop, $.kw_mapping, $.kw_if, $.kw_exists, $.kw_for, $.name_list)
),
any_with: $ => choice(
prec.left(11, prec.dynamic(11, $.kw_with)),
$.kw_with
),
CreateConversionStmt: $ => seq($.kw_create, optional($.opt_default), $.kw_conversion, $.any_name, $.kw_for, $.Sconst, $.kw_to, $.Sconst, $.kw_from, $.any_name),
ClusterStmt: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_cluster, '(', $.utility_option_list, ')', $.qualified_name, optional($.cluster_index_specification)))),
prec.left(20, prec.dynamic(20, seq($.kw_cluster, '(', $.utility_option_list, ')'))),
seq($.kw_cluster, optional($.opt_verbose), $.qualified_name, optional($.cluster_index_specification)),
seq($.kw_cluster, optional($.opt_verbose)),
seq($.kw_cluster, optional($.opt_verbose), $.name, $.kw_on, $.qualified_name)
),
cluster_index_specification: $ => seq($.kw_using, $.name),
VacuumStmt: $ => choice(
seq($.kw_vacuum, optional($.opt_full), optional($.opt_freeze), optional($.opt_verbose), optional($.opt_analyze), optional($.opt_vacuum_relation_list)),
prec.left(20, prec.dynamic(20, seq($.kw_vacuum, '(', $.utility_option_list, ')', optional($.opt_vacuum_relation_list))))
),
AnalyzeStmt: $ => choice(
seq($.analyze_keyword, optional($.opt_verbose), optional($.opt_vacuum_relation_list)),
prec.left(20, prec.dynamic(20, seq($.analyze_keyword, '(', $.utility_option_list, ')', optional($.opt_vacuum_relation_list))))
),
utility_option_list: $ => choice(
$.utility_option_elem,
seq($.utility_option_list, ',', $.utility_option_elem)
),
analyze_keyword: $ => choice(
$.kw_analyze,
$.kw_analyse
),
utility_option_elem: $ => seq($.utility_option_name, optional($.utility_option_arg)),
utility_option_name: $ => choice(
$.NonReservedWord,
$.analyze_keyword,
$.kw_format
),
utility_option_arg: $ => choice(
$.opt_boolean_or_string,
$.NumericOnly
),
opt_analyze: $ => $.analyze_keyword,
opt_verbose: $ => $.kw_verbose,
opt_full: $ => prec.left(23, prec.dynamic(23, $.kw_full)),
opt_freeze: $ => $.kw_freeze,
opt_name_list: $ => prec.left(20, prec.dynamic(20, seq('(', $.name_list, ')'))),
vacuum_relation: $ => seq($.relation_expr, optional($.opt_name_list)),
vacuum_relation_list: $ => choice(
$.vacuum_relation,
seq($.vacuum_relation_list, ',', $.vacuum_relation)
),
opt_vacuum_relation_list: $ => $.vacuum_relation_list,
ExplainStmt: $ => choice(
seq($.kw_explain, $.ExplainableStmt),
seq($.kw_explain, $.analyze_keyword, optional($.opt_verbose), $.ExplainableStmt),
seq($.kw_explain, $.kw_verbose, $.ExplainableStmt),
prec.left(20, prec.dynamic(20, seq($.kw_explain, '(', $.utility_option_list, ')', $.ExplainableStmt)))
),
ExplainableStmt: $ => choice(
$.SelectStmt,
$.InsertStmt,
$.UpdateStmt,
$.DeleteStmt,
$.MergeStmt,
$.DeclareCursorStmt,
$.CreateAsStmt,
$.CreateMatViewStmt,
$.RefreshMatViewStmt,
$.ExecuteStmt
),
PrepareStmt: $ => seq($.kw_prepare, $.name, optional($.prep_type_clause), $.kw_as, $.PreparableStmt),
prep_type_clause: $ => prec.left(20, prec.dynamic(20, seq('(', $.type_list, ')'))),
PreparableStmt: $ => choice(
$.SelectStmt,
$.InsertStmt,
$.UpdateStmt,
$.DeleteStmt,
$.MergeStmt
),
ExecuteStmt: $ => choice(
seq($.kw_execute, $.name, optional($.execute_param_clause)),
seq($.kw_create, optional($.OptTemp), $.kw_table, $.create_as_target, $.kw_as, $.kw_execute, $.name, optional($.execute_param_clause), optional($.opt_with_data)),
prec.right(5, prec.dynamic(5, seq($.kw_create, optional($.OptTemp), $.kw_table, $.kw_if, $.kw_not, $.kw_exists, $.create_as_target, $.kw_as, $.kw_execute, $.name, optional($.execute_param_clause), optional($.opt_with_data))))
),
execute_param_clause: $ => prec.left(20, prec.dynamic(20, seq('(', $.expr_list, ')'))),
DeallocateStmt: $ => choice(
seq($.kw_deallocate, $.name),
seq($.kw_deallocate, $.kw_prepare, $.name),
seq($.kw_deallocate, $.kw_all),
seq($.kw_deallocate, $.kw_prepare, $.kw_all)
),
InsertStmt: $ => seq(optional($.opt_with_clause), $.kw_insert, $.kw_into, $.insert_target, $.insert_rest, optional($.opt_on_conflict), optional($.returning_clause)),
insert_target: $ => choice(
$.qualified_name,
seq($.qualified_name, $.kw_as, $.ColId)
),
insert_rest: $ => choice(
$.SelectStmt,
prec.left(11, prec.dynamic(11, seq($.kw_overriding, $.override_kind, $.kw_value, $.SelectStmt))),
prec.left(20, prec.dynamic(20, seq('(', $.insert_column_list, ')', $.SelectStmt))),
prec.left(20, prec.dynamic(20, seq('(', $.insert_column_list, ')', $.kw_overriding, $.override_kind, $.kw_value, $.SelectStmt))),
seq($.kw_default, $.kw_values)
),
override_kind: $ => choice(
$.kw_user,
$.kw_system
),
insert_column_list: $ => choice(
$.insert_column_item,
seq($.insert_column_list, ',', $.insert_column_item)
),
insert_column_item: $ => seq($.ColId, optional($.opt_indirection)),
opt_on_conflict: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_on, $.kw_conflict, optional($.opt_conf_expr), $.kw_do, $.kw_update, $.kw_set, $.set_clause_list, optional($.where_clause)))),
seq($.kw_on, $.kw_conflict, optional($.opt_conf_expr), $.kw_do, $.kw_nothing)
),
opt_conf_expr: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.index_params, ')', optional($.where_clause)))),
seq($.kw_on, $.kw_constraint, $.name)
),
returning_clause: $ => seq($.kw_returning, optional($.returning_with_clause), $.target_list),
returning_with_clause: $ => prec.left(11, prec.dynamic(11, seq($.kw_with, '(', $.returning_options, ')'))),
returning_options: $ => choice(
$.returning_option,
seq($.returning_options, ',', $.returning_option)
),
returning_option: $ => seq($.returning_option_kind, $.kw_as, $.ColId),
returning_option_kind: $ => choice(
$.kw_old,
$.kw_new
),
DeleteStmt: $ => seq(optional($.opt_with_clause), $.kw_delete, $.kw_from, $.relation_expr_opt_alias, optional($.using_clause), optional($.where_or_current_clause), optional($.returning_clause)),
using_clause: $ => seq($.kw_using, $.from_list),
LockStmt: $ => seq($.kw_lock, optional($.opt_table), $.relation_expr_list, optional($.opt_lock), optional($.opt_nowait)),
opt_lock: $ => prec.left(8, prec.dynamic(8, seq($.kw_in, $.lock_type, $.kw_mode))),
lock_type: $ => choice(
seq($.kw_access, $.kw_share),
seq($.kw_row, $.kw_share),
seq($.kw_row, $.kw_exclusive),
seq($.kw_share, $.kw_update, $.kw_exclusive),
$.kw_share,
seq($.kw_share, $.kw_row, $.kw_exclusive),
$.kw_exclusive,
seq($.kw_access, $.kw_exclusive)
),
opt_nowait: $ => $.kw_nowait,
opt_nowait_or_skip: $ => choice(
$.kw_nowait,
seq($.kw_skip, $.kw_locked)
),
UpdateStmt: $ => prec.left(11, prec.dynamic(11, seq(optional($.opt_with_clause), $.kw_update, $.relation_expr_opt_alias, $.kw_set, $.set_clause_list, optional($.from_clause), optional($.where_or_current_clause), optional($.returning_clause)))),
set_clause_list: $ => choice(
$.set_clause,
seq($.set_clause_list, ',', $.set_clause)
),
set_clause: $ => choice(
prec.left(7, prec.dynamic(7, seq($.set_target, '=', $.a_expr))),
prec.left(20, prec.dynamic(20, seq('(', $.set_target_list, ')', '=', $.a_expr)))
),
set_target: $ => seq($.ColId, optional($.opt_indirection)),
set_target_list: $ => choice(
$.set_target,
seq($.set_target_list, ',', $.set_target)
),
MergeStmt: $ => seq(optional($.opt_with_clause), $.kw_merge, $.kw_into, $.relation_expr_opt_alias, $.kw_using, $.table_ref, $.kw_on, $.a_expr, $.merge_when_list, optional($.returning_clause)),
merge_when_list: $ => choice(
$.merge_when_clause,
seq($.merge_when_list, $.merge_when_clause)
),
merge_when_clause: $ => choice(
seq($.merge_when_tgt_matched, $.opt_merge_when_condition, $.kw_then, $.merge_update),
seq($.merge_when_tgt_matched, $.opt_merge_when_condition, $.kw_then, $.merge_delete),
seq($.merge_when_tgt_not_matched, $.opt_merge_when_condition, $.kw_then, $.merge_insert),
seq($.merge_when_tgt_matched, $.opt_merge_when_condition, $.kw_then, $.kw_do, $.kw_nothing),
seq($.merge_when_tgt_not_matched, $.opt_merge_when_condition, $.kw_then, $.kw_do, $.kw_nothing)
),
merge_when_tgt_matched: $ => choice(
seq($.kw_when, $.kw_matched),
prec.right(5, prec.dynamic(5, seq($.kw_when, $.kw_not, $.kw_matched, $.kw_by, $.kw_source)))
),
merge_when_tgt_not_matched: $ => choice(
prec.right(5, prec.dynamic(5, seq($.kw_when, $.kw_not, $.kw_matched))),
prec.right(5, prec.dynamic(5, seq($.kw_when, $.kw_not, $.kw_matched, $.kw_by, $.kw_target)))
),
opt_merge_when_condition: $ => prec.left(4, prec.dynamic(4, seq($.kw_and, $.a_expr))),
merge_update: $ => prec.left(11, prec.dynamic(11, seq($.kw_update, $.kw_set, $.set_clause_list))),
merge_delete: $ => $.kw_delete,
merge_insert: $ => choice(
seq($.kw_insert, $.merge_values_clause),
prec.left(11, prec.dynamic(11, seq($.kw_insert, $.kw_overriding, $.override_kind, $.kw_value, $.merge_values_clause))),
prec.left(20, prec.dynamic(20, seq($.kw_insert, '(', $.insert_column_list, ')', $.merge_values_clause))),
prec.left(20, prec.dynamic(20, seq($.kw_insert, '(', $.insert_column_list, ')', $.kw_overriding, $.override_kind, $.kw_value, $.merge_values_clause))),
seq($.kw_insert, $.kw_default, $.kw_values)
),
merge_values_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_values, '(', $.expr_list, ')'))),
DeclareCursorStmt: $ => seq($.kw_declare, $.cursor_name, optional($.cursor_options), $.kw_cursor, optional($.opt_hold), $.kw_for, $.SelectStmt),
cursor_name: $ => $.name,
cursor_options: $ => choice(
seq(optional($.cursor_options), $.kw_no, $.kw_scroll),
seq(optional($.cursor_options), $.kw_scroll),
seq(optional($.cursor_options), $.kw_binary),
seq(optional($.cursor_options), $.kw_asensitive),
seq(optional($.cursor_options), $.kw_insensitive)
),
opt_hold: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_hold))),
prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_hold)))
),
SelectStmt: $ => choice(
prec.right(18, prec.dynamic(18, $.select_no_parens)),
prec.right(18, prec.dynamic(18, $.select_with_parens))
),
select_with_parens: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.select_no_parens, ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.select_with_parens, ')')))
),
select_no_parens: $ => choice(
$.simple_select,
seq($.select_clause, $.sort_clause),
seq($.select_clause, optional($.opt_sort_clause), $.for_locking_clause, optional($.opt_select_limit)),
seq($.select_clause, optional($.opt_sort_clause), $.select_limit, optional($.opt_for_locking_clause)),
seq($.with_clause, $.select_clause),
seq($.with_clause, $.select_clause, $.sort_clause),
seq($.with_clause, $.select_clause, optional($.opt_sort_clause), $.for_locking_clause, optional($.opt_select_limit)),
seq($.with_clause, $.select_clause, optional($.opt_sort_clause), $.select_limit, optional($.opt_for_locking_clause))
),
select_clause: $ => choice(
$.simple_select,
$.select_with_parens
),
simple_select: $ => choice(
seq($.kw_select, optional($.opt_all_clause), optional($.opt_target_list), optional($.into_clause), optional($.from_clause), optional($.where_clause), optional($.group_clause), optional($.having_clause), optional($.window_clause)),
seq($.kw_select, $.distinct_clause, $.target_list, optional($.into_clause), optional($.from_clause), optional($.where_clause), optional($.group_clause), optional($.having_clause), optional($.window_clause)),
$.values_clause,
seq($.kw_table, $.relation_expr),
prec.left(1, prec.dynamic(1, seq($.select_clause, $.kw_union, optional($.set_quantifier), $.select_clause))),
prec.left(2, prec.dynamic(2, seq($.select_clause, $.kw_intersect, optional($.set_quantifier), $.select_clause))),
prec.left(1, prec.dynamic(1, seq($.select_clause, $.kw_except, optional($.set_quantifier), $.select_clause)))
),
with_clause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.cte_list))),
seq($.kw_with, $.cte_list),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_recursive, $.cte_list)))
),
cte_list: $ => choice(
$.common_table_expr,
seq($.cte_list, ',', $.common_table_expr)
),
common_table_expr: $ => prec.left(20, prec.dynamic(20, seq($.name, optional($.opt_name_list), $.kw_as, optional($.opt_materialized), '(', $.PreparableStmt, ')', optional($.opt_search_clause), optional($.opt_cycle_clause)))),
opt_materialized: $ => choice(
$.kw_materialized,
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_materialized)))
),
opt_search_clause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_search, $.kw_depth, $.kw_first, $.kw_by, $.columnList, $.kw_set, $.ColId))),
prec.left(11, prec.dynamic(11, seq($.kw_search, $.kw_breadth, $.kw_first, $.kw_by, $.columnList, $.kw_set, $.ColId)))
),
opt_cycle_clause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_cycle, $.columnList, $.kw_set, $.ColId, $.kw_to, $.AexprConst, $.kw_default, $.AexprConst, $.kw_using, $.ColId))),
prec.left(11, prec.dynamic(11, seq($.kw_cycle, $.columnList, $.kw_set, $.ColId, $.kw_using, $.ColId)))
),
opt_with_clause: $ => $.with_clause,
into_clause: $ => seq($.kw_into, $.OptTempTableName),
OptTempTableName: $ => choice(
seq($.kw_temporary, optional($.opt_table), $.qualified_name),
seq($.kw_temp, optional($.opt_table), $.qualified_name),
seq($.kw_local, $.kw_temporary, optional($.opt_table), $.qualified_name),
seq($.kw_local, $.kw_temp, optional($.opt_table), $.qualified_name),
seq($.kw_global, $.kw_temporary, optional($.opt_table), $.qualified_name),
seq($.kw_global, $.kw_temp, optional($.opt_table), $.qualified_name),
seq($.kw_unlogged, optional($.opt_table), $.qualified_name),
seq($.kw_table, $.qualified_name),
$.qualified_name
),
opt_table: $ => $.kw_table,
set_quantifier: $ => choice(
$.kw_all,
$.kw_distinct
),
distinct_clause: $ => choice(
$.kw_distinct,
prec.left(20, prec.dynamic(20, seq($.kw_distinct, $.kw_on, '(', $.expr_list, ')')))
),
opt_all_clause: $ => $.kw_all,
opt_distinct_clause: $ => choice(
$.distinct_clause,
$.opt_all_clause
),
opt_sort_clause: $ => $.sort_clause,
sort_clause: $ => seq($.kw_order, $.kw_by, $.sortby_list),
sortby_list: $ => choice(
$.sortby,
seq($.sortby_list, ',', $.sortby)
),
sortby: $ => choice(
seq($.a_expr, $.kw_using, $.qual_all_Op, optional($.opt_nulls_order)),
seq($.a_expr, optional($.opt_asc_desc), optional($.opt_nulls_order))
),
select_limit: $ => choice(
seq($.limit_clause, $.offset_clause),
seq($.offset_clause, $.limit_clause),
$.limit_clause,
$.offset_clause
),
opt_select_limit: $ => $.select_limit,
limit_clause: $ => choice(
seq($.kw_limit, $.select_limit_value),
seq($.kw_limit, $.select_limit_value, ',', $.select_offset_value),
seq($.kw_fetch, $.first_or_next, $.select_fetch_first_value, $.row_or_rows, $.kw_only),
prec.left(11, prec.dynamic(11, seq($.kw_fetch, $.first_or_next, $.select_fetch_first_value, $.row_or_rows, $.kw_with, $.kw_ties))),
seq($.kw_fetch, $.first_or_next, $.row_or_rows, $.kw_only),
prec.left(11, prec.dynamic(11, seq($.kw_fetch, $.first_or_next, $.row_or_rows, $.kw_with, $.kw_ties)))
),
offset_clause: $ => choice(
seq($.kw_offset, $.select_offset_value),
seq($.kw_offset, $.select_fetch_first_value, $.row_or_rows)
),
select_limit_value: $ => choice(
$.a_expr,
$.kw_all
),
select_offset_value: $ => $.a_expr,
select_fetch_first_value: $ => choice(
$.c_expr,
prec.left(13, prec.dynamic(13, seq('+', $.I_or_F_const))),
prec.left(13, prec.dynamic(13, seq('-', $.I_or_F_const)))
),
I_or_F_const: $ => choice(
$.Iconst,
$.float_literal
),
row_or_rows: $ => choice(
$.kw_row,
prec.left(11, prec.dynamic(11, $.kw_rows))
),
first_or_next: $ => choice(
$.kw_first,
$.kw_next
),
group_clause: $ => seq($.kw_group, $.kw_by, optional($.set_quantifier), $.group_by_list),
group_by_list: $ => choice(
$.group_by_item,
seq($.group_by_list, ',', $.group_by_item)
),
group_by_item: $ => choice(
$.a_expr,
$.empty_grouping_set,
$.cube_clause,
$.rollup_clause,
$.grouping_sets_clause
),
empty_grouping_set: $ => prec.left(20, prec.dynamic(20, seq('(', ')'))),
rollup_clause: $ => prec.left(11, prec.dynamic(11, seq($.kw_rollup, '(', $.expr_list, ')'))),
cube_clause: $ => prec.left(11, prec.dynamic(11, seq($.kw_cube, '(', $.expr_list, ')'))),
grouping_sets_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_grouping, $.kw_sets, '(', $.group_by_list, ')'))),
having_clause: $ => seq($.kw_having, $.a_expr),
for_locking_clause: $ => choice(
$.for_locking_items,
seq($.kw_for, $.kw_read, $.kw_only)
),
opt_for_locking_clause: $ => $.for_locking_clause,
for_locking_items: $ => choice(
$.for_locking_item,
seq($.for_locking_items, $.for_locking_item)
),
for_locking_item: $ => seq($.for_locking_strength, optional($.locked_rels_list), optional($.opt_nowait_or_skip)),
for_locking_strength: $ => choice(
seq($.kw_for, $.kw_update),
seq($.kw_for, $.kw_no, $.kw_key, $.kw_update),
seq($.kw_for, $.kw_share),
seq($.kw_for, $.kw_key, $.kw_share)
),
locked_rels_list: $ => seq($.kw_of, $.qualified_name_list),
values_clause: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_values, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.values_clause, ',', '(', $.expr_list, ')')))
),
from_clause: $ => seq($.kw_from, $.from_list),
from_list: $ => choice(
$.table_ref,
seq($.from_list, ',', $.table_ref)
),
table_ref: $ => choice(
seq($.relation_expr, optional($.opt_alias_clause)),
seq($.relation_expr, optional($.opt_alias_clause), $.tablesample_clause),
seq($.func_table, optional($.func_alias_clause)),
seq($.kw_lateral, $.func_table, optional($.func_alias_clause)),
seq($.xmltable, optional($.opt_alias_clause)),
seq($.kw_lateral, $.xmltable, optional($.opt_alias_clause)),
seq($.select_with_parens, optional($.opt_alias_clause)),
seq($.kw_lateral, $.select_with_parens, optional($.opt_alias_clause)),
$.joined_table,
prec.left(20, prec.dynamic(20, seq('(', $.joined_table, ')', $.alias_clause))),
seq($.json_table, optional($.opt_alias_clause)),
seq($.kw_lateral, $.json_table, optional($.opt_alias_clause))
),
joined_table: $ => choice(
prec.left(20, prec.dynamic(20, seq('(', $.joined_table, ')'))),
prec.left(23, prec.dynamic(23, seq($.table_ref, $.kw_cross, $.kw_join, $.table_ref))),
prec.left(23, prec.dynamic(23, seq($.table_ref, $.join_type, $.kw_join, $.table_ref, $.join_qual))),
prec.left(23, prec.dynamic(23, seq($.table_ref, $.kw_join, $.table_ref, $.join_qual))),
prec.left(23, prec.dynamic(23, seq($.table_ref, $.kw_natural, $.join_type, $.kw_join, $.table_ref))),
prec.left(23, prec.dynamic(23, seq($.table_ref, $.kw_natural, $.kw_join, $.table_ref)))
),
alias_clause: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_as, $.ColId, '(', $.name_list, ')'))),
seq($.kw_as, $.ColId),
prec.left(20, prec.dynamic(20, seq($.ColId, '(', $.name_list, ')'))),
$.ColId
),
opt_alias_clause: $ => $.alias_clause,
opt_alias_clause_for_join_using: $ => seq($.kw_as, $.ColId),
func_alias_clause: $ => choice(
$.alias_clause,
prec.left(20, prec.dynamic(20, seq($.kw_as, '(', $.TableFuncElementList, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_as, $.ColId, '(', $.TableFuncElementList, ')'))),
prec.left(20, prec.dynamic(20, seq($.ColId, '(', $.TableFuncElementList, ')')))
),
join_type: $ => choice(
prec.left(23, prec.dynamic(23, seq($.kw_full, optional($.opt_outer)))),
prec.left(23, prec.dynamic(23, seq($.kw_left, optional($.opt_outer)))),
prec.left(23, prec.dynamic(23, seq($.kw_right, optional($.opt_outer)))),
prec.left(23, prec.dynamic(23, $.kw_inner))
),
opt_outer: $ => $.kw_outer,
join_qual: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_using, '(', $.name_list, ')', optional($.opt_alias_clause_for_join_using)))),
seq($.kw_on, $.a_expr)
),
relation_expr: $ => choice(
$.qualified_name,
$.extended_relation_expr
),
extended_relation_expr: $ => choice(
prec.left(14, prec.dynamic(14, seq($.qualified_name, '*'))),
seq($.kw_only, $.qualified_name),
prec.left(20, prec.dynamic(20, seq($.kw_only, '(', $.qualified_name, ')')))
),
relation_expr_list: $ => choice(
$.relation_expr,
seq($.relation_expr_list, ',', $.relation_expr)
),
relation_expr_opt_alias: $ => choice(
prec.right(18, prec.dynamic(18, $.relation_expr)),
seq($.relation_expr, $.ColId),
seq($.relation_expr, $.kw_as, $.ColId)
),
tablesample_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_tablesample, $.func_name, '(', $.expr_list, ')', optional($.opt_repeatable_clause)))),
opt_repeatable_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_repeatable, '(', $.a_expr, ')'))),
func_table: $ => choice(
seq($.func_expr_windowless, optional($.opt_ordinality)),
prec.left(11, prec.dynamic(11, seq($.kw_rows, $.kw_from, '(', $.rowsfrom_list, ')', optional($.opt_ordinality))))
),
rowsfrom_item: $ => seq($.func_expr_windowless, optional($.opt_col_def_list)),
rowsfrom_list: $ => choice(
$.rowsfrom_item,
seq($.rowsfrom_list, ',', $.rowsfrom_item)
),
opt_col_def_list: $ => prec.left(20, prec.dynamic(20, seq($.kw_as, '(', $.TableFuncElementList, ')'))),
opt_ordinality: $ => seq($.kw_with, $.kw_ordinality),
where_clause: $ => seq($.kw_where, $.a_expr),
where_or_current_clause: $ => choice(
seq($.kw_where, $.a_expr),
seq($.kw_where, $.kw_current, $.kw_of, $.cursor_name)
),
OptTableFuncElementList: $ => $.TableFuncElementList,
TableFuncElementList: $ => choice(
$.TableFuncElement,
seq($.TableFuncElementList, ',', $.TableFuncElement)
),
TableFuncElement: $ => seq($.ColId, $.Typename, optional($.opt_collate_clause)),
xmltable: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_xmltable, '(', $.c_expr, $.xmlexists_argument, $.kw_columns, $.xmltable_column_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmltable, '(', $.kw_xmlnamespaces, '(', $.xml_namespace_list, ')', ',', $.c_expr, $.xmlexists_argument, $.kw_columns, $.xmltable_column_list, ')')))
),
xmltable_column_list: $ => choice(
$.xmltable_column_el,
seq($.xmltable_column_list, ',', $.xmltable_column_el)
),
xmltable_column_el: $ => choice(
seq($.ColId, $.Typename),
seq($.ColId, $.Typename, $.xmltable_column_option_list),
seq($.ColId, $.kw_for, $.kw_ordinality)
),
xmltable_column_option_list: $ => choice(
$.xmltable_column_option_el,
seq($.xmltable_column_option_list, $.xmltable_column_option_el)
),
xmltable_column_option_el: $ => choice(
prec.left(11, prec.dynamic(11, seq($._ident, $.b_expr))),
seq($.kw_default, $.b_expr),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.kw_null))),
$.kw_null,
prec.left(11, prec.dynamic(11, seq($.kw_path, $.b_expr)))
),
xml_namespace_list: $ => choice(
$.xml_namespace_el,
seq($.xml_namespace_list, ',', $.xml_namespace_el)
),
xml_namespace_el: $ => choice(
seq($.b_expr, $.kw_as, $.ColLabel),
seq($.kw_default, $.b_expr)
),
json_table: $ => prec.left(20, prec.dynamic(20, seq($.kw_json_table, '(', $.json_value_expr, ',', $.a_expr, optional($.json_table_path_name_opt), optional($.json_passing_clause_opt), $.kw_columns, '(', $.json_table_column_definition_list, ')', optional($.json_on_error_clause_opt), ')'))),
json_table_path_name_opt: $ => seq($.kw_as, $.name),
json_table_column_definition_list: $ => choice(
$.json_table_column_definition,
seq($.json_table_column_definition_list, ',', $.json_table_column_definition)
),
json_table_column_definition: $ => choice(
seq($.ColId, $.kw_for, $.kw_ordinality),
seq($.ColId, $.Typename, optional($.json_table_column_path_clause_opt), optional($.json_wrapper_behavior), optional($.json_quotes_clause_opt), optional($.json_behavior_clause_opt)),
seq($.ColId, $.Typename, $.json_format_clause, optional($.json_table_column_path_clause_opt), optional($.json_wrapper_behavior), optional($.json_quotes_clause_opt), optional($.json_behavior_clause_opt)),
seq($.ColId, $.Typename, $.kw_exists, optional($.json_table_column_path_clause_opt), optional($.json_on_error_clause_opt)),
prec.left(10, prec.dynamic(10, seq($.kw_nested, optional($.path_opt), $.Sconst, $.kw_columns, '(', $.json_table_column_definition_list, ')'))),
prec.left(10, prec.dynamic(10, seq($.kw_nested, optional($.path_opt), $.Sconst, $.kw_as, $.name, $.kw_columns, '(', $.json_table_column_definition_list, ')')))
),
path_opt: $ => prec.left(11, prec.dynamic(11, $.kw_path)),
json_table_column_path_clause_opt: $ => prec.left(11, prec.dynamic(11, seq($.kw_path, $.Sconst))),
Typename: $ => choice(
seq($.SimpleTypename, optional($.opt_array_bounds)),
seq($.kw_setof, $.SimpleTypename, optional($.opt_array_bounds)),
prec.left(19, prec.dynamic(19, seq($.SimpleTypename, $.kw_array, '[', $.Iconst, ']'))),
prec.left(19, prec.dynamic(19, seq($.kw_setof, $.SimpleTypename, $.kw_array, '[', $.Iconst, ']'))),
seq($.SimpleTypename, $.kw_array),
seq($.kw_setof, $.SimpleTypename, $.kw_array)
),
opt_array_bounds: $ => choice(
prec.left(19, prec.dynamic(19, seq(optional($.opt_array_bounds), '[', ']'))),
prec.left(19, prec.dynamic(19, seq(optional($.opt_array_bounds), '[', $.Iconst, ']')))
),
SimpleTypename: $ => choice(
$.GenericType,
$.Numeric,
$.Bit,
$.Character,
$.ConstDatetime,
seq($.ConstInterval, optional($.opt_interval)),
prec.left(20, prec.dynamic(20, seq($.ConstInterval, '(', $.Iconst, ')'))),
$.JsonType
),
ConstTypename: $ => choice(
$.Numeric,
$.ConstBit,
$.ConstCharacter,
$.ConstDatetime,
$.JsonType
),
GenericType: $ => choice(
seq($.type_function_name, optional($.opt_type_modifiers)),
seq($.type_function_name, $.attrs, optional($.opt_type_modifiers))
),
opt_type_modifiers: $ => prec.left(20, prec.dynamic(20, seq('(', $.expr_list, ')'))),
Numeric: $ => choice(
$.kw_int,
$.kw_integer,
$.kw_smallint,
$.kw_bigint,
$.kw_real,
seq($.kw_float, optional($.opt_float)),
seq($.kw_double, $.kw_precision),
seq($.kw_decimal, optional($.opt_type_modifiers)),
seq($.kw_dec, optional($.opt_type_modifiers)),
seq($.kw_numeric, optional($.opt_type_modifiers)),
$.kw_boolean
),
opt_float: $ => prec.left(20, prec.dynamic(20, seq('(', $.Iconst, ')'))),
Bit: $ => choice(
$.BitWithLength,
$.BitWithoutLength
),
ConstBit: $ => choice(
$.BitWithLength,
$.BitWithoutLength
),
BitWithLength: $ => prec.left(20, prec.dynamic(20, seq($.kw_bit, optional($.opt_varying), '(', $.expr_list, ')'))),
BitWithoutLength: $ => seq($.kw_bit, optional($.opt_varying)),
Character: $ => choice(
$.CharacterWithLength,
$.CharacterWithoutLength
),
ConstCharacter: $ => choice(
$.CharacterWithLength,
$.CharacterWithoutLength
),
CharacterWithLength: $ => prec.left(20, prec.dynamic(20, seq($.character, '(', $.Iconst, ')'))),
CharacterWithoutLength: $ => $.character,
character: $ => choice(
seq($.kw_character, optional($.opt_varying)),
seq($.kw_char, optional($.opt_varying)),
$.kw_varchar,
seq($.kw_national, $.kw_character, optional($.opt_varying)),
seq($.kw_national, $.kw_char, optional($.opt_varying)),
seq($.kw_nchar, optional($.opt_varying))
),
opt_varying: $ => $.kw_varying,
ConstDatetime: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_timestamp, '(', $.Iconst, ')', optional($.opt_timezone)))),
seq($.kw_timestamp, optional($.opt_timezone)),
prec.left(20, prec.dynamic(20, seq($.kw_time, '(', $.Iconst, ')', optional($.opt_timezone)))),
seq($.kw_time, optional($.opt_timezone))
),
ConstInterval: $ => $.kw_interval,
opt_timezone: $ => choice(
seq($.kw_with, $.kw_time, $.kw_zone),
seq($.kw_without, $.kw_time, $.kw_zone)
),
opt_interval: $ => choice(
$.kw_year,
$.kw_month,
$.kw_day,
$.kw_hour,
$.kw_minute,
$.interval_second,
seq($.kw_year, $.kw_to, $.kw_month),
seq($.kw_day, $.kw_to, $.kw_hour),
seq($.kw_day, $.kw_to, $.kw_minute),
seq($.kw_day, $.kw_to, $.interval_second),
seq($.kw_hour, $.kw_to, $.kw_minute),
seq($.kw_hour, $.kw_to, $.interval_second),
seq($.kw_minute, $.kw_to, $.interval_second)
),
interval_second: $ => choice(
$.kw_second,
prec.left(20, prec.dynamic(20, seq($.kw_second, '(', $.Iconst, ')')))
),
JsonType: $ => $.kw_json,
a_expr_prec: $ => choice(
$.c_expr,
prec.left(21, prec.dynamic(21, seq($.a_expr_prec, '::', $.Typename))),
prec.left(17, prec.dynamic(17, seq($.a_expr_prec, $.kw_collate, $.any_name))),
prec.left(16, prec.dynamic(16, seq($.a_expr_prec, $.kw_at, $.kw_local))),
prec.right(18, prec.dynamic(18, seq('+', $.a_expr_prec))),
prec.right(18, prec.dynamic(18, seq('-', $.a_expr_prec))),
prec.left(13, prec.dynamic(13, seq($.a_expr_prec, '+', $.a_expr_prec))),
prec.left(13, prec.dynamic(13, seq($.a_expr_prec, '-', $.a_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.a_expr_prec, '*', $.a_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.a_expr_prec, '/', $.a_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.a_expr_prec, '%', $.a_expr_prec))),
prec.left(15, prec.dynamic(15, seq($.a_expr_prec, '^', $.a_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.a_expr_prec, '<', $.a_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.a_expr_prec, '>', $.a_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.a_expr_prec, '=', $.a_expr_prec)))
),
a_expr: $ => choice(
alias($.a_expr_prec, $.a_expr),
prec.left(16, prec.dynamic(16, seq($.a_expr, $.kw_at, $.kw_time, $.kw_zone, $.a_expr))),
prec.left(7, prec.dynamic(7, seq($.a_expr, '<=', $.a_expr))),
prec.left(7, prec.dynamic(7, seq($.a_expr, '>=', $.a_expr))),
prec.left(7, prec.dynamic(7, seq($.a_expr, '<>', $.a_expr))),
prec.left(12, prec.dynamic(12, seq($.a_expr, $.qual_Op, $.a_expr))),
prec.left(12, prec.dynamic(12, seq($.qual_Op, $.a_expr))),
prec.left(4, prec.dynamic(4, seq($.a_expr, $.kw_and, $.a_expr))),
prec.left(3, prec.dynamic(3, seq($.a_expr, $.kw_or, $.a_expr))),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.a_expr))),
prec.right(5, prec.dynamic(5, seq($.kw_not, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_like, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_like, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_like, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_like, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_ilike, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_ilike, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_ilike, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_ilike, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_similar, $.kw_to, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_similar, $.kw_to, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_similar, $.kw_to, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_similar, $.kw_to, $.a_expr, $.kw_escape, $.a_expr))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_null))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_isnull))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_null))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_notnull))),
seq($.row, $.kw_overlaps, $.row),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_true))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_true))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_false))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_false))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_unknown))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_unknown))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_distinct, $.kw_from, $.a_expr))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_distinct, $.kw_from, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_between, optional($.opt_asymmetric), $.b_expr, $.kw_and, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_between, optional($.opt_asymmetric), $.b_expr, $.kw_and, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_between, $.kw_symmetric, $.b_expr, $.kw_and, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_between, $.kw_symmetric, $.b_expr, $.kw_and, $.a_expr))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_in, $.select_with_parens))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_in, '(', $.expr_list, ')'))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_in, $.select_with_parens))),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_not, $.kw_in, '(', $.expr_list, ')'))),
prec.left(12, prec.dynamic(12, seq($.a_expr, $.subquery_Op, $.sub_type, $.select_with_parens))),
prec.left(12, prec.dynamic(12, seq($.a_expr, $.subquery_Op, $.sub_type, '(', $.a_expr, ')'))),
seq($.kw_unique, optional($.opt_unique_null_treatment), $.select_with_parens),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_document))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_document))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_normalized))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.unicode_normal_form, $.kw_normalized))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.kw_normalized))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.unicode_normal_form, $.kw_normalized))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.json_predicate_type_constraint, optional($.json_key_uniqueness_constraint_opt)))),
prec.left(6, prec.dynamic(6, seq($.a_expr, $.kw_is, $.kw_not, $.json_predicate_type_constraint, optional($.json_key_uniqueness_constraint_opt)))),
$.kw_default
),
b_expr_prec: $ => choice(
$.c_expr,
prec.left(21, prec.dynamic(21, seq($.b_expr_prec, '::', $.Typename))),
prec.right(18, prec.dynamic(18, seq('+', $.b_expr_prec))),
prec.right(18, prec.dynamic(18, seq('-', $.b_expr_prec))),
prec.left(13, prec.dynamic(13, seq($.b_expr_prec, '+', $.b_expr_prec))),
prec.left(13, prec.dynamic(13, seq($.b_expr_prec, '-', $.b_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.b_expr_prec, '*', $.b_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.b_expr_prec, '/', $.b_expr_prec))),
prec.left(14, prec.dynamic(14, seq($.b_expr_prec, '%', $.b_expr_prec))),
prec.left(15, prec.dynamic(15, seq($.b_expr_prec, '^', $.b_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.b_expr_prec, '<', $.b_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.b_expr_prec, '>', $.b_expr_prec))),
prec.left(7, prec.dynamic(7, seq($.b_expr_prec, '=', $.b_expr_prec)))
),
b_expr: $ => choice(
alias($.b_expr_prec, $.b_expr),
prec.left(7, prec.dynamic(7, seq($.b_expr, '<=', $.b_expr))),
prec.left(7, prec.dynamic(7, seq($.b_expr, '>=', $.b_expr))),
prec.left(7, prec.dynamic(7, seq($.b_expr, '<>', $.b_expr))),
prec.left(12, prec.dynamic(12, seq($.b_expr, $.qual_Op, $.b_expr))),
prec.left(12, prec.dynamic(12, seq($.qual_Op, $.b_expr))),
prec.left(6, prec.dynamic(6, seq($.b_expr, $.kw_is, $.kw_distinct, $.kw_from, $.b_expr))),
prec.left(6, prec.dynamic(6, seq($.b_expr, $.kw_is, $.kw_not, $.kw_distinct, $.kw_from, $.b_expr))),
prec.left(6, prec.dynamic(6, seq($.b_expr, $.kw_is, $.kw_document))),
prec.left(6, prec.dynamic(6, seq($.b_expr, $.kw_is, $.kw_not, $.kw_document)))
),
c_expr: $ => choice(
$.columnref,
$.AexprConst,
seq($.param, optional($.opt_indirection)),
prec.left(20, prec.dynamic(20, seq('(', $.a_expr, ')', optional($.opt_indirection)))),
$.case_expr,
$.func_expr,
prec.right(18, prec.dynamic(18, $.select_with_parens)),
seq($.select_with_parens, $.indirection),
seq($.kw_exists, $.select_with_parens),
seq($.kw_array, $.select_with_parens),
seq($.kw_array, $.array_expr),
$.explicit_row,
$.implicit_row,
prec.left(20, prec.dynamic(20, seq($.kw_grouping, '(', $.expr_list, ')')))
),
func_application: $ => choice(
prec.left(20, prec.dynamic(20, seq($.func_name, '(', ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.func_arg_list, optional($.opt_sort_clause), ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.kw_variadic, $.func_arg_expr, optional($.opt_sort_clause), ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.func_arg_list, ',', $.kw_variadic, $.func_arg_expr, optional($.opt_sort_clause), ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.kw_all, $.func_arg_list, optional($.opt_sort_clause), ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.kw_distinct, $.func_arg_list, optional($.opt_sort_clause), ')'))),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', '*', ')')))
),
func_expr: $ => choice(
seq($.func_application, optional($.within_group_clause), optional($.filter_clause), optional($.over_clause)),
seq($.json_aggregate_func, optional($.filter_clause), optional($.over_clause)),
$.func_expr_common_subexpr
),
func_expr_windowless: $ => choice(
$.func_application,
$.func_expr_common_subexpr,
$.json_aggregate_func
),
func_expr_common_subexpr: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_collation, $.kw_for, '(', $.a_expr, ')'))),
$.kw_current_date,
$.kw_current_time,
prec.left(20, prec.dynamic(20, seq($.kw_current_time, '(', $.Iconst, ')'))),
$.kw_current_timestamp,
prec.left(20, prec.dynamic(20, seq($.kw_current_timestamp, '(', $.Iconst, ')'))),
$.kw_localtime,
prec.left(20, prec.dynamic(20, seq($.kw_localtime, '(', $.Iconst, ')'))),
$.kw_localtimestamp,
prec.left(20, prec.dynamic(20, seq($.kw_localtimestamp, '(', $.Iconst, ')'))),
$.kw_current_role,
$.kw_current_user,
$.kw_session_user,
$.kw_system_user,
$.kw_user,
$.kw_current_catalog,
$.kw_current_schema,
prec.left(20, prec.dynamic(20, seq($.kw_cast, '(', $.a_expr, $.kw_as, $.Typename, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_extract, '(', $.extract_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_normalize, '(', $.a_expr, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_normalize, '(', $.a_expr, ',', $.unicode_normal_form, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_overlay, '(', $.overlay_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_overlay, '(', optional($.func_arg_list_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_position, '(', $.position_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_substring, '(', $.substr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_substring, '(', optional($.func_arg_list_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_treat, '(', $.a_expr, $.kw_as, $.Typename, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_trim, '(', $.kw_both, $.trim_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_trim, '(', $.kw_leading, $.trim_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_trim, '(', $.kw_trailing, $.trim_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_trim, '(', $.trim_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_nullif, '(', $.a_expr, ',', $.a_expr, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_coalesce, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_greatest, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_least, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlconcat, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlelement, '(', $.kw_name, $.ColLabel, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlelement, '(', $.kw_name, $.ColLabel, ',', $.xml_attributes, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlelement, '(', $.kw_name, $.ColLabel, ',', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlelement, '(', $.kw_name, $.ColLabel, ',', $.xml_attributes, ',', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlexists, '(', $.c_expr, $.xmlexists_argument, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlforest, '(', $.xml_attribute_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlparse, '(', $.document_or_content, $.a_expr, optional($.xml_whitespace_option), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlpi, '(', $.kw_name, $.ColLabel, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlpi, '(', $.kw_name, $.ColLabel, ',', $.a_expr, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlroot, '(', $.a_expr, ',', $.xml_root_version, optional($.opt_xml_root_standalone), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_xmlserialize, '(', $.document_or_content, $.a_expr, $.kw_as, $.SimpleTypename, optional($.xml_indent_option), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_object, '(', $.func_arg_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_object, '(', $.json_name_and_value_list, optional($.json_object_constructor_null_clause_opt), optional($.json_key_uniqueness_constraint_opt), optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_object, '(', optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_array, '(', $.json_value_expr_list, optional($.json_array_constructor_null_clause_opt), optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_array, '(', $.select_no_parens, optional($.json_format_clause_opt), optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_array, '(', optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json, '(', $.json_value_expr, optional($.json_key_uniqueness_constraint_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_scalar, '(', $.a_expr, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_serialize, '(', $.json_value_expr, optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_merge_action, '(', ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_query, '(', $.json_value_expr, ',', $.a_expr, optional($.json_passing_clause_opt), optional($.json_returning_clause_opt), optional($.json_wrapper_behavior), optional($.json_quotes_clause_opt), optional($.json_behavior_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_exists, '(', $.json_value_expr, ',', $.a_expr, optional($.json_passing_clause_opt), optional($.json_on_error_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_value, '(', $.json_value_expr, ',', $.a_expr, optional($.json_passing_clause_opt), optional($.json_returning_clause_opt), optional($.json_behavior_clause_opt), ')')))
),
xml_root_version: $ => choice(
seq($.kw_version, $.a_expr),
prec.left(11, prec.dynamic(11, seq($.kw_version, $.kw_no, $.kw_value)))
),
opt_xml_root_standalone: $ => choice(
seq(',', $.kw_standalone, $.kw_yes),
seq(',', $.kw_standalone, $.kw_no),
prec.left(11, prec.dynamic(11, seq(',', $.kw_standalone, $.kw_no, $.kw_value)))
),
xml_attributes: $ => prec.left(20, prec.dynamic(20, seq($.kw_xmlattributes, '(', $.xml_attribute_list, ')'))),
xml_attribute_list: $ => choice(
$.xml_attribute_el,
seq($.xml_attribute_list, ',', $.xml_attribute_el)
),
xml_attribute_el: $ => choice(
seq($.a_expr, $.kw_as, $.ColLabel),
$.a_expr
),
document_or_content: $ => choice(
$.kw_document,
$.kw_content
),
xml_indent_option: $ => choice(
$.kw_indent,
seq($.kw_no, $.kw_indent)
),
xml_whitespace_option: $ => choice(
seq($.kw_preserve, $.kw_whitespace),
seq($.kw_strip, $.kw_whitespace)
),
xmlexists_argument: $ => choice(
seq($.kw_passing, $.c_expr),
seq($.kw_passing, $.c_expr, $.xml_passing_mech),
seq($.kw_passing, $.xml_passing_mech, $.c_expr),
seq($.kw_passing, $.xml_passing_mech, $.c_expr, $.xml_passing_mech)
),
xml_passing_mech: $ => choice(
seq($.kw_by, $.kw_ref),
prec.left(11, prec.dynamic(11, seq($.kw_by, $.kw_value)))
),
within_group_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_within, $.kw_group, '(', $.sort_clause, ')'))),
filter_clause: $ => prec.left(20, prec.dynamic(20, seq($.kw_filter, '(', $.kw_where, $.a_expr, ')'))),
window_clause: $ => seq($.kw_window, $.window_definition_list),
window_definition_list: $ => choice(
$.window_definition,
seq($.window_definition_list, ',', $.window_definition)
),
window_definition: $ => seq($.ColId, $.kw_as, $.window_specification),
over_clause: $ => choice(
seq($.kw_over, $.window_specification),
seq($.kw_over, $.ColId)
),
window_specification: $ => prec.left(20, prec.dynamic(20, seq('(', optional($.opt_existing_window_name), optional($.opt_partition_clause), optional($.opt_sort_clause), optional($.opt_frame_clause), ')'))),
opt_existing_window_name: $ => $.ColId,
opt_partition_clause: $ => prec.left(11, prec.dynamic(11, seq($.kw_partition, $.kw_by, $.expr_list))),
opt_frame_clause: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_range, $.frame_extent, optional($.opt_window_exclusion_clause)))),
prec.left(11, prec.dynamic(11, seq($.kw_rows, $.frame_extent, optional($.opt_window_exclusion_clause)))),
prec.left(11, prec.dynamic(11, seq($.kw_groups, $.frame_extent, optional($.opt_window_exclusion_clause))))
),
frame_extent: $ => choice(
$.frame_bound,
prec.left(8, prec.dynamic(8, seq($.kw_between, $.frame_bound, $.kw_and, $.frame_bound)))
),
frame_bound: $ => choice(
prec.left(10, prec.dynamic(10, seq($.kw_unbounded, $.kw_preceding))),
prec.left(10, prec.dynamic(10, seq($.kw_unbounded, $.kw_following))),
seq($.kw_current, $.kw_row),
prec.left(11, prec.dynamic(11, seq($.a_expr, $.kw_preceding))),
prec.left(11, prec.dynamic(11, seq($.a_expr, $.kw_following)))
),
opt_window_exclusion_clause: $ => choice(
seq($.kw_exclude, $.kw_current, $.kw_row),
seq($.kw_exclude, $.kw_group),
seq($.kw_exclude, $.kw_ties),
seq($.kw_exclude, $.kw_no, $.kw_others)
),
row: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_row, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_row, '(', ')'))),
prec.left(20, prec.dynamic(20, seq('(', $.expr_list, ',', $.a_expr, ')')))
),
explicit_row: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_row, '(', $.expr_list, ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_row, '(', ')')))
),
implicit_row: $ => prec.left(20, prec.dynamic(20, seq('(', $.expr_list, ',', $.a_expr, ')'))),
sub_type: $ => choice(
$.kw_any,
$.kw_some,
$.kw_all
),
all_Op: $ => choice(
prec.left(12, prec.dynamic(12, $.operator)),
$.MathOp
),
MathOp: $ => choice(
prec.left(13, prec.dynamic(13, '+')),
prec.left(13, prec.dynamic(13, '-')),
prec.left(14, prec.dynamic(14, '*')),
prec.left(14, prec.dynamic(14, '/')),
prec.left(14, prec.dynamic(14, '%')),
prec.left(15, prec.dynamic(15, '^')),
prec.left(7, prec.dynamic(7, '<')),
prec.left(7, prec.dynamic(7, '>')),
prec.left(7, prec.dynamic(7, '=')),
prec.left(7, prec.dynamic(7, '<=')),
prec.left(7, prec.dynamic(7, '>=')),
prec.left(7, prec.dynamic(7, '<>'))
),
qual_Op: $ => choice(
prec.left(12, prec.dynamic(12, $.operator)),
prec.left(12, prec.dynamic(12, seq($.kw_operator, '(', $.any_operator, ')')))
),
qual_all_Op: $ => choice(
$.all_Op,
prec.left(12, prec.dynamic(12, seq($.kw_operator, '(', $.any_operator, ')')))
),
subquery_Op: $ => choice(
$.all_Op,
prec.left(12, prec.dynamic(12, seq($.kw_operator, '(', $.any_operator, ')'))),
prec.left(8, prec.dynamic(8, $.kw_like)),
prec.left(8, prec.dynamic(8, seq($.kw_not, $.kw_like))),
prec.left(8, prec.dynamic(8, $.kw_ilike)),
prec.left(8, prec.dynamic(8, seq($.kw_not, $.kw_ilike)))
),
expr_list: $ => choice(
$.a_expr,
seq($.expr_list, ',', $.a_expr)
),
func_arg_list: $ => choice(
$.func_arg_expr,
seq($.func_arg_list, ',', $.func_arg_expr)
),
func_arg_expr: $ => choice(
$.a_expr,
seq($.param_name, ':=', $.a_expr),
seq($.param_name, '=>', $.a_expr)
),
func_arg_list_opt: $ => $.func_arg_list,
type_list: $ => choice(
$.Typename,
seq($.type_list, ',', $.Typename)
),
array_expr: $ => choice(
prec.left(19, prec.dynamic(19, seq('[', $.expr_list, ']'))),
prec.left(19, prec.dynamic(19, seq('[', $.array_expr_list, ']'))),
prec.left(19, prec.dynamic(19, seq('[', ']')))
),
array_expr_list: $ => choice(
$.array_expr,
seq($.array_expr_list, ',', $.array_expr)
),
extract_list: $ => seq($.extract_arg, $.kw_from, $.a_expr),
extract_arg: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.kw_year,
$.kw_month,
$.kw_day,
$.kw_hour,
$.kw_minute,
$.kw_second,
$.Sconst
),
unicode_normal_form: $ => choice(
$.kw_nfc,
$.kw_nfd,
$.kw_nfkc,
$.kw_nfkd
),
overlay_list: $ => choice(
seq($.a_expr, $.kw_placing, $.a_expr, $.kw_from, $.a_expr, $.kw_for, $.a_expr),
seq($.a_expr, $.kw_placing, $.a_expr, $.kw_from, $.a_expr)
),
position_list: $ => prec.left(8, prec.dynamic(8, seq($.b_expr, $.kw_in, $.b_expr))),
substr_list: $ => choice(
seq($.a_expr, $.kw_from, $.a_expr, $.kw_for, $.a_expr),
seq($.a_expr, $.kw_for, $.a_expr, $.kw_from, $.a_expr),
seq($.a_expr, $.kw_from, $.a_expr),
seq($.a_expr, $.kw_for, $.a_expr),
prec.left(8, prec.dynamic(8, seq($.a_expr, $.kw_similar, $.a_expr, $.kw_escape, $.a_expr)))
),
trim_list: $ => choice(
seq($.a_expr, $.kw_from, $.expr_list),
seq($.kw_from, $.expr_list),
$.expr_list
),
case_expr: $ => seq($.kw_case, optional($.case_arg), $.when_clause_list, optional($.case_default), $.kw_end),
when_clause_list: $ => choice(
$.when_clause,
seq($.when_clause_list, $.when_clause)
),
when_clause: $ => seq($.kw_when, $.a_expr, $.kw_then, $.a_expr),
case_default: $ => seq($.kw_else, $.a_expr),
case_arg: $ => $.a_expr,
columnref: $ => choice(
$.ColId,
seq($.ColId, $.indirection)
),
indirection_el: $ => choice(
prec.left(22, prec.dynamic(22, seq('.', $.attr_name))),
prec.left(22, prec.dynamic(22, seq('.', '*'))),
prec.left(19, prec.dynamic(19, seq('[', $.a_expr, ']'))),
prec.left(19, prec.dynamic(19, seq('[', optional($.opt_slice_bound), ':', optional($.opt_slice_bound), ']')))
),
opt_slice_bound: $ => $.a_expr,
indirection: $ => choice(
$.indirection_el,
seq($.indirection, $.indirection_el)
),
opt_indirection: $ => seq(optional($.opt_indirection), $.indirection_el),
opt_asymmetric: $ => $.kw_asymmetric,
json_passing_clause_opt: $ => seq($.kw_passing, $.json_arguments),
json_arguments: $ => choice(
$.json_argument,
seq($.json_arguments, ',', $.json_argument)
),
json_argument: $ => seq($.json_value_expr, $.kw_as, $.ColLabel),
json_wrapper_behavior: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_array, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_array, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_conditional, $.kw_array, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_unconditional, $.kw_array, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_conditional, $.kw_wrapper))),
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_unconditional, $.kw_wrapper)))
),
json_behavior: $ => choice(
seq($.kw_default, $.a_expr),
$.json_behavior_type
),
json_behavior_type: $ => choice(
$.kw_error,
$.kw_null,
$.kw_true,
$.kw_false,
$.kw_unknown,
seq($.kw_empty, $.kw_array),
prec.left(11, prec.dynamic(11, seq($.kw_empty, $.kw_object))),
$.kw_empty
),
json_behavior_clause_opt: $ => choice(
seq($.json_behavior, $.kw_on, $.kw_empty),
seq($.json_behavior, $.kw_on, $.kw_error),
seq($.json_behavior, $.kw_on, $.kw_empty, $.json_behavior, $.kw_on, $.kw_error)
),
json_on_error_clause_opt: $ => seq($.json_behavior, $.kw_on, $.kw_error),
json_value_expr: $ => seq($.a_expr, optional($.json_format_clause_opt)),
json_format_clause: $ => choice(
seq($.kw_format, $.kw_json, $.kw_encoding, $.name),
seq($.kw_format, $.kw_json)
),
json_format_clause_opt: $ => $.json_format_clause,
json_quotes_clause_opt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_keep, $.kw_quotes, $.kw_on, $.kw_scalar, $.kw_string))),
seq($.kw_keep, $.kw_quotes),
prec.left(11, prec.dynamic(11, seq($.kw_omit, $.kw_quotes, $.kw_on, $.kw_scalar, $.kw_string))),
seq($.kw_omit, $.kw_quotes)
),
json_returning_clause_opt: $ => seq($.kw_returning, $.Typename, optional($.json_format_clause_opt)),
json_predicate_type_constraint: $ => choice(
prec.left(10, prec.dynamic(10, $.kw_json)),
prec.left(11, prec.dynamic(11, seq($.kw_json, $.kw_value))),
seq($.kw_json, $.kw_array),
prec.left(11, prec.dynamic(11, seq($.kw_json, $.kw_object))),
prec.left(11, prec.dynamic(11, seq($.kw_json, $.kw_scalar)))
),
json_key_uniqueness_constraint_opt: $ => choice(
prec.left(11, prec.dynamic(11, seq($.kw_with, $.kw_unique, $.kw_keys))),
prec.left(10, prec.dynamic(10, seq($.kw_with, $.kw_unique))),
prec.left(11, prec.dynamic(11, seq($.kw_without, $.kw_unique, $.kw_keys))),
prec.left(10, prec.dynamic(10, seq($.kw_without, $.kw_unique)))
),
json_name_and_value_list: $ => choice(
$.json_name_and_value,
seq($.json_name_and_value_list, ',', $.json_name_and_value)
),
json_name_and_value: $ => choice(
prec.left(11, prec.dynamic(11, seq($.c_expr, $.kw_value, $.json_value_expr))),
seq($.a_expr, ':', $.json_value_expr)
),
json_object_constructor_null_clause_opt: $ => choice(
seq($.kw_null, $.kw_on, $.kw_null),
seq($.kw_absent, $.kw_on, $.kw_null)
),
json_array_constructor_null_clause_opt: $ => choice(
seq($.kw_null, $.kw_on, $.kw_null),
seq($.kw_absent, $.kw_on, $.kw_null)
),
json_value_expr_list: $ => choice(
$.json_value_expr,
seq($.json_value_expr_list, ',', $.json_value_expr)
),
json_aggregate_func: $ => choice(
prec.left(20, prec.dynamic(20, seq($.kw_json_objectagg, '(', $.json_name_and_value, optional($.json_object_constructor_null_clause_opt), optional($.json_key_uniqueness_constraint_opt), optional($.json_returning_clause_opt), ')'))),
prec.left(20, prec.dynamic(20, seq($.kw_json_arrayagg, '(', $.json_value_expr, optional($.json_array_aggregate_order_by_clause_opt), optional($.json_array_constructor_null_clause_opt), optional($.json_returning_clause_opt), ')')))
),
json_array_aggregate_order_by_clause_opt: $ => seq($.kw_order, $.kw_by, $.sortby_list),
opt_target_list: $ => $.target_list,
target_list: $ => choice(
$.target_el,
seq($.target_list, ',', $.target_el)
),
target_el: $ => choice(
seq($.a_expr, $.kw_as, $.ColLabel),
seq($.a_expr, $.BareColLabel),
$.a_expr,
prec.left(14, prec.dynamic(14, '*'))
),
qualified_name_list: $ => choice(
$.qualified_name,
seq($.qualified_name_list, ',', $.qualified_name)
),
qualified_name: $ => choice(
$.ColId,
seq($.ColId, $.indirection)
),
name_list: $ => choice(
$.name,
seq($.name_list, ',', $.name)
),
name: $ => $.ColId,
attr_name: $ => $.ColLabel,
file_name: $ => $.Sconst,
func_name: $ => choice(
$.type_function_name,
seq($.ColId, $.indirection)
),
AexprConst: $ => choice(
$.Iconst,
$.float_literal,
$.Sconst,
$.bit_string_literal,
$.hex_string_literal,
seq($.func_name, $.Sconst),
prec.left(20, prec.dynamic(20, seq($.func_name, '(', $.func_arg_list, optional($.opt_sort_clause), ')', $.Sconst))),
seq($.ConstTypename, $.Sconst),
seq($.ConstInterval, $.Sconst, optional($.opt_interval)),
prec.left(20, prec.dynamic(20, seq($.ConstInterval, '(', $.Iconst, ')', $.Sconst))),
$.kw_true,
$.kw_false,
$.kw_null
),
Iconst: $ => $.integer_literal,
Sconst: $ => choice($.string_literal, $.dollar_quoted_string),
SignedIconst: $ => choice(
$.Iconst,
prec.left(13, prec.dynamic(13, seq('+', $.Iconst))),
prec.left(13, prec.dynamic(13, seq('-', $.Iconst)))
),
RoleId: $ => $.RoleSpec,
RoleSpec: $ => choice(
$.NonReservedWord,
$.kw_current_role,
$.kw_current_user,
$.kw_session_user
),
role_list: $ => choice(
$.RoleSpec,
seq($.role_list, ',', $.RoleSpec)
),
PLpgSQL_Expr: $ => choice(
seq($.opt_distinct_clause, optional($.opt_target_list), optional($.from_clause), optional($.where_clause), optional($.group_clause), optional($.having_clause), optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.opt_target_list, optional($.from_clause), optional($.where_clause), optional($.group_clause), optional($.having_clause), optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.from_clause, optional($.where_clause), optional($.group_clause), optional($.having_clause), optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.where_clause, optional($.group_clause), optional($.having_clause), optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.group_clause, optional($.having_clause), optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.having_clause, optional($.window_clause), optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.window_clause, optional($.opt_sort_clause), optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.opt_sort_clause, optional($.opt_select_limit), optional($.opt_for_locking_clause)),
seq($.opt_select_limit, optional($.opt_for_locking_clause)),
$.opt_for_locking_clause
),
PLAssignStmt: $ => seq($.plassign_target, optional($.opt_indirection), $.plassign_equals, optional($.PLpgSQL_Expr)),
plassign_target: $ => choice(
$.ColId,
$.param
),
plassign_equals: $ => choice(
':=',
prec.left(7, prec.dynamic(7, '='))
),
ColId: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.unreserved_keyword,
$.col_name_keyword
),
type_function_name: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.unreserved_keyword,
$.type_func_name_keyword
),
NonReservedWord: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.unreserved_keyword,
$.col_name_keyword,
$.type_func_name_keyword
),
ColLabel: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.unreserved_keyword,
$.col_name_keyword,
$.type_func_name_keyword,
$.reserved_keyword
),
BareColLabel: $ => choice(
prec.left(11, prec.dynamic(11, $._ident)),
$.bare_label_keyword
),
bare_label_keyword: $ => choice(
$.kw_abort,
$.kw_absent,
$.kw_absolute,
$.kw_access,
$.kw_action,
$.kw_add,
$.kw_admin,
$.kw_after,
$.kw_aggregate,
$.kw_all,
$.kw_also,
$.kw_alter,
$.kw_always,
$.kw_analyse,
$.kw_analyze,
prec.left(4, prec.dynamic(4, $.kw_and)),
$.kw_any,
$.kw_asc,
$.kw_asensitive,
$.kw_assertion,
$.kw_assignment,
$.kw_asymmetric,
prec.left(16, prec.dynamic(16, $.kw_at)),
$.kw_atomic,
$.kw_attach,
$.kw_attribute,
$.kw_authorization,
$.kw_backward,
$.kw_before,
$.kw_begin,
prec.left(8, prec.dynamic(8, $.kw_between)),
$.kw_bigint,
$.kw_binary,
$.kw_bit,
$.kw_boolean,
$.kw_both,
$.kw_breadth,
$.kw_by,
$.kw_cache,
$.kw_call,
$.kw_called,
$.kw_cascade,
$.kw_cascaded,
$.kw_case,
$.kw_cast,
$.kw_catalog,
$.kw_chain,
$.kw_characteristics,
$.kw_check,
$.kw_checkpoint,
$.kw_class,
$.kw_close,
$.kw_cluster,
$.kw_coalesce,
prec.left(17, prec.dynamic(17, $.kw_collate)),
$.kw_collation,
$.kw_column,
$.kw_columns,
$.kw_comment,
$.kw_comments,
$.kw_commit,
$.kw_committed,
$.kw_compression,
$.kw_concurrently,
$.kw_conditional,
$.kw_configuration,
$.kw_conflict,
$.kw_connection,
$.kw_constraint,
$.kw_constraints,
$.kw_content,
$.kw_continue,
$.kw_conversion,
$.kw_copy,
$.kw_cost,
prec.left(23, prec.dynamic(23, $.kw_cross)),
$.kw_csv,
prec.left(11, prec.dynamic(11, $.kw_cube)),
$.kw_current,
$.kw_current_catalog,
$.kw_current_date,
$.kw_current_role,
$.kw_current_schema,
$.kw_current_time,
$.kw_current_timestamp,
$.kw_current_user,
$.kw_cursor,
$.kw_cycle,
$.kw_data,
$.kw_database,
$.kw_deallocate,
$.kw_dec,
$.kw_decimal,
$.kw_declare,
$.kw_default,
$.kw_defaults,
$.kw_deferrable,
$.kw_deferred,
$.kw_definer,
$.kw_delete,
$.kw_delimiter,
$.kw_delimiters,
$.kw_depends,
$.kw_depth,
$.kw_desc,
$.kw_detach,
$.kw_dictionary,
$.kw_disable,
$.kw_discard,
$.kw_distinct,
$.kw_do,
$.kw_document,
$.kw_domain,
$.kw_double,
$.kw_drop,
$.kw_each,
$.kw_else,
$.kw_empty,
$.kw_enable,
$.kw_encoding,
$.kw_encrypted,
$.kw_end,
$.kw_enforced,
$.kw_enum,
$.kw_error,
prec.left(9, prec.dynamic(9, $.kw_escape)),
$.kw_event,
$.kw_exclude,
$.kw_excluding,
$.kw_exclusive,
$.kw_execute,
$.kw_exists,
$.kw_explain,
$.kw_expression,
$.kw_extension,
$.kw_external,
$.kw_extract,
$.kw_false,
$.kw_family,
$.kw_finalize,
$.kw_first,
$.kw_float,
prec.left(11, prec.dynamic(11, $.kw_following)),
$.kw_force,
$.kw_foreign,
$.kw_format,
$.kw_forward,
$.kw_freeze,
prec.left(23, prec.dynamic(23, $.kw_full)),
$.kw_function,
$.kw_functions,
$.kw_generated,
$.kw_global,
$.kw_granted,
$.kw_greatest,
$.kw_grouping,
prec.left(11, prec.dynamic(11, $.kw_groups)),
$.kw_handler,
$.kw_header,
$.kw_hold,
$.kw_identity,
$.kw_if,
prec.left(8, prec.dynamic(8, $.kw_ilike)),
$.kw_immediate,
$.kw_immutable,
$.kw_implicit,
$.kw_import,
prec.left(8, prec.dynamic(8, $.kw_in)),
$.kw_include,
$.kw_including,
$.kw_increment,
$.kw_indent,
$.kw_index,
$.kw_indexes,
$.kw_inherit,
$.kw_inherits,
$.kw_initially,
$.kw_inline,
prec.left(23, prec.dynamic(23, $.kw_inner)),
$.kw_inout,
$.kw_input,
$.kw_insensitive,
$.kw_insert,
$.kw_instead,
$.kw_int,
$.kw_integer,
$.kw_interval,
$.kw_invoker,
prec.left(6, prec.dynamic(6, $.kw_is)),
$.kw_isolation,
prec.left(23, prec.dynamic(23, $.kw_join)),
$.kw_json,
$.kw_json_array,
$.kw_json_arrayagg,
$.kw_json_exists,
$.kw_json_object,
$.kw_json_objectagg,
$.kw_json_query,
$.kw_json_scalar,
$.kw_json_serialize,
$.kw_json_table,
$.kw_json_value,
$.kw_keep,
$.kw_key,
prec.left(11, prec.dynamic(11, $.kw_keys)),
$.kw_label,
$.kw_language,
$.kw_large,
$.kw_last,
$.kw_lateral,
$.kw_leading,
$.kw_leakproof,
$.kw_least,
prec.left(23, prec.dynamic(23, $.kw_left)),
$.kw_level,
prec.left(8, prec.dynamic(8, $.kw_like)),
$.kw_listen,
$.kw_load,
$.kw_local,
$.kw_localtime,
$.kw_localtimestamp,
$.kw_location,
$.kw_lock,
$.kw_locked,
$.kw_logged,
$.kw_mapping,
$.kw_match,
$.kw_matched,
$.kw_materialized,
$.kw_maxvalue,
$.kw_merge,
$.kw_merge_action,
$.kw_method,
$.kw_minvalue,
$.kw_mode,
$.kw_move,
$.kw_name,
$.kw_names,
$.kw_national,
prec.left(23, prec.dynamic(23, $.kw_natural)),
$.kw_nchar,
prec.left(10, prec.dynamic(10, $.kw_nested)),
$.kw_new,
$.kw_next,
$.kw_nfc,
$.kw_nfd,
$.kw_nfkc,
$.kw_nfkd,
$.kw_no,
$.kw_none,
$.kw_normalize,
$.kw_normalized,
prec.right(5, prec.dynamic(5, $.kw_not)),
$.kw_nothing,
$.kw_notify,
$.kw_nowait,
$.kw_null,
$.kw_nullif,
$.kw_nulls,
$.kw_numeric,
prec.left(11, prec.dynamic(11, $.kw_object)),
$.kw_objects,
$.kw_of,
$.kw_off,
$.kw_oids,
$.kw_old,
$.kw_omit,
$.kw_only,
prec.left(12, prec.dynamic(12, $.kw_operator)),
$.kw_option,
$.kw_options,
prec.left(3, prec.dynamic(3, $.kw_or)),
$.kw_ordinality,
$.kw_others,
$.kw_out,
$.kw_outer,
$.kw_overlay,
$.kw_overriding,
$.kw_owned,
$.kw_owner,
$.kw_parallel,
$.kw_parameter,
$.kw_parser,
$.kw_partial,
prec.left(11, prec.dynamic(11, $.kw_partition)),
$.kw_passing,
$.kw_password,
prec.left(11, prec.dynamic(11, $.kw_path)),
$.kw_period,
$.kw_placing,
$.kw_plan,
$.kw_plans,
$.kw_policy,
$.kw_position,
prec.left(11, prec.dynamic(11, $.kw_preceding)),
$.kw_prepare,
$.kw_prepared,
$.kw_preserve,
$.kw_primary,
$.kw_prior,
$.kw_privileges,
$.kw_procedural,
$.kw_procedure,
$.kw_procedures,
$.kw_program,
$.kw_publication,
$.kw_quote,
$.kw_quotes,
prec.left(11, prec.dynamic(11, $.kw_range)),
$.kw_read,
$.kw_real,
$.kw_reassign,
$.kw_recursive,
$.kw_ref,
$.kw_references,
$.kw_referencing,
$.kw_refresh,
$.kw_reindex,
$.kw_relative,
$.kw_release,
$.kw_rename,
$.kw_repeatable,
$.kw_replace,
$.kw_replica,
$.kw_reset,
$.kw_restart,
$.kw_restrict,
$.kw_return,
$.kw_returns,
$.kw_revoke,
prec.left(23, prec.dynamic(23, $.kw_right)),
$.kw_role,
$.kw_rollback,
prec.left(11, prec.dynamic(11, $.kw_rollup)),
$.kw_routine,
$.kw_routines,
$.kw_row,
prec.left(11, prec.dynamic(11, $.kw_rows)),
$.kw_rule,
$.kw_savepoint,
prec.left(11, prec.dynamic(11, $.kw_scalar)),
$.kw_schema,
$.kw_schemas,
$.kw_scroll,
$.kw_search,
$.kw_security,
$.kw_select,
$.kw_sequence,
$.kw_sequences,
$.kw_serializable,
$.kw_server,
$.kw_session,
$.kw_session_user,
prec.left(11, prec.dynamic(11, $.kw_set)),
$.kw_setof,
$.kw_sets,
$.kw_share,
$.kw_show,
prec.left(8, prec.dynamic(8, $.kw_similar)),
$.kw_simple,
$.kw_skip,
$.kw_smallint,
$.kw_snapshot,
$.kw_some,
$.kw_source,
$.kw_sql,
$.kw_stable,
$.kw_standalone,
$.kw_start,
$.kw_statement,
$.kw_statistics,
$.kw_stdin,
$.kw_stdout,
$.kw_storage,
$.kw_stored,
$.kw_strict,
$.kw_string,
$.kw_strip,
$.kw_subscription,
$.kw_substring,
$.kw_support,
$.kw_symmetric,
$.kw_sysid,
$.kw_system,
$.kw_system_user,
$.kw_table,
$.kw_tables,
$.kw_tablesample,
$.kw_tablespace,
$.kw_target,
$.kw_temp,
$.kw_template,
$.kw_temporary,
$.kw_text,
$.kw_then,
$.kw_ties,
$.kw_time,
$.kw_timestamp,
$.kw_trailing,
$.kw_transaction,
$.kw_transform,
$.kw_treat,
$.kw_trigger,
$.kw_trim,
$.kw_true,
$.kw_truncate,
$.kw_trusted,
$.kw_type,
$.kw_types,
$.kw_uescape,
prec.left(10, prec.dynamic(10, $.kw_unbounded)),
$.kw_uncommitted,
$.kw_unconditional,
$.kw_unencrypted,
$.kw_unique,
$.kw_unknown,
$.kw_unlisten,
$.kw_unlogged,
$.kw_until,
$.kw_update,
$.kw_user,
$.kw_using,
$.kw_vacuum,
$.kw_valid,
$.kw_validate,
$.kw_validator,
prec.left(11, prec.dynamic(11, $.kw_value)),
$.kw_values,
$.kw_varchar,
$.kw_variadic,
$.kw_verbose,
$.kw_version,
$.kw_view,
$.kw_views,
$.kw_virtual,
$.kw_volatile,
$.kw_when,
$.kw_whitespace,
$.kw_work,
$.kw_wrapper,
$.kw_write,
$.kw_xml,
$.kw_xmlattributes,
$.kw_xmlconcat,
$.kw_xmlelement,
$.kw_xmlexists,
$.kw_xmlforest,
$.kw_xmlnamespaces,
$.kw_xmlparse,
$.kw_xmlpi,
$.kw_xmlroot,
$.kw_xmlserialize,
$.kw_xmltable,
$.kw_yes,
$.kw_zone
),
unreserved_keyword: $ => choice(
$.kw_abort,
$.kw_absent,
$.kw_absolute,
$.kw_access,
$.kw_action,
$.kw_add,
$.kw_admin,
$.kw_after,
$.kw_aggregate,
$.kw_also,
$.kw_alter,
$.kw_always,
$.kw_asensitive,
$.kw_assertion,
$.kw_assignment,
$.kw_at,
$.kw_atomic,
$.kw_attach,
$.kw_attribute,
$.kw_backward,
$.kw_before,
$.kw_begin,
$.kw_breadth,
$.kw_by,
$.kw_cache,
$.kw_call,
$.kw_called,
$.kw_cascade,
$.kw_cascaded,
$.kw_catalog,
$.kw_chain,
$.kw_characteristics,
$.kw_checkpoint,
$.kw_class,
$.kw_close,
$.kw_cluster,
$.kw_columns,
$.kw_comment,
$.kw_comments,
$.kw_commit,
$.kw_committed,
$.kw_compression,
$.kw_conditional,
$.kw_configuration,
$.kw_conflict,
$.kw_connection,
$.kw_constraints,
$.kw_content,
$.kw_continue,
$.kw_conversion,
$.kw_copy,
$.kw_cost,
$.kw_csv,
$.kw_cube,
$.kw_current,
$.kw_cursor,
$.kw_cycle,
$.kw_data,
$.kw_database,
$.kw_day,
$.kw_deallocate,
$.kw_declare,
$.kw_defaults,
$.kw_deferred,
$.kw_definer,
$.kw_delete,
$.kw_delimiter,
$.kw_delimiters,
$.kw_depends,
$.kw_depth,
$.kw_detach,
$.kw_dictionary,
$.kw_disable,
$.kw_discard,
$.kw_document,
$.kw_domain,
$.kw_double,
$.kw_drop,
$.kw_each,
$.kw_empty,
$.kw_enable,
$.kw_encoding,
$.kw_encrypted,
$.kw_enforced,
$.kw_enum,
$.kw_error,
$.kw_escape,
$.kw_event,
$.kw_exclude,
$.kw_excluding,
$.kw_exclusive,
$.kw_execute,
$.kw_explain,
$.kw_expression,
$.kw_extension,
$.kw_external,
$.kw_family,
$.kw_filter,
$.kw_finalize,
$.kw_first,
$.kw_following,
$.kw_force,
$.kw_format,
$.kw_forward,
$.kw_function,
$.kw_functions,
$.kw_generated,
$.kw_global,
$.kw_granted,
$.kw_groups,
$.kw_handler,
$.kw_header,
$.kw_hold,
$.kw_hour,
$.kw_identity,
$.kw_if,
$.kw_immediate,
$.kw_immutable,
$.kw_implicit,
$.kw_import,
$.kw_include,
$.kw_including,
$.kw_increment,
$.kw_indent,
$.kw_index,
$.kw_indexes,
$.kw_inherit,
$.kw_inherits,
$.kw_inline,
$.kw_input,
$.kw_insensitive,
$.kw_insert,
$.kw_instead,
$.kw_invoker,
$.kw_isolation,
$.kw_keep,
$.kw_key,
$.kw_keys,
$.kw_label,
$.kw_language,
$.kw_large,
$.kw_last,
$.kw_leakproof,
$.kw_level,
$.kw_listen,
$.kw_load,
$.kw_local,
$.kw_location,
$.kw_lock,
$.kw_locked,
$.kw_logged,
$.kw_mapping,
$.kw_match,
$.kw_matched,
$.kw_materialized,
$.kw_maxvalue,
$.kw_merge,
$.kw_method,
$.kw_minute,
$.kw_minvalue,
$.kw_mode,
$.kw_month,
$.kw_move,
$.kw_name,
$.kw_names,
$.kw_nested,
$.kw_new,
$.kw_next,
$.kw_nfc,
$.kw_nfd,
$.kw_nfkc,
$.kw_nfkd,
$.kw_no,
$.kw_normalized,
$.kw_nothing,
$.kw_notify,
$.kw_nowait,
$.kw_nulls,
$.kw_object,
$.kw_objects,
$.kw_of,
$.kw_off,
$.kw_oids,
$.kw_old,
$.kw_omit,
$.kw_operator,
$.kw_option,
$.kw_options,
$.kw_ordinality,
$.kw_others,
$.kw_over,
$.kw_overriding,
$.kw_owned,
$.kw_owner,
$.kw_parallel,
$.kw_parameter,
$.kw_parser,
$.kw_partial,
$.kw_partition,
$.kw_passing,
$.kw_password,
$.kw_path,
$.kw_period,
$.kw_plan,
$.kw_plans,
$.kw_policy,
$.kw_preceding,
$.kw_prepare,
$.kw_prepared,
$.kw_preserve,
$.kw_prior,
$.kw_privileges,
$.kw_procedural,
$.kw_procedure,
$.kw_procedures,
$.kw_program,
$.kw_publication,
$.kw_quote,
$.kw_quotes,
$.kw_range,
$.kw_read,
$.kw_reassign,
$.kw_recursive,
$.kw_ref,
$.kw_referencing,
$.kw_refresh,
$.kw_reindex,
$.kw_relative,
$.kw_release,
$.kw_rename,
$.kw_repeatable,
$.kw_replace,
$.kw_replica,
$.kw_reset,
$.kw_restart,
$.kw_restrict,
$.kw_return,
$.kw_returns,
$.kw_revoke,
$.kw_role,
$.kw_rollback,
$.kw_rollup,
$.kw_routine,
$.kw_routines,
$.kw_rows,
$.kw_rule,
$.kw_savepoint,
$.kw_scalar,
$.kw_schema,
$.kw_schemas,
$.kw_scroll,
$.kw_search,
$.kw_second,
$.kw_security,
$.kw_sequence,
$.kw_sequences,
$.kw_serializable,
$.kw_server,
$.kw_session,
$.kw_set,
$.kw_sets,
$.kw_share,
$.kw_show,
$.kw_simple,
$.kw_skip,
$.kw_snapshot,
$.kw_source,
$.kw_sql,
$.kw_stable,
$.kw_standalone,
$.kw_start,
$.kw_statement,
$.kw_statistics,
$.kw_stdin,
$.kw_stdout,
$.kw_storage,
$.kw_stored,
$.kw_strict,
$.kw_string,
$.kw_strip,
$.kw_subscription,
$.kw_support,
$.kw_sysid,
$.kw_system,
$.kw_tables,
$.kw_tablespace,
$.kw_target,
$.kw_temp,
$.kw_template,
$.kw_temporary,
$.kw_text,
$.kw_ties,
$.kw_transaction,
$.kw_transform,
$.kw_trigger,
$.kw_truncate,
$.kw_trusted,
$.kw_type,
$.kw_types,
$.kw_uescape,
$.kw_unbounded,
$.kw_uncommitted,
$.kw_unconditional,
$.kw_unencrypted,
$.kw_unknown,
$.kw_unlisten,
$.kw_unlogged,
$.kw_until,
$.kw_update,
$.kw_vacuum,
$.kw_valid,
$.kw_validate,
$.kw_validator,
$.kw_value,
$.kw_varying,
$.kw_version,
$.kw_view,
$.kw_views,
$.kw_virtual,
$.kw_volatile,
$.kw_whitespace,
$.kw_within,
$.kw_without,
$.kw_work,
$.kw_wrapper,
$.kw_write,
$.kw_xml,
$.kw_year,
$.kw_yes,
$.kw_zone
),
col_name_keyword: $ => choice(
$.kw_between,
$.kw_bigint,
$.kw_bit,
$.kw_boolean,
$.kw_char,
$.kw_character,
$.kw_coalesce,
$.kw_dec,
$.kw_decimal,
$.kw_exists,
$.kw_extract,
$.kw_float,
$.kw_greatest,
$.kw_grouping,
$.kw_inout,
$.kw_int,
$.kw_integer,
$.kw_interval,
$.kw_json,
$.kw_json_array,
$.kw_json_arrayagg,
$.kw_json_exists,
$.kw_json_object,
$.kw_json_objectagg,
$.kw_json_query,
$.kw_json_scalar,
$.kw_json_serialize,
$.kw_json_table,
$.kw_json_value,
$.kw_least,
$.kw_merge_action,
$.kw_national,
$.kw_nchar,
$.kw_none,
$.kw_normalize,
$.kw_nullif,
$.kw_numeric,
$.kw_out,
$.kw_overlay,
$.kw_position,
$.kw_precision,
$.kw_real,
$.kw_row,
$.kw_setof,
$.kw_smallint,
$.kw_substring,
$.kw_time,
$.kw_timestamp,
$.kw_treat,
$.kw_trim,
$.kw_values,
$.kw_varchar,
$.kw_xmlattributes,
$.kw_xmlconcat,
$.kw_xmlelement,
$.kw_xmlexists,
$.kw_xmlforest,
$.kw_xmlnamespaces,
$.kw_xmlparse,
$.kw_xmlpi,
$.kw_xmlroot,
$.kw_xmlserialize,
$.kw_xmltable
),
type_func_name_keyword: $ => choice(
$.kw_authorization,
$.kw_binary,
$.kw_collation,
$.kw_concurrently,
$.kw_cross,
$.kw_current_schema,
$.kw_freeze,
$.kw_full,
$.kw_ilike,
$.kw_inner,
$.kw_is,
$.kw_isnull,
$.kw_join,
$.kw_left,
$.kw_like,
$.kw_natural,
$.kw_notnull,
$.kw_outer,
$.kw_overlaps,
$.kw_right,
$.kw_similar,
$.kw_tablesample,
$.kw_verbose
),
reserved_keyword: $ => choice(
$.kw_all,
$.kw_analyse,
$.kw_analyze,
$.kw_and,
$.kw_any,
$.kw_array,
$.kw_as,
$.kw_asc,
$.kw_asymmetric,
$.kw_both,
$.kw_case,
$.kw_cast,
$.kw_check,
$.kw_collate,
$.kw_column,
$.kw_constraint,
$.kw_create,
$.kw_current_catalog,
$.kw_current_date,
$.kw_current_role,
$.kw_current_time,
$.kw_current_timestamp,
$.kw_current_user,
$.kw_default,
$.kw_deferrable,
$.kw_desc,
$.kw_distinct,
$.kw_do,
$.kw_else,
$.kw_end,
$.kw_except,
$.kw_false,
$.kw_fetch,
$.kw_for,
$.kw_foreign,
$.kw_from,
$.kw_grant,
$.kw_group,
$.kw_having,
$.kw_in,
$.kw_initially,
$.kw_intersect,
$.kw_into,
$.kw_lateral,
$.kw_leading,
$.kw_limit,
$.kw_localtime,
$.kw_localtimestamp,
$.kw_not,
$.kw_null,
$.kw_offset,
$.kw_on,
$.kw_only,
$.kw_or,
$.kw_order,
$.kw_placing,
$.kw_primary,
$.kw_references,
$.kw_returning,
$.kw_select,
$.kw_session_user,
$.kw_some,
$.kw_symmetric,
$.kw_system_user,
$.kw_table,
$.kw_then,
$.kw_to,
$.kw_trailing,
$.kw_true,
$.kw_union,
$.kw_unique,
$.kw_user,
$.kw_using,
$.kw_variadic,
$.kw_when,
$.kw_where,
$.kw_window,
$.kw_with
),
kw_abort: _ => token(prec(1, /[aA][bB][oO][rR][tT]/)),
kw_absent: _ => token(prec(1, /[aA][bB][sS][eE][nN][tT]/)),
kw_absolute: _ => token(prec(1, /[aA][bB][sS][oO][lL][uU][tT][eE]/)),
kw_access: _ => token(prec(1, /[aA][cC][cC][eE][sS][sS]/)),
kw_action: _ => token(prec(1, /[aA][cC][tT][iI][oO][nN]/)),
kw_add: _ => token(prec(1, /[aA][dD][dD]/)),
kw_admin: _ => token(prec(1, /[aA][dD][mM][iI][nN]/)),
kw_after: _ => token(prec(1, /[aA][fF][tT][eE][rR]/)),
kw_aggregate: _ => token(prec(1, /[aA][gG][gG][rR][eE][gG][aA][tT][eE]/)),
kw_all: _ => token(prec(1, /[aA][lL][lL]/)),
kw_also: _ => token(prec(1, /[aA][lL][sS][oO]/)),
kw_alter: _ => token(prec(1, /[aA][lL][tT][eE][rR]/)),
kw_always: _ => token(prec(1, /[aA][lL][wW][aA][yY][sS]/)),
kw_analyse: _ => token(prec(1, /[aA][nN][aA][lL][yY][sS][eE]/)),
kw_analyze: _ => token(prec(1, /[aA][nN][aA][lL][yY][zZ][eE]/)),
kw_and: _ => token(prec(1, /[aA][nN][dD]/)),
kw_any: _ => token(prec(1, /[aA][nN][yY]/)),
kw_array: _ => token(prec(1, /[aA][rR][rR][aA][yY]/)),
kw_as: _ => token(prec(1, /[aA][sS]/)),
kw_asc: _ => token(prec(1, /[aA][sS][cC]/)),
kw_asensitive: _ => token(prec(1, /[aA][sS][eE][nN][sS][iI][tT][iI][vV][eE]/)),
kw_assertion: _ => token(prec(1, /[aA][sS][sS][eE][rR][tT][iI][oO][nN]/)),
kw_assignment: _ => token(prec(1, /[aA][sS][sS][iI][gG][nN][mM][eE][nN][tT]/)),
kw_asymmetric: _ => token(prec(1, /[aA][sS][yY][mM][mM][eE][tT][rR][iI][cC]/)),
kw_at: _ => token(prec(1, /[aA][tT]/)),
kw_atomic: _ => token(prec(1, /[aA][tT][oO][mM][iI][cC]/)),
kw_attach: _ => token(prec(1, /[aA][tT][tT][aA][cC][hH]/)),
kw_attribute: _ => token(prec(1, /[aA][tT][tT][rR][iI][bB][uU][tT][eE]/)),
kw_authorization: _ => token(prec(1, /[aA][uU][tT][hH][oO][rR][iI][zZ][aA][tT][iI][oO][nN]/)),
kw_backward: _ => token(prec(1, /[bB][aA][cC][kK][wW][aA][rR][dD]/)),
kw_before: _ => token(prec(1, /[bB][eE][fF][oO][rR][eE]/)),
kw_begin: _ => token(prec(1, /[bB][eE][gG][iI][nN]/)),
kw_between: _ => token(prec(1, /[bB][eE][tT][wW][eE][eE][nN]/)),
kw_bigint: _ => token(prec(1, /[bB][iI][gG][iI][nN][tT]/)),
kw_binary: _ => token(prec(1, /[bB][iI][nN][aA][rR][yY]/)),
kw_bit: _ => token(prec(1, /[bB][iI][tT]/)),
kw_boolean: _ => token(prec(1, /[bB][oO][oO][lL][eE][aA][nN]/)),
kw_both: _ => token(prec(1, /[bB][oO][tT][hH]/)),
kw_breadth: _ => token(prec(1, /[bB][rR][eE][aA][dD][tT][hH]/)),
kw_by: _ => token(prec(1, /[bB][yY]/)),
kw_cache: _ => token(prec(1, /[cC][aA][cC][hH][eE]/)),
kw_call: _ => token(prec(1, /[cC][aA][lL][lL]/)),
kw_called: _ => token(prec(1, /[cC][aA][lL][lL][eE][dD]/)),
kw_cascade: _ => token(prec(1, /[cC][aA][sS][cC][aA][dD][eE]/)),
kw_cascaded: _ => token(prec(1, /[cC][aA][sS][cC][aA][dD][eE][dD]/)),
kw_case: _ => token(prec(1, /[cC][aA][sS][eE]/)),
kw_cast: _ => token(prec(1, /[cC][aA][sS][tT]/)),
kw_catalog: _ => token(prec(1, /[cC][aA][tT][aA][lL][oO][gG]/)),
kw_chain: _ => token(prec(1, /[cC][hH][aA][iI][nN]/)),
kw_char: _ => token(prec(1, /[cC][hH][aA][rR]/)),
kw_character: _ => token(prec(1, /[cC][hH][aA][rR][aA][cC][tT][eE][rR]/)),
kw_characteristics: _ => token(prec(1, /[cC][hH][aA][rR][aA][cC][tT][eE][rR][iI][sS][tT][iI][cC][sS]/)),
kw_check: _ => token(prec(1, /[cC][hH][eE][cC][kK]/)),
kw_checkpoint: _ => token(prec(1, /[cC][hH][eE][cC][kK][pP][oO][iI][nN][tT]/)),
kw_class: _ => token(prec(1, /[cC][lL][aA][sS][sS]/)),
kw_close: _ => token(prec(1, /[cC][lL][oO][sS][eE]/)),
kw_cluster: _ => token(prec(1, /[cC][lL][uU][sS][tT][eE][rR]/)),
kw_coalesce: _ => token(prec(1, /[cC][oO][aA][lL][eE][sS][cC][eE]/)),
kw_collate: _ => token(prec(1, /[cC][oO][lL][lL][aA][tT][eE]/)),
kw_collation: _ => token(prec(1, /[cC][oO][lL][lL][aA][tT][iI][oO][nN]/)),
kw_column: _ => token(prec(1, /[cC][oO][lL][uU][mM][nN]/)),
kw_columns: _ => token(prec(1, /[cC][oO][lL][uU][mM][nN][sS]/)),
kw_comment: _ => token(prec(1, /[cC][oO][mM][mM][eE][nN][tT]/)),
kw_comments: _ => token(prec(1, /[cC][oO][mM][mM][eE][nN][tT][sS]/)),
kw_commit: _ => token(prec(1, /[cC][oO][mM][mM][iI][tT]/)),
kw_committed: _ => token(prec(1, /[cC][oO][mM][mM][iI][tT][tT][eE][dD]/)),
kw_compression: _ => token(prec(1, /[cC][oO][mM][pP][rR][eE][sS][sS][iI][oO][nN]/)),
kw_concurrently: _ => token(prec(1, /[cC][oO][nN][cC][uU][rR][rR][eE][nN][tT][lL][yY]/)),
kw_conditional: _ => token(prec(1, /[cC][oO][nN][dD][iI][tT][iI][oO][nN][aA][lL]/)),
kw_configuration: _ => token(prec(1, /[cC][oO][nN][fF][iI][gG][uU][rR][aA][tT][iI][oO][nN]/)),
kw_conflict: _ => token(prec(1, /[cC][oO][nN][fF][lL][iI][cC][tT]/)),
kw_connection: _ => token(prec(1, /[cC][oO][nN][nN][eE][cC][tT][iI][oO][nN]/)),
kw_constraint: _ => token(prec(1, /[cC][oO][nN][sS][tT][rR][aA][iI][nN][tT]/)),
kw_constraints: _ => token(prec(1, /[cC][oO][nN][sS][tT][rR][aA][iI][nN][tT][sS]/)),
kw_content: _ => token(prec(1, /[cC][oO][nN][tT][eE][nN][tT]/)),
kw_continue: _ => token(prec(1, /[cC][oO][nN][tT][iI][nN][uU][eE]/)),
kw_conversion: _ => token(prec(1, /[cC][oO][nN][vV][eE][rR][sS][iI][oO][nN]/)),
kw_copy: _ => token(prec(1, /[cC][oO][pP][yY]/)),
kw_cost: _ => token(prec(1, /[cC][oO][sS][tT]/)),
kw_create: _ => token(prec(1, /[cC][rR][eE][aA][tT][eE]/)),
kw_cross: _ => token(prec(1, /[cC][rR][oO][sS][sS]/)),
kw_csv: _ => token(prec(1, /[cC][sS][vV]/)),
kw_cube: _ => token(prec(1, /[cC][uU][bB][eE]/)),
kw_current: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]/)),
kw_current_catalog: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[cC][aA][tT][aA][lL][oO][gG]/)),
kw_current_date: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[dD][aA][tT][eE]/)),
kw_current_role: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[rR][oO][lL][eE]/)),
kw_current_schema: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[sS][cC][hH][eE][mM][aA]/)),
kw_current_time: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[tT][iI][mM][eE]/)),
kw_current_timestamp: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[tT][iI][mM][eE][sS][tT][aA][mM][pP]/)),
kw_current_user: _ => token(prec(1, /[cC][uU][rR][rR][eE][nN][tT]_[uU][sS][eE][rR]/)),
kw_cursor: _ => token(prec(1, /[cC][uU][rR][sS][oO][rR]/)),
kw_cycle: _ => token(prec(1, /[cC][yY][cC][lL][eE]/)),
kw_data: _ => token(prec(1, /[dD][aA][tT][aA]/)),
kw_database: _ => token(prec(1, /[dD][aA][tT][aA][bB][aA][sS][eE]/)),
kw_day: _ => token(prec(1, /[dD][aA][yY]/)),
kw_deallocate: _ => token(prec(1, /[dD][eE][aA][lL][lL][oO][cC][aA][tT][eE]/)),
kw_dec: _ => token(prec(1, /[dD][eE][cC]/)),
kw_decimal: _ => token(prec(1, /[dD][eE][cC][iI][mM][aA][lL]/)),
kw_declare: _ => token(prec(1, /[dD][eE][cC][lL][aA][rR][eE]/)),
kw_default: _ => token(prec(1, /[dD][eE][fF][aA][uU][lL][tT]/)),
kw_defaults: _ => token(prec(1, /[dD][eE][fF][aA][uU][lL][tT][sS]/)),
kw_deferrable: _ => token(prec(1, /[dD][eE][fF][eE][rR][rR][aA][bB][lL][eE]/)),
kw_deferred: _ => token(prec(1, /[dD][eE][fF][eE][rR][rR][eE][dD]/)),
kw_definer: _ => token(prec(1, /[dD][eE][fF][iI][nN][eE][rR]/)),
kw_delete: _ => token(prec(1, /[dD][eE][lL][eE][tT][eE]/)),
kw_delimiter: _ => token(prec(1, /[dD][eE][lL][iI][mM][iI][tT][eE][rR]/)),
kw_delimiters: _ => token(prec(1, /[dD][eE][lL][iI][mM][iI][tT][eE][rR][sS]/)),
kw_depends: _ => token(prec(1, /[dD][eE][pP][eE][nN][dD][sS]/)),
kw_depth: _ => token(prec(1, /[dD][eE][pP][tT][hH]/)),
kw_desc: _ => token(prec(1, /[dD][eE][sS][cC]/)),
kw_detach: _ => token(prec(1, /[dD][eE][tT][aA][cC][hH]/)),
kw_dictionary: _ => token(prec(1, /[dD][iI][cC][tT][iI][oO][nN][aA][rR][yY]/)),
kw_disable: _ => token(prec(1, /[dD][iI][sS][aA][bB][lL][eE]/)),
kw_discard: _ => token(prec(1, /[dD][iI][sS][cC][aA][rR][dD]/)),
kw_distinct: _ => token(prec(1, /[dD][iI][sS][tT][iI][nN][cC][tT]/)),
kw_do: _ => token(prec(1, /[dD][oO]/)),
kw_document: _ => token(prec(1, /[dD][oO][cC][uU][mM][eE][nN][tT]/)),
kw_domain: _ => token(prec(1, /[dD][oO][mM][aA][iI][nN]/)),
kw_double: _ => token(prec(1, /[dD][oO][uU][bB][lL][eE]/)),
kw_drop: _ => token(prec(1, /[dD][rR][oO][pP]/)),
kw_each: _ => token(prec(1, /[eE][aA][cC][hH]/)),
kw_else: _ => token(prec(1, /[eE][lL][sS][eE]/)),
kw_empty: _ => token(prec(1, /[eE][mM][pP][tT][yY]/)),
kw_enable: _ => token(prec(1, /[eE][nN][aA][bB][lL][eE]/)),
kw_encoding: _ => token(prec(1, /[eE][nN][cC][oO][dD][iI][nN][gG]/)),
kw_encrypted: _ => token(prec(1, /[eE][nN][cC][rR][yY][pP][tT][eE][dD]/)),
kw_end: _ => token(prec(1, /[eE][nN][dD]/)),
kw_enforced: _ => token(prec(1, /[eE][nN][fF][oO][rR][cC][eE][dD]/)),
kw_enum: _ => token(prec(1, /[eE][nN][uU][mM]/)),
kw_error: _ => token(prec(1, /[eE][rR][rR][oO][rR]/)),
kw_escape: _ => token(prec(1, /[eE][sS][cC][aA][pP][eE]/)),
kw_event: _ => token(prec(1, /[eE][vV][eE][nN][tT]/)),
kw_except: _ => token(prec(1, /[eE][xX][cC][eE][pP][tT]/)),
kw_exclude: _ => token(prec(1, /[eE][xX][cC][lL][uU][dD][eE]/)),
kw_excluding: _ => token(prec(1, /[eE][xX][cC][lL][uU][dD][iI][nN][gG]/)),
kw_exclusive: _ => token(prec(1, /[eE][xX][cC][lL][uU][sS][iI][vV][eE]/)),
kw_execute: _ => token(prec(1, /[eE][xX][eE][cC][uU][tT][eE]/)),
kw_exists: _ => token(prec(1, /[eE][xX][iI][sS][tT][sS]/)),
kw_explain: _ => token(prec(1, /[eE][xX][pP][lL][aA][iI][nN]/)),
kw_expression: _ => token(prec(1, /[eE][xX][pP][rR][eE][sS][sS][iI][oO][nN]/)),
kw_extension: _ => token(prec(1, /[eE][xX][tT][eE][nN][sS][iI][oO][nN]/)),
kw_external: _ => token(prec(1, /[eE][xX][tT][eE][rR][nN][aA][lL]/)),
kw_extract: _ => token(prec(1, /[eE][xX][tT][rR][aA][cC][tT]/)),
kw_false: _ => token(prec(1, /[fF][aA][lL][sS][eE]/)),
kw_family: _ => token(prec(1, /[fF][aA][mM][iI][lL][yY]/)),
kw_fetch: _ => token(prec(1, /[fF][eE][tT][cC][hH]/)),
kw_filter: _ => token(prec(1, /[fF][iI][lL][tT][eE][rR]/)),
kw_finalize: _ => token(prec(1, /[fF][iI][nN][aA][lL][iI][zZ][eE]/)),
kw_first: _ => token(prec(1, /[fF][iI][rR][sS][tT]/)),
kw_float: _ => token(prec(1, /[fF][lL][oO][aA][tT]/)),
kw_following: _ => token(prec(1, /[fF][oO][lL][lL][oO][wW][iI][nN][gG]/)),
kw_for: _ => token(prec(1, /[fF][oO][rR]/)),
kw_force: _ => token(prec(1, /[fF][oO][rR][cC][eE]/)),
kw_foreign: _ => token(prec(1, /[fF][oO][rR][eE][iI][gG][nN]/)),
kw_format: _ => token(prec(1, /[fF][oO][rR][mM][aA][tT]/)),
kw_forward: _ => token(prec(1, /[fF][oO][rR][wW][aA][rR][dD]/)),
kw_freeze: _ => token(prec(1, /[fF][rR][eE][eE][zZ][eE]/)),
kw_from: _ => token(prec(1, /[fF][rR][oO][mM]/)),
kw_full: _ => token(prec(1, /[fF][uU][lL][lL]/)),
kw_function: _ => token(prec(1, /[fF][uU][nN][cC][tT][iI][oO][nN]/)),
kw_functions: _ => token(prec(1, /[fF][uU][nN][cC][tT][iI][oO][nN][sS]/)),
kw_generated: _ => token(prec(1, /[gG][eE][nN][eE][rR][aA][tT][eE][dD]/)),
kw_global: _ => token(prec(1, /[gG][lL][oO][bB][aA][lL]/)),
kw_grant: _ => token(prec(1, /[gG][rR][aA][nN][tT]/)),
kw_granted: _ => token(prec(1, /[gG][rR][aA][nN][tT][eE][dD]/)),
kw_greatest: _ => token(prec(1, /[gG][rR][eE][aA][tT][eE][sS][tT]/)),
kw_group: _ => token(prec(1, /[gG][rR][oO][uU][pP]/)),
kw_grouping: _ => token(prec(1, /[gG][rR][oO][uU][pP][iI][nN][gG]/)),
kw_groups: _ => token(prec(1, /[gG][rR][oO][uU][pP][sS]/)),
kw_handler: _ => token(prec(1, /[hH][aA][nN][dD][lL][eE][rR]/)),
kw_having: _ => token(prec(1, /[hH][aA][vV][iI][nN][gG]/)),
kw_header: _ => token(prec(1, /[hH][eE][aA][dD][eE][rR]/)),
kw_hold: _ => token(prec(1, /[hH][oO][lL][dD]/)),
kw_hour: _ => token(prec(1, /[hH][oO][uU][rR]/)),
kw_identity: _ => token(prec(1, /[iI][dD][eE][nN][tT][iI][tT][yY]/)),
kw_if: _ => token(prec(1, /[iI][fF]/)),
kw_ilike: _ => token(prec(1, /[iI][lL][iI][kK][eE]/)),
kw_immediate: _ => token(prec(1, /[iI][mM][mM][eE][dD][iI][aA][tT][eE]/)),
kw_immutable: _ => token(prec(1, /[iI][mM][mM][uU][tT][aA][bB][lL][eE]/)),
kw_implicit: _ => token(prec(1, /[iI][mM][pP][lL][iI][cC][iI][tT]/)),
kw_import: _ => token(prec(1, /[iI][mM][pP][oO][rR][tT]/)),
kw_in: _ => token(prec(1, /[iI][nN]/)),
kw_include: _ => token(prec(1, /[iI][nN][cC][lL][uU][dD][eE]/)),
kw_including: _ => token(prec(1, /[iI][nN][cC][lL][uU][dD][iI][nN][gG]/)),
kw_increment: _ => token(prec(1, /[iI][nN][cC][rR][eE][mM][eE][nN][tT]/)),
kw_indent: _ => token(prec(1, /[iI][nN][dD][eE][nN][tT]/)),
kw_index: _ => token(prec(1, /[iI][nN][dD][eE][xX]/)),
kw_indexes: _ => token(prec(1, /[iI][nN][dD][eE][xX][eE][sS]/)),
kw_inherit: _ => token(prec(1, /[iI][nN][hH][eE][rR][iI][tT]/)),
kw_inherits: _ => token(prec(1, /[iI][nN][hH][eE][rR][iI][tT][sS]/)),
kw_initially: _ => token(prec(1, /[iI][nN][iI][tT][iI][aA][lL][lL][yY]/)),
kw_inline: _ => token(prec(1, /[iI][nN][lL][iI][nN][eE]/)),
kw_inner: _ => token(prec(1, /[iI][nN][nN][eE][rR]/)),
kw_inout: _ => token(prec(1, /[iI][nN][oO][uU][tT]/)),
kw_input: _ => token(prec(1, /[iI][nN][pP][uU][tT]/)),
kw_insensitive: _ => token(prec(1, /[iI][nN][sS][eE][nN][sS][iI][tT][iI][vV][eE]/)),
kw_insert: _ => token(prec(1, /[iI][nN][sS][eE][rR][tT]/)),
kw_instead: _ => token(prec(1, /[iI][nN][sS][tT][eE][aA][dD]/)),
kw_int: _ => token(prec(1, /[iI][nN][tT]/)),
kw_integer: _ => token(prec(1, /[iI][nN][tT][eE][gG][eE][rR]/)),
kw_intersect: _ => token(prec(1, /[iI][nN][tT][eE][rR][sS][eE][cC][tT]/)),
kw_interval: _ => token(prec(1, /[iI][nN][tT][eE][rR][vV][aA][lL]/)),
kw_into: _ => token(prec(1, /[iI][nN][tT][oO]/)),
kw_invoker: _ => token(prec(1, /[iI][nN][vV][oO][kK][eE][rR]/)),
kw_is: _ => token(prec(1, /[iI][sS]/)),
kw_isnull: _ => token(prec(1, /[iI][sS][nN][uU][lL][lL]/)),
kw_isolation: _ => token(prec(1, /[iI][sS][oO][lL][aA][tT][iI][oO][nN]/)),
kw_join: _ => token(prec(1, /[jJ][oO][iI][nN]/)),
kw_json: _ => token(prec(1, /[jJ][sS][oO][nN]/)),
kw_json_array: _ => token(prec(1, /[jJ][sS][oO][nN]_[aA][rR][rR][aA][yY]/)),
kw_json_arrayagg: _ => token(prec(1, /[jJ][sS][oO][nN]_[aA][rR][rR][aA][yY][aA][gG][gG]/)),
kw_json_exists: _ => token(prec(1, /[jJ][sS][oO][nN]_[eE][xX][iI][sS][tT][sS]/)),
kw_json_object: _ => token(prec(1, /[jJ][sS][oO][nN]_[oO][bB][jJ][eE][cC][tT]/)),
kw_json_objectagg: _ => token(prec(1, /[jJ][sS][oO][nN]_[oO][bB][jJ][eE][cC][tT][aA][gG][gG]/)),
kw_json_query: _ => token(prec(1, /[jJ][sS][oO][nN]_[qQ][uU][eE][rR][yY]/)),
kw_json_scalar: _ => token(prec(1, /[jJ][sS][oO][nN]_[sS][cC][aA][lL][aA][rR]/)),
kw_json_serialize: _ => token(prec(1, /[jJ][sS][oO][nN]_[sS][eE][rR][iI][aA][lL][iI][zZ][eE]/)),
kw_json_table: _ => token(prec(1, /[jJ][sS][oO][nN]_[tT][aA][bB][lL][eE]/)),
kw_json_value: _ => token(prec(1, /[jJ][sS][oO][nN]_[vV][aA][lL][uU][eE]/)),
kw_keep: _ => token(prec(1, /[kK][eE][eE][pP]/)),
kw_key: _ => token(prec(1, /[kK][eE][yY]/)),
kw_keys: _ => token(prec(1, /[kK][eE][yY][sS]/)),
kw_label: _ => token(prec(1, /[lL][aA][bB][eE][lL]/)),
kw_language: _ => token(prec(1, /[lL][aA][nN][gG][uU][aA][gG][eE]/)),
kw_large: _ => token(prec(1, /[lL][aA][rR][gG][eE]/)),
kw_last: _ => token(prec(1, /[lL][aA][sS][tT]/)),
kw_lateral: _ => token(prec(1, /[lL][aA][tT][eE][rR][aA][lL]/)),
kw_leading: _ => token(prec(1, /[lL][eE][aA][dD][iI][nN][gG]/)),
kw_leakproof: _ => token(prec(1, /[lL][eE][aA][kK][pP][rR][oO][oO][fF]/)),
kw_least: _ => token(prec(1, /[lL][eE][aA][sS][tT]/)),
kw_left: _ => token(prec(1, /[lL][eE][fF][tT]/)),
kw_level: _ => token(prec(1, /[lL][eE][vV][eE][lL]/)),
kw_like: _ => token(prec(1, /[lL][iI][kK][eE]/)),
kw_limit: _ => token(prec(1, /[lL][iI][mM][iI][tT]/)),
kw_listen: _ => token(prec(1, /[lL][iI][sS][tT][eE][nN]/)),
kw_load: _ => token(prec(1, /[lL][oO][aA][dD]/)),
kw_local: _ => token(prec(1, /[lL][oO][cC][aA][lL]/)),
kw_localtime: _ => token(prec(1, /[lL][oO][cC][aA][lL][tT][iI][mM][eE]/)),
kw_localtimestamp: _ => token(prec(1, /[lL][oO][cC][aA][lL][tT][iI][mM][eE][sS][tT][aA][mM][pP]/)),
kw_location: _ => token(prec(1, /[lL][oO][cC][aA][tT][iI][oO][nN]/)),
kw_lock: _ => token(prec(1, /[lL][oO][cC][kK]/)),
kw_locked: _ => token(prec(1, /[lL][oO][cC][kK][eE][dD]/)),
kw_logged: _ => token(prec(1, /[lL][oO][gG][gG][eE][dD]/)),
kw_mapping: _ => token(prec(1, /[mM][aA][pP][pP][iI][nN][gG]/)),
kw_match: _ => token(prec(1, /[mM][aA][tT][cC][hH]/)),
kw_matched: _ => token(prec(1, /[mM][aA][tT][cC][hH][eE][dD]/)),
kw_materialized: _ => token(prec(1, /[mM][aA][tT][eE][rR][iI][aA][lL][iI][zZ][eE][dD]/)),
kw_maxvalue: _ => token(prec(1, /[mM][aA][xX][vV][aA][lL][uU][eE]/)),
kw_merge: _ => token(prec(1, /[mM][eE][rR][gG][eE]/)),
kw_merge_action: _ => token(prec(1, /[mM][eE][rR][gG][eE]_[aA][cC][tT][iI][oO][nN]/)),
kw_method: _ => token(prec(1, /[mM][eE][tT][hH][oO][dD]/)),
kw_minute: _ => token(prec(1, /[mM][iI][nN][uU][tT][eE]/)),
kw_minvalue: _ => token(prec(1, /[mM][iI][nN][vV][aA][lL][uU][eE]/)),
kw_mode: _ => token(prec(1, /[mM][oO][dD][eE]/)),
kw_month: _ => token(prec(1, /[mM][oO][nN][tT][hH]/)),
kw_move: _ => token(prec(1, /[mM][oO][vV][eE]/)),
kw_name: _ => token(prec(1, /[nN][aA][mM][eE]/)),
kw_names: _ => token(prec(1, /[nN][aA][mM][eE][sS]/)),
kw_national: _ => token(prec(1, /[nN][aA][tT][iI][oO][nN][aA][lL]/)),
kw_natural: _ => token(prec(1, /[nN][aA][tT][uU][rR][aA][lL]/)),
kw_nchar: _ => token(prec(1, /[nN][cC][hH][aA][rR]/)),
kw_nested: _ => token(prec(1, /[nN][eE][sS][tT][eE][dD]/)),
kw_new: _ => token(prec(1, /[nN][eE][wW]/)),
kw_next: _ => token(prec(1, /[nN][eE][xX][tT]/)),
kw_nfc: _ => token(prec(1, /[nN][fF][cC]/)),
kw_nfd: _ => token(prec(1, /[nN][fF][dD]/)),
kw_nfkc: _ => token(prec(1, /[nN][fF][kK][cC]/)),
kw_nfkd: _ => token(prec(1, /[nN][fF][kK][dD]/)),
kw_no: _ => token(prec(1, /[nN][oO]/)),
kw_none: _ => token(prec(1, /[nN][oO][nN][eE]/)),
kw_normalize: _ => token(prec(1, /[nN][oO][rR][mM][aA][lL][iI][zZ][eE]/)),
kw_normalized: _ => token(prec(1, /[nN][oO][rR][mM][aA][lL][iI][zZ][eE][dD]/)),
kw_not: _ => token(prec(1, /[nN][oO][tT]/)),
kw_nothing: _ => token(prec(1, /[nN][oO][tT][hH][iI][nN][gG]/)),
kw_notify: _ => token(prec(1, /[nN][oO][tT][iI][fF][yY]/)),
kw_notnull: _ => token(prec(1, /[nN][oO][tT][nN][uU][lL][lL]/)),
kw_nowait: _ => token(prec(1, /[nN][oO][wW][aA][iI][tT]/)),
kw_null: _ => token(prec(1, /[nN][uU][lL][lL]/)),
kw_nullif: _ => token(prec(1, /[nN][uU][lL][lL][iI][fF]/)),
kw_nulls: _ => token(prec(1, /[nN][uU][lL][lL][sS]/)),
kw_numeric: _ => token(prec(1, /[nN][uU][mM][eE][rR][iI][cC]/)),
kw_object: _ => token(prec(1, /[oO][bB][jJ][eE][cC][tT]/)),
kw_objects: _ => token(prec(1, /[oO][bB][jJ][eE][cC][tT][sS]/)),
kw_of: _ => token(prec(1, /[oO][fF]/)),
kw_off: _ => token(prec(1, /[oO][fF][fF]/)),
kw_offset: _ => token(prec(1, /[oO][fF][fF][sS][eE][tT]/)),
kw_oids: _ => token(prec(1, /[oO][iI][dD][sS]/)),
kw_old: _ => token(prec(1, /[oO][lL][dD]/)),
kw_omit: _ => token(prec(1, /[oO][mM][iI][tT]/)),
kw_on: _ => token(prec(1, /[oO][nN]/)),
kw_only: _ => token(prec(1, /[oO][nN][lL][yY]/)),
kw_operator: _ => token(prec(1, /[oO][pP][eE][rR][aA][tT][oO][rR]/)),
kw_option: _ => token(prec(1, /[oO][pP][tT][iI][oO][nN]/)),
kw_options: _ => token(prec(1, /[oO][pP][tT][iI][oO][nN][sS]/)),
kw_or: _ => token(prec(1, /[oO][rR]/)),
kw_order: _ => token(prec(1, /[oO][rR][dD][eE][rR]/)),
kw_ordinality: _ => token(prec(1, /[oO][rR][dD][iI][nN][aA][lL][iI][tT][yY]/)),
kw_others: _ => token(prec(1, /[oO][tT][hH][eE][rR][sS]/)),
kw_out: _ => token(prec(1, /[oO][uU][tT]/)),
kw_outer: _ => token(prec(1, /[oO][uU][tT][eE][rR]/)),
kw_over: _ => token(prec(1, /[oO][vV][eE][rR]/)),
kw_overlaps: _ => token(prec(1, /[oO][vV][eE][rR][lL][aA][pP][sS]/)),
kw_overlay: _ => token(prec(1, /[oO][vV][eE][rR][lL][aA][yY]/)),
kw_overriding: _ => token(prec(1, /[oO][vV][eE][rR][rR][iI][dD][iI][nN][gG]/)),
kw_owned: _ => token(prec(1, /[oO][wW][nN][eE][dD]/)),
kw_owner: _ => token(prec(1, /[oO][wW][nN][eE][rR]/)),
kw_parallel: _ => token(prec(1, /[pP][aA][rR][aA][lL][lL][eE][lL]/)),
kw_parameter: _ => token(prec(1, /[pP][aA][rR][aA][mM][eE][tT][eE][rR]/)),
kw_parser: _ => token(prec(1, /[pP][aA][rR][sS][eE][rR]/)),
kw_partial: _ => token(prec(1, /[pP][aA][rR][tT][iI][aA][lL]/)),
kw_partition: _ => token(prec(1, /[pP][aA][rR][tT][iI][tT][iI][oO][nN]/)),
kw_passing: _ => token(prec(1, /[pP][aA][sS][sS][iI][nN][gG]/)),
kw_password: _ => token(prec(1, /[pP][aA][sS][sS][wW][oO][rR][dD]/)),
kw_path: _ => token(prec(1, /[pP][aA][tT][hH]/)),
kw_period: _ => token(prec(1, /[pP][eE][rR][iI][oO][dD]/)),
kw_placing: _ => token(prec(1, /[pP][lL][aA][cC][iI][nN][gG]/)),
kw_plan: _ => token(prec(1, /[pP][lL][aA][nN]/)),
kw_plans: _ => token(prec(1, /[pP][lL][aA][nN][sS]/)),
kw_policy: _ => token(prec(1, /[pP][oO][lL][iI][cC][yY]/)),
kw_position: _ => token(prec(1, /[pP][oO][sS][iI][tT][iI][oO][nN]/)),
kw_preceding: _ => token(prec(1, /[pP][rR][eE][cC][eE][dD][iI][nN][gG]/)),
kw_precision: _ => token(prec(1, /[pP][rR][eE][cC][iI][sS][iI][oO][nN]/)),
kw_prepare: _ => token(prec(1, /[pP][rR][eE][pP][aA][rR][eE]/)),
kw_prepared: _ => token(prec(1, /[pP][rR][eE][pP][aA][rR][eE][dD]/)),
kw_preserve: _ => token(prec(1, /[pP][rR][eE][sS][eE][rR][vV][eE]/)),
kw_primary: _ => token(prec(1, /[pP][rR][iI][mM][aA][rR][yY]/)),
kw_prior: _ => token(prec(1, /[pP][rR][iI][oO][rR]/)),
kw_privileges: _ => token(prec(1, /[pP][rR][iI][vV][iI][lL][eE][gG][eE][sS]/)),
kw_procedural: _ => token(prec(1, /[pP][rR][oO][cC][eE][dD][uU][rR][aA][lL]/)),
kw_procedure: _ => token(prec(1, /[pP][rR][oO][cC][eE][dD][uU][rR][eE]/)),
kw_procedures: _ => token(prec(1, /[pP][rR][oO][cC][eE][dD][uU][rR][eE][sS]/)),
kw_program: _ => token(prec(1, /[pP][rR][oO][gG][rR][aA][mM]/)),
kw_publication: _ => token(prec(1, /[pP][uU][bB][lL][iI][cC][aA][tT][iI][oO][nN]/)),
kw_quote: _ => token(prec(1, /[qQ][uU][oO][tT][eE]/)),
kw_quotes: _ => token(prec(1, /[qQ][uU][oO][tT][eE][sS]/)),
kw_range: _ => token(prec(1, /[rR][aA][nN][gG][eE]/)),
kw_read: _ => token(prec(1, /[rR][eE][aA][dD]/)),
kw_real: _ => token(prec(1, /[rR][eE][aA][lL]/)),
kw_reassign: _ => token(prec(1, /[rR][eE][aA][sS][sS][iI][gG][nN]/)),
kw_recursive: _ => token(prec(1, /[rR][eE][cC][uU][rR][sS][iI][vV][eE]/)),
kw_ref: _ => token(prec(1, /[rR][eE][fF]/)),
kw_references: _ => token(prec(1, /[rR][eE][fF][eE][rR][eE][nN][cC][eE][sS]/)),
kw_referencing: _ => token(prec(1, /[rR][eE][fF][eE][rR][eE][nN][cC][iI][nN][gG]/)),
kw_refresh: _ => token(prec(1, /[rR][eE][fF][rR][eE][sS][hH]/)),
kw_reindex: _ => token(prec(1, /[rR][eE][iI][nN][dD][eE][xX]/)),
kw_relative: _ => token(prec(1, /[rR][eE][lL][aA][tT][iI][vV][eE]/)),
kw_release: _ => token(prec(1, /[rR][eE][lL][eE][aA][sS][eE]/)),
kw_rename: _ => token(prec(1, /[rR][eE][nN][aA][mM][eE]/)),
kw_repeatable: _ => token(prec(1, /[rR][eE][pP][eE][aA][tT][aA][bB][lL][eE]/)),
kw_replace: _ => token(prec(1, /[rR][eE][pP][lL][aA][cC][eE]/)),
kw_replica: _ => token(prec(1, /[rR][eE][pP][lL][iI][cC][aA]/)),
kw_reset: _ => token(prec(1, /[rR][eE][sS][eE][tT]/)),
kw_restart: _ => token(prec(1, /[rR][eE][sS][tT][aA][rR][tT]/)),
kw_restrict: _ => token(prec(1, /[rR][eE][sS][tT][rR][iI][cC][tT]/)),
kw_return: _ => token(prec(1, /[rR][eE][tT][uU][rR][nN]/)),
kw_returning: _ => token(prec(1, /[rR][eE][tT][uU][rR][nN][iI][nN][gG]/)),
kw_returns: _ => token(prec(1, /[rR][eE][tT][uU][rR][nN][sS]/)),
kw_revoke: _ => token(prec(1, /[rR][eE][vV][oO][kK][eE]/)),
kw_right: _ => token(prec(1, /[rR][iI][gG][hH][tT]/)),
kw_role: _ => token(prec(1, /[rR][oO][lL][eE]/)),
kw_rollback: _ => token(prec(1, /[rR][oO][lL][lL][bB][aA][cC][kK]/)),
kw_rollup: _ => token(prec(1, /[rR][oO][lL][lL][uU][pP]/)),
kw_routine: _ => token(prec(1, /[rR][oO][uU][tT][iI][nN][eE]/)),
kw_routines: _ => token(prec(1, /[rR][oO][uU][tT][iI][nN][eE][sS]/)),
kw_row: _ => token(prec(1, /[rR][oO][wW]/)),
kw_rows: _ => token(prec(1, /[rR][oO][wW][sS]/)),
kw_rule: _ => token(prec(1, /[rR][uU][lL][eE]/)),
kw_savepoint: _ => token(prec(1, /[sS][aA][vV][eE][pP][oO][iI][nN][tT]/)),
kw_scalar: _ => token(prec(1, /[sS][cC][aA][lL][aA][rR]/)),
kw_schema: _ => token(prec(1, /[sS][cC][hH][eE][mM][aA]/)),
kw_schemas: _ => token(prec(1, /[sS][cC][hH][eE][mM][aA][sS]/)),
kw_scroll: _ => token(prec(1, /[sS][cC][rR][oO][lL][lL]/)),
kw_search: _ => token(prec(1, /[sS][eE][aA][rR][cC][hH]/)),
kw_second: _ => token(prec(1, /[sS][eE][cC][oO][nN][dD]/)),
kw_security: _ => token(prec(1, /[sS][eE][cC][uU][rR][iI][tT][yY]/)),
kw_select: _ => token(prec(1, /[sS][eE][lL][eE][cC][tT]/)),
kw_sequence: _ => token(prec(1, /[sS][eE][qQ][uU][eE][nN][cC][eE]/)),
kw_sequences: _ => token(prec(1, /[sS][eE][qQ][uU][eE][nN][cC][eE][sS]/)),
kw_serializable: _ => token(prec(1, /[sS][eE][rR][iI][aA][lL][iI][zZ][aA][bB][lL][eE]/)),
kw_server: _ => token(prec(1, /[sS][eE][rR][vV][eE][rR]/)),
kw_session: _ => token(prec(1, /[sS][eE][sS][sS][iI][oO][nN]/)),
kw_session_user: _ => token(prec(1, /[sS][eE][sS][sS][iI][oO][nN]_[uU][sS][eE][rR]/)),
kw_set: _ => token(prec(1, /[sS][eE][tT]/)),
kw_setof: _ => token(prec(1, /[sS][eE][tT][oO][fF]/)),
kw_sets: _ => token(prec(1, /[sS][eE][tT][sS]/)),
kw_share: _ => token(prec(1, /[sS][hH][aA][rR][eE]/)),
kw_show: _ => token(prec(1, /[sS][hH][oO][wW]/)),
kw_similar: _ => token(prec(1, /[sS][iI][mM][iI][lL][aA][rR]/)),
kw_simple: _ => token(prec(1, /[sS][iI][mM][pP][lL][eE]/)),
kw_skip: _ => token(prec(1, /[sS][kK][iI][pP]/)),
kw_smallint: _ => token(prec(1, /[sS][mM][aA][lL][lL][iI][nN][tT]/)),
kw_snapshot: _ => token(prec(1, /[sS][nN][aA][pP][sS][hH][oO][tT]/)),
kw_some: _ => token(prec(1, /[sS][oO][mM][eE]/)),
kw_source: _ => token(prec(1, /[sS][oO][uU][rR][cC][eE]/)),
kw_sql: _ => token(prec(1, /[sS][qQ][lL]/)),
kw_stable: _ => token(prec(1, /[sS][tT][aA][bB][lL][eE]/)),
kw_standalone: _ => token(prec(1, /[sS][tT][aA][nN][dD][aA][lL][oO][nN][eE]/)),
kw_start: _ => token(prec(1, /[sS][tT][aA][rR][tT]/)),
kw_statement: _ => token(prec(1, /[sS][tT][aA][tT][eE][mM][eE][nN][tT]/)),
kw_statistics: _ => token(prec(1, /[sS][tT][aA][tT][iI][sS][tT][iI][cC][sS]/)),
kw_stdin: _ => token(prec(1, /[sS][tT][dD][iI][nN]/)),
kw_stdout: _ => token(prec(1, /[sS][tT][dD][oO][uU][tT]/)),
kw_storage: _ => token(prec(1, /[sS][tT][oO][rR][aA][gG][eE]/)),
kw_stored: _ => token(prec(1, /[sS][tT][oO][rR][eE][dD]/)),
kw_strict: _ => token(prec(1, /[sS][tT][rR][iI][cC][tT]/)),
kw_string: _ => token(prec(1, /[sS][tT][rR][iI][nN][gG]/)),
kw_strip: _ => token(prec(1, /[sS][tT][rR][iI][pP]/)),
kw_subscription: _ => token(prec(1, /[sS][uU][bB][sS][cC][rR][iI][pP][tT][iI][oO][nN]/)),
kw_substring: _ => token(prec(1, /[sS][uU][bB][sS][tT][rR][iI][nN][gG]/)),
kw_support: _ => token(prec(1, /[sS][uU][pP][pP][oO][rR][tT]/)),
kw_symmetric: _ => token(prec(1, /[sS][yY][mM][mM][eE][tT][rR][iI][cC]/)),
kw_sysid: _ => token(prec(1, /[sS][yY][sS][iI][dD]/)),
kw_system: _ => token(prec(1, /[sS][yY][sS][tT][eE][mM]/)),
kw_system_user: _ => token(prec(1, /[sS][yY][sS][tT][eE][mM]_[uU][sS][eE][rR]/)),
kw_table: _ => token(prec(1, /[tT][aA][bB][lL][eE]/)),
kw_tables: _ => token(prec(1, /[tT][aA][bB][lL][eE][sS]/)),
kw_tablesample: _ => token(prec(1, /[tT][aA][bB][lL][eE][sS][aA][mM][pP][lL][eE]/)),
kw_tablespace: _ => token(prec(1, /[tT][aA][bB][lL][eE][sS][pP][aA][cC][eE]/)),
kw_target: _ => token(prec(1, /[tT][aA][rR][gG][eE][tT]/)),
kw_temp: _ => token(prec(1, /[tT][eE][mM][pP]/)),
kw_template: _ => token(prec(1, /[tT][eE][mM][pP][lL][aA][tT][eE]/)),
kw_temporary: _ => token(prec(1, /[tT][eE][mM][pP][oO][rR][aA][rR][yY]/)),
kw_text: _ => token(prec(1, /[tT][eE][xX][tT]/)),
kw_then: _ => token(prec(1, /[tT][hH][eE][nN]/)),
kw_ties: _ => token(prec(1, /[tT][iI][eE][sS]/)),
kw_time: _ => token(prec(1, /[tT][iI][mM][eE]/)),
kw_timestamp: _ => token(prec(1, /[tT][iI][mM][eE][sS][tT][aA][mM][pP]/)),
kw_to: _ => token(prec(1, /[tT][oO]/)),
kw_trailing: _ => token(prec(1, /[tT][rR][aA][iI][lL][iI][nN][gG]/)),
kw_transaction: _ => token(prec(1, /[tT][rR][aA][nN][sS][aA][cC][tT][iI][oO][nN]/)),
kw_transform: _ => token(prec(1, /[tT][rR][aA][nN][sS][fF][oO][rR][mM]/)),
kw_treat: _ => token(prec(1, /[tT][rR][eE][aA][tT]/)),
kw_trigger: _ => token(prec(1, /[tT][rR][iI][gG][gG][eE][rR]/)),
kw_trim: _ => token(prec(1, /[tT][rR][iI][mM]/)),
kw_true: _ => token(prec(1, /[tT][rR][uU][eE]/)),
kw_truncate: _ => token(prec(1, /[tT][rR][uU][nN][cC][aA][tT][eE]/)),
kw_trusted: _ => token(prec(1, /[tT][rR][uU][sS][tT][eE][dD]/)),
kw_type: _ => token(prec(1, /[tT][yY][pP][eE]/)),
kw_types: _ => token(prec(1, /[tT][yY][pP][eE][sS]/)),
kw_uescape: _ => token(prec(1, /[uU][eE][sS][cC][aA][pP][eE]/)),
kw_unbounded: _ => token(prec(1, /[uU][nN][bB][oO][uU][nN][dD][eE][dD]/)),
kw_uncommitted: _ => token(prec(1, /[uU][nN][cC][oO][mM][mM][iI][tT][tT][eE][dD]/)),
kw_unconditional: _ => token(prec(1, /[uU][nN][cC][oO][nN][dD][iI][tT][iI][oO][nN][aA][lL]/)),
kw_unencrypted: _ => token(prec(1, /[uU][nN][eE][nN][cC][rR][yY][pP][tT][eE][dD]/)),
kw_union: _ => token(prec(1, /[uU][nN][iI][oO][nN]/)),
kw_unique: _ => token(prec(1, /[uU][nN][iI][qQ][uU][eE]/)),
kw_unknown: _ => token(prec(1, /[uU][nN][kK][nN][oO][wW][nN]/)),
kw_unlisten: _ => token(prec(1, /[uU][nN][lL][iI][sS][tT][eE][nN]/)),
kw_unlogged: _ => token(prec(1, /[uU][nN][lL][oO][gG][gG][eE][dD]/)),
kw_until: _ => token(prec(1, /[uU][nN][tT][iI][lL]/)),
kw_update: _ => token(prec(1, /[uU][pP][dD][aA][tT][eE]/)),
kw_user: _ => token(prec(1, /[uU][sS][eE][rR]/)),
kw_using: _ => token(prec(1, /[uU][sS][iI][nN][gG]/)),
kw_vacuum: _ => token(prec(1, /[vV][aA][cC][uU][uU][mM]/)),
kw_valid: _ => token(prec(1, /[vV][aA][lL][iI][dD]/)),
kw_validate: _ => token(prec(1, /[vV][aA][lL][iI][dD][aA][tT][eE]/)),
kw_validator: _ => token(prec(1, /[vV][aA][lL][iI][dD][aA][tT][oO][rR]/)),
kw_value: _ => token(prec(1, /[vV][aA][lL][uU][eE]/)),
kw_values: _ => token(prec(1, /[vV][aA][lL][uU][eE][sS]/)),
kw_varchar: _ => token(prec(1, /[vV][aA][rR][cC][hH][aA][rR]/)),
kw_variadic: _ => token(prec(1, /[vV][aA][rR][iI][aA][dD][iI][cC]/)),
kw_varying: _ => token(prec(1, /[vV][aA][rR][yY][iI][nN][gG]/)),
kw_verbose: _ => token(prec(1, /[vV][eE][rR][bB][oO][sS][eE]/)),
kw_version: _ => token(prec(1, /[vV][eE][rR][sS][iI][oO][nN]/)),
kw_view: _ => token(prec(1, /[vV][iI][eE][wW]/)),
kw_views: _ => token(prec(1, /[vV][iI][eE][wW][sS]/)),
kw_virtual: _ => token(prec(1, /[vV][iI][rR][tT][uU][aA][lL]/)),
kw_volatile: _ => token(prec(1, /[vV][oO][lL][aA][tT][iI][lL][eE]/)),
kw_when: _ => token(prec(1, /[wW][hH][eE][nN]/)),
kw_where: _ => token(prec(1, /[wW][hH][eE][rR][eE]/)),
kw_whitespace: _ => token(prec(1, /[wW][hH][iI][tT][eE][sS][pP][aA][cC][eE]/)),
kw_window: _ => token(prec(1, /[wW][iI][nN][dD][oO][wW]/)),
kw_with: _ => token(prec(1, /[wW][iI][tT][hH]/)),
kw_within: _ => token(prec(1, /[wW][iI][tT][hH][iI][nN]/)),
kw_without: _ => token(prec(1, /[wW][iI][tT][hH][oO][uU][tT]/)),
kw_work: _ => token(prec(1, /[wW][oO][rR][kK]/)),
kw_wrapper: _ => token(prec(1, /[wW][rR][aA][pP][pP][eE][rR]/)),
kw_write: _ => token(prec(1, /[wW][rR][iI][tT][eE]/)),
kw_xml: _ => token(prec(1, /[xX][mM][lL]/)),
kw_xmlattributes: _ => token(prec(1, /[xX][mM][lL][aA][tT][tT][rR][iI][bB][uU][tT][eE][sS]/)),
kw_xmlconcat: _ => token(prec(1, /[xX][mM][lL][cC][oO][nN][cC][aA][tT]/)),
kw_xmlelement: _ => token(prec(1, /[xX][mM][lL][eE][lL][eE][mM][eE][nN][tT]/)),
kw_xmlexists: _ => token(prec(1, /[xX][mM][lL][eE][xX][iI][sS][tT][sS]/)),
kw_xmlforest: _ => token(prec(1, /[xX][mM][lL][fF][oO][rR][eE][sS][tT]/)),
kw_xmlnamespaces: _ => token(prec(1, /[xX][mM][lL][nN][aA][mM][eE][sS][pP][aA][cC][eE][sS]/)),
kw_xmlparse: _ => token(prec(1, /[xX][mM][lL][pP][aA][rR][sS][eE]/)),
kw_xmlpi: _ => token(prec(1, /[xX][mM][lL][pP][iI]/)),
kw_xmlroot: _ => token(prec(1, /[xX][mM][lL][rR][oO][oO][tT]/)),
kw_xmlserialize: _ => token(prec(1, /[xX][mM][lL][sS][eE][rR][iI][aA][lL][iI][zZ][eE]/)),
kw_xmltable: _ => token(prec(1, /[xX][mM][lL][tT][aA][bB][lL][eE]/)),
kw_year: _ => token(prec(1, /[yY][eE][aA][rR]/)),
kw_yes: _ => token(prec(1, /[yY][eE][sS]/)),
kw_zone: _ => token(prec(1, /[zZ][oO][nN][eE]/)),
identifier: _ => token(prec(0, /[a-zA-Z_\u0080-\u00ff][a-zA-Z0-9_$\u0080-\u00ff]*/)),
quoted_identifier: _ => token(/"([^"]|"")*"/),
_ident: $ => choice($.identifier, $.quoted_identifier),
param: _ => /\$[0-9]+/,
integer_literal: _ => token(/[0-9](_?[0-9])*/),
float_literal: _ => token(choice(
/[0-9](_?[0-9])*\.[0-9](_?[0-9])*([eE][+-]?[0-9](_?[0-9])*)? /,
/\.[0-9](_?[0-9])*([eE][+-]?[0-9](_?[0-9])*)?/,
/[0-9](_?[0-9])*[eE][+-]?[0-9](_?[0-9])*/
)),
string_literal: _ => token(/'([^']|'')*'/),
bit_string_literal: _ => token(/[bB]'[01]*'/),
hex_string_literal: _ => token(/[xX]'[0-9a-fA-F]*'/),
operator: _ => token(/[~!@#^&|?+\-*/%<>=]+/),
comment: _ => token(choice(
/--[^\r\n]*/,
/\/\*[^*]*\*+([^/*][^*]*\*+)*\//
)),
}, });