Closed SKalt closed 3 years ago
Thanks for pointing out this problem. BTW, you don't need to clone the Trash repo, just
dotnet tool install -g trparse
dotnet tool install -g trconvert
dotnet tool install -g trsponge
dotnet tool install -g trxgrep
dotnet tool install -g trtext
then
trparse gram.y | trconvert | trsponge
That would then create gram.g4 (trsponge is like tee in unix). Sorry, but I don't have a Lex converter yet. Presumably, one could write a script to grep out the uppercase symbol names from the grammar, sort + unique the names, and just create a lexer rule that is a string literal with the same spelling. E.g.,
trparse gram.g4 | trxgrep ' //TOKEN_REF' | trtext | sort -u | sed 's/\(.*\)/\1 : "\1";/'
Afterwards, you'd have to go through the .l file and fix up the lexer rules for literals.
gram.g4:
// Combined Antlr4 grammar generated by Antlrvsix.
// Input grammar: C:\Users\kenne\Documents\GitHub\postgres\src\backend\parser\gram.y
// Date: 7/10/2021 5:16:05 PM
grammar gram;
parse_toplevel : stmtmulti
| MODE_TYPE_NAME typename
| MODE_PLPGSQL_EXPR pLpgSQL_Expr
| MODE_PLPGSQL_ASSIGN1 pLAssignStmt
| MODE_PLPGSQL_ASSIGN2 pLAssignStmt
| MODE_PLPGSQL_ASSIGN3 pLAssignStmt
;
stmtmulti : stmtmulti ';' toplevel_stmt
| toplevel_stmt
;
toplevel_stmt : stmt
| transactionStmtLegacy
;
stmt : 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
| notifyStmt
| prepareStmt
| reassignOwnedStmt
| reindexStmt
| removeAggrStmt
| removeFuncStmt
| removeOperStmt
| renameStmt
| revokeStmt
| revokeRoleStmt
| ruleStmt
| secLabelStmt
| selectStmt
| transactionStmt
| truncateStmt
| unlistenStmt
| updateStmt
| vacuumStmt
| variableResetStmt
| variableSetStmt
| variableShowStmt
| viewStmt
|
;
callStmt : CALL func_application
;
createRoleStmt : CREATE ROLE roleId opt_with optRoleList
;
opt_with : WITH
| WITH_LA
|
;
optRoleList : optRoleList createOptRoleElem
|
;
alterOptRoleList : alterOptRoleList alterOptRoleElem
|
;
alterOptRoleElem : PASSWORD sconst
| PASSWORD NULL_P
| ENCRYPTED PASSWORD sconst
| UNENCRYPTED PASSWORD sconst
| INHERIT
| CONNECTION LIMIT signedIconst
| VALID UNTIL sconst
| USER role_list
| IDENT
;
createOptRoleElem : alterOptRoleElem
| SYSID iconst
| ADMIN role_list
| ROLE role_list
| IN_P ROLE role_list
| IN_P GROUP_P role_list
;
createUserStmt : CREATE USER roleId opt_with optRoleList
;
alterRoleStmt : ALTER ROLE roleSpec opt_with alterOptRoleList
| ALTER USER roleSpec opt_with alterOptRoleList
;
opt_in_database :
| IN_P DATABASE name
;
alterRoleSetStmt : ALTER ROLE roleSpec opt_in_database setResetClause
| ALTER ROLE ALL opt_in_database setResetClause
| ALTER USER roleSpec opt_in_database setResetClause
| ALTER USER ALL opt_in_database setResetClause
;
dropRoleStmt : DROP ROLE role_list
| DROP ROLE IF_P EXISTS role_list
| DROP USER role_list
| DROP USER IF_P EXISTS role_list
| DROP GROUP_P role_list
| DROP GROUP_P IF_P EXISTS role_list
;
createGroupStmt : CREATE GROUP_P roleId opt_with optRoleList
;
alterGroupStmt : ALTER GROUP_P roleSpec add_drop USER role_list
;
add_drop : ADD_P
| DROP
;
createSchemaStmt : CREATE SCHEMA optSchemaName AUTHORIZATION roleSpec optSchemaEltList
| CREATE SCHEMA colId optSchemaEltList
| CREATE SCHEMA IF_P NOT EXISTS optSchemaName AUTHORIZATION roleSpec optSchemaEltList
| CREATE SCHEMA IF_P NOT EXISTS colId optSchemaEltList
;
optSchemaName : colId
|
;
optSchemaEltList : optSchemaEltList schema_stmt
|
;
schema_stmt : createStmt
| indexStmt
| createSeqStmt
| createTrigStmt
| grantStmt
| viewStmt
;
variableSetStmt : SET set_rest
| SET LOCAL set_rest
| SET SESSION set_rest
;
set_rest : TRANSACTION transaction_mode_list
| SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list
| set_rest_more
;
generic_set : var_name TO var_list
| var_name '=' var_list
| var_name TO DEFAULT
| var_name '=' DEFAULT
;
set_rest_more : generic_set
| var_name FROM CURRENT_P
| TIME ZONE zone_value
| CATALOG_P sconst
| SCHEMA sconst
| NAMES opt_encoding
| ROLE nonReservedWord_or_Sconst
| SESSION AUTHORIZATION nonReservedWord_or_Sconst
| SESSION AUTHORIZATION DEFAULT
| XML_P OPTION document_or_content
| TRANSACTION SNAPSHOT sconst
;
var_name : colId
| var_name '.' colId
;
var_list : var_value
| var_list ',' var_value
;
var_value : opt_boolean_or_string
| numericOnly
;
iso_level : READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SERIALIZABLE
;
opt_boolean_or_string : TRUE_P
| FALSE_P
| ON
| nonReservedWord_or_Sconst
;
zone_value : sconst
| IDENT
| constInterval sconst opt_interval
| constInterval '(' iconst ')' sconst
| numericOnly
| DEFAULT
| LOCAL
;
opt_encoding : sconst
| DEFAULT
|
;
nonReservedWord_or_Sconst : nonReservedWord
| sconst
;
variableResetStmt : RESET reset_rest
;
reset_rest : generic_reset
| TIME ZONE
| TRANSACTION ISOLATION LEVEL
| SESSION AUTHORIZATION
;
generic_reset : var_name
| ALL
;
setResetClause : SET set_rest
| variableResetStmt
;
functionSetResetClause : SET set_rest_more
| variableResetStmt
;
variableShowStmt : SHOW var_name
| SHOW TIME ZONE
| SHOW TRANSACTION ISOLATION LEVEL
| SHOW SESSION AUTHORIZATION
| SHOW ALL
;
constraintsSetStmt : SET CONSTRAINTS constraints_set_list constraints_set_mode
;
constraints_set_list : ALL
| qualified_name_list
;
constraints_set_mode : DEFERRED
| IMMEDIATE
;
checkPointStmt : CHECKPOINT
;
discardStmt : DISCARD ALL
| DISCARD TEMP
| DISCARD TEMPORARY
| DISCARD PLANS
| DISCARD SEQUENCES
;
alterTableStmt : ALTER TABLE relation_expr alter_table_cmds
| ALTER TABLE IF_P EXISTS relation_expr alter_table_cmds
| ALTER TABLE relation_expr partition_cmd
| ALTER TABLE IF_P EXISTS relation_expr partition_cmd
| ALTER TABLE ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait
| ALTER TABLE ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait
| ALTER INDEX qualified_name alter_table_cmds
| ALTER INDEX IF_P EXISTS qualified_name alter_table_cmds
| ALTER INDEX qualified_name index_partition_cmd
| ALTER INDEX ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait
| ALTER INDEX ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait
| ALTER SEQUENCE qualified_name alter_table_cmds
| ALTER SEQUENCE IF_P EXISTS qualified_name alter_table_cmds
| ALTER VIEW qualified_name alter_table_cmds
| ALTER VIEW IF_P EXISTS qualified_name alter_table_cmds
| ALTER MATERIALIZED VIEW qualified_name alter_table_cmds
| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name alter_table_cmds
| ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name SET TABLESPACE name opt_nowait
| ALTER MATERIALIZED VIEW ALL IN_P TABLESPACE name OWNED BY role_list SET TABLESPACE name opt_nowait
| ALTER FOREIGN TABLE relation_expr alter_table_cmds
| ALTER FOREIGN TABLE IF_P EXISTS relation_expr alter_table_cmds
;
alter_table_cmds : alter_table_cmd
| alter_table_cmds ',' alter_table_cmd
;
partition_cmd : ATTACH PARTITION qualified_name partitionBoundSpec
| DETACH PARTITION qualified_name opt_concurrently
| DETACH PARTITION qualified_name FINALIZE
;
index_partition_cmd : ATTACH PARTITION qualified_name
;
alter_table_cmd : ADD_P columnDef
| ADD_P IF_P NOT EXISTS columnDef
| ADD_P COLUMN columnDef
| ADD_P COLUMN IF_P NOT EXISTS columnDef
| ALTER opt_column colId alter_column_default
| ALTER opt_column colId DROP NOT NULL_P
| ALTER opt_column colId SET NOT NULL_P
| ALTER opt_column colId DROP EXPRESSION
| ALTER opt_column colId DROP EXPRESSION IF_P EXISTS
| ALTER opt_column colId SET STATISTICS signedIconst
| ALTER opt_column iconst SET STATISTICS signedIconst
| ALTER opt_column colId SET reloptions
| ALTER opt_column colId RESET reloptions
| ALTER opt_column colId SET STORAGE colId
| ALTER opt_column colId SET column_compression
| ALTER opt_column colId ADD_P GENERATED generated_when AS IDENTITY_P optParenthesizedSeqOptList
| ALTER opt_column colId alter_identity_column_option_list
| ALTER opt_column colId DROP IDENTITY_P
| ALTER opt_column colId DROP IDENTITY_P IF_P EXISTS
| DROP opt_column IF_P EXISTS colId opt_drop_behavior
| DROP opt_column colId opt_drop_behavior
| ALTER opt_column colId opt_set_data TYPE_P typename opt_collate_clause alter_using
| ALTER opt_column colId alter_generic_options
| ADD_P tableConstraint
| ALTER CONSTRAINT name constraintAttributeSpec
| VALIDATE CONSTRAINT name
| DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior
| DROP CONSTRAINT name opt_drop_behavior
| SET WITHOUT OIDS
| CLUSTER ON name
| SET WITHOUT CLUSTER
| SET LOGGED
| SET UNLOGGED
| ENABLE_P TRIGGER name
| ENABLE_P ALWAYS TRIGGER name
| ENABLE_P REPLICA TRIGGER name
| ENABLE_P TRIGGER ALL
| ENABLE_P TRIGGER USER
| DISABLE_P TRIGGER name
| DISABLE_P TRIGGER ALL
| DISABLE_P TRIGGER USER
| ENABLE_P RULE name
| ENABLE_P ALWAYS RULE name
| ENABLE_P REPLICA RULE name
| DISABLE_P RULE name
| INHERIT qualified_name
| NO INHERIT qualified_name
| OF any_name
| NOT OF
| OWNER TO roleSpec
| SET TABLESPACE name
| SET reloptions
| RESET reloptions
| REPLICA IDENTITY_P replica_identity
| ENABLE_P ROW LEVEL SECURITY
| DISABLE_P ROW LEVEL SECURITY
| FORCE ROW LEVEL SECURITY
| NO FORCE ROW LEVEL SECURITY
| alter_generic_options
;
alter_column_default : SET DEFAULT a_expr
| DROP DEFAULT
;
opt_drop_behavior : CASCADE
| RESTRICT
|
;
opt_collate_clause : COLLATE any_name
|
;
alter_using : USING a_expr
|
;
replica_identity : NOTHING
| FULL
| DEFAULT
| USING INDEX name
;
reloptions : '(' reloption_list ')'
;
opt_reloptions : WITH reloptions
|
;
reloption_list : reloption_elem
| reloption_list ',' reloption_elem
;
reloption_elem : colLabel '=' def_arg
| colLabel
| colLabel '.' colLabel '=' def_arg
| colLabel '.' colLabel
;
alter_identity_column_option_list : alter_identity_column_option
| alter_identity_column_option_list alter_identity_column_option
;
alter_identity_column_option : RESTART
| RESTART opt_with numericOnly
| SET seqOptElem
| SET GENERATED generated_when
;
partitionBoundSpec : FOR VALUES WITH '(' hash_partbound ')'
| FOR VALUES IN_P '(' expr_list ')'
| FOR VALUES FROM '(' expr_list ')' TO '(' expr_list ')'
| DEFAULT
;
hash_partbound_elem : nonReservedWord iconst
;
hash_partbound : hash_partbound_elem
| hash_partbound ',' hash_partbound_elem
;
alterCompositeTypeStmt : ALTER TYPE_P any_name alter_type_cmds
;
alter_type_cmds : alter_type_cmd
| alter_type_cmds ',' alter_type_cmd
;
alter_type_cmd : ADD_P ATTRIBUTE tableFuncElement opt_drop_behavior
| DROP ATTRIBUTE IF_P EXISTS colId opt_drop_behavior
| DROP ATTRIBUTE colId opt_drop_behavior
| ALTER ATTRIBUTE colId opt_set_data TYPE_P typename opt_collate_clause opt_drop_behavior
;
closePortalStmt : CLOSE cursor_name
| CLOSE ALL
;
copyStmt : COPY opt_binary qualified_name opt_column_list copy_from opt_program copy_file_name copy_delimiter opt_with copy_options where_clause
| COPY '(' preparableStmt ')' TO opt_program copy_file_name opt_with copy_options
;
copy_from : FROM
| TO
;
opt_program : PROGRAM
|
;
copy_file_name : sconst
| STDIN
| STDOUT
;
copy_options : copy_opt_list
| '(' copy_generic_opt_list ')'
;
copy_opt_list : copy_opt_list copy_opt_item
|
;
copy_opt_item : BINARY
| FREEZE
| DELIMITER opt_as sconst
| NULL_P opt_as sconst
| CSV
| HEADER_P
| QUOTE opt_as sconst
| ESCAPE opt_as sconst
| FORCE QUOTE columnList
| FORCE QUOTE '*'
| FORCE NOT NULL_P columnList
| FORCE NULL_P columnList
| ENCODING sconst
;
opt_binary : BINARY
|
;
copy_delimiter : opt_using DELIMITERS sconst
|
;
opt_using : USING
|
;
copy_generic_opt_list : copy_generic_opt_elem
| copy_generic_opt_list ',' copy_generic_opt_elem
;
copy_generic_opt_elem : colLabel copy_generic_opt_arg
;
copy_generic_opt_arg : opt_boolean_or_string
| numericOnly
| '*'
| '(' copy_generic_opt_arg_list ')'
|
;
copy_generic_opt_arg_list : copy_generic_opt_arg_list_item
| copy_generic_opt_arg_list ',' copy_generic_opt_arg_list_item
;
copy_generic_opt_arg_list_item : opt_boolean_or_string
;
createStmt : CREATE optTemp TABLE qualified_name '(' optTableElementList ')' optInherit optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
| CREATE optTemp TABLE IF_P NOT EXISTS qualified_name '(' optTableElementList ')' optInherit optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
| CREATE optTemp TABLE qualified_name OF any_name optTypedTableElementList optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
| CREATE optTemp TABLE IF_P NOT EXISTS qualified_name OF any_name optTypedTableElementList optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
| CREATE optTemp TABLE qualified_name PARTITION OF qualified_name optTypedTableElementList partitionBoundSpec optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
| CREATE optTemp TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name optTypedTableElementList partitionBoundSpec optPartitionSpec table_access_method_clause optWith onCommitOption optTableSpace
;
optTemp : TEMPORARY
| TEMP
| LOCAL TEMPORARY
| LOCAL TEMP
| GLOBAL TEMPORARY
| GLOBAL TEMP
| UNLOGGED
|
;
optTableElementList : tableElementList
|
;
optTypedTableElementList : '(' typedTableElementList ')'
|
;
tableElementList : tableElement
| tableElementList ',' tableElement
;
typedTableElementList : typedTableElement
| typedTableElementList ',' typedTableElement
;
tableElement : columnDef
| tableLikeClause
| tableConstraint
;
typedTableElement : columnOptions
| tableConstraint
;
columnDef : colId typename opt_column_compression create_generic_options colQualList
;
columnOptions : colId colQualList
| colId WITH OPTIONS colQualList
;
column_compression : COMPRESSION colId
| COMPRESSION DEFAULT
;
opt_column_compression : column_compression
|
;
colQualList : colQualList colConstraint
|
;
colConstraint : CONSTRAINT name colConstraintElem
| colConstraintElem
| constraintAttr
| COLLATE any_name
;
colConstraintElem : NOT NULL_P
| NULL_P
| UNIQUE opt_definition optConsTableSpace
| PRIMARY KEY opt_definition optConsTableSpace
| CHECK '(' a_expr ')' opt_no_inherit
| DEFAULT b_expr
| GENERATED generated_when AS IDENTITY_P optParenthesizedSeqOptList
| GENERATED generated_when AS '(' a_expr ')' STORED
| REFERENCES qualified_name opt_column_list key_match key_actions
;
generated_when : ALWAYS
| BY DEFAULT
;
constraintAttr : DEFERRABLE
| NOT DEFERRABLE
| INITIALLY DEFERRED
| INITIALLY IMMEDIATE
;
tableLikeClause : LIKE qualified_name tableLikeOptionList
;
tableLikeOptionList : tableLikeOptionList INCLUDING tableLikeOption
| tableLikeOptionList EXCLUDING tableLikeOption
|
;
tableLikeOption : COMMENTS
| COMPRESSION
| CONSTRAINTS
| DEFAULTS
| IDENTITY_P
| GENERATED
| INDEXES
| STATISTICS
| STORAGE
| ALL
;
tableConstraint : CONSTRAINT name constraintElem
| constraintElem
;
constraintElem : CHECK '(' a_expr ')' constraintAttributeSpec
| UNIQUE '(' columnList ')' opt_c_include opt_definition optConsTableSpace constraintAttributeSpec
| UNIQUE existingIndex constraintAttributeSpec
| PRIMARY KEY '(' columnList ')' opt_c_include opt_definition optConsTableSpace constraintAttributeSpec
| PRIMARY KEY existingIndex constraintAttributeSpec
| EXCLUDE access_method_clause '(' exclusionConstraintList ')' opt_c_include opt_definition optConsTableSpace optWhereClause constraintAttributeSpec
| FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list key_match key_actions constraintAttributeSpec
;
opt_no_inherit : NO INHERIT
|
;
opt_column_list : '(' columnList ')'
|
;
columnList : columnElem
| columnList ',' columnElem
;
columnElem : colId
;
opt_c_include : INCLUDE '(' columnList ')'
|
;
key_match : MATCH FULL
| MATCH PARTIAL
| MATCH SIMPLE
|
;
exclusionConstraintList : exclusionConstraintElem
| exclusionConstraintList ',' exclusionConstraintElem
;
exclusionConstraintElem : index_elem WITH any_operator
| index_elem WITH OPERATOR '(' any_operator ')'
;
optWhereClause : WHERE '(' a_expr ')'
|
;
key_actions : key_update
| key_delete
| key_update key_delete
| key_delete key_update
|
;
key_update : ON UPDATE key_action
;
key_delete : ON DELETE_P key_action
;
key_action : NO ACTION
| RESTRICT
| CASCADE
| SET NULL_P
| SET DEFAULT
;
optInherit : INHERITS '(' qualified_name_list ')'
|
;
optPartitionSpec : partitionSpec
|
;
partitionSpec : PARTITION BY colId '(' part_params ')'
;
part_params : part_elem
| part_params ',' part_elem
;
part_elem : colId opt_collate opt_class
| func_expr_windowless opt_collate opt_class
| '(' a_expr ')' opt_collate opt_class
;
table_access_method_clause : USING name
|
;
optWith : WITH reloptions
| WITHOUT OIDS
|
;
onCommitOption : ON COMMIT DROP
| ON COMMIT DELETE_P ROWS
| ON COMMIT PRESERVE ROWS
|
;
optTableSpace : TABLESPACE name
|
;
optConsTableSpace : USING INDEX TABLESPACE name
|
;
existingIndex : USING INDEX name
;
createStatsStmt : CREATE STATISTICS any_name opt_name_list ON stats_params FROM from_list
| CREATE STATISTICS IF_P NOT EXISTS any_name opt_name_list ON stats_params FROM from_list
;
stats_params : stats_param
| stats_params ',' stats_param
;
stats_param : colId
| func_expr_windowless
| '(' a_expr ')'
;
alterStatsStmt : ALTER STATISTICS any_name SET STATISTICS signedIconst
| ALTER STATISTICS IF_P EXISTS any_name SET STATISTICS signedIconst
;
createAsStmt : CREATE optTemp TABLE create_as_target AS selectStmt opt_with_data
| CREATE optTemp TABLE IF_P NOT EXISTS create_as_target AS selectStmt opt_with_data
;
create_as_target : qualified_name opt_column_list table_access_method_clause optWith onCommitOption optTableSpace
;
opt_with_data : WITH DATA_P
| WITH NO DATA_P
|
;
createMatViewStmt : CREATE optNoLog MATERIALIZED VIEW create_mv_target AS selectStmt opt_with_data
| CREATE optNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS selectStmt opt_with_data
;
create_mv_target : qualified_name opt_column_list table_access_method_clause opt_reloptions optTableSpace
;
optNoLog : UNLOGGED
|
;
refreshMatViewStmt : REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data
;
createSeqStmt : CREATE optTemp SEQUENCE qualified_name optSeqOptList
| CREATE optTemp SEQUENCE IF_P NOT EXISTS qualified_name optSeqOptList
;
alterSeqStmt : ALTER SEQUENCE qualified_name seqOptList
| ALTER SEQUENCE IF_P EXISTS qualified_name seqOptList
;
optSeqOptList : seqOptList
|
;
optParenthesizedSeqOptList : '(' seqOptList ')'
|
;
seqOptList : seqOptElem
| seqOptList seqOptElem
;
seqOptElem : AS simpleTypename
| CACHE numericOnly
| CYCLE
| NO CYCLE
| INCREMENT opt_by numericOnly
| MAXVALUE numericOnly
| MINVALUE numericOnly
| NO MAXVALUE
| NO MINVALUE
| OWNED BY any_name
| SEQUENCE NAME_P any_name
| START opt_with numericOnly
| RESTART
| RESTART opt_with numericOnly
;
opt_by : BY
|
;
numericOnly : FCONST
| '+' FCONST
| '-' FCONST
| signedIconst
;
numericOnly_list : numericOnly
| numericOnly_list ',' numericOnly
;
createPLangStmt : CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name
| CREATE opt_or_replace opt_trusted opt_procedural LANGUAGE name HANDLER handler_name opt_inline_handler opt_validator
;
opt_trusted : TRUSTED
|
;
handler_name : name
| name attrs
;
opt_inline_handler : INLINE_P handler_name
|
;
validator_clause : VALIDATOR handler_name
| NO VALIDATOR
;
opt_validator : validator_clause
|
;
opt_procedural : PROCEDURAL
|
;
createTableSpaceStmt : CREATE TABLESPACE name optTableSpaceOwner LOCATION sconst opt_reloptions
;
optTableSpaceOwner : OWNER roleSpec
|
;
dropTableSpaceStmt : DROP TABLESPACE name
| DROP TABLESPACE IF_P EXISTS name
;
createExtensionStmt : CREATE EXTENSION name opt_with create_extension_opt_list
| CREATE EXTENSION IF_P NOT EXISTS name opt_with create_extension_opt_list
;
create_extension_opt_list : create_extension_opt_list create_extension_opt_item
|
;
create_extension_opt_item : SCHEMA name
| VERSION_P nonReservedWord_or_Sconst
| FROM nonReservedWord_or_Sconst
| CASCADE
;
alterExtensionStmt : ALTER EXTENSION name UPDATE alter_extension_opt_list
;
alter_extension_opt_list : alter_extension_opt_list alter_extension_opt_item
|
;
alter_extension_opt_item : TO nonReservedWord_or_Sconst
;
alterExtensionContentsStmt : ALTER EXTENSION name add_drop object_type_name name
| ALTER EXTENSION name add_drop object_type_any_name any_name
| ALTER EXTENSION name add_drop AGGREGATE aggregate_with_argtypes
| ALTER EXTENSION name add_drop CAST '(' typename AS typename ')'
| ALTER EXTENSION name add_drop DOMAIN_P typename
| ALTER EXTENSION name add_drop FUNCTION function_with_argtypes
| ALTER EXTENSION name add_drop OPERATOR operator_with_argtypes
| ALTER EXTENSION name add_drop OPERATOR CLASS any_name USING name
| ALTER EXTENSION name add_drop OPERATOR FAMILY any_name USING name
| ALTER EXTENSION name add_drop PROCEDURE function_with_argtypes
| ALTER EXTENSION name add_drop ROUTINE function_with_argtypes
| ALTER EXTENSION name add_drop TRANSFORM FOR typename LANGUAGE name
| ALTER EXTENSION name add_drop TYPE_P typename
;
createFdwStmt : CREATE FOREIGN DATA_P WRAPPER name opt_fdw_options create_generic_options
;
fdw_option : HANDLER handler_name
| NO HANDLER
| VALIDATOR handler_name
| NO VALIDATOR
;
fdw_options : fdw_option
| fdw_options fdw_option
;
opt_fdw_options : fdw_options
|
;
alterFdwStmt : ALTER FOREIGN DATA_P WRAPPER name opt_fdw_options alter_generic_options
| ALTER FOREIGN DATA_P WRAPPER name fdw_options
;
create_generic_options : OPTIONS '(' generic_option_list ')'
|
;
generic_option_list : generic_option_elem
| generic_option_list ',' generic_option_elem
;
alter_generic_options : OPTIONS '(' alter_generic_option_list ')'
;
alter_generic_option_list : alter_generic_option_elem
| alter_generic_option_list ',' alter_generic_option_elem
;
alter_generic_option_elem : generic_option_elem
| SET generic_option_elem
| ADD_P generic_option_elem
| DROP generic_option_name
;
generic_option_elem : generic_option_name generic_option_arg
;
generic_option_name : colLabel
;
generic_option_arg : sconst
;
createForeignServerStmt : CREATE SERVER name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options
| CREATE SERVER IF_P NOT EXISTS name opt_type opt_foreign_server_version FOREIGN DATA_P WRAPPER name create_generic_options
;
opt_type : TYPE_P sconst
|
;
foreign_server_version : VERSION_P sconst
| VERSION_P NULL_P
;
opt_foreign_server_version : foreign_server_version
|
;
alterForeignServerStmt : ALTER SERVER name foreign_server_version alter_generic_options
| ALTER SERVER name foreign_server_version
| ALTER SERVER name alter_generic_options
;
createForeignTableStmt : CREATE FOREIGN TABLE qualified_name '(' optTableElementList ')' optInherit SERVER name create_generic_options
| CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name '(' optTableElementList ')' optInherit SERVER name create_generic_options
| CREATE FOREIGN TABLE qualified_name PARTITION OF qualified_name optTypedTableElementList partitionBoundSpec SERVER name create_generic_options
| CREATE FOREIGN TABLE IF_P NOT EXISTS qualified_name PARTITION OF qualified_name optTypedTableElementList partitionBoundSpec SERVER name create_generic_options
;
importForeignSchemaStmt : IMPORT_P FOREIGN SCHEMA name import_qualification FROM SERVER name INTO name create_generic_options
;
import_qualification_type : LIMIT TO
| EXCEPT
;
import_qualification : import_qualification_type '(' relation_expr_list ')'
|
;
createUserMappingStmt : CREATE USER MAPPING FOR auth_ident SERVER name create_generic_options
| CREATE USER MAPPING IF_P NOT EXISTS FOR auth_ident SERVER name create_generic_options
;
auth_ident : roleSpec
| USER
;
dropUserMappingStmt : DROP USER MAPPING FOR auth_ident SERVER name
| DROP USER MAPPING IF_P EXISTS FOR auth_ident SERVER name
;
alterUserMappingStmt : ALTER USER MAPPING FOR auth_ident SERVER name alter_generic_options
;
createPolicyStmt : CREATE POLICY name ON qualified_name rowSecurityDefaultPermissive rowSecurityDefaultForCmd rowSecurityDefaultToRole rowSecurityOptionalExpr rowSecurityOptionalWithCheck
;
alterPolicyStmt : ALTER POLICY name ON qualified_name rowSecurityOptionalToRole rowSecurityOptionalExpr rowSecurityOptionalWithCheck
;
rowSecurityOptionalExpr : USING '(' a_expr ')'
|
;
rowSecurityOptionalWithCheck : WITH CHECK '(' a_expr ')'
|
;
rowSecurityDefaultToRole : TO role_list
|
;
rowSecurityOptionalToRole : TO role_list
|
;
rowSecurityDefaultPermissive : AS IDENT
|
;
rowSecurityDefaultForCmd : FOR row_security_cmd
|
;
row_security_cmd : ALL
| SELECT
| INSERT
| UPDATE
| DELETE_P
;
createAmStmt : CREATE ACCESS METHOD name TYPE_P am_type HANDLER handler_name
;
am_type : INDEX
| TABLE
;
createTrigStmt : CREATE opt_or_replace TRIGGER name triggerActionTime triggerEvents ON qualified_name triggerReferencing triggerForSpec triggerWhen EXECUTE fUNCTION_or_PROCEDURE func_name '(' triggerFuncArgs ')'
| CREATE opt_or_replace CONSTRAINT TRIGGER name AFTER triggerEvents ON qualified_name optConstrFromTable constraintAttributeSpec FOR EACH ROW triggerWhen EXECUTE fUNCTION_or_PROCEDURE func_name '(' triggerFuncArgs ')'
;
triggerActionTime : BEFORE
| AFTER
| INSTEAD OF
;
triggerEvents : triggerOneEvent
| triggerEvents OR triggerOneEvent
;
triggerOneEvent : INSERT
| DELETE_P
| UPDATE
| UPDATE OF columnList
| TRUNCATE
;
triggerReferencing : REFERENCING triggerTransitions
|
;
triggerTransitions : triggerTransition
| triggerTransitions triggerTransition
;
triggerTransition : transitionOldOrNew transitionRowOrTable opt_as transitionRelName
;
transitionOldOrNew : NEW
| OLD
;
transitionRowOrTable : TABLE
| ROW
;
transitionRelName : colId
;
triggerForSpec : FOR triggerForOptEach triggerForType
|
;
triggerForOptEach : EACH
|
;
triggerForType : ROW
| STATEMENT
;
triggerWhen : WHEN '(' a_expr ')'
|
;
fUNCTION_or_PROCEDURE : FUNCTION
| PROCEDURE
;
triggerFuncArgs : triggerFuncArg
| triggerFuncArgs ',' triggerFuncArg
|
;
triggerFuncArg : iconst
| FCONST
| sconst
| colLabel
;
optConstrFromTable : FROM qualified_name
|
;
constraintAttributeSpec :
| constraintAttributeSpec constraintAttributeElem
;
constraintAttributeElem : NOT DEFERRABLE
| DEFERRABLE
| INITIALLY IMMEDIATE
| INITIALLY DEFERRED
| NOT VALID
| NO INHERIT
;
createEventTrigStmt : CREATE EVENT TRIGGER name ON colLabel EXECUTE fUNCTION_or_PROCEDURE func_name '(' ')'
| CREATE EVENT TRIGGER name ON colLabel WHEN event_trigger_when_list EXECUTE fUNCTION_or_PROCEDURE func_name '(' ')'
;
event_trigger_when_list : event_trigger_when_item
| event_trigger_when_list AND event_trigger_when_item
;
event_trigger_when_item : colId IN_P '(' event_trigger_value_list ')'
;
event_trigger_value_list : SCONST
| event_trigger_value_list ',' SCONST
;
alterEventTrigStmt : ALTER EVENT TRIGGER name enable_trigger
;
enable_trigger : ENABLE_P
| ENABLE_P REPLICA
| ENABLE_P ALWAYS
| DISABLE_P
;
createAssertionStmt : CREATE ASSERTION any_name CHECK '(' a_expr ')' constraintAttributeSpec
;
defineStmt : CREATE opt_or_replace AGGREGATE func_name aggr_args definition
| CREATE opt_or_replace AGGREGATE func_name old_aggr_definition
| CREATE OPERATOR any_operator definition
| CREATE TYPE_P any_name definition
| CREATE TYPE_P any_name
| CREATE TYPE_P any_name AS '(' optTableFuncElementList ')'
| CREATE TYPE_P any_name AS ENUM_P '(' opt_enum_val_list ')'
| CREATE TYPE_P any_name AS RANGE definition
| CREATE TEXT_P SEARCH PARSER any_name definition
| CREATE TEXT_P SEARCH DICTIONARY any_name definition
| CREATE TEXT_P SEARCH TEMPLATE any_name definition
| CREATE TEXT_P SEARCH CONFIGURATION any_name definition
| CREATE COLLATION any_name definition
| CREATE COLLATION IF_P NOT EXISTS any_name definition
| CREATE COLLATION any_name FROM any_name
| CREATE COLLATION IF_P NOT EXISTS any_name FROM any_name
;
definition : '(' def_list ')'
;
def_list : def_elem
| def_list ',' def_elem
;
def_elem : colLabel '=' def_arg
| colLabel
;
def_arg : func_type
| reserved_keyword
| qual_all_Op
| numericOnly
| sconst
| NONE
;
old_aggr_definition : '(' old_aggr_list ')'
;
old_aggr_list : old_aggr_elem
| old_aggr_list ',' old_aggr_elem
;
old_aggr_elem : IDENT '=' def_arg
;
opt_enum_val_list : enum_val_list
|
;
enum_val_list : sconst
| enum_val_list ',' sconst
;
alterEnumStmt : ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists sconst
| ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists sconst BEFORE sconst
| ALTER TYPE_P any_name ADD_P VALUE_P opt_if_not_exists sconst AFTER sconst
| ALTER TYPE_P any_name RENAME VALUE_P sconst TO sconst
;
opt_if_not_exists : IF_P NOT EXISTS
|
;
createOpClassStmt : CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P typename USING name opt_opfamily AS opclass_item_list
;
opclass_item_list : opclass_item
| opclass_item_list ',' opclass_item
;
opclass_item : OPERATOR iconst any_operator opclass_purpose opt_recheck
| OPERATOR iconst operator_with_argtypes opclass_purpose opt_recheck
| FUNCTION iconst function_with_argtypes
| FUNCTION iconst '(' type_list ')' function_with_argtypes
| STORAGE typename
;
opt_default : DEFAULT
|
;
opt_opfamily : FAMILY any_name
|
;
opclass_purpose : FOR SEARCH
| FOR ORDER BY any_name
|
;
opt_recheck : RECHECK
|
;
createOpFamilyStmt : CREATE OPERATOR FAMILY any_name USING name
;
alterOpFamilyStmt : ALTER OPERATOR FAMILY any_name USING name ADD_P opclass_item_list
| ALTER OPERATOR FAMILY any_name USING name DROP opclass_drop_list
;
opclass_drop_list : opclass_drop
| opclass_drop_list ',' opclass_drop
;
opclass_drop : OPERATOR iconst '(' type_list ')'
| FUNCTION iconst '(' type_list ')'
;
dropOpClassStmt : DROP OPERATOR CLASS any_name USING name opt_drop_behavior
| DROP OPERATOR CLASS IF_P EXISTS any_name USING name opt_drop_behavior
;
dropOpFamilyStmt : DROP OPERATOR FAMILY any_name USING name opt_drop_behavior
| DROP OPERATOR FAMILY IF_P EXISTS any_name USING name opt_drop_behavior
;
dropOwnedStmt : DROP OWNED BY role_list opt_drop_behavior
;
reassignOwnedStmt : REASSIGN OWNED BY role_list TO roleSpec
;
dropStmt : DROP object_type_any_name IF_P EXISTS any_name_list opt_drop_behavior
| DROP object_type_any_name any_name_list opt_drop_behavior
| DROP drop_type_name IF_P EXISTS name_list opt_drop_behavior
| DROP drop_type_name name_list opt_drop_behavior
| DROP object_type_name_on_any_name name ON any_name opt_drop_behavior
| DROP object_type_name_on_any_name IF_P EXISTS name ON any_name opt_drop_behavior
| DROP TYPE_P type_name_list opt_drop_behavior
| DROP TYPE_P IF_P EXISTS type_name_list opt_drop_behavior
| DROP DOMAIN_P type_name_list opt_drop_behavior
| DROP DOMAIN_P IF_P EXISTS type_name_list opt_drop_behavior
| DROP INDEX CONCURRENTLY any_name_list opt_drop_behavior
| DROP INDEX CONCURRENTLY IF_P EXISTS any_name_list opt_drop_behavior
;
object_type_any_name : TABLE
| SEQUENCE
| VIEW
| MATERIALIZED VIEW
| INDEX
| FOREIGN TABLE
| COLLATION
| CONVERSION_P
| STATISTICS
| TEXT_P SEARCH PARSER
| TEXT_P SEARCH DICTIONARY
| TEXT_P SEARCH TEMPLATE
| TEXT_P SEARCH CONFIGURATION
;
object_type_name : drop_type_name
| DATABASE
| ROLE
| SUBSCRIPTION
| TABLESPACE
;
drop_type_name : ACCESS METHOD
| EVENT TRIGGER
| EXTENSION
| FOREIGN DATA_P WRAPPER
| opt_procedural LANGUAGE
| PUBLICATION
| SCHEMA
| SERVER
;
object_type_name_on_any_name : POLICY
| RULE
| TRIGGER
;
any_name_list : any_name
| any_name_list ',' any_name
;
any_name : colId
| colId attrs
;
attrs : '.' attr_name
| attrs '.' attr_name
;
type_name_list : typename
| type_name_list ',' typename
;
truncateStmt : TRUNCATE opt_table relation_expr_list opt_restart_seqs opt_drop_behavior
;
opt_restart_seqs : CONTINUE_P IDENTITY_P
| RESTART IDENTITY_P
|
;
commentStmt : COMMENT ON object_type_any_name any_name IS comment_text
| COMMENT ON COLUMN any_name IS comment_text
| COMMENT ON object_type_name name IS comment_text
| COMMENT ON TYPE_P typename IS comment_text
| COMMENT ON DOMAIN_P typename IS comment_text
| COMMENT ON AGGREGATE aggregate_with_argtypes IS comment_text
| COMMENT ON FUNCTION function_with_argtypes IS comment_text
| COMMENT ON OPERATOR operator_with_argtypes IS comment_text
| COMMENT ON CONSTRAINT name ON any_name IS comment_text
| COMMENT ON CONSTRAINT name ON DOMAIN_P any_name IS comment_text
| COMMENT ON object_type_name_on_any_name name ON any_name IS comment_text
| COMMENT ON PROCEDURE function_with_argtypes IS comment_text
| COMMENT ON ROUTINE function_with_argtypes IS comment_text
| COMMENT ON TRANSFORM FOR typename LANGUAGE name IS comment_text
| COMMENT ON OPERATOR CLASS any_name USING name IS comment_text
| COMMENT ON OPERATOR FAMILY any_name USING name IS comment_text
| COMMENT ON LARGE_P OBJECT_P numericOnly IS comment_text
| COMMENT ON CAST '(' typename AS typename ')' IS comment_text
;
comment_text : sconst
| NULL_P
;
secLabelStmt : SECURITY LABEL opt_provider ON object_type_any_name any_name IS security_label
| SECURITY LABEL opt_provider ON COLUMN any_name IS security_label
| SECURITY LABEL opt_provider ON object_type_name name IS security_label
| SECURITY LABEL opt_provider ON TYPE_P typename IS security_label
| SECURITY LABEL opt_provider ON DOMAIN_P typename IS security_label
| SECURITY LABEL opt_provider ON AGGREGATE aggregate_with_argtypes IS security_label
| SECURITY LABEL opt_provider ON FUNCTION function_with_argtypes IS security_label
| SECURITY LABEL opt_provider ON LARGE_P OBJECT_P numericOnly IS security_label
| SECURITY LABEL opt_provider ON PROCEDURE function_with_argtypes IS security_label
| SECURITY LABEL opt_provider ON ROUTINE function_with_argtypes IS security_label
;
opt_provider : FOR nonReservedWord_or_Sconst
|
;
security_label : sconst
| NULL_P
;
fetchStmt : FETCH fetch_args
| MOVE fetch_args
;
fetch_args : cursor_name
| from_in cursor_name
| NEXT opt_from_in cursor_name
| PRIOR opt_from_in cursor_name
| FIRST_P opt_from_in cursor_name
| LAST_P opt_from_in cursor_name
| ABSOLUTE_P signedIconst opt_from_in cursor_name
| RELATIVE_P signedIconst opt_from_in cursor_name
| signedIconst opt_from_in cursor_name
| ALL opt_from_in cursor_name
| FORWARD opt_from_in cursor_name
| FORWARD signedIconst opt_from_in cursor_name
| FORWARD ALL opt_from_in cursor_name
| BACKWARD opt_from_in cursor_name
| BACKWARD signedIconst opt_from_in cursor_name
| BACKWARD ALL opt_from_in cursor_name
;
from_in : FROM
| IN_P
;
opt_from_in : from_in
|
;
grantStmt : GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option opt_granted_by
;
revokeStmt : REVOKE privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior
| REVOKE GRANT OPTION FOR privileges ON privilege_target FROM grantee_list opt_granted_by opt_drop_behavior
;
privileges : privilege_list
| ALL
| ALL PRIVILEGES
| ALL '(' columnList ')'
| ALL PRIVILEGES '(' columnList ')'
;
privilege_list : privilege
| privilege_list ',' privilege
;
privilege : SELECT opt_column_list
| REFERENCES opt_column_list
| CREATE opt_column_list
| colId opt_column_list
;
privilege_target : qualified_name_list
| TABLE qualified_name_list
| SEQUENCE qualified_name_list
| FOREIGN DATA_P WRAPPER name_list
| FOREIGN SERVER name_list
| FUNCTION function_with_argtypes_list
| PROCEDURE function_with_argtypes_list
| ROUTINE function_with_argtypes_list
| DATABASE name_list
| DOMAIN_P any_name_list
| LANGUAGE name_list
| LARGE_P OBJECT_P numericOnly_list
| SCHEMA name_list
| TABLESPACE name_list
| TYPE_P any_name_list
| ALL TABLES IN_P SCHEMA name_list
| ALL SEQUENCES IN_P SCHEMA name_list
| ALL FUNCTIONS IN_P SCHEMA name_list
| ALL PROCEDURES IN_P SCHEMA name_list
| ALL ROUTINES IN_P SCHEMA name_list
;
grantee_list : grantee
| grantee_list ',' grantee
;
grantee : roleSpec
| GROUP_P roleSpec
;
opt_grant_grant_option : WITH GRANT OPTION
|
;
grantRoleStmt : GRANT privilege_list TO role_list opt_grant_admin_option opt_granted_by
;
revokeRoleStmt : REVOKE privilege_list FROM role_list opt_granted_by opt_drop_behavior
| REVOKE ADMIN OPTION FOR privilege_list FROM role_list opt_granted_by opt_drop_behavior
;
opt_grant_admin_option : WITH ADMIN OPTION
|
;
opt_granted_by : GRANTED BY roleSpec
|
;
alterDefaultPrivilegesStmt : ALTER DEFAULT PRIVILEGES defACLOptionList defACLAction
;
defACLOptionList : defACLOptionList defACLOption
|
;
defACLOption : IN_P SCHEMA name_list
| FOR ROLE role_list
| FOR USER role_list
;
defACLAction : GRANT privileges ON defacl_privilege_target TO grantee_list opt_grant_grant_option
| REVOKE privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior
| REVOKE GRANT OPTION FOR privileges ON defacl_privilege_target FROM grantee_list opt_drop_behavior
;
defacl_privilege_target : TABLES
| FUNCTIONS
| ROUTINES
| SEQUENCES
| TYPES_P
| SCHEMAS
;
indexStmt : CREATE opt_unique INDEX opt_concurrently opt_index_name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions optTableSpace where_clause
| CREATE opt_unique INDEX opt_concurrently IF_P NOT EXISTS name ON relation_expr access_method_clause '(' index_params ')' opt_include opt_reloptions optTableSpace where_clause
;
opt_unique : UNIQUE
|
;
opt_concurrently : CONCURRENTLY
|
;
opt_index_name : name
|
;
access_method_clause : USING name
|
;
index_params : index_elem
| index_params ',' index_elem
;
index_elem_options : opt_collate opt_class opt_asc_desc opt_nulls_order
| opt_collate any_name reloptions opt_asc_desc opt_nulls_order
;
index_elem : colId index_elem_options
| func_expr_windowless index_elem_options
| '(' a_expr ')' index_elem_options
;
opt_include : INCLUDE '(' index_including_params ')'
|
;
index_including_params : index_elem
| index_including_params ',' index_elem
;
opt_collate : COLLATE any_name
|
;
opt_class : any_name
|
;
opt_asc_desc : ASC
| DESC
|
;
opt_nulls_order : NULLS_LA FIRST_P
| NULLS_LA LAST_P
|
;
createFunctionStmt : CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS func_return opt_createfunc_opt_list opt_routine_body
| CREATE opt_or_replace FUNCTION func_name func_args_with_defaults RETURNS TABLE '(' table_func_column_list ')' opt_createfunc_opt_list opt_routine_body
| CREATE opt_or_replace FUNCTION func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body
| CREATE opt_or_replace PROCEDURE func_name func_args_with_defaults opt_createfunc_opt_list opt_routine_body
;
opt_or_replace : OR REPLACE
|
;
func_args : '(' func_args_list ')'
| '(' ')'
;
func_args_list : func_arg
| func_args_list ',' func_arg
;
function_with_argtypes_list : function_with_argtypes
| function_with_argtypes_list ',' function_with_argtypes
;
function_with_argtypes : func_name func_args
| type_func_name_keyword
| colId
| colId indirection
;
func_args_with_defaults : '(' func_args_with_defaults_list ')'
| '(' ')'
;
func_args_with_defaults_list : func_arg_with_default
| func_args_with_defaults_list ',' func_arg_with_default
;
func_arg : arg_class param_name func_type
| param_name arg_class func_type
| param_name func_type
| arg_class func_type
| func_type
;
arg_class : IN_P
| OUT_P
| INOUT
| IN_P OUT_P
| VARIADIC
;
param_name : type_function_name
;
func_return : func_type
;
func_type : typename
| type_function_name attrs '%' TYPE_P
| SETOF type_function_name attrs '%' TYPE_P
;
func_arg_with_default : func_arg
| func_arg DEFAULT a_expr
| func_arg '=' a_expr
;
aggr_arg : func_arg
;
aggr_args : '(' '*' ')'
| '(' aggr_args_list ')'
| '(' ORDER BY aggr_args_list ')'
| '(' aggr_args_list ORDER BY aggr_args_list ')'
;
aggr_args_list : aggr_arg
| aggr_args_list ',' aggr_arg
;
aggregate_with_argtypes : func_name aggr_args
;
aggregate_with_argtypes_list : aggregate_with_argtypes
| aggregate_with_argtypes_list ',' aggregate_with_argtypes
;
opt_createfunc_opt_list : createfunc_opt_list
|
;
createfunc_opt_list : createfunc_opt_item
| createfunc_opt_list createfunc_opt_item
;
common_func_opt_item : CALLED ON NULL_P INPUT_P
| RETURNS NULL_P ON NULL_P INPUT_P
| STRICT_P
| IMMUTABLE
| STABLE
| VOLATILE
| EXTERNAL SECURITY DEFINER
| EXTERNAL SECURITY INVOKER
| SECURITY DEFINER
| SECURITY INVOKER
| LEAKPROOF
| NOT LEAKPROOF
| COST numericOnly
| ROWS numericOnly
| SUPPORT any_name
| functionSetResetClause
| PARALLEL colId
;
createfunc_opt_item : AS func_as
| LANGUAGE nonReservedWord_or_Sconst
| TRANSFORM transform_type_list
| WINDOW
| common_func_opt_item
;
func_as : sconst
| sconst ',' sconst
;
returnStmt : RETURN a_expr
;
opt_routine_body : returnStmt
| BEGIN_P ATOMIC routine_body_stmt_list END_P
|
;
routine_body_stmt_list : routine_body_stmt_list routine_body_stmt ';'
|
;
routine_body_stmt : stmt
| returnStmt
;
transform_type_list : FOR TYPE_P typename
| transform_type_list ',' FOR TYPE_P typename
;
opt_definition : WITH definition
|
;
table_func_column : param_name func_type
;
table_func_column_list : table_func_column
| table_func_column_list ',' table_func_column
;
alterFunctionStmt : ALTER FUNCTION function_with_argtypes alterfunc_opt_list opt_restrict
| ALTER PROCEDURE function_with_argtypes alterfunc_opt_list opt_restrict
| ALTER ROUTINE function_with_argtypes alterfunc_opt_list opt_restrict
;
alterfunc_opt_list : common_func_opt_item
| alterfunc_opt_list common_func_opt_item
;
opt_restrict : RESTRICT
|
;
removeFuncStmt : DROP FUNCTION function_with_argtypes_list opt_drop_behavior
| DROP FUNCTION IF_P EXISTS function_with_argtypes_list opt_drop_behavior
| DROP PROCEDURE function_with_argtypes_list opt_drop_behavior
| DROP PROCEDURE IF_P EXISTS function_with_argtypes_list opt_drop_behavior
| DROP ROUTINE function_with_argtypes_list opt_drop_behavior
| DROP ROUTINE IF_P EXISTS function_with_argtypes_list opt_drop_behavior
;
removeAggrStmt : DROP AGGREGATE aggregate_with_argtypes_list opt_drop_behavior
| DROP AGGREGATE IF_P EXISTS aggregate_with_argtypes_list opt_drop_behavior
;
removeOperStmt : DROP OPERATOR operator_with_argtypes_list opt_drop_behavior
| DROP OPERATOR IF_P EXISTS operator_with_argtypes_list opt_drop_behavior
;
oper_argtypes : '(' typename ')'
| '(' typename ',' typename ')'
| '(' NONE ',' typename ')'
| '(' typename ',' NONE ')'
;
any_operator : all_Op
| colId '.' any_operator
;
operator_with_argtypes_list : operator_with_argtypes
| operator_with_argtypes_list ',' operator_with_argtypes
;
operator_with_argtypes : any_operator oper_argtypes
;
doStmt : DO dostmt_opt_list
;
dostmt_opt_list : dostmt_opt_item
| dostmt_opt_list dostmt_opt_item
;
dostmt_opt_item : sconst
| LANGUAGE nonReservedWord_or_Sconst
;
createCastStmt : CREATE CAST '(' typename AS typename ')' WITH FUNCTION function_with_argtypes cast_context
| CREATE CAST '(' typename AS typename ')' WITHOUT FUNCTION cast_context
| CREATE CAST '(' typename AS typename ')' WITH INOUT cast_context
;
cast_context : AS IMPLICIT_P
| AS ASSIGNMENT
|
;
dropCastStmt : DROP CAST opt_if_exists '(' typename AS typename ')' opt_drop_behavior
;
opt_if_exists : IF_P EXISTS
|
;
createTransformStmt : CREATE opt_or_replace TRANSFORM FOR typename LANGUAGE name '(' transform_element_list ')'
;
transform_element_list : FROM SQL_P WITH FUNCTION function_with_argtypes ',' TO SQL_P WITH FUNCTION function_with_argtypes
| TO SQL_P WITH FUNCTION function_with_argtypes ',' FROM SQL_P WITH FUNCTION function_with_argtypes
| FROM SQL_P WITH FUNCTION function_with_argtypes
| TO SQL_P WITH FUNCTION function_with_argtypes
;
dropTransformStmt : DROP TRANSFORM opt_if_exists FOR typename LANGUAGE name opt_drop_behavior
;
reindexStmt : REINDEX reindex_target_type opt_concurrently qualified_name
| REINDEX reindex_target_multitable opt_concurrently name
| REINDEX '(' utility_option_list ')' reindex_target_type opt_concurrently qualified_name
| REINDEX '(' utility_option_list ')' reindex_target_multitable opt_concurrently name
;
reindex_target_type : INDEX
| TABLE
;
reindex_target_multitable : SCHEMA
| SYSTEM_P
| DATABASE
;
alterTblSpcStmt : ALTER TABLESPACE name SET reloptions
| ALTER TABLESPACE name RESET reloptions
;
renameStmt : ALTER AGGREGATE aggregate_with_argtypes RENAME TO name
| ALTER COLLATION any_name RENAME TO name
| ALTER CONVERSION_P any_name RENAME TO name
| ALTER DATABASE name RENAME TO name
| ALTER DOMAIN_P any_name RENAME TO name
| ALTER DOMAIN_P any_name RENAME CONSTRAINT name TO name
| ALTER FOREIGN DATA_P WRAPPER name RENAME TO name
| ALTER FUNCTION function_with_argtypes RENAME TO name
| ALTER GROUP_P roleId RENAME TO roleId
| ALTER opt_procedural LANGUAGE name RENAME TO name
| ALTER OPERATOR CLASS any_name USING name RENAME TO name
| ALTER OPERATOR FAMILY any_name USING name RENAME TO name
| ALTER POLICY name ON qualified_name RENAME TO name
| ALTER POLICY IF_P EXISTS name ON qualified_name RENAME TO name
| ALTER PROCEDURE function_with_argtypes RENAME TO name
| ALTER PUBLICATION name RENAME TO name
| ALTER ROUTINE function_with_argtypes RENAME TO name
| ALTER SCHEMA name RENAME TO name
| ALTER SERVER name RENAME TO name
| ALTER SUBSCRIPTION name RENAME TO name
| ALTER TABLE relation_expr RENAME TO name
| ALTER TABLE IF_P EXISTS relation_expr RENAME TO name
| ALTER SEQUENCE qualified_name RENAME TO name
| ALTER SEQUENCE IF_P EXISTS qualified_name RENAME TO name
| ALTER VIEW qualified_name RENAME TO name
| ALTER VIEW IF_P EXISTS qualified_name RENAME TO name
| ALTER MATERIALIZED VIEW qualified_name RENAME TO name
| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME TO name
| ALTER INDEX qualified_name RENAME TO name
| ALTER INDEX IF_P EXISTS qualified_name RENAME TO name
| ALTER FOREIGN TABLE relation_expr RENAME TO name
| ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME TO name
| ALTER TABLE relation_expr RENAME opt_column name TO name
| ALTER TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name
| ALTER VIEW qualified_name RENAME opt_column name TO name
| ALTER VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name
| ALTER MATERIALIZED VIEW qualified_name RENAME opt_column name TO name
| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name RENAME opt_column name TO name
| ALTER TABLE relation_expr RENAME CONSTRAINT name TO name
| ALTER TABLE IF_P EXISTS relation_expr RENAME CONSTRAINT name TO name
| ALTER FOREIGN TABLE relation_expr RENAME opt_column name TO name
| ALTER FOREIGN TABLE IF_P EXISTS relation_expr RENAME opt_column name TO name
| ALTER RULE name ON qualified_name RENAME TO name
| ALTER TRIGGER name ON qualified_name RENAME TO name
| ALTER EVENT TRIGGER name RENAME TO name
| ALTER ROLE roleId RENAME TO roleId
| ALTER USER roleId RENAME TO roleId
| ALTER TABLESPACE name RENAME TO name
| ALTER STATISTICS any_name RENAME TO name
| ALTER TEXT_P SEARCH PARSER any_name RENAME TO name
| ALTER TEXT_P SEARCH DICTIONARY any_name RENAME TO name
| ALTER TEXT_P SEARCH TEMPLATE any_name RENAME TO name
| ALTER TEXT_P SEARCH CONFIGURATION any_name RENAME TO name
| ALTER TYPE_P any_name RENAME TO name
| ALTER TYPE_P any_name RENAME ATTRIBUTE name TO name opt_drop_behavior
;
opt_column : COLUMN
|
;
opt_set_data : SET DATA_P
|
;
alterObjectDependsStmt : ALTER FUNCTION function_with_argtypes opt_no DEPENDS ON EXTENSION name
| ALTER PROCEDURE function_with_argtypes opt_no DEPENDS ON EXTENSION name
| ALTER ROUTINE function_with_argtypes opt_no DEPENDS ON EXTENSION name
| ALTER TRIGGER name ON qualified_name opt_no DEPENDS ON EXTENSION name
| ALTER MATERIALIZED VIEW qualified_name opt_no DEPENDS ON EXTENSION name
| ALTER INDEX qualified_name opt_no DEPENDS ON EXTENSION name
;
opt_no : NO
|
;
alterObjectSchemaStmt : ALTER AGGREGATE aggregate_with_argtypes SET SCHEMA name
| ALTER COLLATION any_name SET SCHEMA name
| ALTER CONVERSION_P any_name SET SCHEMA name
| ALTER DOMAIN_P any_name SET SCHEMA name
| ALTER EXTENSION name SET SCHEMA name
| ALTER FUNCTION function_with_argtypes SET SCHEMA name
| ALTER OPERATOR operator_with_argtypes SET SCHEMA name
| ALTER OPERATOR CLASS any_name USING name SET SCHEMA name
| ALTER OPERATOR FAMILY any_name USING name SET SCHEMA name
| ALTER PROCEDURE function_with_argtypes SET SCHEMA name
| ALTER ROUTINE function_with_argtypes SET SCHEMA name
| ALTER TABLE relation_expr SET SCHEMA name
| ALTER TABLE IF_P EXISTS relation_expr SET SCHEMA name
| ALTER STATISTICS any_name SET SCHEMA name
| ALTER TEXT_P SEARCH PARSER any_name SET SCHEMA name
| ALTER TEXT_P SEARCH DICTIONARY any_name SET SCHEMA name
| ALTER TEXT_P SEARCH TEMPLATE any_name SET SCHEMA name
| ALTER TEXT_P SEARCH CONFIGURATION any_name SET SCHEMA name
| ALTER SEQUENCE qualified_name SET SCHEMA name
| ALTER SEQUENCE IF_P EXISTS qualified_name SET SCHEMA name
| ALTER VIEW qualified_name SET SCHEMA name
| ALTER VIEW IF_P EXISTS qualified_name SET SCHEMA name
| ALTER MATERIALIZED VIEW qualified_name SET SCHEMA name
| ALTER MATERIALIZED VIEW IF_P EXISTS qualified_name SET SCHEMA name
| ALTER FOREIGN TABLE relation_expr SET SCHEMA name
| ALTER FOREIGN TABLE IF_P EXISTS relation_expr SET SCHEMA name
| ALTER TYPE_P any_name SET SCHEMA name
;
alterOperatorStmt : ALTER OPERATOR operator_with_argtypes SET '(' operator_def_list ')'
;
operator_def_list : operator_def_elem
| operator_def_list ',' operator_def_elem
;
operator_def_elem : colLabel '=' NONE
| colLabel '=' operator_def_arg
;
operator_def_arg : func_type
| reserved_keyword
| qual_all_Op
| numericOnly
| sconst
;
alterTypeStmt : ALTER TYPE_P any_name SET '(' operator_def_list ')'
;
alterOwnerStmt : ALTER AGGREGATE aggregate_with_argtypes OWNER TO roleSpec
| ALTER COLLATION any_name OWNER TO roleSpec
| ALTER CONVERSION_P any_name OWNER TO roleSpec
| ALTER DATABASE name OWNER TO roleSpec
| ALTER DOMAIN_P any_name OWNER TO roleSpec
| ALTER FUNCTION function_with_argtypes OWNER TO roleSpec
| ALTER opt_procedural LANGUAGE name OWNER TO roleSpec
| ALTER LARGE_P OBJECT_P numericOnly OWNER TO roleSpec
| ALTER OPERATOR operator_with_argtypes OWNER TO roleSpec
| ALTER OPERATOR CLASS any_name USING name OWNER TO roleSpec
| ALTER OPERATOR FAMILY any_name USING name OWNER TO roleSpec
| ALTER PROCEDURE function_with_argtypes OWNER TO roleSpec
| ALTER ROUTINE function_with_argtypes OWNER TO roleSpec
| ALTER SCHEMA name OWNER TO roleSpec
| ALTER TYPE_P any_name OWNER TO roleSpec
| ALTER TABLESPACE name OWNER TO roleSpec
| ALTER STATISTICS any_name OWNER TO roleSpec
| ALTER TEXT_P SEARCH DICTIONARY any_name OWNER TO roleSpec
| ALTER TEXT_P SEARCH CONFIGURATION any_name OWNER TO roleSpec
| ALTER FOREIGN DATA_P WRAPPER name OWNER TO roleSpec
| ALTER SERVER name OWNER TO roleSpec
| ALTER EVENT TRIGGER name OWNER TO roleSpec
| ALTER PUBLICATION name OWNER TO roleSpec
| ALTER SUBSCRIPTION name OWNER TO roleSpec
;
createPublicationStmt : CREATE PUBLICATION name opt_publication_for_tables opt_definition
;
opt_publication_for_tables : publication_for_tables
|
;
publication_for_tables : FOR TABLE relation_expr_list
| FOR ALL TABLES
;
alterPublicationStmt : ALTER PUBLICATION name SET definition
| ALTER PUBLICATION name ADD_P TABLE relation_expr_list
| ALTER PUBLICATION name SET TABLE relation_expr_list
| ALTER PUBLICATION name DROP TABLE relation_expr_list
;
createSubscriptionStmt : CREATE SUBSCRIPTION name CONNECTION sconst PUBLICATION name_list opt_definition
;
alterSubscriptionStmt : ALTER SUBSCRIPTION name SET definition
| ALTER SUBSCRIPTION name CONNECTION sconst
| ALTER SUBSCRIPTION name REFRESH PUBLICATION opt_definition
| ALTER SUBSCRIPTION name ADD_P PUBLICATION name_list opt_definition
| ALTER SUBSCRIPTION name DROP PUBLICATION name_list opt_definition
| ALTER SUBSCRIPTION name SET PUBLICATION name_list opt_definition
| ALTER SUBSCRIPTION name ENABLE_P
| ALTER SUBSCRIPTION name DISABLE_P
;
dropSubscriptionStmt : DROP SUBSCRIPTION name opt_drop_behavior
| DROP SUBSCRIPTION IF_P EXISTS name opt_drop_behavior
;
ruleStmt : CREATE opt_or_replace RULE name AS ON event TO qualified_name where_clause DO opt_instead ruleActionList
;
ruleActionList : NOTHING
| ruleActionStmt
| '(' ruleActionMulti ')'
;
ruleActionMulti : ruleActionMulti ';' ruleActionStmtOrEmpty
| ruleActionStmtOrEmpty
;
ruleActionStmt : selectStmt
| insertStmt
| updateStmt
| deleteStmt
| notifyStmt
;
ruleActionStmtOrEmpty : ruleActionStmt
|
;
event : SELECT
| UPDATE
| DELETE_P
| INSERT
;
opt_instead : INSTEAD
| ALSO
|
;
notifyStmt : NOTIFY colId notify_payload
;
notify_payload : ',' sconst
|
;
listenStmt : LISTEN colId
;
unlistenStmt : UNLISTEN colId
| UNLISTEN '*'
;
transactionStmt : ABORT_P opt_transaction opt_transaction_chain
| START TRANSACTION transaction_mode_list_or_empty
| COMMIT opt_transaction opt_transaction_chain
| ROLLBACK opt_transaction opt_transaction_chain
| SAVEPOINT colId
| RELEASE SAVEPOINT colId
| RELEASE colId
| ROLLBACK opt_transaction TO SAVEPOINT colId
| ROLLBACK opt_transaction TO colId
| PREPARE TRANSACTION sconst
| COMMIT PREPARED sconst
| ROLLBACK PREPARED sconst
;
transactionStmtLegacy : BEGIN_P opt_transaction transaction_mode_list_or_empty
| END_P opt_transaction opt_transaction_chain
;
opt_transaction : WORK
| TRANSACTION
|
;
transaction_mode_item : ISOLATION LEVEL iso_level
| READ ONLY
| READ WRITE
| DEFERRABLE
| NOT DEFERRABLE
;
transaction_mode_list : transaction_mode_item
| transaction_mode_list ',' transaction_mode_item
| transaction_mode_list transaction_mode_item
;
transaction_mode_list_or_empty : transaction_mode_list
|
;
opt_transaction_chain : AND CHAIN
| AND NO CHAIN
|
;
viewStmt : CREATE optTemp VIEW qualified_name opt_column_list opt_reloptions AS selectStmt opt_check_option
| CREATE OR REPLACE optTemp VIEW qualified_name opt_column_list opt_reloptions AS selectStmt opt_check_option
| CREATE optTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS selectStmt opt_check_option
| CREATE OR REPLACE optTemp RECURSIVE VIEW qualified_name '(' columnList ')' opt_reloptions AS selectStmt opt_check_option
;
opt_check_option : WITH CHECK OPTION
| WITH CASCADED CHECK OPTION
| WITH LOCAL CHECK OPTION
|
;
loadStmt : LOAD file_name
;
createdbStmt : CREATE DATABASE name opt_with createdb_opt_list
;
createdb_opt_list : createdb_opt_items
|
;
createdb_opt_items : createdb_opt_item
| createdb_opt_items createdb_opt_item
;
createdb_opt_item : createdb_opt_name opt_equal signedIconst
| createdb_opt_name opt_equal opt_boolean_or_string
| createdb_opt_name opt_equal DEFAULT
;
createdb_opt_name : IDENT
| CONNECTION LIMIT
| ENCODING
| LOCATION
| OWNER
| TABLESPACE
| TEMPLATE
;
opt_equal : '='
|
;
alterDatabaseStmt : ALTER DATABASE name WITH createdb_opt_list
| ALTER DATABASE name createdb_opt_list
| ALTER DATABASE name SET TABLESPACE name
;
alterDatabaseSetStmt : ALTER DATABASE name setResetClause
;
dropdbStmt : DROP DATABASE name
| DROP DATABASE IF_P EXISTS name
| DROP DATABASE name opt_with '(' drop_option_list ')'
| DROP DATABASE IF_P EXISTS name opt_with '(' drop_option_list ')'
;
drop_option_list : drop_option
| drop_option_list ',' drop_option
;
drop_option : FORCE
;
alterCollationStmt : ALTER COLLATION any_name REFRESH VERSION_P
;
alterSystemStmt : ALTER SYSTEM_P SET generic_set
| ALTER SYSTEM_P RESET generic_reset
;
createDomainStmt : CREATE DOMAIN_P any_name opt_as typename colQualList
;
alterDomainStmt : ALTER DOMAIN_P any_name alter_column_default
| ALTER DOMAIN_P any_name DROP NOT NULL_P
| ALTER DOMAIN_P any_name SET NOT NULL_P
| ALTER DOMAIN_P any_name ADD_P tableConstraint
| ALTER DOMAIN_P any_name DROP CONSTRAINT name opt_drop_behavior
| ALTER DOMAIN_P any_name DROP CONSTRAINT IF_P EXISTS name opt_drop_behavior
| ALTER DOMAIN_P any_name VALIDATE CONSTRAINT name
;
opt_as : AS
|
;
alterTSDictionaryStmt : ALTER TEXT_P SEARCH DICTIONARY any_name definition
;
alterTSConfigurationStmt : ALTER TEXT_P SEARCH CONFIGURATION any_name ADD_P MAPPING FOR name_list any_with any_name_list
| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list any_with any_name_list
| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING REPLACE any_name any_with any_name
| ALTER TEXT_P SEARCH CONFIGURATION any_name ALTER MAPPING FOR name_list REPLACE any_name any_with any_name
| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING FOR name_list
| ALTER TEXT_P SEARCH CONFIGURATION any_name DROP MAPPING IF_P EXISTS FOR name_list
;
any_with : WITH
| WITH_LA
;
createConversionStmt : CREATE opt_default CONVERSION_P any_name FOR sconst TO sconst FROM any_name
;
clusterStmt : CLUSTER opt_verbose qualified_name cluster_index_specification
| CLUSTER '(' utility_option_list ')' qualified_name cluster_index_specification
| CLUSTER opt_verbose
| CLUSTER opt_verbose name ON qualified_name
;
cluster_index_specification : USING name
|
;
vacuumStmt : VACUUM opt_full opt_freeze opt_verbose opt_analyze opt_vacuum_relation_list
| VACUUM '(' utility_option_list ')' opt_vacuum_relation_list
;
analyzeStmt : analyze_keyword opt_verbose opt_vacuum_relation_list
| analyze_keyword '(' utility_option_list ')' opt_vacuum_relation_list
;
utility_option_list : utility_option_elem
| utility_option_list ',' utility_option_elem
;
analyze_keyword : ANALYZE
| ANALYSE
;
utility_option_elem : utility_option_name utility_option_arg
;
utility_option_name : nonReservedWord
| analyze_keyword
;
utility_option_arg : opt_boolean_or_string
| numericOnly
|
;
opt_analyze : analyze_keyword
|
;
opt_verbose : VERBOSE
|
;
opt_full : FULL
|
;
opt_freeze : FREEZE
|
;
opt_name_list : '(' name_list ')'
|
;
vacuum_relation : qualified_name opt_name_list
;
vacuum_relation_list : vacuum_relation
| vacuum_relation_list ',' vacuum_relation
;
opt_vacuum_relation_list : vacuum_relation_list
|
;
explainStmt : EXPLAIN explainableStmt
| EXPLAIN analyze_keyword opt_verbose explainableStmt
| EXPLAIN VERBOSE explainableStmt
| EXPLAIN '(' utility_option_list ')' explainableStmt
;
explainableStmt : selectStmt
| insertStmt
| updateStmt
| deleteStmt
| declareCursorStmt
| createAsStmt
| createMatViewStmt
| refreshMatViewStmt
| executeStmt
;
prepareStmt : PREPARE name prep_type_clause AS preparableStmt
;
prep_type_clause : '(' type_list ')'
|
;
preparableStmt : selectStmt
| insertStmt
| updateStmt
| deleteStmt
;
executeStmt : EXECUTE name execute_param_clause
| CREATE optTemp TABLE create_as_target AS EXECUTE name execute_param_clause opt_with_data
| CREATE optTemp TABLE IF_P NOT EXISTS create_as_target AS EXECUTE name execute_param_clause opt_with_data
;
execute_param_clause : '(' expr_list ')'
|
;
deallocateStmt : DEALLOCATE name
| DEALLOCATE PREPARE name
| DEALLOCATE ALL
| DEALLOCATE PREPARE ALL
;
insertStmt : opt_with_clause INSERT INTO insert_target insert_rest opt_on_conflict returning_clause
;
insert_target : qualified_name
| qualified_name AS colId
;
insert_rest : selectStmt
| OVERRIDING override_kind VALUE_P selectStmt
| '(' insert_column_list ')' selectStmt
| '(' insert_column_list ')' OVERRIDING override_kind VALUE_P selectStmt
| DEFAULT VALUES
;
override_kind : USER
| SYSTEM_P
;
insert_column_list : insert_column_item
| insert_column_list ',' insert_column_item
;
insert_column_item : colId opt_indirection
;
opt_on_conflict : ON CONFLICT opt_conf_expr DO UPDATE SET set_clause_list where_clause
| ON CONFLICT opt_conf_expr DO NOTHING
|
;
opt_conf_expr : '(' index_params ')' where_clause
| ON CONSTRAINT name
|
;
returning_clause : RETURNING target_list
|
;
deleteStmt : opt_with_clause DELETE_P FROM relation_expr_opt_alias using_clause where_or_current_clause returning_clause
;
using_clause : USING from_list
|
;
lockStmt : LOCK_P opt_table relation_expr_list opt_lock opt_nowait
;
opt_lock : IN_P lock_type MODE
|
;
lock_type : ACCESS SHARE
| ROW SHARE
| ROW EXCLUSIVE
| SHARE UPDATE EXCLUSIVE
| SHARE
| SHARE ROW EXCLUSIVE
| EXCLUSIVE
| ACCESS EXCLUSIVE
;
opt_nowait : NOWAIT
|
;
opt_nowait_or_skip : NOWAIT
| SKIP LOCKED
|
;
updateStmt : opt_with_clause UPDATE relation_expr_opt_alias SET set_clause_list from_clause where_or_current_clause returning_clause
;
set_clause_list : set_clause
| set_clause_list ',' set_clause
;
set_clause : set_target '=' a_expr
| '(' set_target_list ')' '=' a_expr
;
set_target : colId opt_indirection
;
set_target_list : set_target
| set_target_list ',' set_target
;
declareCursorStmt : DECLARE cursor_name cursor_options CURSOR opt_hold FOR selectStmt
;
cursor_name : name
;
cursor_options :
| cursor_options NO SCROLL
| cursor_options SCROLL
| cursor_options BINARY
| cursor_options ASENSITIVE
| cursor_options INSENSITIVE
;
opt_hold :
| WITH HOLD
| WITHOUT HOLD
;
selectStmt : select_no_parens UMINUS
| select_with_parens UMINUS
;
select_with_parens : '(' select_no_parens ')'
| '(' select_with_parens ')'
;
select_no_parens : simple_select
| select_clause sort_clause
| select_clause opt_sort_clause for_locking_clause opt_select_limit
| select_clause opt_sort_clause select_limit opt_for_locking_clause
| with_clause select_clause
| with_clause select_clause sort_clause
| with_clause select_clause opt_sort_clause for_locking_clause opt_select_limit
| with_clause select_clause opt_sort_clause select_limit opt_for_locking_clause
;
select_clause : simple_select
| select_with_parens
;
simple_select : SELECT opt_all_clause opt_target_list into_clause from_clause where_clause group_clause having_clause window_clause
| SELECT distinct_clause target_list into_clause from_clause where_clause group_clause having_clause window_clause
| values_clause
| TABLE relation_expr
| select_clause UNION set_quantifier select_clause
| select_clause INTERSECT set_quantifier select_clause
| select_clause EXCEPT set_quantifier select_clause
;
with_clause : WITH cte_list
| WITH_LA cte_list
| WITH RECURSIVE cte_list
;
cte_list : common_table_expr
| cte_list ',' common_table_expr
;
common_table_expr : name opt_name_list AS opt_materialized '(' preparableStmt ')' opt_search_clause opt_cycle_clause
;
opt_materialized : MATERIALIZED
| NOT MATERIALIZED
|
;
opt_search_clause : SEARCH DEPTH FIRST_P BY columnList SET colId
| SEARCH BREADTH FIRST_P BY columnList SET colId
|
;
opt_cycle_clause : CYCLE columnList SET colId TO aexprConst DEFAULT aexprConst USING colId
| CYCLE columnList SET colId USING colId
|
;
opt_with_clause : with_clause
|
;
into_clause : INTO optTempTableName
|
;
optTempTableName : TEMPORARY opt_table qualified_name
| TEMP opt_table qualified_name
| LOCAL TEMPORARY opt_table qualified_name
| LOCAL TEMP opt_table qualified_name
| GLOBAL TEMPORARY opt_table qualified_name
| GLOBAL TEMP opt_table qualified_name
| UNLOGGED opt_table qualified_name
| TABLE qualified_name
| qualified_name
;
opt_table : TABLE
|
;
set_quantifier : ALL
| DISTINCT
|
;
distinct_clause : DISTINCT
| DISTINCT ON '(' expr_list ')'
;
opt_all_clause : ALL
|
;
opt_distinct_clause : distinct_clause
| opt_all_clause
;
opt_sort_clause : sort_clause
|
;
sort_clause : ORDER BY sortby_list
;
sortby_list : sortby
| sortby_list ',' sortby
;
sortby : a_expr USING qual_all_Op opt_nulls_order
| a_expr opt_asc_desc opt_nulls_order
;
select_limit : limit_clause offset_clause
| offset_clause limit_clause
| limit_clause
| offset_clause
;
opt_select_limit : select_limit
|
;
limit_clause : LIMIT select_limit_value
| LIMIT select_limit_value ',' select_offset_value
| FETCH first_or_next select_fetch_first_value row_or_rows ONLY
| FETCH first_or_next select_fetch_first_value row_or_rows WITH TIES
| FETCH first_or_next row_or_rows ONLY
| FETCH first_or_next row_or_rows WITH TIES
;
offset_clause : OFFSET select_offset_value
| OFFSET select_fetch_first_value row_or_rows
;
select_limit_value : a_expr
| ALL
;
select_offset_value : a_expr
;
select_fetch_first_value : c_expr
| '+' i_or_F_const
| '-' i_or_F_const
;
i_or_F_const : iconst
| FCONST
;
row_or_rows : ROW
| ROWS
;
first_or_next : FIRST_P
| NEXT
;
group_clause : GROUP_P BY set_quantifier group_by_list
|
;
group_by_list : group_by_item
| group_by_list ',' group_by_item
;
group_by_item : a_expr
| empty_grouping_set
| cube_clause
| rollup_clause
| grouping_sets_clause
;
empty_grouping_set : '(' ')'
;
rollup_clause : ROLLUP '(' expr_list ')'
;
cube_clause : CUBE '(' expr_list ')'
;
grouping_sets_clause : GROUPING SETS '(' group_by_list ')'
;
having_clause : HAVING a_expr
|
;
for_locking_clause : for_locking_items
| FOR READ ONLY
;
opt_for_locking_clause : for_locking_clause
|
;
for_locking_items : for_locking_item
| for_locking_items for_locking_item
;
for_locking_item : for_locking_strength locked_rels_list opt_nowait_or_skip
;
for_locking_strength : FOR UPDATE
| FOR NO KEY UPDATE
| FOR SHARE
| FOR KEY SHARE
;
locked_rels_list : OF qualified_name_list
|
;
values_clause : VALUES '(' expr_list ')'
| values_clause ',' '(' expr_list ')'
;
from_clause : FROM from_list
|
;
from_list : table_ref
| from_list ',' table_ref
;
table_ref : relation_expr opt_alias_clause
| relation_expr opt_alias_clause tablesample_clause
| func_table func_alias_clause
| LATERAL_P func_table func_alias_clause
| xmltable opt_alias_clause
| LATERAL_P xmltable opt_alias_clause
| select_with_parens opt_alias_clause
| LATERAL_P select_with_parens opt_alias_clause
| joined_table
| '(' joined_table ')' alias_clause
;
joined_table : '(' joined_table ')'
| table_ref CROSS JOIN table_ref
| table_ref join_type JOIN table_ref join_qual
| table_ref JOIN table_ref join_qual
| table_ref NATURAL join_type JOIN table_ref
| table_ref NATURAL JOIN table_ref
;
alias_clause : AS colId '(' name_list ')'
| AS colId
| colId '(' name_list ')'
| colId
;
opt_alias_clause : alias_clause
|
;
opt_alias_clause_for_join_using : AS colId
|
;
func_alias_clause : alias_clause
| AS '(' tableFuncElementList ')'
| AS colId '(' tableFuncElementList ')'
| colId '(' tableFuncElementList ')'
|
;
join_type : FULL opt_outer
| LEFT opt_outer
| RIGHT opt_outer
| INNER_P
;
opt_outer : OUTER_P
|
;
join_qual : USING '(' name_list ')' opt_alias_clause_for_join_using
| ON a_expr
;
relation_expr : qualified_name
| qualified_name '*'
| ONLY qualified_name
| ONLY '(' qualified_name ')'
;
relation_expr_list : relation_expr
| relation_expr_list ',' relation_expr
;
relation_expr_opt_alias : relation_expr UMINUS
| relation_expr colId
| relation_expr AS colId
;
tablesample_clause : TABLESAMPLE func_name '(' expr_list ')' opt_repeatable_clause
;
opt_repeatable_clause : REPEATABLE '(' a_expr ')'
|
;
func_table : func_expr_windowless opt_ordinality
| ROWS FROM '(' rowsfrom_list ')' opt_ordinality
;
rowsfrom_item : func_expr_windowless opt_col_def_list
;
rowsfrom_list : rowsfrom_item
| rowsfrom_list ',' rowsfrom_item
;
opt_col_def_list : AS '(' tableFuncElementList ')'
|
;
opt_ordinality : WITH_LA ORDINALITY
|
;
where_clause : WHERE a_expr
|
;
where_or_current_clause : WHERE a_expr
| WHERE CURRENT_P OF cursor_name
|
;
optTableFuncElementList : tableFuncElementList
|
;
tableFuncElementList : tableFuncElement
| tableFuncElementList ',' tableFuncElement
;
tableFuncElement : colId typename opt_collate_clause
;
xmltable : XMLTABLE '(' c_expr xmlexists_argument COLUMNS xmltable_column_list ')'
| XMLTABLE '(' XMLNAMESPACES '(' xml_namespace_list ')' ',' c_expr xmlexists_argument COLUMNS xmltable_column_list ')'
;
xmltable_column_list : xmltable_column_el
| xmltable_column_list ',' xmltable_column_el
;
xmltable_column_el : colId typename
| colId typename xmltable_column_option_list
| colId FOR ORDINALITY
;
xmltable_column_option_list : xmltable_column_option_el
| xmltable_column_option_list xmltable_column_option_el
;
xmltable_column_option_el : IDENT b_expr
| DEFAULT b_expr
| NOT NULL_P
| NULL_P
;
xml_namespace_list : xml_namespace_el
| xml_namespace_list ',' xml_namespace_el
;
xml_namespace_el : b_expr AS colLabel
| DEFAULT b_expr
;
typename : simpleTypename opt_array_bounds
| SETOF simpleTypename opt_array_bounds
| simpleTypename ARRAY '[' iconst ']'
| SETOF simpleTypename ARRAY '[' iconst ']'
| simpleTypename ARRAY
| SETOF simpleTypename ARRAY
;
opt_array_bounds : opt_array_bounds '[' ']'
| opt_array_bounds '[' iconst ']'
|
;
simpleTypename : genericType
| numeric
| bit
| character
| constDatetime
| constInterval opt_interval
| constInterval '(' iconst ')'
;
constTypename : numeric
| constBit
| constCharacter
| constDatetime
;
genericType : type_function_name opt_type_modifiers
| type_function_name attrs opt_type_modifiers
;
opt_type_modifiers : '(' expr_list ')'
|
;
numeric : INT_P
| INTEGER
| SMALLINT
| BIGINT
| REAL
| FLOAT_P opt_float
| DOUBLE_P PRECISION
| DECIMAL_P opt_type_modifiers
| DEC opt_type_modifiers
| NUMERIC opt_type_modifiers
| BOOLEAN_P
;
opt_float : '(' iconst ')'
|
;
bit : bitWithLength
| bitWithoutLength
;
constBit : bitWithLength
| bitWithoutLength
;
bitWithLength : BIT opt_varying '(' expr_list ')'
;
bitWithoutLength : BIT opt_varying
;
character : characterWithLength
| characterWithoutLength
;
constCharacter : characterWithLength
| characterWithoutLength
;
characterWithLength : character '(' iconst ')'
;
characterWithoutLength : character
;
character : CHARACTER opt_varying
| CHAR_P opt_varying
| VARCHAR
| NATIONAL CHARACTER opt_varying
| NATIONAL CHAR_P opt_varying
| NCHAR opt_varying
;
opt_varying : VARYING
|
;
constDatetime : TIMESTAMP '(' iconst ')' opt_timezone
| TIMESTAMP opt_timezone
| TIME '(' iconst ')' opt_timezone
| TIME opt_timezone
;
constInterval : INTERVAL
;
opt_timezone : WITH_LA TIME ZONE
| WITHOUT TIME ZONE
|
;
opt_interval : YEAR_P
| MONTH_P
| DAY_P
| HOUR_P
| MINUTE_P
| interval_second
| YEAR_P TO MONTH_P
| DAY_P TO HOUR_P
| DAY_P TO MINUTE_P
| DAY_P TO interval_second
| HOUR_P TO MINUTE_P
| HOUR_P TO interval_second
| MINUTE_P TO interval_second
|
;
interval_second : SECOND_P
| SECOND_P '(' iconst ')'
;
a_expr : c_expr
| a_expr TYPECAST typename
| a_expr COLLATE any_name
| a_expr AT TIME ZONE a_expr AT
| '+' a_expr UMINUS
| '-' a_expr UMINUS
| a_expr '+' a_expr
| a_expr '-' a_expr
| a_expr '*' a_expr
| a_expr '/' a_expr
| a_expr '%' a_expr
| a_expr '^' a_expr
| a_expr '<' a_expr
| a_expr '>' a_expr
| a_expr '=' a_expr
| a_expr LESS_EQUALS a_expr
| a_expr GREATER_EQUALS a_expr
| a_expr NOT_EQUALS a_expr
| a_expr qual_Op a_expr Op
| qual_Op a_expr Op
| a_expr AND a_expr
| a_expr OR a_expr
| NOT a_expr
| NOT_LA a_expr NOT
| a_expr LIKE a_expr
| a_expr LIKE a_expr ESCAPE a_expr LIKE
| a_expr NOT_LA LIKE a_expr NOT_LA
| a_expr NOT_LA LIKE a_expr ESCAPE a_expr NOT_LA
| a_expr ILIKE a_expr
| a_expr ILIKE a_expr ESCAPE a_expr ILIKE
| a_expr NOT_LA ILIKE a_expr NOT_LA
| a_expr NOT_LA ILIKE a_expr ESCAPE a_expr NOT_LA
| a_expr SIMILAR TO a_expr SIMILAR
| a_expr SIMILAR TO a_expr ESCAPE a_expr SIMILAR
| a_expr NOT_LA SIMILAR TO a_expr NOT_LA
| a_expr NOT_LA SIMILAR TO a_expr ESCAPE a_expr NOT_LA
| a_expr IS NULL_P IS
| a_expr ISNULL
| a_expr IS NOT NULL_P IS
| a_expr NOTNULL
| row OVERLAPS row
| a_expr IS TRUE_P IS
| a_expr IS NOT TRUE_P IS
| a_expr IS FALSE_P IS
| a_expr IS NOT FALSE_P IS
| a_expr IS UNKNOWN IS
| a_expr IS NOT UNKNOWN IS
| a_expr IS DISTINCT FROM a_expr IS
| a_expr IS NOT DISTINCT FROM a_expr IS
| a_expr BETWEEN opt_asymmetric b_expr AND a_expr BETWEEN
| a_expr NOT_LA BETWEEN opt_asymmetric b_expr AND a_expr NOT_LA
| a_expr BETWEEN SYMMETRIC b_expr AND a_expr BETWEEN
| a_expr NOT_LA BETWEEN SYMMETRIC b_expr AND a_expr NOT_LA
| a_expr IN_P in_expr
| a_expr NOT_LA IN_P in_expr NOT_LA
| a_expr subquery_Op sub_type select_with_parens Op
| a_expr subquery_Op sub_type '(' a_expr ')' Op
| UNIQUE select_with_parens
| a_expr IS DOCUMENT_P IS
| a_expr IS NOT DOCUMENT_P IS
| a_expr IS NORMALIZED IS
| a_expr IS unicode_normal_form NORMALIZED IS
| a_expr IS NOT NORMALIZED IS
| a_expr IS NOT unicode_normal_form NORMALIZED IS
| DEFAULT
;
b_expr : c_expr
| b_expr TYPECAST typename
| '+' b_expr UMINUS
| '-' b_expr UMINUS
| b_expr '+' b_expr
| b_expr '-' b_expr
| b_expr '*' b_expr
| b_expr '/' b_expr
| b_expr '%' b_expr
| b_expr '^' b_expr
| b_expr '<' b_expr
| b_expr '>' b_expr
| b_expr '=' b_expr
| b_expr LESS_EQUALS b_expr
| b_expr GREATER_EQUALS b_expr
| b_expr NOT_EQUALS b_expr
| b_expr qual_Op b_expr Op
| qual_Op b_expr Op
| b_expr IS DISTINCT FROM b_expr IS
| b_expr IS NOT DISTINCT FROM b_expr IS
| b_expr IS DOCUMENT_P IS
| b_expr IS NOT DOCUMENT_P IS
;
c_expr : columnref
| aexprConst
| PARAM opt_indirection
| '(' a_expr ')' opt_indirection
| case_expr
| func_expr
| select_with_parens UMINUS
| select_with_parens indirection
| EXISTS select_with_parens
| ARRAY select_with_parens
| ARRAY array_expr
| explicit_row
| implicit_row
| GROUPING '(' expr_list ')'
;
func_application : func_name '(' ')'
| func_name '(' func_arg_list opt_sort_clause ')'
| func_name '(' VARIADIC func_arg_expr opt_sort_clause ')'
| func_name '(' func_arg_list ',' VARIADIC func_arg_expr opt_sort_clause ')'
| func_name '(' ALL func_arg_list opt_sort_clause ')'
| func_name '(' DISTINCT func_arg_list opt_sort_clause ')'
| func_name '(' '*' ')'
;
func_expr : func_application within_group_clause filter_clause over_clause
| func_expr_common_subexpr
;
func_expr_windowless : func_application
| func_expr_common_subexpr
;
func_expr_common_subexpr : COLLATION FOR '(' a_expr ')'
| CURRENT_DATE
| CURRENT_TIME
| CURRENT_TIME '(' iconst ')'
| CURRENT_TIMESTAMP
| CURRENT_TIMESTAMP '(' iconst ')'
| LOCALTIME
| LOCALTIME '(' iconst ')'
| LOCALTIMESTAMP
| LOCALTIMESTAMP '(' iconst ')'
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
| USER
| CURRENT_CATALOG
| CURRENT_SCHEMA
| CAST '(' a_expr AS typename ')'
| EXTRACT '(' extract_list ')'
| NORMALIZE '(' a_expr ')'
| NORMALIZE '(' a_expr ',' unicode_normal_form ')'
| OVERLAY '(' overlay_list ')'
| OVERLAY '(' func_arg_list_opt ')'
| POSITION '(' position_list ')'
| SUBSTRING '(' substr_list ')'
| SUBSTRING '(' func_arg_list_opt ')'
| TREAT '(' a_expr AS typename ')'
| TRIM '(' BOTH trim_list ')'
| TRIM '(' LEADING trim_list ')'
| TRIM '(' TRAILING trim_list ')'
| TRIM '(' trim_list ')'
| NULLIF '(' a_expr ',' a_expr ')'
| COALESCE '(' expr_list ')'
| GREATEST '(' expr_list ')'
| LEAST '(' expr_list ')'
| XMLCONCAT '(' expr_list ')'
| XMLELEMENT '(' NAME_P colLabel ')'
| XMLELEMENT '(' NAME_P colLabel ',' xml_attributes ')'
| XMLELEMENT '(' NAME_P colLabel ',' expr_list ')'
| XMLELEMENT '(' NAME_P colLabel ',' xml_attributes ',' expr_list ')'
| XMLEXISTS '(' c_expr xmlexists_argument ')'
| XMLFOREST '(' xml_attribute_list ')'
| XMLPARSE '(' document_or_content a_expr xml_whitespace_option ')'
| XMLPI '(' NAME_P colLabel ')'
| XMLPI '(' NAME_P colLabel ',' a_expr ')'
| XMLROOT '(' a_expr ',' xml_root_version opt_xml_root_standalone ')'
| XMLSERIALIZE '(' document_or_content a_expr AS simpleTypename ')'
;
xml_root_version : VERSION_P a_expr
| VERSION_P NO VALUE_P
;
opt_xml_root_standalone : ',' STANDALONE_P YES_P
| ',' STANDALONE_P NO
| ',' STANDALONE_P NO VALUE_P
|
;
xml_attributes : XMLATTRIBUTES '(' xml_attribute_list ')'
;
xml_attribute_list : xml_attribute_el
| xml_attribute_list ',' xml_attribute_el
;
xml_attribute_el : a_expr AS colLabel
| a_expr
;
document_or_content : DOCUMENT_P
| CONTENT_P
;
xml_whitespace_option : PRESERVE WHITESPACE_P
| STRIP_P WHITESPACE_P
|
;
xmlexists_argument : PASSING c_expr
| PASSING c_expr xml_passing_mech
| PASSING xml_passing_mech c_expr
| PASSING xml_passing_mech c_expr xml_passing_mech
;
xml_passing_mech : BY REF
| BY VALUE_P
;
within_group_clause : WITHIN GROUP_P '(' sort_clause ')'
|
;
filter_clause : FILTER '(' WHERE a_expr ')'
|
;
window_clause : WINDOW window_definition_list
|
;
window_definition_list : window_definition
| window_definition_list ',' window_definition
;
window_definition : colId AS window_specification
;
over_clause : OVER window_specification
| OVER colId
|
;
window_specification : '(' opt_existing_window_name opt_partition_clause opt_sort_clause opt_frame_clause ')'
;
opt_existing_window_name : colId
| Op
;
opt_partition_clause : PARTITION BY expr_list
|
;
opt_frame_clause : RANGE frame_extent opt_window_exclusion_clause
| ROWS frame_extent opt_window_exclusion_clause
| GROUPS frame_extent opt_window_exclusion_clause
|
;
frame_extent : frame_bound
| BETWEEN frame_bound AND frame_bound
;
frame_bound : UNBOUNDED PRECEDING
| UNBOUNDED FOLLOWING
| CURRENT_P ROW
| a_expr PRECEDING
| a_expr FOLLOWING
;
opt_window_exclusion_clause : EXCLUDE CURRENT_P ROW
| EXCLUDE GROUP_P
| EXCLUDE TIES
| EXCLUDE NO OTHERS
|
;
row : ROW '(' expr_list ')'
| ROW '(' ')'
| '(' expr_list ',' a_expr ')'
;
explicit_row : ROW '(' expr_list ')'
| ROW '(' ')'
;
implicit_row : '(' expr_list ',' a_expr ')'
;
sub_type : ANY
| SOME
| ALL
;
all_Op : Op
| mathOp
;
mathOp : '+'
| '-'
| '*'
| '/'
| '%'
| '^'
| '<'
| '>'
| '='
| LESS_EQUALS
| GREATER_EQUALS
| NOT_EQUALS
;
qual_Op : Op
| OPERATOR '(' any_operator ')'
;
qual_all_Op : all_Op
| OPERATOR '(' any_operator ')'
;
subquery_Op : all_Op
| OPERATOR '(' any_operator ')'
| LIKE
| NOT_LA LIKE
| ILIKE
| NOT_LA ILIKE
;
expr_list : a_expr
| expr_list ',' a_expr
;
func_arg_list : func_arg_expr
| func_arg_list ',' func_arg_expr
;
func_arg_expr : a_expr
| param_name COLON_EQUALS a_expr
| param_name EQUALS_GREATER a_expr
;
func_arg_list_opt : func_arg_list
|
;
type_list : typename
| type_list ',' typename
;
array_expr : '[' expr_list ']'
| '[' array_expr_list ']'
| '[' ']'
;
array_expr_list : array_expr
| array_expr_list ',' array_expr
;
extract_list : extract_arg FROM a_expr
;
extract_arg : IDENT
| YEAR_P
| MONTH_P
| DAY_P
| HOUR_P
| MINUTE_P
| SECOND_P
| sconst
;
unicode_normal_form : NFC
| NFD
| NFKC
| NFKD
;
overlay_list : a_expr PLACING a_expr FROM a_expr FOR a_expr
| a_expr PLACING a_expr FROM a_expr
;
position_list : b_expr IN_P b_expr
;
substr_list : a_expr FROM a_expr FOR a_expr
| a_expr FOR a_expr FROM a_expr
| a_expr FROM a_expr
| a_expr FOR a_expr
| a_expr SIMILAR a_expr ESCAPE a_expr
;
trim_list : a_expr FROM expr_list
| FROM expr_list
| expr_list
;
in_expr : select_with_parens
| '(' expr_list ')'
;
case_expr : CASE case_arg when_clause_list case_default END_P
;
when_clause_list : when_clause
| when_clause_list when_clause
;
when_clause : WHEN a_expr THEN a_expr
;
case_default : ELSE a_expr
|
;
case_arg : a_expr
|
;
columnref : colId
| colId indirection
;
indirection_el : '.' attr_name
| '.' '*'
| '[' a_expr ']'
| '[' opt_slice_bound ':' opt_slice_bound ']'
;
opt_slice_bound : a_expr
|
;
indirection : indirection_el
| indirection indirection_el
;
opt_indirection :
| opt_indirection indirection_el
;
opt_asymmetric : ASYMMETRIC
|
;
opt_target_list : target_list
|
;
target_list : target_el
| target_list ',' target_el
;
target_el : a_expr AS colLabel
| a_expr bareColLabel
| a_expr
| '*'
;
qualified_name_list : qualified_name
| qualified_name_list ',' qualified_name
;
qualified_name : colId
| colId indirection
;
name_list : name
| name_list ',' name
;
name : colId
;
attr_name : colLabel
;
file_name : sconst
;
func_name : type_function_name
| colId indirection
;
aexprConst : iconst
| FCONST
| sconst
| BCONST
| XCONST
| func_name sconst
| func_name '(' func_arg_list opt_sort_clause ')' sconst
| constTypename sconst
| constInterval sconst opt_interval
| constInterval '(' iconst ')' sconst
| TRUE_P
| FALSE_P
| NULL_P
;
iconst : ICONST
;
sconst : SCONST
;
signedIconst : iconst
| '+' iconst
| '-' iconst
;
roleId : roleSpec
;
roleSpec : nonReservedWord
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
;
role_list : roleSpec
| role_list ',' roleSpec
;
pLpgSQL_Expr : opt_distinct_clause opt_target_list from_clause where_clause group_clause having_clause window_clause opt_sort_clause opt_select_limit opt_for_locking_clause
;
pLAssignStmt : plassign_target opt_indirection plassign_equals pLpgSQL_Expr
;
plassign_target : colId
| PARAM
;
plassign_equals : COLON_EQUALS
| '='
;
colId : IDENT
| unreserved_keyword
| col_name_keyword
;
type_function_name : IDENT
| unreserved_keyword
| type_func_name_keyword
;
nonReservedWord : IDENT
| unreserved_keyword
| col_name_keyword
| type_func_name_keyword
;
colLabel : IDENT
| unreserved_keyword
| col_name_keyword
| type_func_name_keyword
| reserved_keyword
;
bareColLabel : IDENT
| bare_label_keyword
;
unreserved_keyword : ABORT_P
| ABSOLUTE_P
| ACCESS
| ACTION
| ADD_P
| ADMIN
| AFTER
| AGGREGATE
| ALSO
| ALTER
| ALWAYS
| ASENSITIVE
| ASSERTION
| ASSIGNMENT
| AT
| ATOMIC
| ATTACH
| ATTRIBUTE
| BACKWARD
| BEFORE
| BEGIN_P
| BREADTH
| BY
| CACHE
| CALL
| CALLED
| CASCADE
| CASCADED
| CATALOG_P
| CHAIN
| CHARACTERISTICS
| CHECKPOINT
| CLASS
| CLOSE
| CLUSTER
| COLUMNS
| COMMENT
| COMMENTS
| COMMIT
| COMMITTED
| COMPRESSION
| CONFIGURATION
| CONFLICT
| CONNECTION
| CONSTRAINTS
| CONTENT_P
| CONTINUE_P
| CONVERSION_P
| COPY
| COST
| CSV
| CUBE
| CURRENT_P
| CURSOR
| CYCLE
| DATA_P
| DATABASE
| DAY_P
| DEALLOCATE
| DECLARE
| DEFAULTS
| DEFERRED
| DEFINER
| DELETE_P
| DELIMITER
| DELIMITERS
| DEPENDS
| DEPTH
| DETACH
| DICTIONARY
| DISABLE_P
| DISCARD
| DOCUMENT_P
| DOMAIN_P
| DOUBLE_P
| DROP
| EACH
| ENABLE_P
| ENCODING
| ENCRYPTED
| ENUM_P
| ESCAPE
| EVENT
| EXCLUDE
| EXCLUDING
| EXCLUSIVE
| EXECUTE
| EXPLAIN
| EXPRESSION
| EXTENSION
| EXTERNAL
| FAMILY
| FILTER
| FINALIZE
| FIRST_P
| FOLLOWING
| FORCE
| FORWARD
| FUNCTION
| FUNCTIONS
| GENERATED
| GLOBAL
| GRANTED
| GROUPS
| HANDLER
| HEADER_P
| HOLD
| HOUR_P
| IDENTITY_P
| IF_P
| IMMEDIATE
| IMMUTABLE
| IMPLICIT_P
| IMPORT_P
| INCLUDE
| INCLUDING
| INCREMENT
| INDEX
| INDEXES
| INHERIT
| INHERITS
| INLINE_P
| INPUT_P
| INSENSITIVE
| INSERT
| INSTEAD
| INVOKER
| ISOLATION
| KEY
| LABEL
| LANGUAGE
| LARGE_P
| LAST_P
| LEAKPROOF
| LEVEL
| LISTEN
| LOAD
| LOCAL
| LOCATION
| LOCK_P
| LOCKED
| LOGGED
| MAPPING
| MATCH
| MATERIALIZED
| MAXVALUE
| METHOD
| MINUTE_P
| MINVALUE
| MODE
| MONTH_P
| MOVE
| NAME_P
| NAMES
| NEW
| NEXT
| NFC
| NFD
| NFKC
| NFKD
| NO
| NORMALIZED
| NOTHING
| NOTIFY
| NOWAIT
| NULLS_P
| OBJECT_P
| OF
| OFF
| OIDS
| OLD
| OPERATOR
| OPTION
| OPTIONS
| ORDINALITY
| OTHERS
| OVER
| OVERRIDING
| OWNED
| OWNER
| PARALLEL
| PARSER
| PARTIAL
| PARTITION
| PASSING
| PASSWORD
| PLANS
| POLICY
| PRECEDING
| PREPARE
| PREPARED
| PRESERVE
| PRIOR
| PRIVILEGES
| PROCEDURAL
| PROCEDURE
| PROCEDURES
| PROGRAM
| PUBLICATION
| QUOTE
| RANGE
| READ
| REASSIGN
| RECHECK
| RECURSIVE
| REF
| REFERENCING
| REFRESH
| REINDEX
| RELATIVE_P
| RELEASE
| RENAME
| REPEATABLE
| REPLACE
| REPLICA
| RESET
| RESTART
| RESTRICT
| RETURN
| RETURNS
| REVOKE
| ROLE
| ROLLBACK
| ROLLUP
| ROUTINE
| ROUTINES
| ROWS
| RULE
| SAVEPOINT
| SCHEMA
| SCHEMAS
| SCROLL
| SEARCH
| SECOND_P
| SECURITY
| SEQUENCE
| SEQUENCES
| SERIALIZABLE
| SERVER
| SESSION
| SET
| SETS
| SHARE
| SHOW
| SIMPLE
| SKIP
| SNAPSHOT
| SQL_P
| STABLE
| STANDALONE_P
| START
| STATEMENT
| STATISTICS
| STDIN
| STDOUT
| STORAGE
| STORED
| STRICT_P
| STRIP_P
| SUBSCRIPTION
| SUPPORT
| SYSID
| SYSTEM_P
| TABLES
| TABLESPACE
| TEMP
| TEMPLATE
| TEMPORARY
| TEXT_P
| TIES
| TRANSACTION
| TRANSFORM
| TRIGGER
| TRUNCATE
| TRUSTED
| TYPE_P
| TYPES_P
| UESCAPE
| UNBOUNDED
| UNCOMMITTED
| UNENCRYPTED
| UNKNOWN
| UNLISTEN
| UNLOGGED
| UNTIL
| UPDATE
| VACUUM
| VALID
| VALIDATE
| VALIDATOR
| VALUE_P
| VARYING
| VERSION_P
| VIEW
| VIEWS
| VOLATILE
| WHITESPACE_P
| WITHIN
| WITHOUT
| WORK
| WRAPPER
| WRITE
| XML_P
| YEAR_P
| YES_P
| ZONE
;
col_name_keyword : BETWEEN
| BIGINT
| BIT
| BOOLEAN_P
| CHAR_P
| CHARACTER
| COALESCE
| DEC
| DECIMAL_P
| EXISTS
| EXTRACT
| FLOAT_P
| GREATEST
| GROUPING
| INOUT
| INT_P
| INTEGER
| INTERVAL
| LEAST
| NATIONAL
| NCHAR
| NONE
| NORMALIZE
| NULLIF
| NUMERIC
| OUT_P
| OVERLAY
| POSITION
| PRECISION
| REAL
| ROW
| SETOF
| SMALLINT
| SUBSTRING
| TIME
| TIMESTAMP
| TREAT
| TRIM
| VALUES
| VARCHAR
| XMLATTRIBUTES
| XMLCONCAT
| XMLELEMENT
| XMLEXISTS
| XMLFOREST
| XMLNAMESPACES
| XMLPARSE
| XMLPI
| XMLROOT
| XMLSERIALIZE
| XMLTABLE
;
type_func_name_keyword : AUTHORIZATION
| BINARY
| COLLATION
| CONCURRENTLY
| CROSS
| CURRENT_SCHEMA
| FREEZE
| FULL
| ILIKE
| INNER_P
| IS
| ISNULL
| JOIN
| LEFT
| LIKE
| NATURAL
| NOTNULL
| OUTER_P
| OVERLAPS
| RIGHT
| SIMILAR
| TABLESAMPLE
| VERBOSE
;
reserved_keyword : ALL
| ANALYSE
| ANALYZE
| AND
| ANY
| ARRAY
| AS
| ASC
| ASYMMETRIC
| BOTH
| CASE
| CAST
| CHECK
| COLLATE
| COLUMN
| CONSTRAINT
| CREATE
| CURRENT_CATALOG
| CURRENT_DATE
| CURRENT_ROLE
| CURRENT_TIME
| CURRENT_TIMESTAMP
| CURRENT_USER
| DEFAULT
| DEFERRABLE
| DESC
| DISTINCT
| DO
| ELSE
| END_P
| EXCEPT
| FALSE_P
| FETCH
| FOR
| FOREIGN
| FROM
| GRANT
| GROUP_P
| HAVING
| IN_P
| INITIALLY
| INTERSECT
| INTO
| LATERAL_P
| LEADING
| LIMIT
| LOCALTIME
| LOCALTIMESTAMP
| NOT
| NULL_P
| OFFSET
| ON
| ONLY
| OR
| ORDER
| PLACING
| PRIMARY
| REFERENCES
| RETURNING
| SELECT
| SESSION_USER
| SOME
| SYMMETRIC
| TABLE
| THEN
| TO
| TRAILING
| TRUE_P
| UNION
| UNIQUE
| USER
| USING
| VARIADIC
| WHEN
| WHERE
| WINDOW
| WITH
;
bare_label_keyword : ABORT_P
| ABSOLUTE_P
| ACCESS
| ACTION
| ADD_P
| ADMIN
| AFTER
| AGGREGATE
| ALL
| ALSO
| ALTER
| ALWAYS
| ANALYSE
| ANALYZE
| AND
| ANY
| ASC
| ASENSITIVE
| ASSERTION
| ASSIGNMENT
| ASYMMETRIC
| AT
| ATOMIC
| ATTACH
| ATTRIBUTE
| AUTHORIZATION
| BACKWARD
| BEFORE
| BEGIN_P
| BETWEEN
| BIGINT
| BINARY
| BIT
| BOOLEAN_P
| BOTH
| BREADTH
| BY
| CACHE
| CALL
| CALLED
| CASCADE
| CASCADED
| CASE
| CAST
| CATALOG_P
| CHAIN
| CHARACTERISTICS
| CHECK
| CHECKPOINT
| CLASS
| CLOSE
| CLUSTER
| COALESCE
| COLLATE
| COLLATION
| COLUMN
| COLUMNS
| COMMENT
| COMMENTS
| COMMIT
| COMMITTED
| COMPRESSION
| CONCURRENTLY
| CONFIGURATION
| CONFLICT
| CONNECTION
| CONSTRAINT
| CONSTRAINTS
| CONTENT_P
| CONTINUE_P
| CONVERSION_P
| COPY
| COST
| CROSS
| CSV
| CUBE
| CURRENT_P
| CURRENT_CATALOG
| CURRENT_DATE
| CURRENT_ROLE
| CURRENT_SCHEMA
| CURRENT_TIME
| CURRENT_TIMESTAMP
| CURRENT_USER
| CURSOR
| CYCLE
| DATA_P
| DATABASE
| DEALLOCATE
| DEC
| DECIMAL_P
| DECLARE
| DEFAULT
| DEFAULTS
| DEFERRABLE
| DEFERRED
| DEFINER
| DELETE_P
| DELIMITER
| DELIMITERS
| DEPENDS
| DEPTH
| DESC
| DETACH
| DICTIONARY
| DISABLE_P
| DISCARD
| DISTINCT
| DO
| DOCUMENT_P
| DOMAIN_P
| DOUBLE_P
| DROP
| EACH
| ELSE
| ENABLE_P
| ENCODING
| ENCRYPTED
| END_P
| ENUM_P
| ESCAPE
| EVENT
| EXCLUDE
| EXCLUDING
| EXCLUSIVE
| EXECUTE
| EXISTS
| EXPLAIN
| EXPRESSION
| EXTENSION
| EXTERNAL
| EXTRACT
| FALSE_P
| FAMILY
| FINALIZE
| FIRST_P
| FLOAT_P
| FOLLOWING
| FORCE
| FOREIGN
| FORWARD
| FREEZE
| FULL
| FUNCTION
| FUNCTIONS
| GENERATED
| GLOBAL
| GRANTED
| GREATEST
| GROUPING
| GROUPS
| HANDLER
| HEADER_P
| HOLD
| IDENTITY_P
| IF_P
| ILIKE
| IMMEDIATE
| IMMUTABLE
| IMPLICIT_P
| IMPORT_P
| IN_P
| INCLUDE
| INCLUDING
| INCREMENT
| INDEX
| INDEXES
| INHERIT
| INHERITS
| INITIALLY
| INLINE_P
| INNER_P
| INOUT
| INPUT_P
| INSENSITIVE
| INSERT
| INSTEAD
| INT_P
| INTEGER
| INTERVAL
| INVOKER
| IS
| ISOLATION
| JOIN
| KEY
| LABEL
| LANGUAGE
| LARGE_P
| LAST_P
| LATERAL_P
| LEADING
| LEAKPROOF
| LEAST
| LEFT
| LEVEL
| LIKE
| LISTEN
| LOAD
| LOCAL
| LOCALTIME
| LOCALTIMESTAMP
| LOCATION
| LOCK_P
| LOCKED
| LOGGED
| MAPPING
| MATCH
| MATERIALIZED
| MAXVALUE
| METHOD
| MINVALUE
| MODE
| MOVE
| NAME_P
| NAMES
| NATIONAL
| NATURAL
| NCHAR
| NEW
| NEXT
| NFC
| NFD
| NFKC
| NFKD
| NO
| NONE
| NORMALIZE
| NORMALIZED
| NOT
| NOTHING
| NOTIFY
| NOWAIT
| NULL_P
| NULLIF
| NULLS_P
| NUMERIC
| OBJECT_P
| OF
| OFF
| OIDS
| OLD
| ONLY
| OPERATOR
| OPTION
| OPTIONS
| OR
| ORDINALITY
| OTHERS
| OUT_P
| OUTER_P
| OVERLAY
| OVERRIDING
| OWNED
| OWNER
| PARALLEL
| PARSER
| PARTIAL
| PARTITION
| PASSING
| PASSWORD
| PLACING
| PLANS
| POLICY
| POSITION
| PRECEDING
| PREPARE
| PREPARED
| PRESERVE
| PRIMARY
| PRIOR
| PRIVILEGES
| PROCEDURAL
| PROCEDURE
| PROCEDURES
| PROGRAM
| PUBLICATION
| QUOTE
| RANGE
| READ
| REAL
| REASSIGN
| RECHECK
| RECURSIVE
| REF
| REFERENCES
| REFERENCING
| REFRESH
| REINDEX
| RELATIVE_P
| RELEASE
| RENAME
| REPEATABLE
| REPLACE
| REPLICA
| RESET
| RESTART
| RESTRICT
| RETURN
| RETURNS
| REVOKE
| RIGHT
| ROLE
| ROLLBACK
| ROLLUP
| ROUTINE
| ROUTINES
| ROW
| ROWS
| RULE
| SAVEPOINT
| SCHEMA
| SCHEMAS
| SCROLL
| SEARCH
| SECURITY
| SELECT
| SEQUENCE
| SEQUENCES
| SERIALIZABLE
| SERVER
| SESSION
| SESSION_USER
| SET
| SETOF
| SETS
| SHARE
| SHOW
| SIMILAR
| SIMPLE
| SKIP
| SMALLINT
| SNAPSHOT
| SOME
| SQL_P
| STABLE
| STANDALONE_P
| START
| STATEMENT
| STATISTICS
| STDIN
| STDOUT
| STORAGE
| STORED
| STRICT_P
| STRIP_P
| SUBSCRIPTION
| SUBSTRING
| SUPPORT
| SYMMETRIC
| SYSID
| SYSTEM_P
| TABLE
| TABLES
| TABLESAMPLE
| TABLESPACE
| TEMP
| TEMPLATE
| TEMPORARY
| TEXT_P
| THEN
| TIES
| TIME
| TIMESTAMP
| TRAILING
| TRANSACTION
| TRANSFORM
| TREAT
| TRIGGER
| TRIM
| TRUE_P
| TRUNCATE
| TRUSTED
| TYPE_P
| TYPES_P
| UESCAPE
| UNBOUNDED
| UNCOMMITTED
| UNENCRYPTED
| UNIQUE
| UNKNOWN
| UNLISTEN
| UNLOGGED
| UNTIL
| UPDATE
| USER
| USING
| VACUUM
| VALID
| VALIDATE
| VALIDATOR
| VALUE_P
| VALUES
| VARCHAR
| VARIADIC
| VERBOSE
| VERSION_P
| VIEW
| VIEWS
| VOLATILE
| WHEN
| WHITESPACE_P
| WORK
| WRAPPER
| WRITE
| XML_P
| XMLATTRIBUTES
| XMLCONCAT
| XMLELEMENT
| XMLEXISTS
| XMLFOREST
| XMLNAMESPACES
| XMLPARSE
| XMLPI
| XMLROOT
| XMLSERIALIZE
| XMLTABLE
| YES_P
| ZONE
;
Result of trxgrep/trtext/sort/sed:
ABORT_P : "ABORT_P";
ABSOLUTE_P : "ABSOLUTE_P";
ACCESS : "ACCESS";
ACTION : "ACTION";
ADD_P : "ADD_P";
ADMIN : "ADMIN";
AFTER : "AFTER";
AGGREGATE : "AGGREGATE";
ALL : "ALL";
ALSO : "ALSO";
ALTER : "ALTER";
ALWAYS : "ALWAYS";
ANALYSE : "ANALYSE";
ANALYZE : "ANALYZE";
AND : "AND";
ANY : "ANY";
ARRAY : "ARRAY";
AS : "AS";
ASC : "ASC";
ASENSITIVE : "ASENSITIVE";
ASSERTION : "ASSERTION";
ASSIGNMENT : "ASSIGNMENT";
ASYMMETRIC : "ASYMMETRIC";
AT : "AT";
ATOMIC : "ATOMIC";
ATTACH : "ATTACH";
ATTRIBUTE : "ATTRIBUTE";
AUTHORIZATION : "AUTHORIZATION";
BACKWARD : "BACKWARD";
BCONST : "BCONST";
BEFORE : "BEFORE";
BEGIN_P : "BEGIN_P";
BETWEEN : "BETWEEN";
BIGINT : "BIGINT";
BINARY : "BINARY";
BIT : "BIT";
BOOLEAN_P : "BOOLEAN_P";
BOTH : "BOTH";
BREADTH : "BREADTH";
BY : "BY";
CACHE : "CACHE";
CALL : "CALL";
CALLED : "CALLED";
CASCADE : "CASCADE";
CASCADED : "CASCADED";
CASE : "CASE";
CAST : "CAST";
CATALOG_P : "CATALOG_P";
CHAIN : "CHAIN";
CHARACTER : "CHARACTER";
CHARACTERISTICS : "CHARACTERISTICS";
CHAR_P : "CHAR_P";
CHECK : "CHECK";
CHECKPOINT : "CHECKPOINT";
CLASS : "CLASS";
CLOSE : "CLOSE";
CLUSTER : "CLUSTER";
COALESCE : "COALESCE";
COLLATE : "COLLATE";
COLLATION : "COLLATION";
COLON_EQUALS : "COLON_EQUALS";
COLUMN : "COLUMN";
COLUMNS : "COLUMNS";
COMMENT : "COMMENT";
COMMENTS : "COMMENTS";
COMMIT : "COMMIT";
COMMITTED : "COMMITTED";
COMPRESSION : "COMPRESSION";
CONCURRENTLY : "CONCURRENTLY";
CONFIGURATION : "CONFIGURATION";
CONFLICT : "CONFLICT";
CONNECTION : "CONNECTION";
CONSTRAINT : "CONSTRAINT";
CONSTRAINTS : "CONSTRAINTS";
CONTENT_P : "CONTENT_P";
CONTINUE_P : "CONTINUE_P";
CONVERSION_P : "CONVERSION_P";
COPY : "COPY";
COST : "COST";
CREATE : "CREATE";
CROSS : "CROSS";
CSV : "CSV";
CUBE : "CUBE";
CURRENT_CATALOG : "CURRENT_CATALOG";
CURRENT_DATE : "CURRENT_DATE";
CURRENT_P : "CURRENT_P";
CURRENT_ROLE : "CURRENT_ROLE";
CURRENT_SCHEMA : "CURRENT_SCHEMA";
CURRENT_TIME : "CURRENT_TIME";
CURRENT_TIMESTAMP : "CURRENT_TIMESTAMP";
CURRENT_USER : "CURRENT_USER";
CURSOR : "CURSOR";
CYCLE : "CYCLE";
DATABASE : "DATABASE";
DATA_P : "DATA_P";
DAY_P : "DAY_P";
DEALLOCATE : "DEALLOCATE";
DEC : "DEC";
DECIMAL_P : "DECIMAL_P";
DECLARE : "DECLARE";
DEFAULT : "DEFAULT";
DEFAULTS : "DEFAULTS";
DEFERRABLE : "DEFERRABLE";
DEFERRED : "DEFERRED";
DEFINER : "DEFINER";
DELETE_P : "DELETE_P";
DELIMITER : "DELIMITER";
DELIMITERS : "DELIMITERS";
DEPENDS : "DEPENDS";
DEPTH : "DEPTH";
DESC : "DESC";
DETACH : "DETACH";
DICTIONARY : "DICTIONARY";
DISABLE_P : "DISABLE_P";
DISCARD : "DISCARD";
DISTINCT : "DISTINCT";
DO : "DO";
DOCUMENT_P : "DOCUMENT_P";
DOMAIN_P : "DOMAIN_P";
DOUBLE_P : "DOUBLE_P";
DROP : "DROP";
EACH : "EACH";
ELSE : "ELSE";
ENABLE_P : "ENABLE_P";
ENCODING : "ENCODING";
ENCRYPTED : "ENCRYPTED";
END_P : "END_P";
ENUM_P : "ENUM_P";
EQUALS_GREATER : "EQUALS_GREATER";
ESCAPE : "ESCAPE";
EVENT : "EVENT";
EXCEPT : "EXCEPT";
EXCLUDE : "EXCLUDE";
EXCLUDING : "EXCLUDING";
EXCLUSIVE : "EXCLUSIVE";
EXECUTE : "EXECUTE";
EXISTS : "EXISTS";
EXPLAIN : "EXPLAIN";
EXPRESSION : "EXPRESSION";
EXTENSION : "EXTENSION";
EXTERNAL : "EXTERNAL";
EXTRACT : "EXTRACT";
FALSE_P : "FALSE_P";
FAMILY : "FAMILY";
FCONST : "FCONST";
FETCH : "FETCH";
FILTER : "FILTER";
FINALIZE : "FINALIZE";
FIRST_P : "FIRST_P";
FLOAT_P : "FLOAT_P";
FOLLOWING : "FOLLOWING";
FOR : "FOR";
FORCE : "FORCE";
FOREIGN : "FOREIGN";
FORWARD : "FORWARD";
FREEZE : "FREEZE";
FROM : "FROM";
FULL : "FULL";
FUNCTION : "FUNCTION";
FUNCTIONS : "FUNCTIONS";
GENERATED : "GENERATED";
GLOBAL : "GLOBAL";
GRANT : "GRANT";
GRANTED : "GRANTED";
GREATER_EQUALS : "GREATER_EQUALS";
GREATEST : "GREATEST";
GROUPING : "GROUPING";
GROUPS : "GROUPS";
GROUP_P : "GROUP_P";
HANDLER : "HANDLER";
HAVING : "HAVING";
HEADER_P : "HEADER_P";
HOLD : "HOLD";
HOUR_P : "HOUR_P";
ICONST : "ICONST";
IDENT : "IDENT";
IDENTITY_P : "IDENTITY_P";
IF_P : "IF_P";
ILIKE : "ILIKE";
IMMEDIATE : "IMMEDIATE";
IMMUTABLE : "IMMUTABLE";
IMPLICIT_P : "IMPLICIT_P";
IMPORT_P : "IMPORT_P";
INCLUDE : "INCLUDE";
INCLUDING : "INCLUDING";
INCREMENT : "INCREMENT";
INDEX : "INDEX";
INDEXES : "INDEXES";
INHERIT : "INHERIT";
INHERITS : "INHERITS";
INITIALLY : "INITIALLY";
INLINE_P : "INLINE_P";
INNER_P : "INNER_P";
INOUT : "INOUT";
INPUT_P : "INPUT_P";
INSENSITIVE : "INSENSITIVE";
INSERT : "INSERT";
INSTEAD : "INSTEAD";
INTEGER : "INTEGER";
INTERSECT : "INTERSECT";
INTERVAL : "INTERVAL";
INTO : "INTO";
INT_P : "INT_P";
INVOKER : "INVOKER";
IN_P : "IN_P";
IS : "IS";
ISNULL : "ISNULL";
ISOLATION : "ISOLATION";
JOIN : "JOIN";
KEY : "KEY";
LABEL : "LABEL";
LANGUAGE : "LANGUAGE";
LARGE_P : "LARGE_P";
LAST_P : "LAST_P";
LATERAL_P : "LATERAL_P";
LEADING : "LEADING";
LEAKPROOF : "LEAKPROOF";
LEAST : "LEAST";
LEFT : "LEFT";
LESS_EQUALS : "LESS_EQUALS";
LEVEL : "LEVEL";
LIKE : "LIKE";
LIMIT : "LIMIT";
LISTEN : "LISTEN";
LOAD : "LOAD";
LOCAL : "LOCAL";
LOCALTIME : "LOCALTIME";
LOCALTIMESTAMP : "LOCALTIMESTAMP";
LOCATION : "LOCATION";
LOCKED : "LOCKED";
LOCK_P : "LOCK_P";
LOGGED : "LOGGED";
MAPPING : "MAPPING";
MATCH : "MATCH";
MATERIALIZED : "MATERIALIZED";
MAXVALUE : "MAXVALUE";
METHOD : "METHOD";
MINUTE_P : "MINUTE_P";
MINVALUE : "MINVALUE";
MODE : "MODE";
MODE_PLPGSQL_ASSIGN1 : "MODE_PLPGSQL_ASSIGN1";
MODE_PLPGSQL_ASSIGN2 : "MODE_PLPGSQL_ASSIGN2";
MODE_PLPGSQL_ASSIGN3 : "MODE_PLPGSQL_ASSIGN3";
MODE_PLPGSQL_EXPR : "MODE_PLPGSQL_EXPR";
MODE_TYPE_NAME : "MODE_TYPE_NAME";
MONTH_P : "MONTH_P";
MOVE : "MOVE";
NAMES : "NAMES";
NAME_P : "NAME_P";
NATIONAL : "NATIONAL";
NATURAL : "NATURAL";
NCHAR : "NCHAR";
NEW : "NEW";
NEXT : "NEXT";
NFC : "NFC";
NFD : "NFD";
NFKC : "NFKC";
NFKD : "NFKD";
NO : "NO";
NONE : "NONE";
NORMALIZE : "NORMALIZE";
NORMALIZED : "NORMALIZED";
NOT : "NOT";
NOTHING : "NOTHING";
NOTIFY : "NOTIFY";
NOTNULL : "NOTNULL";
NOT_EQUALS : "NOT_EQUALS";
NOT_LA : "NOT_LA";
NOWAIT : "NOWAIT";
NULLIF : "NULLIF";
NULLS_LA : "NULLS_LA";
NULLS_P : "NULLS_P";
NULL_P : "NULL_P";
NUMERIC : "NUMERIC";
OBJECT_P : "OBJECT_P";
OF : "OF";
OFF : "OFF";
OFFSET : "OFFSET";
OIDS : "OIDS";
OLD : "OLD";
ON : "ON";
ONLY : "ONLY";
OPERATOR : "OPERATOR";
OPTION : "OPTION";
OPTIONS : "OPTIONS";
OR : "OR";
ORDER : "ORDER";
ORDINALITY : "ORDINALITY";
OTHERS : "OTHERS";
OUTER_P : "OUTER_P";
OUT_P : "OUT_P";
OVER : "OVER";
OVERLAPS : "OVERLAPS";
OVERLAY : "OVERLAY";
OVERRIDING : "OVERRIDING";
OWNED : "OWNED";
OWNER : "OWNER";
Op : "Op";
PARALLEL : "PARALLEL";
PARAM : "PARAM";
PARSER : "PARSER";
PARTIAL : "PARTIAL";
PARTITION : "PARTITION";
PASSING : "PASSING";
PASSWORD : "PASSWORD";
PLACING : "PLACING";
PLANS : "PLANS";
POLICY : "POLICY";
POSITION : "POSITION";
PRECEDING : "PRECEDING";
PRECISION : "PRECISION";
PREPARE : "PREPARE";
PREPARED : "PREPARED";
PRESERVE : "PRESERVE";
PRIMARY : "PRIMARY";
PRIOR : "PRIOR";
PRIVILEGES : "PRIVILEGES";
PROCEDURAL : "PROCEDURAL";
PROCEDURE : "PROCEDURE";
PROCEDURES : "PROCEDURES";
PROGRAM : "PROGRAM";
PUBLICATION : "PUBLICATION";
QUOTE : "QUOTE";
RANGE : "RANGE";
READ : "READ";
REAL : "REAL";
REASSIGN : "REASSIGN";
RECHECK : "RECHECK";
RECURSIVE : "RECURSIVE";
REF : "REF";
REFERENCES : "REFERENCES";
REFERENCING : "REFERENCING";
REFRESH : "REFRESH";
REINDEX : "REINDEX";
RELATIVE_P : "RELATIVE_P";
RELEASE : "RELEASE";
RENAME : "RENAME";
REPEATABLE : "REPEATABLE";
REPLACE : "REPLACE";
REPLICA : "REPLICA";
RESET : "RESET";
RESTART : "RESTART";
RESTRICT : "RESTRICT";
RETURN : "RETURN";
RETURNING : "RETURNING";
RETURNS : "RETURNS";
REVOKE : "REVOKE";
RIGHT : "RIGHT";
ROLE : "ROLE";
ROLLBACK : "ROLLBACK";
ROLLUP : "ROLLUP";
ROUTINE : "ROUTINE";
ROUTINES : "ROUTINES";
ROW : "ROW";
ROWS : "ROWS";
RULE : "RULE";
SAVEPOINT : "SAVEPOINT";
SCHEMA : "SCHEMA";
SCHEMAS : "SCHEMAS";
SCONST : "SCONST";
SCROLL : "SCROLL";
SEARCH : "SEARCH";
SECOND_P : "SECOND_P";
SECURITY : "SECURITY";
SELECT : "SELECT";
SEQUENCE : "SEQUENCE";
SEQUENCES : "SEQUENCES";
SERIALIZABLE : "SERIALIZABLE";
SERVER : "SERVER";
SESSION : "SESSION";
SESSION_USER : "SESSION_USER";
SET : "SET";
SETOF : "SETOF";
SETS : "SETS";
SHARE : "SHARE";
SHOW : "SHOW";
SIMILAR : "SIMILAR";
SIMPLE : "SIMPLE";
SKIP : "SKIP";
SMALLINT : "SMALLINT";
SNAPSHOT : "SNAPSHOT";
SOME : "SOME";
SQL_P : "SQL_P";
STABLE : "STABLE";
STANDALONE_P : "STANDALONE_P";
START : "START";
STATEMENT : "STATEMENT";
STATISTICS : "STATISTICS";
STDIN : "STDIN";
STDOUT : "STDOUT";
STORAGE : "STORAGE";
STORED : "STORED";
STRICT_P : "STRICT_P";
STRIP_P : "STRIP_P";
SUBSCRIPTION : "SUBSCRIPTION";
SUBSTRING : "SUBSTRING";
SUPPORT : "SUPPORT";
SYMMETRIC : "SYMMETRIC";
SYSID : "SYSID";
SYSTEM_P : "SYSTEM_P";
TABLE : "TABLE";
TABLES : "TABLES";
TABLESAMPLE : "TABLESAMPLE";
TABLESPACE : "TABLESPACE";
TEMP : "TEMP";
TEMPLATE : "TEMPLATE";
TEMPORARY : "TEMPORARY";
TEXT_P : "TEXT_P";
THEN : "THEN";
TIES : "TIES";
TIME : "TIME";
TIMESTAMP : "TIMESTAMP";
TO : "TO";
TRAILING : "TRAILING";
TRANSACTION : "TRANSACTION";
TRANSFORM : "TRANSFORM";
TREAT : "TREAT";
TRIGGER : "TRIGGER";
TRIM : "TRIM";
TRUE_P : "TRUE_P";
TRUNCATE : "TRUNCATE";
TRUSTED : "TRUSTED";
TYPECAST : "TYPECAST";
TYPES_P : "TYPES_P";
TYPE_P : "TYPE_P";
UESCAPE : "UESCAPE";
UMINUS : "UMINUS";
UNBOUNDED : "UNBOUNDED";
UNCOMMITTED : "UNCOMMITTED";
UNENCRYPTED : "UNENCRYPTED";
UNION : "UNION";
UNIQUE : "UNIQUE";
UNKNOWN : "UNKNOWN";
UNLISTEN : "UNLISTEN";
UNLOGGED : "UNLOGGED";
UNTIL : "UNTIL";
UPDATE : "UPDATE";
USER : "USER";
USING : "USING";
VACUUM : "VACUUM";
VALID : "VALID";
VALIDATE : "VALIDATE";
VALIDATOR : "VALIDATOR";
VALUES : "VALUES";
VALUE_P : "VALUE_P";
VARCHAR : "VARCHAR";
VARIADIC : "VARIADIC";
VARYING : "VARYING";
VERBOSE : "VERBOSE";
VERSION_P : "VERSION_P";
VIEW : "VIEW";
VIEWS : "VIEWS";
VOLATILE : "VOLATILE";
WHEN : "WHEN";
WHERE : "WHERE";
WHITESPACE_P : "WHITESPACE_P";
WINDOW : "WINDOW";
WITH : "WITH";
WITHIN : "WITHIN";
WITHOUT : "WITHOUT";
WITH_LA : "WITH_LA";
WORK : "WORK";
WRAPPER : "WRAPPER";
WRITE : "WRITE";
XCONST : "XCONST";
XMLATTRIBUTES : "XMLATTRIBUTES";
XMLCONCAT : "XMLCONCAT";
XMLELEMENT : "XMLELEMENT";
XMLEXISTS : "XMLEXISTS";
XMLFOREST : "XMLFOREST";
XMLNAMESPACES : "XMLNAMESPACES";
XMLPARSE : "XMLPARSE";
XMLPI : "XMLPI";
XMLROOT : "XMLROOT";
XMLSERIALIZE : "XMLSERIALIZE";
XMLTABLE : "XMLTABLE";
XML_P : "XML_P";
YEAR_P : "YEAR_P";
YES_P : "YES_P";
ZONE : "ZONE";
Thanks! I'm still getting the error with trconvert
and trparse
0.8.5:
trparse gram.y /tmp/out # works
trconvert < /tmp/out # fails with the aforementioned error
trparse --version;
trconvert --version;
Sorry, I hadn't made a release with the fix. Try v0.8.6 instead. (It might take a while for Nuget to reindex the latest version.) --Ken
I ended up using dotnet tool install -g --add-source $path_to_trash $package_name
, and as of 8.6+, conversions are working great!
Hi! I was testing out the script to convert grammars on a
.y
grammar, and I got an unexpected error:Looking at line 63 of
Docs/Class1.cs
, it seems liketrconvert
doesn't support conversion from Bison to Antlr4 without additional configuration. Is that correct?Reproduction: