SQL Syntax 5.0

    The EBNF and Railroad Diagrams for 5.0.

    Statement

    IF Condition SingleStatement Block ST_SEMICOLON ELSE SingleStatement Block ST_SEMICOLON EOF UnsupportedStatement
             ::= ( 'IF' Condition ( ( SingleStatement | Block ) ST_SEMICOLON? 'ELSE' )? )? ( SingleStatement | Block ) ST_SEMICOLON? EOF
               | UnsupportedStatement
    Not referenced by any.

    SingleStatement

    WithList SelectWithWithItems Insert Update Delete Merge Select TableStatement Upsert Alter RenameTableStatement Create Drop Analyze Truncate Execute Set Reset Show RefreshMaterializedView Use SavepointStatement RollbackStatement COMMIT Comment Describe Explain Declare Grant PurgeStatement
             ::= WithList? ( SelectWithWithItems | Insert | Update | Delete | Merge )
               | Select
               | TableStatement
               | Upsert
               | Alter
               | RenameTableStatement
               | Create
               | Drop
               | Analyze
               | Truncate
               | Execute
               | Set
               | Reset
               | Show
               | RefreshMaterializedView
               | Use
               | SavepointStatement
               | RollbackStatement
               | 'COMMIT'
               | Comment
               | Describe
               | Explain
               | Declare
               | Grant
               | PurgeStatement
    Referenced by:

    Block

    BEGIN ST_SEMICOLON SingleStatement Block ST_SEMICOLON END ST_SEMICOLON
    Block    ::= 'BEGIN' ST_SEMICOLON* ( ( SingleStatement | Block ) ST_SEMICOLON )+ 'END' ST_SEMICOLON?
    Referenced by:

    Statements

    ST_SEMICOLON IF Condition SingleStatement Block ST_SEMICOLON ELSE SingleStatement Block SingleStatement Block ST_SEMICOLON UnsupportedStatement ST_SEMICOLON IF Condition SingleStatement Block ST_SEMICOLON ELSE SingleStatement Block SingleStatement Block ST_SEMICOLON UnsupportedStatement EOF
    Not referenced by any.

    Declare

    DECLARE UserVariable TABLE ( ColumnDefinition , ) AS RelObjectName ColDataType = Expression UserVariable ,
    Declare  ::= 'DECLARE' UserVariable ( 'TABLE' '(' ColumnDefinition ( ',' ColumnDefinition )* ')' | 'AS' RelObjectName | ColDataType ( '=' Expression )? ( ',' UserVariable ColDataType ( '=' Expression )? )* )
    Referenced by:

    Set

    SET LOCAL SESSION K_DATETIMELITERAL ZONE UserVariable IdentifierChain = Expression ZONE K_DATETIMELITERAL = RelObjectNameExt ,
    Set      ::= 'SET' ( 'LOCAL' | 'SESSION' )? ( K_DATETIMELITERAL 'ZONE' | ( UserVariable | IdentifierChain ) '='? ) Expression ( ',' ( K_DATETIMELITERAL 'ZONE' | RelObjectNameExt '='? )? Expression )*
    Referenced by:

    Reset

    RESET K_DATETIMELITERAL ZONE RelObjectName ALL
    Reset    ::= 'RESET' ( K_DATETIMELITERAL 'ZONE' | RelObjectName | 'ALL' )
    Referenced by:

    RenameTableStatement

    RENAME TABLE IF EXISTS Table WAIT S_LONG NOWAIT TO Table Table ,
             ::= 'RENAME' 'TABLE'? ( 'IF' 'EXISTS' )? Table ( 'WAIT' S_LONG | 'NOWAIT' )? 'TO' Table ( ',' Table 'TO' Table )*
    Referenced by:

    PurgeStatement

    PURGE TABLE Table INDEX Index RECYCLEBIN DBA_RECYCLEBIN TABLESPACE S_IDENTIFIER USER S_IDENTIFIER
             ::= 'PURGE' ( 'TABLE' Table | 'INDEX' Index | 'RECYCLEBIN' | 'DBA_RECYCLEBIN' | 'TABLESPACE' S_IDENTIFIER ( 'USER' S_IDENTIFIER )? )
    Referenced by:

    Describe

    DESCRIBE DESC Table
    Describe ::= ( 'DESCRIBE' | 'DESC' ) Table
    Referenced by:

    Explain

    EXPLAIN ExplainStatementOptions Select Table
    Referenced by:

    ExplainOptionBoolean

    TRUE FALSE ON OFF
             ::= ( 'TRUE' | 'FALSE' | 'ON' | 'OFF' )?
    Referenced by:

    ExplainFormatOption

    XML JSON YAML
             ::= ( 'XML' | 'JSON' | 'YAML' )?
    Referenced by:

    ExplainStatementOptions

    ANALYZE BUFFERS COSTS VERBOSE ExplainOptionBoolean FORMAT ExplainFormatOption
             ::= ( ( 'ANALYZE' | 'BUFFERS' | 'COSTS' | 'VERBOSE' ) ExplainOptionBoolean | 'FORMAT' ExplainFormatOption )*
    Referenced by:

    Use

    USE SCHEMA RelObjectNameExt
    Use      ::= 'USE' 'SCHEMA'? RelObjectNameExt
    Referenced by:

    Show

    SHOW ShowColumns ShowIndex ShowTables captureRest
    Show     ::= 'SHOW' ( ShowColumns | ShowIndex | ShowTables | captureRest )
    Referenced by:

    ShowColumns

    COLUMNS FROM RelObjectNameExt
             ::= 'COLUMNS' 'FROM' RelObjectNameExt
    Referenced by:

    ShowIndex

    INDEX FROM RelObjectNameExt
             ::= 'INDEX' 'FROM' RelObjectNameExt
    Referenced by:

    RefreshMaterializedView

    REFRESH MATERIALIZED VIEW CONCURRENTLY Table WITH NO DATA captureRest
             ::= 'REFRESH' 'MATERIALIZED' 'VIEW' 'CONCURRENTLY'? Table ( 'WITH' 'NO'? 'DATA' )? captureRest
    Referenced by:

    ShowTables

    EXTENDED FULL TABLES FROM IN RelObjectNameExt LIKE SimpleExpression WHERE Expression
             ::= 'EXTENDED'? 'FULL'? 'TABLES' ( ( 'FROM' | 'IN' ) RelObjectNameExt )? ( 'LIKE' SimpleExpression | 'WHERE' Expression )?
    Referenced by:

    Values

    VALUES VALUE ExpressionList
    Values   ::= ( 'VALUES' | 'VALUE' ) ExpressionList
    Referenced by:

    ReturningClause

    RETURNING RETURN SelectItemsList INTO Table UserVariable ,
             ::= ( 'RETURNING' | 'RETURN' ) SelectItemsList ( 'INTO' ( Table | UserVariable ) ( ',' ( Table | UserVariable ) )* )?
    Referenced by:

    Update

    UPDATE LOW_PRIORITY IGNORE TableWithAliasAndMysqlIndexHint JoinsList SET UpdateSets OutputClause FROM FromItem JoinsList WhereClause OrderByElements PlainLimit ReturningClause
    Referenced by:

    UpdateSets

    Column = Expression ParenthesedExpressionList = ParenthesedSelect ParenthesedExpressionList , Column = Expression ParenthesedExpressionList = ParenthesedSelect ParenthesedExpressionList

    Insert

    INSERT LOW_PRIORITY DELAYED HIGH_PRIORITY IGNORE INTO Table AS RelObjectNameWithoutValue ( ColumnList ) OutputClause SET UpdateSets Select ON DUPLICATE KEY UPDATE UpdateSets ON CONFLICT InsertConflictTarget InsertConflictAction ReturningClause
    Insert   ::= 'INSERT' ( 'LOW_PRIORITY' | 'DELAYED' | 'HIGH_PRIORITY' )? 'IGNORE'? 'INTO'? Table ( 'AS'? RelObjectNameWithoutValue )? ( '(' ColumnList ')' )? OutputClause? ( 'SET' UpdateSets | Select ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' UpdateSets )? ( 'ON' 'CONFLICT' InsertConflictTarget? InsertConflictAction )? ReturningClause?
    Referenced by:

    InsertConflictTarget

    ( RelObjectNameExt2 , ) WhereClause ON CONSTRAINT RelObjectNameExt2
             ::= '(' RelObjectNameExt2 ( ',' RelObjectNameExt2 )* ')' WhereClause?
               | 'ON' 'CONSTRAINT' RelObjectNameExt2
    Referenced by:

    InsertConflictAction

    DO NOTHING UPDATE SET UpdateSets WhereClause
             ::= 'DO' ( 'NOTHING' | 'UPDATE' 'SET' UpdateSets WhereClause? )
    Referenced by:

    OutputClause

    OUTPUT SelectItemsList INTO UserVariable Table ColumnsNamesList
             ::= 'OUTPUT' SelectItemsList ( 'INTO' ( UserVariable | Table ) ColumnsNamesList? )?
    Referenced by:

    Upsert

    UPSERT INSERT OR REPLACE INTO Table ParenthesedColumnList SET UpdateSets Select ON DUPLICATE KEY UPDATE UpdateSets
    Upsert   ::= ( 'UPSERT' | ( 'INSERT' 'OR' )? 'REPLACE' ) 'INTO'? Table ParenthesedColumnList? ( 'SET' UpdateSets | Select ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' UpdateSets )?
    Referenced by:

    Delete

    DELETE LOW_PRIORITY QUICK IGNORE TableWithAlias , OutputClause FROM TableWithAlias JoinsList USING TableWithAlias , WhereClause OrderByElements PlainLimit ReturningClause
    Delete   ::= 'DELETE' 'LOW_PRIORITY'? 'QUICK'? 'IGNORE'? ( ( TableWithAlias ( ',' TableWithAlias )* OutputClause? )? 'FROM' )? ( TableWithAlias JoinsList? )? ( 'USING' TableWithAlias ( ',' TableWithAlias )* )? WhereClause? OrderByElements? PlainLimit? ReturningClause?
    Referenced by:

    Merge

    MERGE INTO TableWithAlias USING FromItem ON Expression MergeOperations OutputClause
    Merge    ::= 'MERGE' 'INTO' TableWithAlias 'USING' FromItem 'ON' Expression MergeOperations OutputClause?
    Referenced by:

    MergeOperations

    MergeWhenMatched MergeWhenNotMatched
             ::= ( MergeWhenMatched | MergeWhenNotMatched )*
    Referenced by:

    MergeWhenMatched

    WHEN MATCHED AND Expression THEN DELETE MergeUpdateClause
             ::= 'WHEN' 'MATCHED' ( 'AND' Expression )? 'THEN' ( 'DELETE' | MergeUpdateClause )
    Referenced by:

    MergeUpdateClause

    UPDATE SET UpdateSets WHERE Expression DELETE WHERE Expression
             ::= 'UPDATE' 'SET' UpdateSets ( 'WHERE' Expression )? ( 'DELETE' 'WHERE' Expression )?
    Referenced by:

    MergeWhenNotMatched

    WHEN NOT MATCHED AND Expression THEN INSERT ( ColumnList ) VALUES ( SimpleExpressionList ) WHERE Expression
             ::= 'WHEN' 'NOT' 'MATCHED' ( 'AND' Expression )? 'THEN' 'INSERT' ( '(' ColumnList ')' )? 'VALUES' '(' SimpleExpressionList ')' ( 'WHERE' Expression )?
    Referenced by:

    RelObjectNameList

    RelObjectNameExt . : . RelObjectNameExt2
             ::= RelObjectNameExt ( ( '.' | ':' ) '.'* RelObjectNameExt2 )*

    Column

    RelObjectNameList COMMENT S_CHAR_LITERAL . K_NEXTVAL ArrayConstructor

    RelObjectNameWithoutValue

    S_IDENTIFIER S_QUOTED_IDENTIFIER K_DATE_LITERAL K_DATETIMELITERAL K_STRING_FUNCTION_NAME K_ISOLATION K_TIME_KEY_EXPR ACTION ACTIVE ADD ADVANCE ADVISE AGAINST ALGORITHM ALTER ANALYZE APPLY ARCHIVE ARRAY ASC AT AUTHORIZATION AUTO BEGIN BERNOULLI BINARY BIT BLOCK BROWSE BUFFERS BY BYTE BYTES CACHE CALL CASCADE CASE CAST CHANGE CHANGES CHAR CHARACTER CHECKPOINT CLOSE COLLATE COLUMN COLUMNS COMMENT COMMIT CONCURRENTLY CONFLICT CONSTRAINTS CONVERT COSTS CS CYCLE DATA DATABASE DDL DECLARE DEFAULT DEFERRABLE DELAYED DELETE DESC DESCRIBE DISABLE DISCONNECT DIV DML DO DOMAIN DROP DUMP DUPLICATE ELEMENTS EMIT ENABLE END ESCAPE EXCLUDE EXEC EXECUTE EXPLAIN EXPLICIT EXTENDED EXTRACT FALSE FILTER FIRST FLUSH FN FOLLOWING FORMAT FULLTEXT FUNCTION GRANT GUARD HASH HISTORY HOPPING INCLUDE INCREMENT INDEX INSERT INTERLEAVE INTERPRET INVALIDATE ISNULL JSON KEEP KEY KEYS LAST LEADING LINK LOCAL LOCKED LOG LOOP MATCH MATCHED MATERIALIZED MAXVALUE MEMBER MERGE MINVALUE MODIFY MOVEMENT NEXT NO NOCACHE NOKEEP NOLOCK NOMAXVALUE NOMINVALUE NOORDER NOTHING NOTNULL NOVALIDATE NOWAIT NULLS OF OFF OPEN OVER OVERLAPS PARALLEL PARENT PARTITION PATH PERCENT PLACING PRECEDING PRECISION PRIMARY PRIOR PURGE QUERY QUICK QUIESCE RANGE RAW READ RECYCLEBIN REFERENCES REFRESH REGISTER REMOTE RENAME REPEATABLE REPLACE RESET RESTART RESTRICT RESTRICTED RESUMABLE RESUME RETURN RLIKE ROLLBACK ROLLUP ROOT ROW ROWS RR RS SAVEPOINT SCHEMA SECURE SEED SEPARATOR SEQUENCE SESSION SETS SHARE SHOW SHUTDOWN SIBLINGS SIGNED SIMILAR SIZE SKIP STORED STRING SUSPEND SWITCH SYNONYM SYSTEM TABLE TABLESPACE TEMP TEMPORARY THEN TIMEOUT TIMESTAMPTZ TIMEZONE TO TRIGGER TRUE TRUNCATE TUMBLING TYPE UNLOGGED UNQIESCE UNSIGNED UPDATE UPSERT UR USER VALIDATE VERBOSE VIEW VOLATILE WAIT WITHIN WITHOUT WORK XML XMLAGG XMLDATA XMLSCHEMA XMLTEXT XSINIL YAML YES ZONE
             ::= S_IDENTIFIER
               | S_QUOTED_IDENTIFIER
               | K_DATE_LITERAL
               | K_DATETIMELITERAL
               | K_STRING_FUNCTION_NAME
               | K_ISOLATION
               | K_TIME_KEY_EXPR
               | 'ACTION'
               | 'ACTIVE'
               | 'ADD'
               | 'ADVANCE'
               | 'ADVISE'
               | 'AGAINST'
               | 'ALGORITHM'
               | 'ALTER'
               | 'ANALYZE'
               | 'APPLY'
               | 'ARCHIVE'
               | 'ARRAY'
               | 'ASC'
               | 'AT'
               | 'AUTHORIZATION'
               | 'AUTO'
               | 'BEGIN'
               | 'BERNOULLI'
               | 'BINARY'
               | 'BIT'
               | 'BLOCK'
               | 'BROWSE'
               | 'BUFFERS'
               | 'BY'
               | 'BYTE'
               | 'BYTES'
               | 'CACHE'
               | 'CALL'
               | 'CASCADE'
               | 'CASE'
               | 'CAST'
               | 'CHANGE'
               | 'CHANGES'
               | 'CHAR'
               | 'CHARACTER'
               | 'CHECKPOINT'
               | 'CLOSE'
               | 'COLLATE'
               | 'COLUMN'
               | 'COLUMNS'
               | 'COMMENT'
               | 'COMMIT'
               | 'CONCURRENTLY'
               | 'CONFLICT'
               | 'CONSTRAINTS'
               | 'CONVERT'
               | 'COSTS'
               | 'CS'
               | 'CYCLE'
               | 'DATA'
               | 'DATABASE'
               | 'DDL'
               | 'DECLARE'
               | 'DEFAULT'
               | 'DEFERRABLE'
               | 'DELAYED'
               | 'DELETE'
               | 'DESC'
               | 'DESCRIBE'
               | 'DISABLE'
               | 'DISCONNECT'
               | 'DIV'
               | 'DML'
               | 'DO'
               | 'DOMAIN'
               | 'DROP'
               | 'DUMP'
               | 'DUPLICATE'
               | 'ELEMENTS'
               | 'EMIT'
               | 'ENABLE'
               | 'END'
               | 'ESCAPE'
               | 'EXCLUDE'
               | 'EXEC'
               | 'EXECUTE'
               | 'EXPLAIN'
               | 'EXPLICIT'
               | 'EXTENDED'
               | 'EXTRACT'
               | 'FALSE'
               | 'FILTER'
               | 'FIRST'
               | 'FLUSH'
               | 'FN'
               | 'FOLLOWING'
               | 'FORMAT'
               | 'FULLTEXT'
               | 'FUNCTION'
               | 'GRANT'
               | 'GUARD'
               | 'HASH'
               | 'HISTORY'
               | 'HOPPING'
               | 'INCLUDE'
               | 'INCREMENT'
               | 'INDEX'
               | 'INSERT'
               | 'INTERLEAVE'
               | 'INTERPRET'
               | 'INVALIDATE'
               | 'ISNULL'
               | 'JSON'
               | 'KEEP'
               | 'KEY'
               | 'KEYS'
               | 'LAST'
               | 'LEADING'
               | 'LINK'
               | 'LOCAL'
               | 'LOCKED'
               | 'LOG'
               | 'LOOP'
               | 'MATCH'
               | 'MATCHED'
               | 'MATERIALIZED'
               | 'MAXVALUE'
               | 'MEMBER'
               | 'MERGE'
               | 'MINVALUE'
               | 'MODIFY'
               | 'MOVEMENT'
               | 'NEXT'
               | 'NO'
               | 'NOCACHE'
               | 'NOKEEP'
               | 'NOLOCK'
               | 'NOMAXVALUE'
               | 'NOMINVALUE'
               | 'NOORDER'
               | 'NOTHING'
               | 'NOTNULL'
               | 'NOVALIDATE'
               | 'NOWAIT'
               | 'NULLS'
               | 'OF'
               | 'OFF'
               | 'OPEN'
               | 'OVER'
               | 'OVERLAPS'
               | 'PARALLEL'
               | 'PARENT'
               | 'PARTITION'
               | 'PATH'
               | 'PERCENT'
               | 'PLACING'
               | 'PRECEDING'
               | 'PRECISION'
               | 'PRIMARY'
               | 'PRIOR'
               | 'PURGE'
               | 'QUERY'
               | 'QUICK'
               | 'QUIESCE'
               | 'RANGE'
               | 'RAW'
               | 'READ'
               | 'RECYCLEBIN'
               | 'REFERENCES'
               | 'REFRESH'
               | 'REGISTER'
               | 'REMOTE'
               | 'RENAME'
               | 'REPEATABLE'
               | 'REPLACE'
               | 'RESET'
               | 'RESTART'
               | 'RESTRICT'
               | 'RESTRICTED'
               | 'RESUMABLE'
               | 'RESUME'
               | 'RETURN'
               | 'RLIKE'
               | 'ROLLBACK'
               | 'ROLLUP'
               | 'ROOT'
               | 'ROW'
               | 'ROWS'
               | 'RR'
               | 'RS'
               | 'SAVEPOINT'
               | 'SCHEMA'
               | 'SECURE'
               | 'SEED'
               | 'SEPARATOR'
               | 'SEQUENCE'
               | 'SESSION'
               | 'SETS'
               | 'SHARE'
               | 'SHOW'
               | 'SHUTDOWN'
               | 'SIBLINGS'
               | 'SIGNED'
               | 'SIMILAR'
               | 'SIZE'
               | 'SKIP'
               | 'STORED'
               | 'STRING'
               | 'SUSPEND'
               | 'SWITCH'
               | 'SYNONYM'
               | 'SYSTEM'
               | 'TABLE'
               | 'TABLESPACE'
               | 'TEMP'
               | 'TEMPORARY'
               | 'THEN'
               | 'TIMEOUT'
               | 'TIMESTAMPTZ'
               | 'TIMEZONE'
               | 'TO'
               | 'TRIGGER'
               | 'TRUE'
               | 'TRUNCATE'
               | 'TUMBLING'
               | 'TYPE'
               | 'UNLOGGED'
               | 'UNQIESCE'
               | 'UNSIGNED'
               | 'UPDATE'
               | 'UPSERT'
               | 'UR'
               | 'USER'
               | 'VALIDATE'
               | 'VERBOSE'
               | 'VIEW'
               | 'VOLATILE'
               | 'WAIT'
               | 'WITHIN'
               | 'WITHOUT'
               | 'WORK'
               | 'XML'
               | 'XMLAGG'
               | 'XMLDATA'
               | 'XMLSCHEMA'
               | 'XMLTEXT'
               | 'XSINIL'
               | 'YAML'
               | 'YES'
               | 'ZONE'

    RelObjectName

    RelObjectNameWithoutValue GROUP INTERVAL ON START TOP VALUE VALUES CREATE TABLES CONNECT IGNORE QUALIFY
             ::= RelObjectNameWithoutValue
               | 'GROUP'
               | 'INTERVAL'
               | 'ON'
               | 'START'
               | 'TOP'
               | 'VALUE'
               | 'VALUES'
               | 'CREATE'
               | 'TABLES'
               | 'CONNECT'
               | 'IGNORE'
               | 'QUALIFY'

    RelObjectNameWithoutStart

    RelObjectNameWithoutValue TOP VALUE VALUES INTERVAL
             ::= RelObjectNameWithoutValue
               | 'TOP'
               | 'VALUE'
               | 'VALUES'
               | 'INTERVAL'
    Referenced by:

    RelObjectNameExt

    RelObjectName ALL ANY SOME LEFT RIGHT SET DOUBLE IF IIF OPTIMIZE LIMIT OFFSET PROCEDURE PUBLIC CASEWHEN IN GROUPING ORDER K_NEXTVAL GLOBAL
             ::= RelObjectName
               | 'ALL'
               | 'ANY'
               | 'SOME'
               | 'LEFT'
               | 'RIGHT'
               | 'SET'
               | 'DOUBLE'
               | 'IF'
               | 'IIF'
               | 'OPTIMIZE'
               | 'LIMIT'
               | 'OFFSET'
               | 'PROCEDURE'
               | 'PUBLIC'
               | 'CASEWHEN'
               | 'IN'
               | 'GROUPING'
               | 'ORDER'
               | K_NEXTVAL
               | 'GLOBAL'

    RelObjectNameExt2

    RelObjectNameExt FROM K_SELECT CURRENT
             ::= RelObjectNameExt
               | 'FROM'
               | K_SELECT
               | 'CURRENT'

    Table

    RelObjectNameList

    TableWithAlias

    Table Alias
             ::= Table Alias?
    Referenced by:

    TableWithAliasAndMysqlIndexHint

    Table Alias MySQLIndexHint
             ::= Table Alias? MySQLIndexHint?
    Referenced by:

    Number

    S_DOUBLE S_LONG
    Number   ::= S_DOUBLE
               | S_LONG
    Referenced by:

    SampleClause

    SAMPLE BLOCK TABLESAMPLE SYSTEM BERNOULLI ( Number ) REPEATABLE ( Number ) SEED ( Number )
             ::= ( 'SAMPLE' 'BLOCK'? | 'TABLESAMPLE' ( 'SYSTEM' | 'BERNOULLI' ) ) '(' Number ')' ( 'REPEATABLE' '(' Number ')' )? ( 'SEED' '(' Number ')' )?
    Referenced by:

    SelectWithWithItems

    Select
             ::= Select
    Referenced by:

    Select

    WithList PlainSelect Values ParenthesedSelect SetOperationList OrderByElements LimitWithOffset Offset Fetch WithIsolation

    TableStatement

    TABLE Table OrderByElements LimitWithOffset Offset
             ::= 'TABLE' Table OrderByElements? LimitWithOffset? Offset?
    Referenced by:

    ParenthesedSelect

    ( Select )
             ::= '(' Select ')'

    LateralView

    LATERAL VIEW OUTER Function RelObjectNameWithoutStart AS RelObjectNameWithoutStart
             ::= 'LATERAL' 'VIEW' 'OUTER'? Function RelObjectNameWithoutStart? 'AS' RelObjectNameWithoutStart
    Referenced by:

    ForClause

    FOR BROWSE XML RAW ( S_CHAR_LITERAL ) AUTO , BINARY BASE64 TYPE ROOT XMLSCHEMA ( S_CHAR_LITERAL ) XMLDATA ELEMENTS XSINIL ABSENT EXPLICIT , BINARY BASE64 TYPE ROOT ( S_CHAR_LITERAL ) XMLDATA PATH ( S_CHAR_LITERAL ) , BINARY BASE64 TYPE ROOT ( S_CHAR_LITERAL ) ELEMENTS XSINIL ABSENT JSON AUTO PATH , ROOT ( S_CHAR_LITERAL ) INCLUDE_NULL_VALUES WITHOUT_ARRAY_WRAPPER
             ::= 'FOR' ( 'BROWSE' | 'XML' ( ( 'RAW' ( '(' S_CHAR_LITERAL ')' )? | 'AUTO' ) ( ',' ( 'BINARY' 'BASE64' | 'TYPE' | ( 'ROOT' | 'XMLSCHEMA' ) ( '(' S_CHAR_LITERAL ')' )? | 'XMLDATA' | 'ELEMENTS' ( 'XSINIL' | 'ABSENT' )? ) )* | 'EXPLICIT' ( ',' ( 'BINARY' 'BASE64' | 'TYPE' | 'ROOT' ( '(' S_CHAR_LITERAL ')' )? | 'XMLDATA' ) )* | 'PATH' ( '(' S_CHAR_LITERAL ')' )? ( ',' ( 'BINARY' 'BASE64' | 'TYPE' | 'ROOT' ( '(' S_CHAR_LITERAL ')' )? | 'ELEMENTS' ( 'XSINIL' | 'ABSENT' )? ) )* ) | 'JSON' ( 'AUTO' | 'PATH' ) ( ',' ( 'ROOT' ( '(' S_CHAR_LITERAL ')' )? | 'INCLUDE_NULL_VALUES' | 'WITHOUT_ARRAY_WRAPPER' ) )* )
    Referenced by:

    LateralViews

    LateralView
             ::= LateralView+
    Referenced by:

    LateralSubSelect

    LATERAL ( Select )
             ::= 'LATERAL' '(' Select ')'
    Referenced by:

    PlainSelect

    K_SELECT STRAIGHT_JOIN Skip First ALL DISTINCT ON ( SelectItemsList ) UNIQUE SQL_CALC_FOUND_ROWS SQL_NO_CACHE SQL_CACHE Top SelectItemsList IntoClause FROM FromItem LateralViews JoinsList FROM ONLY FromItem LateralViews JoinsList FINAL KSQLWindowClause WhereClause OracleHierarchicalQueryClause Having GroupByColumnReferences Having Qualify ForClause OrderByElements WINDOW RelObjectName AS windowDefinition , OrderByElements EMIT CHANGES LimitBy LimitWithOffset Offset LimitWithOffset Fetch WithIsolation FOR NO KEY UPDATE KEY SHARE OF Table Wait NOWAIT SKIP LOCKED OptimizeFor INTO TEMP Table WITH NO LOG
             ::= K_SELECT 'STRAIGHT_JOIN'? Skip? First? ( 'ALL' | 'DISTINCT' ( 'ON' '(' SelectItemsList ')' )? | 'UNIQUE' | 'SQL_CALC_FOUND_ROWS' | 'SQL_NO_CACHE' | 'SQL_CACHE' )? Top? SelectItemsList IntoClause? ( 'FROM' FromItem LateralViews? JoinsList? )? ( 'FROM' 'ONLY' FromItem LateralViews? JoinsList? )? 'FINAL'? KSQLWindowClause? WhereClause? OracleHierarchicalQueryClause? Having? GroupByColumnReferences? Having? Qualify? ForClause? OrderByElements? ( 'WINDOW' RelObjectName 'AS' windowDefinition ( ',' RelObjectName 'AS' windowDefinition )* )? OrderByElements? ( 'EMIT' 'CHANGES' )? LimitBy? LimitWithOffset? Offset? LimitWithOffset? Fetch? WithIsolation? ( 'FOR' ( ( 'NO' 'KEY' )? 'UPDATE' | 'KEY'? 'SHARE' ) ( 'OF' Table )? Wait? ( 'NOWAIT' | 'SKIP' 'LOCKED' )? )? OptimizeFor? ( 'INTO' 'TEMP' Table )? ( 'WITH' 'NO' 'LOG' )?
    Referenced by:

    SetOperationList

    UNION ALL DISTINCT INTERSECT MINUS EXCEPT PlainSelect Values ParenthesedSelect OrderByElements LimitWithOffset Offset LimitWithOffset Fetch WithIsolation
             ::= ( ( 'UNION' ( 'ALL' | 'DISTINCT' )? | 'INTERSECT' | 'MINUS' | 'EXCEPT' ) ( PlainSelect | Values | ParenthesedSelect ) )+ OrderByElements? LimitWithOffset? Offset? LimitWithOffset? Fetch? WithIsolation?
    Referenced by:

    WithList

    WITH WithItem ,
    WithList ::= 'WITH' WithItem ( ',' WithItem )*
    Referenced by:

    WithItem

    RECURSIVE RelObjectName ( SelectItemsList ) AS ParenthesedSelect
    WithItem ::= 'RECURSIVE'? RelObjectName ( '(' SelectItemsList ')' )? 'AS' ParenthesedSelect
    Referenced by:

    SelectItemsList

    SelectItem ,
             ::= SelectItem ( ',' SelectItem )*

    SelectItem

    AllColumns AllTableColumns Condition ConcatExpression Expression Alias
    Referenced by:

    AllColumns

    * EXCEPT ParenthesedColumnList REPLACE ( SelectItemsList )
             ::= '*' ( 'EXCEPT' ParenthesedColumnList )? ( 'REPLACE' '(' SelectItemsList ')' )?

    AllTableColumns

    Table . AllColumns
             ::= Table '.' AllColumns
    Referenced by:

    Alias

    AS RelObjectNameWithoutStart S_CHAR_LITERAL ( RelObjectName ColDataType , )

    SQLServerHint

    INDEX ( RelObjectName ) NOLOCK
             ::= 'INDEX' '(' RelObjectName ')'
               | 'NOLOCK'
    Referenced by:

    SQLServerHints

    WITH ( SQLServerHint , )
             ::= 'WITH' '(' SQLServerHint ( ',' SQLServerHint )* ')'
    Referenced by:

    MySQLIndexHint

    USE SHOW IGNORE FORCE INDEX KEY ( RelObjectNameWithoutValue , )
             ::= ( 'USE' | 'SHOW' | 'IGNORE' | 'FORCE' ) ( 'INDEX' | 'KEY' ) '(' RelObjectNameWithoutValue ( ',' RelObjectNameWithoutValue )* ')'

    FunctionItem

    Function Alias
             ::= Function Alias?
    Referenced by:

    PivotForColumns

    ParenthesedColumnList Column
             ::= ParenthesedColumnList
               | Column
    Referenced by:

    PivotFunctionItems

    FunctionItem ,
             ::= FunctionItem ( ',' FunctionItem )*
    Referenced by:

    ExpressionListItem

    ParenthesedExpressionList Alias
             ::= ParenthesedExpressionList Alias?
    Referenced by:

    PivotMultiInItems

    ExpressionListItem ,
             ::= ExpressionListItem ( ',' ExpressionListItem )*
    Referenced by:

    Pivot

    PIVOT ( PivotFunctionItems FOR PivotForColumns IN ( SelectItemsList PivotMultiInItems ) ) Alias
    Pivot    ::= 'PIVOT' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( SelectItemsList | PivotMultiInItems ) ')' ')' Alias?
    Referenced by:

    PivotXml

    PIVOT XML ( PivotFunctionItems FOR PivotForColumns IN ( ANY Select SelectItemsList PivotMultiInItems ) )
    PivotXml ::= 'PIVOT' 'XML' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( 'ANY' | Select | SelectItemsList | PivotMultiInItems ) ')' ')'
    Referenced by:

    UnPivot

    UNPIVOT INCLUDE EXCLUDE NULLS ( PivotForColumns FOR PivotForColumns IN ( SelectItemsList ) ) Alias
    UnPivot  ::= 'UNPIVOT' ( ( 'INCLUDE' | 'EXCLUDE' ) 'NULLS' )? '(' PivotForColumns 'FOR' PivotForColumns 'IN' '(' SelectItemsList ')' ')' Alias?
    Referenced by:

    IntoClause

    INTO Table ,
             ::= 'INTO' Table ( ',' Table )*
    Referenced by:

    ParenthesedFromItem

    ( FromItem JoinsList )
             ::= '(' FromItem JoinsList? ')'
    Referenced by:

    FromItem

    TableFunction Table ParenthesedFromItem ParenthesedSelect Pivot UnPivot LateralSubSelect Alias SampleClause UnPivot PivotXml Pivot MySQLIndexHint SQLServerHints

    JoinsList

    JoinerExpression
             ::= JoinerExpression+

    JoinHint

    LOOP HASH MERGE REMOTE
    JoinHint ::= 'LOOP'
               | 'HASH'
               | 'MERGE'
               | 'REMOTE'
    Referenced by:

    JoinerExpression

    GLOBAL NATURAL RIGHT FULL OUTER LEFT SEMI OUTER INNER CROSS JoinHint JOIN , OUTER STRAIGHT_JOIN APPLY FromItem WITHIN ( JoinWindow ) ON Expression USING ( Column , )
             ::= 'GLOBAL'? 'NATURAL'? ( ( 'RIGHT' | 'FULL' )? 'OUTER'? | 'LEFT' ( 'SEMI' | 'OUTER' )? | 'INNER' | 'CROSS' ) ( JoinHint? 'JOIN' | ',' 'OUTER'? | 'STRAIGHT_JOIN' | 'APPLY' ) FromItem ( ( 'WITHIN' '(' JoinWindow ')' )? ( 'ON' Expression )+ | 'USING' '(' Column ( ',' Column )* ')' )?
    Referenced by:

    JoinWindow

    S_LONG S_IDENTIFIER K_DATE_LITERAL , S_LONG S_IDENTIFIER K_DATE_LITERAL
             ::= S_LONG ( S_IDENTIFIER | K_DATE_LITERAL ) ( ',' S_LONG ( S_IDENTIFIER | K_DATE_LITERAL ) )?
    Referenced by:

    KSQLWindowClause

    WINDOW HOPPING ( SIZE S_LONG S_IDENTIFIER , ADVANCE BY SESSION ( TUMBLING ( SIZE S_LONG S_IDENTIFIER )
             ::= 'WINDOW' ( 'HOPPING' '(' 'SIZE' S_LONG S_IDENTIFIER ',' 'ADVANCE' 'BY' | 'SESSION' '(' | 'TUMBLING' '(' 'SIZE' ) S_LONG S_IDENTIFIER ')'
    Referenced by:

    WhereClause

    WHERE Expression
             ::= 'WHERE' Expression

    OracleHierarchicalQueryClause

    START WITH AndExpression CONNECT BY NOCYCLE CONNECT BY NOCYCLE AndExpression START WITH AndExpression
             ::= ( 'START' 'WITH' AndExpression 'CONNECT' 'BY' 'NOCYCLE'? | 'CONNECT' 'BY' 'NOCYCLE'? ( AndExpression 'START' 'WITH' )? ) AndExpression
    Referenced by:

    GroupByColumnReferences

    GROUP BY GROUPING SETS ( GroupingSet , ) ExpressionList GROUPING SETS ( GroupingSet , ) WITH ROLLUP
             ::= 'GROUP' 'BY' ( 'GROUPING' 'SETS' '(' GroupingSet ( ',' GroupingSet )* ')' | ExpressionList ( 'GROUPING' 'SETS' '(' GroupingSet ( ',' GroupingSet )* ')' )? ( 'WITH' 'ROLLUP' )? )
    Referenced by:

    GroupingSet

    ParenthesedExpressionList SimpleExpression
             ::= ParenthesedExpressionList
               | SimpleExpression
    Referenced by:

    Having

    HAVING Expression
    Having   ::= 'HAVING' Expression
    Referenced by:

    Qualify

    QUALIFY Expression
    Qualify  ::= 'QUALIFY' Expression
    Referenced by:

    OrderByElements

    ORDER SIBLINGS BY OrderByElement ,
             ::= 'ORDER' 'SIBLINGS'? 'BY' OrderByElement ( ',' OrderByElement )*

    OrderByElement

    Expression ASC DESC NULLS FIRST LAST WITH ROLLUP
             ::= Expression ( 'ASC' | 'DESC' )? ( 'NULLS' ( 'FIRST' | 'LAST' )? )? ( 'WITH' 'ROLLUP' )?
    Referenced by:

    JdbcParameter

    ? S_PARAMETER S_LONG
             ::= ( '?' | S_PARAMETER ) S_LONG?

    LimitWithOffset

    LIMIT Expression , Expression PlainLimit
             ::= 'LIMIT' Expression ',' Expression
               | PlainLimit

    PlainLimit

    LIMIT ParenthesedSelect Expression
             ::= 'LIMIT' ( ParenthesedSelect | Expression )

    LimitBy

    LimitWithOffset BY ExpressionList
    Referenced by:

    Offset

    OFFSET Expression ROWS ROW
    Offset   ::= 'OFFSET' Expression ( 'ROWS' | 'ROW' )?

    Fetch

    FETCH FIRST NEXT Expression PERCENT ROWS ROW ONLY WITH TIES
    Fetch    ::= 'FETCH' ( 'FIRST' | 'NEXT' ) ( Expression 'PERCENT'? )? ( 'ROWS' | 'ROW' ) ( 'ONLY' | 'WITH TIES' )

    WithIsolation

    WITH K_ISOLATION
             ::= 'WITH' K_ISOLATION

    OptimizeFor

    OPTIMIZE FOR S_LONG ROWS
             ::= 'OPTIMIZE' 'FOR' S_LONG 'ROWS'
    Referenced by:

    Top

    TOP S_LONG JdbcParameter : S_IDENTIFIER ( AdditiveExpression ) PERCENT WITH TIES
    Top      ::= 'TOP' ( S_LONG | JdbcParameter | ':' S_IDENTIFIER? | '(' AdditiveExpression ')' ) 'PERCENT'? 'WITH TIES'?
    Referenced by:

    Skip

    SKIP S_LONG S_IDENTIFIER JdbcParameter
    Skip     ::= 'SKIP' ( S_LONG | S_IDENTIFIER | JdbcParameter )
    Referenced by:

    First

    FIRST LIMIT S_LONG S_IDENTIFIER JdbcParameter
    First    ::= ( 'FIRST' | 'LIMIT' ) ( S_LONG | S_IDENTIFIER | JdbcParameter )
    Referenced by:

    Expression

    XorExpression
             ::= XorExpression

    XorExpression

    OrExpression XOR
             ::= OrExpression ( 'XOR' OrExpression )*
    Referenced by:

    OrExpression

    AndExpression OR
             ::= AndExpression ( 'OR' AndExpression )*
    Referenced by:

    AndExpression

    Condition NOT ! ( XorExpression ) AND &&
             ::= ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) ( ( 'AND' | '&&' ) ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) )*

    Condition

    NOT ! RegularCondition SQLCondition
             ::= ( 'NOT' | '!' )? ( RegularCondition | SQLCondition )

    OverlapsCondition

    ParenthesedExpressionList OVERLAPS ParenthesedExpressionList
             ::= ParenthesedExpressionList 'OVERLAPS' ParenthesedExpressionList
    Referenced by:

    RegularCondition

    PRIOR ComparisonItem ( + ) > < = OP_GREATERTHANEQUALS OP_MINORTHANEQUALS OP_NOTEQUALSSTANDARD OP_NOTEQUALSBANG *= =* && &> <& @@ ~ ~* !~ !~* @> <@ ? ?| ?& OP_CONCAT - -# <-> <#> PRIOR ComparisonItem ( + )
             ::= 'PRIOR'? ComparisonItem ( '(' '+' ')' )? ( '>' | '<' | '=' | OP_GREATERTHANEQUALS | OP_MINORTHANEQUALS | OP_NOTEQUALSSTANDARD | OP_NOTEQUALSBANG | '*=' | '=*' | '&&' | '&>' | '<&' | '@@' | '~' | '~*' | '!~' | '!~*' | '@>' | '<@' | '?' | '?|' | '?&' | OP_CONCAT | '-' | '-#' | '<->' | '<#>' ) 'PRIOR'? ComparisonItem ( '(' '+' ')' )?

    SQLCondition

    ExistsExpression InExpression OverlapsCondition SimpleExpression Between MemberOfExpression IsNullExpression IsBooleanExpression LikeExpression IsDistinctExpression SimilarToExpression
             ::= ExistsExpression
               | InExpression
               | OverlapsCondition
    Referenced by:

    InExpression

    SimpleExpression ( + ) GLOBAL NOT IN S_CHAR_LITERAL Function ParenthesedSelect ParenthesedExpressionList SimpleExpression
             ::= SimpleExpression ( '(' '+' ')' )? 'GLOBAL'? 'NOT'? 'IN' ( S_CHAR_LITERAL | Function | ParenthesedSelect | ParenthesedExpressionList | SimpleExpression )
    Referenced by:

    Between

    NOT BETWEEN ParenthesedSelect RegularCondition SimpleExpression AND ParenthesedSelect RegularCondition SimpleExpression
    Referenced by:

    LikeExpression

    NOT LIKE ILIKE RLIKE REGEXP BINARY SimpleExpression ESCAPE S_CHAR_LITERAL Expression
             ::= 'NOT'? ( 'LIKE' | 'ILIKE' | 'RLIKE' | 'REGEXP' ) 'BINARY'? SimpleExpression ( 'ESCAPE' ( S_CHAR_LITERAL | Expression ) )?
    Referenced by:

    SimilarToExpression

    NOT SIMILAR TO SimpleExpression ESCAPE S_CHAR_LITERAL
             ::= 'NOT'? 'SIMILAR' 'TO' SimpleExpression ( 'ESCAPE' S_CHAR_LITERAL )?
    Referenced by:

    IsDistinctExpression

    IS NOT DISTINCT FROM SimpleExpression
             ::= 'IS' 'NOT'? 'DISTINCT' 'FROM' SimpleExpression
    Referenced by:

    IsNullExpression

    NOT ISNULL NOTNULL IS NOT NULL
             ::= 'NOT'? 'ISNULL'
               | 'NOTNULL'
               | 'IS' 'NOT'? 'NULL'
    Referenced by:

    IsBooleanExpression

    IS NOT TRUE FALSE
             ::= 'IS' 'NOT'? ( 'TRUE' | 'FALSE' )
    Referenced by:

    ExistsExpression

    EXISTS SimpleExpression
             ::= 'EXISTS' SimpleExpression
    Referenced by:

    MemberOfExpression

    MEMBER OF Expression
             ::= 'MEMBER' 'OF' Expression
    Referenced by:

    ExpressionList

    ComplexExpressionList SimpleExpressionList ParenthesedExpressionList
             ::= ComplexExpressionList
               | SimpleExpressionList
               | ParenthesedExpressionList

    ParenthesedExpressionList

    ( ComplexExpressionList SimpleExpressionList )
             ::= '(' ( ComplexExpressionList | SimpleExpressionList )? ')'

    SimpleExpressionList

    SimpleExpression ,
             ::= SimpleExpression ( ',' SimpleExpression )*

    ColumnList

    Column ,
             ::= Column ( ',' Column )*

    ParenthesedColumnList

    ( ColumnList )
             ::= '(' ColumnList ')'

    ComplexExpressionList

    OracleNamedFunctionParameter Expression ,

    NamedExpressionListExprFirst

    SimpleExpression FROM IN PLACING SimpleExpression FOR FROM SimpleExpression FOR SimpleExpression
             ::= SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression ( ( 'FOR' | 'FROM' ) SimpleExpression ( 'FOR' SimpleExpression )? )?

    ComparisonItem

    AnyComparisonExpression SimpleExpression ParenthesedExpressionList RowConstructor PrimaryExpression
             ::= AnyComparisonExpression
               | SimpleExpression
               | ParenthesedExpressionList
               | RowConstructor
               | PrimaryExpression
    Referenced by:

    AnyComparisonExpression

    ANY SOME ALL Select
             ::= ( 'ANY' | 'SOME' | 'ALL' ) Select
    Referenced by:

    SimpleExpression

    UserVariable = := ConcatExpression
             ::= ( UserVariable ( '=' | ':=' ) )? ConcatExpression

    ConcatExpression

    BitwiseAndOr OP_CONCAT
             ::= BitwiseAndOr ( OP_CONCAT BitwiseAndOr )*

    BitwiseAndOr

    AdditiveExpression | & << >>
             ::= AdditiveExpression ( ( '|' | '&' | '<<' | '>>' ) AdditiveExpression )*
    Referenced by:

    AdditiveExpression

    MultiplicativeExpression + -
             ::= MultiplicativeExpression ( ( '+' | '-' ) MultiplicativeExpression )*
    Referenced by:

    MultiplicativeExpression

    BitwiseXor * / DIV %
             ::= BitwiseXor ( ( '*' | '/' | 'DIV' | '%' ) BitwiseXor )*
    Referenced by:

    BitwiseXor

    PrimaryExpression ^
             ::= PrimaryExpression ( '^' PrimaryExpression )*
    Referenced by:

    ArrayExpression

    [ SimpleExpression : SimpleExpression ]
             ::= ( '[' SimpleExpression? ( ':' SimpleExpression? )? ']' )+
    Referenced by:

    PrimaryExpression

    NOT ! + - ~ NULL CaseWhenExpression JdbcParameter JdbcNamedParameter UserVariable NumericBind ExtractExpression MySQLGroupConcat XMLSerializeExpr JsonFunction JsonAggregateFunction FullTextSearch Function AnalyticExpression IntervalExpression S_DOUBLE S_LONG S_HEX CastExpression CharacterPrimary K_TIME_KEY_EXPR CURRENT DateTimeLiteralExpression ARRAY ArrayConstructor NextValExpression ConnectByRootOperator ALL Column S_CHAR_LITERAL {d {t {ts S_CHAR_LITERAL } ParenthesedSelect ParenthesedExpressionList . RelObjectNameExt COLLATE S_IDENTIFIER IntervalExpressionWithoutInterval ArrayExpression :: ColDataType -> ->> S_CHAR_LITERAL S_LONG #> #>> S_CHAR_LITERAL JsonExpression AT K_DATETIMELITERAL ZONE PrimaryExpression
             ::= ( 'NOT' | '!' )? ( '+' | '-' | '~' )? ( 'NULL' | CaseWhenExpression | JdbcParameter | JdbcNamedParameter | UserVariable | NumericBind | ExtractExpression | MySQLGroupConcat | XMLSerializeExpr | JsonFunction | JsonAggregateFunction | FullTextSearch | Function AnalyticExpression? | IntervalExpression | S_DOUBLE | S_LONG | S_HEX | CastExpression | CharacterPrimary | K_TIME_KEY_EXPR | 'CURRENT' | DateTimeLiteralExpression | 'ARRAY' ArrayConstructor | NextValExpression | ConnectByRootOperator | 'ALL' | Column | S_CHAR_LITERAL | ( '{d' | '{t' | '{ts' ) S_CHAR_LITERAL '}' | ParenthesedSelect | ParenthesedExpressionList ( '.' RelObjectNameExt )? ) ( 'COLLATE' S_IDENTIFIER )? IntervalExpressionWithoutInterval? ArrayExpression? ( '::' ColDataType )* ( ( ( '->' | '->>' ) ( S_CHAR_LITERAL | S_LONG ) | ( '#>' | '#>>' ) S_CHAR_LITERAL )+ JsonExpression )? ( 'AT' K_DATETIMELITERAL 'ZONE' PrimaryExpression )*

    ConnectByRootOperator

    CONNECT_BY_ROOT Column
             ::= 'CONNECT_BY_ROOT' Column
    Referenced by:

    NextValExpression

    K_NEXTVAL RelObjectNameList
             ::= K_NEXTVAL RelObjectNameList
    Referenced by:

    JdbcNamedParameter

    : & IdentifierChain
             ::= ( ':' | '&' ) IdentifierChain

    OracleNamedFunctionParameter

    RelObjectNameExt2 => Expression
             ::= RelObjectNameExt2 '=>' Expression
    Referenced by:

    UserVariable

    @ @@ IdentifierChain
             ::= ( '@' | '@@' ) IdentifierChain

    NumericBind

    : S_LONG
             ::= ':' S_LONG
    Referenced by:

    DateTimeLiteralExpression

    K_DATETIMELITERAL S_CHAR_LITERAL
             ::= K_DATETIMELITERAL S_CHAR_LITERAL
    Referenced by:

    RangeExpression

    : Expression
             ::= ':' Expression
    Referenced by:

    ArrayConstructor

    [ Expression RangeExpression ArrayConstructor , ]
             ::= '[' ( ( Expression RangeExpression? | ArrayConstructor ) ( ',' ( Expression RangeExpression? | ArrayConstructor ) )* )? ']'

    ParenthesedExpression

    ( PrimaryExpression )
             ::= '(' PrimaryExpression ')'
    Not referenced by any.

    JsonExpression

    :: ColDataType -> ->> S_CHAR_LITERAL S_LONG #> #>> S_CHAR_LITERAL
             ::= ( ( '::' ColDataType )+ ( ( '->' | '->>' ) ( S_CHAR_LITERAL | S_LONG ) | ( '#>' | '#>>' ) S_CHAR_LITERAL )* )*
    Referenced by:

    JsonFunction

    JSON_OBJECT ( KEY S_CHAR_LITERAL : , VALUE Expression FORMAT JSON , KEY S_CHAR_LITERAL : , VALUE Expression FORMAT JSON NULL ABSENT ON NULL WITH WITHOUT UNIQUE KEYS JSON_ARRAY ( NULL ON NULL Expression FORMAT JSON , ABSENT ON NULL )
             ::= ( 'JSON_OBJECT' '(' ( 'KEY'? S_CHAR_LITERAL ( ( ':' | ',' | 'VALUE' ) Expression ( 'FORMAT' 'JSON' )? )? ( ',' 'KEY'? S_CHAR_LITERAL ( ':' | ',' | 'VALUE' ) Expression ( 'FORMAT' 'JSON' )? )* )? ( ( 'NULL' | 'ABSENT' ) 'ON' 'NULL' )? ( ( 'WITH' | 'WITHOUT' ) 'UNIQUE' 'KEYS' )? | 'JSON_ARRAY' '(' ( 'NULL' 'ON' 'NULL' | Expression ( 'FORMAT' 'JSON' )? ( ',' Expression ( 'FORMAT' 'JSON' )? )* )* ( 'ABSENT' 'ON' 'NULL' )? ) ')'
    Referenced by:

    JsonAggregateFunction

    JSON_OBJECTAGG ( KEY DT_ZONE S_DOUBLE S_LONG S_HEX S_CHAR_LITERAL S_IDENTIFIER S_QUOTED_IDENTIFIER : VALUE S_IDENTIFIER S_QUOTED_IDENTIFIER FORMAT JSON NULL ABSENT ON NULL WITH WITHOUT UNIQUE KEYS JSON_ARRAYAGG ( Expression FORMAT JSON OrderByElements NULL ABSENT ON NULL ) FILTER ( WHERE Expression ) OVER ( PARTITION BY ComplexExpressionList ( ComplexExpressionList ) OrderByElements WindowElement )
             ::= ( 'JSON_OBJECTAGG' '(' 'KEY'? ( DT_ZONE | S_DOUBLE | S_LONG | S_HEX | S_CHAR_LITERAL | S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ( ':' | 'VALUE' ) ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ( 'FORMAT' 'JSON' )? ( ( 'NULL' | 'ABSENT' ) 'ON' 'NULL' )? ( ( 'WITH' | 'WITHOUT' ) 'UNIQUE' 'KEYS' )? | 'JSON_ARRAYAGG' '(' Expression ( 'FORMAT' 'JSON' )? OrderByElements? ( ( 'NULL' | 'ABSENT' ) 'ON' 'NULL' )? ) ')' ( 'FILTER' '(' 'WHERE' Expression ')' )? ( 'OVER' '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? OrderByElements? WindowElement? ')' )?
    Referenced by:

    IntervalExpression

    INTERVAL - S_LONG S_DOUBLE S_CHAR_LITERAL JdbcParameter JdbcNamedParameter Function Column S_IDENTIFIER K_DATE_LITERAL
             ::= 'INTERVAL' '-'? ( S_LONG | S_DOUBLE | S_CHAR_LITERAL | JdbcParameter | JdbcNamedParameter | Function | Column ) ( S_IDENTIFIER | K_DATE_LITERAL )?
    Referenced by:

    IntervalExpressionWithoutInterval

    K_DATE_LITERAL
             ::= K_DATE_LITERAL
    Referenced by:

    KeepExpression

    KEEP ( S_IDENTIFIER FIRST LAST OrderByElements )
             ::= 'KEEP' '(' S_IDENTIFIER ( 'FIRST' | 'LAST' ) OrderByElements ')'
    Referenced by:

    windowFun

    IGNORE NULLS OVER WITHIN GROUP RelObjectName windowDefinition OVER ( PARTITION BY ComplexExpressionList ( ComplexExpressionList ) )
             ::= ( ( 'IGNORE' 'NULLS' )? 'OVER' | 'WITHIN' 'GROUP' ) ( RelObjectName | windowDefinition ( 'OVER' '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? ')' )? )
    Referenced by:

    windowDefinition

    ( PARTITION BY ComplexExpressionList ( ComplexExpressionList ) OrderByElements WindowElement )
             ::= '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? OrderByElements? WindowElement? ')'
    Referenced by:

    AnalyticExpression

    FILTER ( WHERE Expression ) windowFun windowFun
             ::= 'FILTER' '(' 'WHERE' Expression ')' windowFun?
               | windowFun
    Referenced by:

    WindowElement

    ROWS RANGE BETWEEN WindowOffset AND WindowOffset
             ::= ( 'ROWS' | 'RANGE' ) ( 'BETWEEN' WindowOffset 'AND' )? WindowOffset

    WindowOffset

    UNBOUNDED SimpleExpression PRECEDING FOLLOWING CURRENT ROW
             ::= ( 'UNBOUNDED' | SimpleExpression ) ( 'PRECEDING' | 'FOLLOWING' )
               | 'CURRENT' 'ROW'
    Referenced by:

    ExtractExpression

    EXTRACT ( RelObjectName S_CHAR_LITERAL FROM SimpleExpression )
             ::= 'EXTRACT' '(' ( RelObjectName | S_CHAR_LITERAL ) 'FROM' SimpleExpression ')'
    Referenced by:

    CastExpression

    CAST SAFE_CAST TRY_CAST INTERPRET ( SimpleExpression AS ROW ( ColumnDefinition , ) ColDataType )
             ::= ( 'CAST' | 'SAFE_CAST' | 'TRY_CAST' | 'INTERPRET' ) '(' SimpleExpression 'AS' ( 'ROW' '(' ColumnDefinition ( ',' ColumnDefinition )* ')' | ColDataType ) ')'
    Referenced by:

    CaseWhenExpression

    CASE Expression WhenThenSearchCondition ELSE Expression SimpleExpression END
             ::= 'CASE' Expression? WhenThenSearchCondition+ ( 'ELSE' ( Expression | SimpleExpression ) )? 'END'
    Referenced by:

    WhenThenSearchCondition

    WHEN Expression THEN Expression SimpleExpression
             ::= 'WHEN' Expression 'THEN' ( Expression | SimpleExpression )
    Referenced by:

    RowConstructor

    ROW ParenthesedExpressionList
             ::= 'ROW' ParenthesedExpressionList
    Referenced by:

    VariableExpression

    UserVariable = SimpleExpression
             ::= UserVariable '=' SimpleExpression
    Not referenced by any.

    Execute

    EXEC EXECUTE CALL RelObjectNameList ExpressionList
    Execute  ::= ( 'EXEC' | 'EXECUTE' | 'CALL' ) RelObjectNameList ExpressionList?
    Referenced by:

    FullTextSearch

    MATCH ( ColumnList ) AGAINST ( S_CHAR_LITERAL JdbcParameter JdbcNamedParameter IN NATURAL LANGUAGE MODE IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION IN BOOLEAN MODE WITH QUERY EXPANSION )
             ::= 'MATCH' '(' ColumnList ')' 'AGAINST' '(' ( S_CHAR_LITERAL | JdbcParameter | JdbcNamedParameter ) ( 'IN NATURAL LANGUAGE MODE' | 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION' | 'IN BOOLEAN MODE' | 'WITH QUERY EXPANSION' )? ')'
    Referenced by:

    Function

    { FN InternalFunction } SimpleFunction SpecialStringFunctionWithNamedParameters InternalFunction
    Function ::= '{' 'FN' InternalFunction '}'
               | SimpleFunction
               | InternalFunction

    SpecialStringFunctionWithNamedParameters

    K_STRING_FUNCTION_NAME ( NamedExpressionListExprFirst ExpressionList )
    Referenced by:

    SimpleFunction

    RelObjectNameList ( * AllTableColumns ParenthesedSelect SimpleFunction RegularCondition SimpleExpressionList ) . Function Column
    Referenced by:

    InternalFunction

    RelObjectNameList ( DISTINCT ALL UNIQUE ExpressionList OrderByElements Select IGNORE NULLS ) . Function Column KeepExpression
             ::= RelObjectNameList '(' ( ( 'DISTINCT' | 'ALL' | 'UNIQUE' )? ( ExpressionList OrderByElements? | Select ) )? ( 'IGNORE' 'NULLS' )? ')' ( '.' ( Function | Column ) )? KeepExpression?
    Referenced by:

    XMLSerializeExpr

    XMLSERIALIZE ( XMLAGG ( XMLTEXT ( SimpleExpression ) OrderByElements ) AS ColDataType )
             ::= 'XMLSERIALIZE' '(' 'XMLAGG' '(' 'XMLTEXT' '(' SimpleExpression ')' OrderByElements? ')' 'AS' ColDataType ')'
    Referenced by:

    MySQLGroupConcat

    GROUP_CONCAT ( DISTINCT ExpressionList OrderByElements SEPARATOR S_CHAR_LITERAL )
             ::= 'GROUP_CONCAT' '(' 'DISTINCT'? ExpressionList OrderByElements? ( 'SEPARATOR' S_CHAR_LITERAL )? ')'
    Referenced by:

    TableFunction

    LATERAL Function
             ::= 'LATERAL'? Function
    Referenced by:

    ColumnNamesWithParamsList

    ( RelObjectName CreateParameter , )
             ::= '(' RelObjectName CreateParameter? ( ',' RelObjectName CreateParameter? )* ')'
    Referenced by:

    Index

    RelObjectNameList

    CreateIndex

    CreateParameter INDEX IF NOT EXISTS Index ON Table USING S_IDENTIFIER USING S_IDENTIFIER ON Table ColumnNamesWithParamsList CreateParameter
             ::= CreateParameter? 'INDEX' ( 'IF' 'NOT' 'EXISTS' )? Index ( 'ON' Table ( 'USING' S_IDENTIFIER )? | ( 'USING' S_IDENTIFIER )? 'ON' Table ) ColumnNamesWithParamsList CreateParameter*
    Referenced by:

    ColumnDefinition

    RelObjectName ColDataType CreateParameter

    CreateSchema

    SCHEMA S_IDENTIFIER S_QUOTED_IDENTIFIER AUTHORIZATION S_IDENTIFIER S_QUOTED_IDENTIFIER PathSpecification CREATE CreateTable CreateView
             ::= 'SCHEMA' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER )? ( 'AUTHORIZATION' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? PathSpecification? ( 'CREATE' CreateTable | CreateView )*
    Referenced by:

    PathSpecification

    PATH S_IDENTIFIER S_QUOTED_IDENTIFIER ,
             ::= 'PATH' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ( ',' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )*
    Referenced by:

    CreateTable

    UNLOGGED GLOBAL CreateParameter TABLE IF NOT EXISTS Table ( ColumnDefinition , INDEX UNIQUE FULLTEXT KEY RelObjectName ColumnNamesWithParamsList CreateParameter CONSTRAINT RelObjectName PRIMARY KEY UNIQUE KEY ColumnNamesWithParamsList CreateParameter FOREIGN KEY ColumnNamesWithParamsList REFERENCES Table ColumnsNamesList ON DELETE UPDATE Action ON DELETE UPDATE Action CHECK ( Expression ) EXCLUDE WHERE ( Expression ) ColumnDefinition RelObjectName , ) CreateParameter RowMovement AS Select LIKE ( Table ) Table , SpannerInterleaveIn
             ::= 'UNLOGGED'? 'GLOBAL'? CreateParameter* 'TABLE' ( 'IF' 'NOT' 'EXISTS' )? Table ( '(' ( RelObjectName ( ',' RelObjectName )* | ColumnDefinition ( ',' ( ( 'INDEX' | 'UNIQUE'? 'FULLTEXT'? 'KEY' ) RelObjectName ColumnNamesWithParamsList CreateParameter* | ( 'CONSTRAINT' RelObjectName )? ( ( 'PRIMARY' 'KEY' | 'UNIQUE' 'KEY'? ) ColumnNamesWithParamsList CreateParameter* | 'FOREIGN' 'KEY' ColumnNamesWithParamsList 'REFERENCES' Table ColumnsNamesList ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? | 'CHECK' ( '(' Expression ')' )* ) | 'EXCLUDE' 'WHERE' ( '(' Expression ')' )* | ColumnDefinition ) )* ) ')' )? CreateParameter* RowMovement? ( 'AS' Select )? ( 'LIKE' ( '(' Table ')' | Table ) )? ( ',' SpannerInterleaveIn )?
    Referenced by:

    SpannerInterleaveIn

    INTERLEAVE IN PARENT Table ON DELETE NO ACTION CASCADE
             ::= 'INTERLEAVE' 'IN' 'PARENT' Table ( 'ON' 'DELETE' ( 'NO' 'ACTION' | 'CASCADE' ) )?
    Referenced by:

    ColDataType

    ARRAY < ColDataType > BYTES STRING JSON ( S_LONG S_IDENTIFIER ) CHARACTER BIT VARYING DOUBLE PRECISION S_IDENTIFIER S_QUOTED_IDENTIFIER K_DATETIMELITERAL K_DATE_LITERAL XML INTERVAL DT_ZONE CHAR SET BINARY JSON STRING PUBLIC DATA . RelObjectName UNSIGNED SIGNED S_IDENTIFIER ( S_LONG BYTE CHAR S_CHAR_LITERAL S_IDENTIFIER CHAR , ) [ S_LONG ] CHARACTER SET S_IDENTIFIER BINARY
             ::= ( 'ARRAY' '<' ColDataType '>' | ( 'BYTES' | 'STRING' | 'JSON' ) '(' ( S_LONG | S_IDENTIFIER ) ')' | ( 'CHARACTER' | 'BIT' ) 'VARYING'? | 'DOUBLE' 'PRECISION'? | ( S_IDENTIFIER | S_QUOTED_IDENTIFIER | K_DATETIMELITERAL | K_DATE_LITERAL | 'XML' | 'INTERVAL' | DT_ZONE | 'CHAR' | 'SET' | 'BINARY' | 'JSON' | 'STRING' | 'PUBLIC' | 'DATA' ) ( '.' RelObjectName )? | ( 'UNSIGNED' | 'SIGNED' ) S_IDENTIFIER? ) ( '(' ( ( S_LONG ( 'BYTE' | 'CHAR' )? | S_CHAR_LITERAL | S_IDENTIFIER | 'CHAR' ) ','? )* ')' )? ( '[' S_LONG? ']' )* ( 'CHARACTER' 'SET' ( S_IDENTIFIER | 'BINARY' ) )?

    Analyze

    ANALYZE Table
    Analyze  ::= 'ANALYZE' Table
    Referenced by:

    ColumnWithCommentList

    ( Column , )
             ::= '(' Column ( ',' Column )* ')'
    Referenced by:

    CreateView

    NO FORCE SECURE TEMP TEMPORARY VOLATILE MATERIALIZED VIEW Table AUTO REFRESH YES NO IF NOT EXISTS ColumnWithCommentList CreateViewTailComment AS Select WITH READ ONLY
             ::= ( 'NO'? 'FORCE' )? 'SECURE'? ( 'TEMP' | 'TEMPORARY' | 'VOLATILE' )? 'MATERIALIZED'? 'VIEW' Table ( 'AUTO' 'REFRESH' ( 'YES' | 'NO' ) )? ( 'IF' 'NOT' 'EXISTS' )? ColumnWithCommentList? CreateViewTailComment? 'AS' Select ( 'WITH' 'READ' 'ONLY' )?
    Referenced by:

    CreateViewTailComment

    COMMENT = S_CHAR_LITERAL
             ::= 'COMMENT' '='? S_CHAR_LITERAL
    Referenced by:

    Action

    CASCADE RESTRICT NO ACTION SET NULL DEFAULT
    Action   ::= 'CASCADE'
               | 'RESTRICT'
               | 'NO' 'ACTION'
               | 'SET' ( 'NULL' | 'DEFAULT' )

    AlterView

    VIEW Table ColumnsNamesList AS Select
             ::= 'VIEW' Table ColumnsNamesList? 'AS' Select
    Referenced by:

    CreateParameter

    K_NEXTVAL ( S_CHAR_LITERAL :: ColDataType ) S_IDENTIFIER S_QUOTED_IDENTIFIER . S_IDENTIFIER S_QUOTED_IDENTIFIER USING INDEX TABLESPACE RelObjectName S_CHAR_LITERAL NULL NOT PRIMARY FOREIGN REFERENCES KEY STORED ON COMMIT DROP ROWS UNIQUE CASCADE DELETE UPDATE CONSTRAINT WITH EXCLUDE WHERE UNSIGNED TEMP TEMPORARY PARTITION BY IN TYPE COMMENT USING COLLATE ASC DESC TRUE FALSE PARALLEL BINARY START K_TIME_KEY_EXPR RAW HASH FIRST LAST = DEFAULT AS CHECK ( Expression ) + - S_LONG S_DOUBLE AList CHARACTER SET ARRAY ArrayConstructor :: ColDataType
             ::= K_NEXTVAL '(' S_CHAR_LITERAL '::' ColDataType ')'
               | ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ( '.' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )?
               | ( 'USING' 'INDEX' )? 'TABLESPACE' RelObjectName
               | S_CHAR_LITERAL
               | 'NULL'
               | 'NOT'
               | 'PRIMARY'
               | 'FOREIGN'
               | 'REFERENCES'
               | 'KEY'
               | 'STORED'
               | 'ON'
               | 'COMMIT'
               | 'DROP'
               | 'ROWS'
               | 'UNIQUE'
               | 'CASCADE'
               | 'DELETE'
               | 'UPDATE'
               | 'CONSTRAINT'
               | 'WITH'
               | 'EXCLUDE'
               | 'WHERE'
               | 'UNSIGNED'
               | 'TEMP'
               | 'TEMPORARY'
               | 'PARTITION'
               | 'BY'
               | 'IN'
               | 'TYPE'
               | 'COMMENT'
               | 'USING'
               | 'COLLATE'
               | 'ASC'
               | 'DESC'
               | 'TRUE'
               | 'FALSE'
               | 'PARALLEL'
               | 'BINARY'
               | 'START'
               | K_TIME_KEY_EXPR
               | 'RAW'
               | 'HASH'
               | 'FIRST'
               | 'LAST'
               | '='
               | ( 'DEFAULT' | 'AS' | 'CHECK' ) ( '(' Expression ')' )?
               | ( '+' | '-' )? S_LONG
               | S_DOUBLE
               | AList
               | 'CHARACTER' 'SET'
               | 'ARRAY' ArrayConstructor
               | '::' ColDataType

    RowMovement

    ENABLE DISABLE ROW MOVEMENT
             ::= ( 'ENABLE' | 'DISABLE' ) 'ROW' 'MOVEMENT'
    Referenced by:

    AList

    ( S_LONG S_DOUBLE S_CHAR_LITERAL RelObjectNameWithoutValue , = )
    AList    ::= '(' ( ( S_LONG | S_DOUBLE | S_CHAR_LITERAL | RelObjectNameWithoutValue ) ( ',' | '=' )? )* ')'
    Referenced by:

    ColumnsNamesListItem

    RelObjectName ( S_LONG )
             ::= RelObjectName ( '(' S_LONG ')' )?

    ColumnsNamesList

    ( ColumnsNamesListItem , )
             ::= '(' ColumnsNamesListItem ( ',' ColumnsNamesListItem )* ')'

    FuncArgsListItem

    RelObjectName RelObjectName ( S_LONG )
             ::= RelObjectName RelObjectName? ( '(' S_LONG ')' )?
    Referenced by:

    FuncArgsList

    ( FuncArgsListItem , )
             ::= '(' ( FuncArgsListItem ( ',' FuncArgsListItem )* )? ')'
    Referenced by:

    Drop

    DROP MATERIALIZED S_IDENTIFIER TEMPORARY TABLE INDEX VIEW SCHEMA SEQUENCE FUNCTION IF EXISTS Table FuncArgsList S_IDENTIFIER CASCADE RESTRICT ON
    Drop     ::= 'DROP' 'MATERIALIZED'? ( S_IDENTIFIER | 'TEMPORARY'? 'TABLE' | 'INDEX' | 'VIEW' | 'SCHEMA' | 'SEQUENCE' | 'FUNCTION' ) ( 'IF' 'EXISTS' )? Table FuncArgsList? ( S_IDENTIFIER | 'CASCADE' | 'RESTRICT' | 'ON' )*
    Referenced by:

    Truncate

    TRUNCATE TABLE ONLY Table CASCADE
    Truncate ::= 'TRUNCATE' 'TABLE'? 'ONLY'? Table 'CASCADE'?
    Referenced by:

    AlterExpressionColumnDataType

    RelObjectName TYPE ColDataType CreateParameter
             ::= RelObjectName 'TYPE'? ColDataType? CreateParameter*
    Referenced by:

    AlterExpressionColumnDropNotNull

    RelObjectName DROP NOT NULL
             ::= RelObjectName 'DROP' 'NOT'? 'NULL'
    Referenced by:

    AlterExpressionColumnDropDefault

    RelObjectName DROP DEFAULT
             ::= RelObjectName 'DROP' 'DEFAULT'
    Referenced by:

    AlterExpressionConstraintState

    NOT DEFERRABLE VALIDATE NOVALIDATE ENABLE DISABLE
             ::= ( 'NOT'? 'DEFERRABLE' | 'VALIDATE' | 'NOVALIDATE' | 'ENABLE' | 'DISABLE' )*
    Referenced by:

    IndexWithComment

    COMMENT S_CHAR_LITERAL
             ::= 'COMMENT' S_CHAR_LITERAL
    Referenced by:

    AlterExpression

    ADD ALTER MODIFY PRIMARY KEY ColumnsNamesList AlterExpressionConstraintState USING RelObjectName KEY INDEX RelObjectName ColumnsNamesList AlterExpressionConstraintState UNIQUE KEY INDEX S_IDENTIFIER S_QUOTED_IDENTIFIER ColumnsNamesList USING RelObjectName IndexWithComment RelObjectName COMMENT S_CHAR_LITERAL COLUMN IF NOT EXISTS ( AlterExpressionColumnDataType , ) AlterExpressionColumnDataType AlterExpressionColumnDropNotNull AlterExpressionColumnDropDefault ( AlterExpressionColumnDataType , ) FOREIGN KEY ColumnsNamesList REFERENCES Table ColumnsNamesList ON DELETE UPDATE Action ON DELETE UPDATE Action CONSTRAINT RelObjectName FOREIGN KEY ColumnsNamesList REFERENCES Table ColumnsNamesList ON DELETE UPDATE Action ON DELETE UPDATE Action KEY ColumnsNamesList AlterExpressionConstraintState PRIMARY KEY UNIQUE KEY INDEX ColumnsNamesList AlterExpressionConstraintState USING RelObjectName IndexWithComment CHECK ( Expression ) CHANGE COLUMN S_IDENTIFIER S_QUOTED_IDENTIFIER AlterExpressionColumnDataType DROP ColumnsNamesList COLUMN IF EXISTS S_IDENTIFIER S_QUOTED_IDENTIFIER INVALIDATE CASCADE CONSTRAINTS INDEX KEY S_IDENTIFIER S_QUOTED_IDENTIFIER UNIQUE FOREIGN KEY ColumnsNamesList PRIMARY KEY CONSTRAINT IF EXISTS S_IDENTIFIER S_QUOTED_IDENTIFIER CASCADE RESTRICT ALGORITHM = TRUNCATE PARTITION RelObjectName RENAME COLUMN INDEX KEY CONSTRAINT S_IDENTIFIER S_QUOTED_IDENTIFIER TO S_IDENTIFIER S_QUOTED_IDENTIFIER COMMENT = S_CHAR_LITERAL captureRest
             ::= ( 'ADD' | 'ALTER' | 'MODIFY' ) ( 'PRIMARY' 'KEY' ColumnsNamesList AlterExpressionConstraintState ( 'USING' RelObjectName )? | ( ( 'KEY' | 'INDEX' ) RelObjectName ColumnsNamesList AlterExpressionConstraintState | 'UNIQUE' ( ( 'KEY' | 'INDEX' ) ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? ColumnsNamesList ) ( 'USING' RelObjectName )? IndexWithComment? | RelObjectName 'COMMENT' S_CHAR_LITERAL | 'COLUMN'? ( 'IF' 'NOT' 'EXISTS' )? ( '(' AlterExpressionColumnDataType ( ',' AlterExpressionColumnDataType )* ')' | AlterExpressionColumnDataType | AlterExpressionColumnDropNotNull | AlterExpressionColumnDropDefault ) | '(' AlterExpressionColumnDataType ( ',' AlterExpressionColumnDataType )* ')' | 'FOREIGN' 'KEY' ColumnsNamesList 'REFERENCES' Table ColumnsNamesList? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? | 'CONSTRAINT' RelObjectName ( ( 'FOREIGN' 'KEY' ColumnsNamesList 'REFERENCES' Table ColumnsNamesList? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? ( 'ON' ( 'DELETE' | 'UPDATE' ) Action )? | 'KEY' ColumnsNamesList ) AlterExpressionConstraintState | ( 'PRIMARY' 'KEY' | 'UNIQUE' ( 'KEY' | 'INDEX' )? ) ColumnsNamesList AlterExpressionConstraintState ( 'USING' RelObjectName )? IndexWithComment? | 'CHECK' ( '(' Expression ')' )* ) )
               | 'CHANGE' 'COLUMN'? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) AlterExpressionColumnDataType
               | 'DROP' ( ( ColumnsNamesList | 'COLUMN'? ( 'IF' 'EXISTS' )? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ) 'INVALIDATE'? ( 'CASCADE' 'CONSTRAINTS'? )? | ( 'INDEX' | 'KEY' ) ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) | ( ( 'UNIQUE' | 'FOREIGN' 'KEY' ) ColumnsNamesList | 'PRIMARY' 'KEY' | 'CONSTRAINT' ( 'IF' 'EXISTS' )? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ) ( 'CASCADE' | 'RESTRICT' )? )
               | ( 'ALGORITHM' '='? | 'TRUNCATE' 'PARTITION' ) RelObjectName
               | 'RENAME' ( ( 'COLUMN' | 'INDEX' | 'KEY' | 'CONSTRAINT' )? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? 'TO' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER )
               | 'COMMENT' '='? S_CHAR_LITERAL
               | captureRest
    Referenced by:

    Alter

    ALTER AlterTable AlterSession AlterView AlterSystemStatement AlterSequence captureRest REPLACE AlterView captureRest
               | 'REPLACE' ( AlterView | captureRest )
    Referenced by:

    AlterTable

    TABLE ONLY IF EXISTS Table AlterExpression ,
             ::= 'TABLE' 'ONLY'? ( 'IF' 'EXISTS' )? Table AlterExpression ( ',' AlterExpression )*
    Referenced by:

    AlterSession

    SESSION ADVISE COMMIT ROLLBACK NOTHING CLOSE DATABASE LINK ENABLE DISABLE COMMIT IN PROCEDURE GUARD PARALLEL DML DDL QUERY RESUMABLE FORCE PARALLEL DML DDL QUERY SET S_CHAR_LITERAL S_IDENTIFIER = S_LONG PARALLEL
             ::= 'SESSION' ( 'ADVISE' ( 'COMMIT' | 'ROLLBACK' | 'NOTHING' ) | 'CLOSE' 'DATABASE' 'LINK' | ( 'ENABLE' | 'DISABLE' ) ( 'COMMIT' 'IN' 'PROCEDURE' | 'GUARD' | 'PARALLEL' ( 'DML' | 'DDL' | 'QUERY' ) | 'RESUMABLE' ) | 'FORCE' 'PARALLEL' ( 'DML' | 'DDL' | 'QUERY' ) | 'SET' ) ( S_CHAR_LITERAL | S_IDENTIFIER | '=' | S_LONG | 'PARALLEL' )*
    Referenced by:

    AlterSystemStatement

    SYSTEM ARCHIVE LOG CHECKPOINT DUMP ACTIVE SESSION HISTORY ENABLE DISABLE DISTRIBUTED RECOVERY RESTRICTED SESSION FLUSH DISCONNECT SESSION KILL SESSION SWITCH SUSPEND RESUME QUIESCE RESTRICTED UNQIESCE SHUTDOWN REGISTER SET RESET captureRest
             ::= 'SYSTEM' ( 'ARCHIVE' 'LOG' | 'CHECKPOINT' | 'DUMP' 'ACTIVE' 'SESSION' 'HISTORY' | ( 'ENABLE' | 'DISABLE' ) ( 'DISTRIBUTED RECOVERY' | 'RESTRICTED SESSION' ) | 'FLUSH' | 'DISCONNECT' 'SESSION' | 'KILL SESSION' | 'SWITCH' | 'SUSPEND' | 'RESUME' | 'QUIESCE' 'RESTRICTED' | 'UNQIESCE' | 'SHUTDOWN' | 'REGISTER' | 'SET' | 'RESET' ) captureRest
    Referenced by:

    Wait

    WAIT S_LONG
    Wait     ::= 'WAIT' S_LONG
    Referenced by:

    SavepointStatement

    SAVEPOINT S_IDENTIFIER
             ::= 'SAVEPOINT' S_IDENTIFIER
    Referenced by:

    RollbackStatement

    ROLLBACK WORK TO SAVEPOINT S_IDENTIFIER FORCE S_CHAR_LITERAL
             ::= 'ROLLBACK' 'WORK'? ( 'TO' 'SAVEPOINT'? S_IDENTIFIER | 'FORCE' S_CHAR_LITERAL )?
    Referenced by:

    Comment

    COMMENT ON TABLE VIEW Table COLUMN Column IS S_CHAR_LITERAL
    Comment  ::= 'COMMENT' 'ON' ( ( 'TABLE' | 'VIEW' ) Table | 'COLUMN' Column ) 'IS' S_CHAR_LITERAL
    Referenced by:

    Grant

    GRANT readGrantTypes , ON RelObjectNameList S_IDENTIFIER TO UsersList
    Grant    ::= 'GRANT' ( ( readGrantTypes ( ',' readGrantTypes )* )? 'ON' RelObjectNameList | S_IDENTIFIER ) 'TO' UsersList
    Referenced by:

    UsersList

    RelObjectName , ColumnsNamesListItem
             ::= RelObjectName ( ',' ColumnsNamesListItem )*
    Referenced by:

    readGrantTypes

    K_SELECT INSERT UPDATE DELETE EXECUTE ALTER DROP
             ::= K_SELECT
               | 'INSERT'
               | 'UPDATE'
               | 'DELETE'
               | 'EXECUTE'
               | 'ALTER'
               | 'DROP'
    Referenced by:

    Sequence

    RelObjectNameList

    SequenceParameters

    INCREMENT BY START WITH MAXVALUE MINVALUE CACHE S_LONG RESTART WITH S_LONG NOMAXVALUE NOMINVALUE NOCYCLE CYCLE NOCACHE ORDER NOORDER KEEP NOKEEP SESSION GLOBAL
             ::= ( ( 'INCREMENT' 'BY' | 'START' 'WITH' | 'MAXVALUE' | 'MINVALUE' | 'CACHE' ) S_LONG | 'RESTART' ( 'WITH' S_LONG )? | 'NOMAXVALUE' | 'NOMINVALUE' | 'NOCYCLE' | 'CYCLE' | 'NOCACHE' | 'ORDER' | 'NOORDER' | 'KEEP' | 'NOKEEP' | 'SESSION' | 'GLOBAL' )*

    CreateSequence

    SEQUENCE Sequence SequenceParameters
             ::= 'SEQUENCE' Sequence SequenceParameters
    Referenced by:

    AlterSequence

    SEQUENCE Sequence SequenceParameters
             ::= 'SEQUENCE' Sequence SequenceParameters
    Referenced by:

    Create

    CREATE OR REPLACE CreateFunctionStatement CreateSchema CreateSequence CreateSynonym CreateTable CreateView TRIGGER DOMAIN captureRest CreateIndex
    Create   ::= 'CREATE' ( 'OR' 'REPLACE' )? ( CreateFunctionStatement | CreateSchema | CreateSequence | CreateSynonym | CreateTable | CreateView | ( 'TRIGGER' | 'DOMAIN' )? captureRest | CreateIndex )
    Referenced by:

    CreateFunctionStatement

    FUNCTION PROCEDURE captureFunctionBody
             ::= ( 'FUNCTION' | 'PROCEDURE' ) captureFunctionBody
    Referenced by:

    CreateSynonym

    PUBLIC SYNONYM Synonym FOR RelObjectNameList
             ::= 'PUBLIC'? 'SYNONYM' Synonym 'FOR' RelObjectNameList
    Referenced by:

    Synonym

    RelObjectNameList
    Referenced by:

    UnsupportedStatement

    captureUnsupportedStatementDeclaration
    Referenced by:

    IdentifierChain

    RelObjectNameExt2 .
             ::= RelObjectNameExt2 ( '.' RelObjectNameExt2 )*

    CharacterPrimary

    TranscodingFunction TrimFunction
             ::= TranscodingFunction
               | TrimFunction
    Referenced by:

    TranscodingFunction

    CONVERT ( Expression USING IdentifierChain )
             ::= 'CONVERT' '(' Expression 'USING' IdentifierChain ')'
    Referenced by:

    TrimFunction

    TRIM ( LEADING TRAILING BOTH Expression , FROM Expression )
             ::= 'TRIM' '(' ( 'LEADING' | 'TRAILING' | 'BOTH' )? Expression? ( ( ',' | 'FROM' ) Expression )? ')'
    Referenced by:

    WHITESPACE

    [#x9] [#xD] [#xA]
             ::= [ #x9#xD#xA]

    K_DATETIMELITERAL

    DATE TIME TIMESTAMP TIMESTAMPTZ
             ::= 'DATE'
               | 'TIME'
               | 'TIMESTAMP'
               | 'TIMESTAMPTZ'

    K_DATE_LITERAL

    YEAR MONTH DAY HOUR MINUTE SECOND
             ::= 'YEAR'
               | 'MONTH'
               | 'DAY'
               | 'HOUR'
               | 'MINUTE'
               | 'SECOND'

    K_ISOLATION

    UR RS RR CS
             ::= 'UR'
               | 'RS'
               | 'RR'
               | 'CS'

    K_NEXTVAL

    NEXTVAL FOR NEXT VALUE FOR
             ::= 'NEXTVAL' ( ' '+ 'FOR' )?
               | 'NEXT' ' '+ 'VALUE' ' '+ 'FOR'

    K_SELECT

    SELECT SEL
    K_SELECT ::= 'SELECT'
               | 'SEL'

    K_TIME_KEY_EXPR

    CURRENT _ TIMESTAMP TIME DATE TIMEZONE ()
             ::= 'CURRENT' ( '_' | ' '+ ) ( 'TIMESTAMP' | 'TIME' | 'DATE' | 'TIMEZONE' ) '()'?

    K_STRING_FUNCTION_NAME

    SUBSTR SUBSTRING TRIM POSITION OVERLAY
             ::= 'SUBSTR'
               | 'SUBSTRING'
               | 'TRIM'
               | 'POSITION'
               | 'OVERLAY'

    ST_SEMICOLON

    ; [#xA] / [#xA] go [#xA]
             ::= ';'
               | #xA ( [/#xA] | 'go' ) #xA
    Referenced by:

    OP_GREATERTHANEQUALS

    > WHITESPACE =
             ::= '>' WHITESPACE* '='
    Referenced by:

    OP_MINORTHANEQUALS

    < WHITESPACE =
             ::= '<' WHITESPACE* '='
    Referenced by:

    OP_NOTEQUALSSTANDARD

    < WHITESPACE >
             ::= '<' WHITESPACE* '>'
    Referenced by:

    OP_NOTEQUALSBANG

    ! WHITESPACE =
             ::= '!' WHITESPACE* '='
    Referenced by:

    OP_CONCAT

    | WHITESPACE |
             ::= '|' WHITESPACE* '|'

    DT_ZONE

    K_DATETIMELITERAL WHITESPACE ( S_LONG ) WHITESPACE WITH WITHOUT WHITESPACE LOCAL WHITESPACE TIME WHITESPACE ZONE
    DT_ZONE  ::= K_DATETIMELITERAL WHITESPACE* ( '(' S_LONG ')' )? WHITESPACE* ( 'WITH' | 'WITHOUT' ) WHITESPACE+ ( 'LOCAL' WHITESPACE+ )? 'TIME' WHITESPACE+ 'ZONE'

    S_DOUBLE

    S_LONG . S_LONG e E + [#x2D] S_LONG S_LONG . e E + [#x2D] S_LONG e E + [#x2D] S_LONG
    S_DOUBLE ::= S_LONG? '.' S_LONG ( [eE] [+#x2D]? S_LONG )?
               | S_LONG ( '.' ( [eE] [+#x2D]? S_LONG )? | [eE] [+#x2D]? S_LONG )

    S_LONG

    DIGIT
    S_LONG   ::= DIGIT+