Supported SQL Syntax

The EBNF and Railroad Diagrams for the supported SQL Syntax. Kindly provided by Gunther Rademacher.

Statement

IF Condition SingleStatement Block ; ELSE SingleStatement Block ; EOF UnsupportedStatement
         ::= ( 'IF' Condition ( ( SingleStatement | Block ) ';'? 'ELSE' )? )? ( SingleStatement | Block ) ';'? EOF
           | UnsupportedStatement

SingleStatement

( WithList Select ) WithList Select Insert Update Delete Merge Upsert Replace AlterTable AlterSession CreateFunctionStatement CreateIndex CreateSchema CreateSequence CreateSynonym CreateTable CreateView AlterView AlterSequence Drop Analyze Truncate Execute Set RenameTableStatement Reset ShowColumns ShowTables Show Use SavepointStatement RollbackStatement COMMIT Comment Describe Explain Declare Grant PurgeStatement AlterSystemStatement
         ::= '(' WithList Select ')'
           | WithList? ( Select | Insert | Update | Delete | Merge )
           | Upsert
           | Replace
           | AlterTable
           | AlterSession
           | CreateFunctionStatement
           | CreateIndex
           | CreateSchema
           | CreateSequence
           | CreateSynonym
           | CreateTable
           | CreateView
           | AlterView
           | AlterSequence
           | Drop
           | Analyze
           | Truncate
           | Execute
           | Set
           | RenameTableStatement
           | Reset
           | ShowColumns
           | ShowTables
           | Show
           | Use
           | SavepointStatement
           | RollbackStatement
           | 'COMMIT'
           | Comment
           | Describe
           | Explain
           | Declare
           | Grant
           | PurgeStatement
           | AlterSystemStatement

Block

BEGIN ; SingleStatement Block ; END ;
Block    ::= 'BEGIN' ';'* ( ( SingleStatement | Block ) ';' )+ 'END' ';'?

Statements

; IF Condition SingleStatement Block ; ELSE SingleStatement Block SingleStatement Block ; UnsupportedStatement ; IF Condition SingleStatement Block ; ELSE SingleStatement Block SingleStatement Block ; UnsupportedStatement EOF
         ::= ';'* ( 'IF' Condition ( SingleStatement | Block ) ( ';'? 'ELSE' ( SingleStatement | Block ) )? | SingleStatement | Block ';'? | UnsupportedStatement ) ( ';' ( 'IF' Condition ( SingleStatement | Block ) ( ';'? 'ELSE' ( SingleStatement | Block ) )? | SingleStatement | Block ';'? | UnsupportedStatement )? )* EOF

Declare

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

Set

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

Reset

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

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 )*

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 )? )

Describe

DESCRIBE Table
Describe ::= 'DESCRIBE' Table

Explain

EXPLAIN ExplainStatementOptions SelectWithWithItems

ExplainOptionBoolean

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

ExplainFormatOption

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

ExplainStatementOptions

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

Use

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

ShowColumns

SHOW COLUMNS FROM RelObjectNameExt
         ::= 'SHOW' 'COLUMNS' 'FROM' RelObjectNameExt

ShowTables

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

Show

SHOW RelObjectNameExt
Show     ::= 'SHOW' RelObjectNameExt

Values

VALUES VALUE SimpleExpressionList
Values   ::= ( 'VALUES' | 'VALUE' ) SimpleExpressionList

Update

UPDATE LOW_PRIORITY IGNORE TableWithAlias JoinsList SET Column = SimpleExpression , ( Column , ) = SubSelect ( ComplexExpressionList ) Expression , OutputClause FROM FromItem JoinsList WhereClause OrderByElements PlainLimit RETURNING SelectItemsList
Update   ::= 'UPDATE' 'LOW_PRIORITY'? 'IGNORE'? TableWithAlias JoinsList 'SET' ( Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) ( ',' '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) )* ) OutputClause? ( 'FROM' FromItem JoinsList )? WhereClause? OrderByElements? PlainLimit? ( 'RETURNING' SelectItemsList )?

Replace

REPLACE INTO Table SET Column = SimpleExpression , ( Column , ) VALUES VALUE ( PrimaryExpression , ) SimpleExpression , ( , SubSelect
Replace  ::= 'REPLACE' 'INTO'? Table ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | ( '(' Column ( ',' Column )* ')' )? ( ( 'VALUES' | 'VALUE' )? '(' PrimaryExpression ( ',' PrimaryExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SubSelect ) )

ListExpressionItem

SelectExpressionItem ,
         ::= SelectExpressionItem ( ',' SelectExpressionItem )*

Insert

INSERT LOW_PRIORITY DELAYED HIGH_PRIORITY IGNORE INTO Table AS RelObjectNameWithoutValue ( Column , ) OutputClause SET Column = SimpleExpression , SelectWithWithItems ON DUPLICATE KEY UPDATE Column = SimpleExpression , ON CONFLICT InsertConflictTarget InsertConflictAction RETURNING SelectItemsList
Insert   ::= 'INSERT' ( 'LOW_PRIORITY' | 'DELAYED' | 'HIGH_PRIORITY' )? 'IGNORE'? 'INTO'? Table ( 'AS'? RelObjectNameWithoutValue )? ( '(' Column ( ',' Column )* ')' )? OutputClause? ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )? ( 'ON' 'CONFLICT' InsertConflictTarget? InsertConflictAction )? ( 'RETURNING' SelectItemsList )?

InsertConflictTarget

( RelObjectNameExt2 ) WhereClause ON CONSTRAINT RelObjectNameExt2
         ::= '(' RelObjectNameExt2 ')' WhereClause?
           | 'ON' 'CONSTRAINT' RelObjectNameExt2

InsertConflictAction

DO NOTHING UPDATE SET Column = SimpleExpression , ( Column , ) = SubSelect ( ComplexExpressionList ) Expression , WhereClause
         ::= 'DO' ( 'NOTHING' | 'UPDATE' 'SET' ( Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) ( ',' '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) )* ) WhereClause? )

OutputClause

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

Upsert

UPSERT INTO Table ( Column , ) VALUES VALUE ( SimpleExpression , , ) ( SelectWithWithItems ) SelectWithWithItems ON DUPLICATE KEY UPDATE Column = SimpleExpression ,
Upsert   ::= 'UPSERT' 'INTO'? Table ( '(' Column ( ',' Column )* ')' )? ( ( ( 'VALUES' | 'VALUE' )? '(' SimpleExpression ( ',' SimpleExpression )* ( ')' ',' '(' SimpleExpression ( ',' SimpleExpression )* )* | '(' SelectWithWithItems ) ')' | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )?

Delete

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

Merge

MERGE INTO TableWithAlias USING Table ( SubSelect ) Alias ON ( Expression ) MergeUpdateClause MergeInsertClause MergeInsertClause MergeUpdateClause
Merge    ::= 'MERGE' 'INTO' TableWithAlias 'USING' ( Table | '(' SubSelect ')' ) Alias? 'ON' '(' Expression ')' ( MergeUpdateClause MergeInsertClause? | MergeInsertClause MergeUpdateClause? )?

MergeUpdateClause

WHEN MATCHED THEN UPDATE SET Column = SimpleExpression , WHERE Expression DELETE WHERE Expression
         ::= 'WHEN' 'MATCHED' 'THEN' 'UPDATE' 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* ( 'WHERE' Expression )? ( 'DELETE' 'WHERE' Expression )?

MergeInsertClause

WHEN NOT MATCHED THEN INSERT ( Column , ) VALUES ( SimpleExpression , ) WHERE Expression
         ::= 'WHEN' 'NOT' 'MATCHED' 'THEN' 'INSERT' ( '(' Column ( ',' Column )* ')' )? 'VALUES' '(' SimpleExpression ( ',' SimpleExpression )* ')' ( 'WHERE' Expression )?

RelObjectNameList

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

Column

RelObjectNameList

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 BEGIN BINARY BIT BUFFERS BY BYTE BYTES CACHE CALL CASCADE CASE CAST CHANGE CHANGES CHAR CHARACTER CHECKPOINT CLOSE COLLATE COLUMN COLUMNS COMMENT COMMIT CONFLICT COSTS CS CYCLE DATABASE DDL DECLARE DEFAULT DEFERRABLE DELAYED DELETE DESC DESCRIBE DISABLE DISCONNECT DIV DML DO DROP DUMP DUPLICATE EMIT ENABLE END ESCAPE EXCLUDE EXEC EXECUTE EXPLAIN EXTENDED EXTRACT FALSE FILTER FIRST FLUSH FN FOLLOWING FORMAT FULLTEXT FUNCTION GLOBAL GRANT GUARD HISTORY HOPPING INCLUDE INCREMENT INDEX INSERT INTERLEAVE ISNULL JSON KEEP KEY KEYS LAST LEADING LINK LOCAL LOCKED LOG MATCH MATCHED MATERIALIZED MAXVALUE MERGE MINVALUE MODIFY MOVEMENT NEXT NO NOCACHE NOKEEP NOLOCK NOMAXVALUE NOMINVALUE NOORDER NOTHING NOVALIDATE NOWAIT NULLS OF OFF OPEN OVER OVERLAPS PARALLEL PARENT PARTITION PATH PERCENT PLACING PRECEDING PRECISION PRIMARY PRIOR PURGE QUERY QUICK QUIESCE RANGE READ RECYCLEBIN REFERENCES REGISTER RENAME REPLACE RESET RESTART RESTRICT RESTRICTED RESUMABLE RESUME RLIKE ROLLBACK ROW ROWS RR RS SAVEPOINT SCHEMA SEPARATOR SEQUENCE SESSION SETS SHOW SHUTDOWN SIBLINGS SIGNED SIMILAR SIZE SKIP STORED STRING SUSPEND SWITCH SYNONYM SYSTEM TABLE TABLESPACE TEMP TEMPORARY THEN TIMEOUT TIMESTAMPTZ TO TRUE TRUNCATE TUMBLING TYPE UNLOGGED UNQIESCE UNSIGNED UPDATE UPSERT UR USER VALIDATE VERBOSE VIEW WAIT WITHIN WITHOUT WORK XML XMLAGG XMLTEXT YAML 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'
           | 'BEGIN'
           | 'BINARY'
           | 'BIT'
           | 'BUFFERS'
           | 'BY'
           | 'BYTE'
           | 'BYTES'
           | 'CACHE'
           | 'CALL'
           | 'CASCADE'
           | 'CASE'
           | 'CAST'
           | 'CHANGE'
           | 'CHANGES'
           | 'CHAR'
           | 'CHARACTER'
           | 'CHECKPOINT'
           | 'CLOSE'
           | 'COLLATE'
           | 'COLUMN'
           | 'COLUMNS'
           | 'COMMENT'
           | 'COMMIT'
           | 'CONFLICT'
           | 'COSTS'
           | 'CS'
           | 'CYCLE'
           | 'DATABASE'
           | 'DDL'
           | 'DECLARE'
           | 'DEFAULT'
           | 'DEFERRABLE'
           | 'DELAYED'
           | 'DELETE'
           | 'DESC'
           | 'DESCRIBE'
           | 'DISABLE'
           | 'DISCONNECT'
           | 'DIV'
           | 'DML'
           | 'DO'
           | 'DROP'
           | 'DUMP'
           | 'DUPLICATE'
           | 'EMIT'
           | 'ENABLE'
           | 'END'
           | 'ESCAPE'
           | 'EXCLUDE'
           | 'EXEC'
           | 'EXECUTE'
           | 'EXPLAIN'
           | 'EXTENDED'
           | 'EXTRACT'
           | 'FALSE'
           | 'FILTER'
           | 'FIRST'
           | 'FLUSH'
           | 'FN'
           | 'FOLLOWING'
           | 'FORMAT'
           | 'FULLTEXT'
           | 'FUNCTION'
           | 'GLOBAL'
           | 'GRANT'
           | 'GUARD'
           | 'HISTORY'
           | 'HOPPING'
           | 'INCLUDE'
           | 'INCREMENT'
           | 'INDEX'
           | 'INSERT'
           | 'INTERLEAVE'
           | 'ISNULL'
           | 'JSON'
           | 'KEEP'
           | 'KEY'
           | 'KEYS'
           | 'LAST'
           | 'LEADING'
           | 'LINK'
           | 'LOCAL'
           | 'LOCKED'
           | 'LOG'
           | 'MATCH'
           | 'MATCHED'
           | 'MATERIALIZED'
           | 'MAXVALUE'
           | 'MERGE'
           | 'MINVALUE'
           | 'MODIFY'
           | 'MOVEMENT'
           | 'NEXT'
           | 'NO'
           | 'NOCACHE'
           | 'NOKEEP'
           | 'NOLOCK'
           | 'NOMAXVALUE'
           | 'NOMINVALUE'
           | 'NOORDER'
           | 'NOTHING'
           | 'NOVALIDATE'
           | 'NOWAIT'
           | 'NULLS'
           | 'OF'
           | 'OFF'
           | 'OPEN'
           | 'OVER'
           | 'OVERLAPS'
           | 'PARALLEL'
           | 'PARENT'
           | 'PARTITION'
           | 'PATH'
           | 'PERCENT'
           | 'PLACING'
           | 'PRECEDING'
           | 'PRECISION'
           | 'PRIMARY'
           | 'PRIOR'
           | 'PURGE'
           | 'QUERY'
           | 'QUICK'
           | 'QUIESCE'
           | 'RANGE'
           | 'READ'
           | 'RECYCLEBIN'
           | 'REFERENCES'
           | 'REGISTER'
           | 'RENAME'
           | 'REPLACE'
           | 'RESET'
           | 'RESTART'
           | 'RESTRICT'
           | 'RESTRICTED'
           | 'RESUMABLE'
           | 'RESUME'
           | 'RLIKE'
           | 'ROLLBACK'
           | 'ROW'
           | 'ROWS'
           | 'RR'
           | 'RS'
           | 'SAVEPOINT'
           | 'SCHEMA'
           | 'SEPARATOR'
           | 'SEQUENCE'
           | 'SESSION'
           | 'SETS'
           | 'SHOW'
           | 'SHUTDOWN'
           | 'SIBLINGS'
           | 'SIGNED'
           | 'SIMILAR'
           | 'SIZE'
           | 'SKIP'
           | 'STORED'
           | 'STRING'
           | 'SUSPEND'
           | 'SWITCH'
           | 'SYNONYM'
           | 'SYSTEM'
           | 'TABLE'
           | 'TABLESPACE'
           | 'TEMP'
           | 'TEMPORARY'
           | 'THEN'
           | 'TIMEOUT'
           | 'TIMESTAMPTZ'
           | 'TO'
           | 'TRUE'
           | 'TRUNCATE'
           | 'TUMBLING'
           | 'TYPE'
           | 'UNLOGGED'
           | 'UNQIESCE'
           | 'UNSIGNED'
           | 'UPDATE'
           | 'UPSERT'
           | 'UR'
           | 'USER'
           | 'VALIDATE'
           | 'VERBOSE'
           | 'VIEW'
           | 'WAIT'
           | 'WITHIN'
           | 'WITHOUT'
           | 'WORK'
           | 'XML'
           | 'XMLAGG'
           | 'XMLTEXT'
           | 'YAML'
           | 'ZONE'

RelObjectName

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

RelObjectNameWithoutStart

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

RelObjectNameExt

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

RelObjectNameExt2

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

Table

RelObjectNameList

TableWithAlias

Table Alias
         ::= Table Alias?

SelectWithWithItems

( WithList Select ) WithList Select
         ::= '(' WithList Select ')'
           | WithList? Select

Select

SelectBody

SelectBody

SetOperationList
         ::= SetOperationList

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 JoinsList KSQLWindowClause WhereClause OracleHierarchicalQueryClause GroupByColumnReferences Having OrderByElements WINDOW RelObjectName AS windowDefinition , OrderByElements EMIT CHANGES LimitWithOffset Offset LimitWithOffset Fetch WithIsolation FOR UPDATE OF Table Wait NOWAIT SKIP LOCKED OptimizeFor FOR XML PATH ( S_CHAR_LITERAL )
         ::= 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 JoinsList )? KSQLWindowClause? WhereClause? OracleHierarchicalQueryClause? GroupByColumnReferences? Having? OrderByElements? ( 'WINDOW' RelObjectName 'AS' windowDefinition ( ',' RelObjectName 'AS' windowDefinition )* )? OrderByElements? ( 'EMIT' 'CHANGES' )? LimitWithOffset? Offset? LimitWithOffset? Fetch? WithIsolation? ( 'FOR' 'UPDATE' ( 'OF' Table )? Wait? ( 'NOWAIT' | 'SKIP' 'LOCKED' )? )? OptimizeFor? ( 'FOR' 'XML' 'PATH' '(' S_CHAR_LITERAL ')' )?

SetOperationList

( SelectBody ) PlainSelect Values ALL DISTINCT UNION INTERSECT MINUS EXCEPT OrderByElements LimitWithOffset Offset Fetch WithIsolation
         ::= ( '(' SelectBody ')' | PlainSelect | Values ) ( ( 'UNION' ( 'ALL' | 'DISTINCT' )? | 'INTERSECT' | 'MINUS' | 'EXCEPT' ) ( '(' SelectBody ')' | PlainSelect | Values ) )* OrderByElements? LimitWithOffset? Offset? Fetch? WithIsolation?

SetOperationListWithoutIntialSelect

UNION ALL DISTINCT INTERSECT MINUS EXCEPT ( SelectBody )
         ::= ( ( 'UNION' ( 'ALL' | 'DISTINCT' )? | 'INTERSECT' | 'MINUS' | 'EXCEPT' ) '(' SelectBody ')' )+

WithList

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

WithItem

RECURSIVE RelObjectName ( SelectItemsList ) AS ( VALUES SimpleExpressionList SubSelect )
WithItem ::= 'RECURSIVE'? RelObjectName ( '(' SelectItemsList ')' )? 'AS' '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'

SelectItemsList

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

SelectExpressionItem

Expression Alias
         ::= Expression Alias?

SelectItem

* AllTableColumns SelectExpressionItem
         ::= '*'
           | AllTableColumns
           | SelectExpressionItem

AllTableColumns

Table . *
         ::= Table '.' '*'

Alias

AS RelObjectNameWithoutStart S_CHAR_LITERAL ( RelObjectName ColDataType , )

SQLServerHint

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

SQLServerHints

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

MySQLIndexHint

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

FunctionItem

Function Alias
         ::= Function Alias?

PivotForColumns

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

PivotFunctionItems

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

PivotSingleInItems

PivotSelectExprItem ,
         ::= PivotSelectExprItem ( ',' PivotSelectExprItem )*

PivotSelectExprItem

SimpleExpression Alias
         ::= SimpleExpression Alias?

ExpressionListItem

( SimpleExpressionList ) Alias
         ::= '(' SimpleExpressionList ')' Alias?

PivotMultiInItems

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

Pivot

PIVOT ( PivotFunctionItems FOR PivotForColumns IN ( PivotSingleInItems PivotMultiInItems ) ) Alias
Pivot    ::= 'PIVOT' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( PivotSingleInItems | PivotMultiInItems ) ')' ')' Alias?

PivotXml

PIVOT XML ( PivotFunctionItems FOR PivotForColumns IN ( ANY SelectBody PivotSingleInItems PivotMultiInItems ) )
PivotXml ::= 'PIVOT' 'XML' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( 'ANY' | SelectBody | PivotSingleInItems | PivotMultiInItems ) ')' ')'

UnPivot

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

IntoClause

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

FromItem

ValuesList ( FromItem SubJoin SubSelect SetOperationListWithoutIntialSelect ) UnPivot TableFunction Table LateralSubSelect Alias UnPivot PivotXml Pivot MySQLIndexHint SQLServerHints

ValuesList

( VALUES ( SimpleExpression , ) , SimpleExpression , ) Alias ( RelObjectName , )
         ::= '(' 'VALUES' ( '(' SimpleExpression ( ',' SimpleExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SimpleExpression ( ',' SimpleExpression )* ) ')' ( Alias ( '(' RelObjectName ( ',' RelObjectName )* ')' )? )?

LateralSubSelect

LATERAL ( SubSelect )
         ::= 'LATERAL' '(' SubSelect ')'

SubJoin

SubJoinsList

JoinsList

JoinerExpression
         ::= JoinerExpression*

SubJoinsList

JoinerExpression
         ::= JoinerExpression+

JoinerExpression

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

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 ) )?

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 ')'

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

GroupByColumnReferences

GROUP BY ( ) ComplexExpressionList GROUPING SETS ( ( SimpleExpressionList ) SimpleExpression , ) GROUPING SETS ( ( SimpleExpressionList ) SimpleExpression , )
         ::= 'GROUP' 'BY' ( ( '(' ')' | ComplexExpressionList ) ( 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )? | 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )

Having

HAVING Expression
Having   ::= 'HAVING' Expression

OrderByElements

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

OrderByElement

Expression ASC DESC NULLS FIRST LAST
         ::= Expression ( 'ASC' | 'DESC' )? ( 'NULLS' ( 'FIRST' | 'LAST' )? )?

SimpleJdbcParameter

? S_LONG
         ::= '?' S_LONG?

SimpleJdbcNamedParameter

: RelObjectNameExt
         ::= ':' RelObjectNameExt

LimitWithOffset

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

PlainLimit

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

Offset

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

Fetch

FETCH FIRST NEXT S_LONG SimpleJdbcParameter ROWS ROW ONLY
Fetch    ::= 'FETCH' ( 'FIRST' | 'NEXT' ) ( S_LONG | SimpleJdbcParameter ) ( 'ROWS' | 'ROW' ) 'ONLY'

WithIsolation

WITH K_ISOLATION
         ::= 'WITH' K_ISOLATION

OptimizeFor

OPTIMIZE FOR S_LONG ROWS
         ::= 'OPTIMIZE' 'FOR' S_LONG 'ROWS'

Top

TOP S_LONG SimpleJdbcParameter : S_IDENTIFIER ( AdditiveExpression ) PERCENT WITH TIES
Top      ::= 'TOP' ( S_LONG | SimpleJdbcParameter | ':' S_IDENTIFIER? | '(' AdditiveExpression ')' ) 'PERCENT'? 'WITH TIES'?

Skip

SKIP S_LONG S_IDENTIFIER SimpleJdbcParameter
Skip     ::= 'SKIP' ( S_LONG | S_IDENTIFIER | SimpleJdbcParameter )

First

FIRST LIMIT S_LONG S_IDENTIFIER SimpleJdbcParameter
First    ::= ( 'FIRST' | 'LIMIT' ) ( S_LONG | S_IDENTIFIER | SimpleJdbcParameter )

Expression

XorExpression
         ::= XorExpression

XorExpression

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

OrExpression

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

AndExpression

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

Condition

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

OverlapsCondition

( SimpleExpressionListAtLeastTwoItems ) OVERLAPS ( SimpleExpressionListAtLeastTwoItems )
         ::= '(' SimpleExpressionListAtLeastTwoItems ')' 'OVERLAPS' '(' SimpleExpressionListAtLeastTwoItems ')'

RegularCondition

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

SQLCondition

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

InExpression

SimpleExpression ( + ) NOT IN S_CHAR_LITERAL Function ( ComplexExpressionList SubSelect ) SimpleExpression
         ::= SimpleExpression ( '(' '+' ')' )? 'NOT'? 'IN' ( S_CHAR_LITERAL | Function | '(' ( ComplexExpressionList | SubSelect ) ')' | SimpleExpression )

MultiInExpressions

( ( SimpleExpressionList ) , )
         ::= '(' '(' SimpleExpressionList ')' ( ',' '(' SimpleExpressionList ')' )* ')'

Between

NOT BETWEEN SimpleExpression AND SimpleExpression
Between  ::= 'NOT'? 'BETWEEN' SimpleExpression 'AND' SimpleExpression

LikeExpression

NOT LIKE ILIKE SimpleExpression ESCAPE Expression
         ::= 'NOT'? ( 'LIKE' | 'ILIKE' ) SimpleExpression ( 'ESCAPE' Expression )?

SimilarToExpression

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

IsDistinctExpression

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

IsNullExpression

ISNULL IS NOT NULL
         ::= 'ISNULL'
           | 'IS' 'NOT'? 'NULL'

IsBooleanExpression

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

ExistsExpression

EXISTS SimpleExpression
         ::= 'EXISTS' SimpleExpression

SQLExpressionList

Expression ,
         ::= Expression ( ',' Expression )*

SimpleExpressionList

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

ComplexExpressionList

OracleNamedFunctionParameter Expression ,

NamedExpressionList1

BOTH LEADING TRAILING SimpleExpression FROM IN PLACING SimpleExpression
         ::= ( 'BOTH' | 'LEADING' | 'TRAILING' ) SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression

NamedExpressionListExprFirst

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

SimpleExpressionListAtLeastTwoItems

SimpleExpression , SimpleExpression
         ::= SimpleExpression ( ',' SimpleExpression )+

ComparisonItem

AnyComparisonExpression ValueListExpression SimpleExpression RowConstructor PrimaryExpression
         ::= AnyComparisonExpression
           | ValueListExpression
           | SimpleExpression
           | RowConstructor
           | PrimaryExpression

AnyComparisonExpression

ANY SOME ALL ( VALUES SimpleExpressionList SubSelect )
         ::= ( 'ANY' | 'SOME' | 'ALL' ) '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'

SimpleExpression

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

ConcatExpression

BitwiseAndOr OP_CONCAT
         ::= BitwiseAndOr ( OP_CONCAT BitwiseAndOr )*

BitwiseAndOr

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

AdditiveExpression

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

MultiplicativeExpression

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

BitwiseXor

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

ArrayExpression

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

PrimaryExpression

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

ConnectByRootOperator

CONNECT_BY_ROOT Column
         ::= 'CONNECT_BY_ROOT' Column

NextValExpression

K_NEXTVAL RelObjectNameList
         ::= K_NEXTVAL RelObjectNameList

JdbcNamedParameter

: RelObjectNameExt2
         ::= ':' RelObjectNameExt2

OracleNamedFunctionParameter

RelObjectNameExt2 => Expression
         ::= RelObjectNameExt2 '=>' Expression

UserVariable

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

NumericBind

: S_LONG
         ::= ':' S_LONG

DateTimeLiteralExpression

K_DATETIMELITERAL S_CHAR_LITERAL
         ::= K_DATETIMELITERAL S_CHAR_LITERAL

ArrayConstructor

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

JsonExpression

CaseWhenExpression SimpleJdbcParameter JdbcNamedParameter UserVariable JsonFunction JsonAggregateFunction FullTextSearch Column S_CHAR_LITERAL ( SubSelect ) :: ColDataType -> ->> S_CHAR_LITERAL S_LONG #> #>> S_CHAR_LITERAL

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' )? ) ')'

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? ')' )?

IntervalExpression

INTERVAL - S_LONG S_DOUBLE S_CHAR_LITERAL SimpleJdbcParameter JdbcNamedParameter Function Column S_IDENTIFIER K_DATE_LITERAL

IntervalExpressionWithoutInterval

K_DATE_LITERAL
         ::= K_DATE_LITERAL

KeepExpression

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

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 ')' ) )? ')' )? )

windowDefinition

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

AnalyticExpression

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

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'

ExtractExpression

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

CastExpression

CAST ( SimpleExpression AS RowConstructor ColDataType )
         ::= 'CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'

TryCastExpression

TRY_CAST ( SimpleExpression AS RowConstructor ColDataType )
         ::= 'TRY_CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'

SafeCastExpression

SAFE_CAST ( SimpleExpression AS RowConstructor ColDataType )
         ::= 'SAFE_CAST' '(' SimpleExpression 'AS' ( RowConstructor | ColDataType ) ')'

CaseWhenExpression

CASE Expression WhenThenSearchCondition ELSE ( CaseWhenExpression ) Expression END
         ::= 'CASE' Expression? WhenThenSearchCondition+ ( 'ELSE' ( '('? CaseWhenExpression ')'? | Expression ) )? 'END'

WhenThenSearchCondition

WHEN Expression THEN ( CaseWhenExpression ) Expression
         ::= 'WHEN' Expression 'THEN' ( '('? CaseWhenExpression ')'? | Expression )

RowConstructor

ROW ( ColumnDefinition , )
         ::= 'ROW'? '(' ColumnDefinition ( ',' ColumnDefinition )* ')'

VariableExpression

UserVariable = SimpleExpression
         ::= UserVariable '=' SimpleExpression

Execute

EXEC EXECUTE CALL RelObjectNameList VariableExpression , SimpleExpressionList ( SimpleExpressionList )
Execute  ::= ( 'EXEC' | 'EXECUTE' | 'CALL' ) RelObjectNameList ( VariableExpression ( ',' VariableExpression )* | SimpleExpressionList | '(' SimpleExpressionList ')' )?

FullTextSearch

MATCH ( Column , ) AGAINST ( S_CHAR_LITERAL SimpleJdbcParameter SimpleJdbcNamedParameter IN NATURAL LANGUAGE MODE IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION IN BOOLEAN MODE WITH QUERY EXPANSION )
         ::= 'MATCH' '(' Column ( ',' Column )* ')' 'AGAINST' '(' ( S_CHAR_LITERAL | SimpleJdbcParameter | SimpleJdbcNamedParameter ) ( 'IN NATURAL LANGUAGE MODE' | 'IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION' | 'IN BOOLEAN MODE' | 'WITH QUERY EXPANSION' )? ')'

Function

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

SpecialStringFunctionWithNamedParameters

K_STRING_FUNCTION_NAME ( NamedExpressionList1 NamedExpressionListExprFirst ComplexExpressionList SimpleExpressionList )

InternalFunction

RelObjectNameList ( DISTINCT ALL UNIQUE * AllTableColumns ComplexExpressionList SimpleExpressionList OrderByElements SubSelect IGNORE NULLS ) . Function RelObjectName KeepExpression
         ::= RelObjectNameList '(' ( ( 'DISTINCT' | 'ALL' | 'UNIQUE' )? ( '*' | AllTableColumns | ( ComplexExpressionList | SimpleExpressionList ) OrderByElements? | SubSelect ) )? ( 'IGNORE' 'NULLS' )? ')' ( '.' ( Function | RelObjectName ) )? KeepExpression?

XMLSerializeExpr

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

MySQLGroupConcat

GROUP_CONCAT ( DISTINCT SimpleExpressionList OrderByElements SEPARATOR S_CHAR_LITERAL )
         ::= 'GROUP_CONCAT' '(' 'DISTINCT'? SimpleExpressionList OrderByElements? ( 'SEPARATOR' S_CHAR_LITERAL )? ')'

ValueListExpression

( SimpleExpressionListAtLeastTwoItems )
         ::= '(' SimpleExpressionListAtLeastTwoItems ')'

TableFunction

Function Alias
         ::= Function Alias?

SubSelect

WithList SelectBody
         ::= WithList? SelectBody

ColumnNamesWithParamsList

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

Index

RelObjectNameList

CreateIndex

CREATE CreateParameter INDEX Index ON Table USING S_IDENTIFIER ColumnNamesWithParamsList CreateParameter
         ::= 'CREATE' CreateParameter? 'INDEX' Index 'ON' Table ( 'USING' S_IDENTIFIER )? ColumnNamesWithParamsList CreateParameter*

ColumnDefinition

RelObjectName ColDataType CreateParameter

CreateSchema

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

PathSpecification

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

CreateTable

CREATE OR REPLACE 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 SelectWithWithItems LIKE ( Table ) Table , SpannerInterleaveIn
         ::= 'CREATE' ( 'OR' 'REPLACE' )? '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' SelectWithWithItems )? ( 'LIKE' ( '(' Table ')' | Table ) )? ( ',' SpannerInterleaveIn )?

SpannerInterleaveIn

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

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 . S_IDENTIFIER S_QUOTED_IDENTIFIER 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' ) ( '.' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? | ( '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

CreateView

CREATE OR REPLACE NO FORCE TEMP TEMPORARY MATERIALIZED VIEW Table IF NOT EXISTS ColumnsNamesList AS SelectWithWithItems WITH READ ONLY
         ::= 'CREATE' ( 'OR' 'REPLACE' )? ( 'NO'? 'FORCE' )? ( 'TEMP' | 'TEMPORARY' )? 'MATERIALIZED'? 'VIEW' Table ( 'IF' 'NOT' 'EXISTS' )? ColumnsNamesList? 'AS' SelectWithWithItems ( 'WITH' 'READ' 'ONLY' )?

Action

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

AlterView

ALTER REPLACE VIEW Table ColumnsNamesList AS SelectBody
         ::= ( 'ALTER' | 'REPLACE' ) 'VIEW' Table ColumnsNamesList? 'AS' SelectBody

CreateParameter

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

RowMovement

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

AList

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

ColumnsNamesListItem

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

ColumnsNamesList

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

FuncArgsListItem

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

FuncArgsList

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

Drop

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

Truncate

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

AlterExpressionColumnDataType

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

AlterExpressionColumnDropNotNull

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

AlterExpressionColumnDropDefault

RelObjectName DROP DEFAULT
         ::= RelObjectName 'DROP' 'DEFAULT'

AlterExpressionConstraintState

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

AlterExpression

ADD ALTER MODIFY PRIMARY KEY KEY INDEX RelObjectName ColumnsNamesList AlterExpressionConstraintState UNIQUE KEY INDEX S_IDENTIFIER S_QUOTED_IDENTIFIER ColumnsNamesList USING RelObjectName COLUMN ( 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 CHECK ( Expression ) RelObjectName COMMENT S_CHAR_LITERAL CHANGE COLUMN S_IDENTIFIER S_QUOTED_IDENTIFIER AlterExpressionColumnDataType DROP ColumnsNamesList COLUMN IF EXISTS S_IDENTIFIER S_QUOTED_IDENTIFIER INVALIDATE CASCADE CONSTRAINTS INDEX S_IDENTIFIER S_QUOTED_IDENTIFIER UNIQUE FOREIGN KEY ColumnsNamesList PRIMARY KEY CONSTRAINT IF EXISTS S_IDENTIFIER S_QUOTED_IDENTIFIER CASCADE RESTRICT ALGORITHM = RelObjectName RENAME COLUMN S_IDENTIFIER S_QUOTED_IDENTIFIER TO S_IDENTIFIER S_QUOTED_IDENTIFIER COMMENT S_CHAR_LITERAL captureRest
         ::= ( 'ADD' | 'ALTER' | 'MODIFY' ) ( ( ( 'PRIMARY' 'KEY' | ( 'KEY' | 'INDEX' ) RelObjectName ) ColumnsNamesList AlterExpressionConstraintState | 'UNIQUE' ( ( 'KEY' | 'INDEX' ) ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? ColumnsNamesList ) ( 'USING' RelObjectName )? | 'COLUMN'? ( '(' 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 )? | 'CHECK' ( '(' Expression ')' )* ) | RelObjectName 'COMMENT' S_CHAR_LITERAL )
           | 'CHANGE' 'COLUMN'? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) AlterExpressionColumnDataType
           | 'DROP' ( ( ColumnsNamesList | 'COLUMN'? ( 'IF' 'EXISTS' )? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ) 'INVALIDATE'? ( 'CASCADE' 'CONSTRAINTS'? )? | 'INDEX' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) | ( ( 'UNIQUE' | 'FOREIGN' 'KEY' ) ColumnsNamesList | 'PRIMARY' 'KEY' | 'CONSTRAINT' ( 'IF' 'EXISTS' )? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) ) ( 'CASCADE' | 'RESTRICT' )? )
           | 'ALGORITHM' '='? RelObjectName
           | 'RENAME' ( 'COLUMN'? ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? 'TO' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER )
           | 'COMMENT' S_CHAR_LITERAL
           | captureRest

AlterTable

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

AlterSession

ALTER 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
         ::= 'ALTER' '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' )*

AlterSystemStatement

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

Wait

WAIT S_LONG
Wait     ::= 'WAIT' S_LONG

SavepointStatement

SAVEPOINT S_IDENTIFIER
         ::= 'SAVEPOINT' S_IDENTIFIER

RollbackStatement

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

Comment

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

Grant

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

UsersList

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

readGrantTypes

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

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

CREATE SEQUENCE Sequence SequenceParameters
         ::= 'CREATE' 'SEQUENCE' Sequence SequenceParameters

AlterSequence

ALTER SEQUENCE Sequence SequenceParameters
         ::= 'ALTER' 'SEQUENCE' Sequence SequenceParameters

CreateFunctionStatement

CREATE OR REPLACE FUNCTION PROCEDURE captureRest
         ::= 'CREATE' ( 'OR' 'REPLACE' )? ( 'FUNCTION' | 'PROCEDURE' ) captureRest

CreateSynonym

CREATE OR REPLACE PUBLIC SYNONYM Synonym FOR RelObjectNameList
         ::= 'CREATE' ( 'OR' 'REPLACE' )? 'PUBLIC'? 'SYNONYM' Synonym 'FOR' RelObjectNameList

Synonym

RelObjectNameList

UnsupportedStatement

captureUnsupportedStatementDeclaration

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 NEXT VALUE FOR
         ::= ( 'NEXTVAL' | 'NEXT' ' '+ 'VALUE' ) ' '+ 'FOR'

K_SELECT

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

K_TIME_KEY_EXPR

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

K_STRING_FUNCTION_NAME

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

OP_GREATERTHANEQUALS

> WHITESPACE =
         ::= '>' WHITESPACE* '='

OP_MINORTHANEQUALS

< WHITESPACE =
         ::= '<' WHITESPACE* '='

OP_NOTEQUALSSTANDARD

< WHITESPACE >
         ::= '<' WHITESPACE* '>'

OP_NOTEQUALSBANG

! WHITESPACE =
         ::= '!' WHITESPACE* '='

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+

DIGIT

[0-9]
DIGIT    ::= [0-9]

S_HEX

x' HEX_VALUE ' 0x HEX_VALUE
S_HEX    ::= "x'" HEX_VALUE+ "'"
           | '0x' HEX_VALUE+

HEX_VALUE

[0-9] [A-F]
         ::= [0-9A-F]

LINE_COMMENT

-- // [^#xD#xA]
         ::= ( '--' | '//' ) [^#xD#xA]*

MULTI_LINE_COMMENT

/* [^*] * [^*] [^*/] /
         ::= '/*' [^*]* '*' ( ( [^*/] [^*]* )? '*' )* '/'

S_IDENTIFIER

LETTER PART_LETTER
         ::= LETTER PART_LETTER*

LETTER

$ [A-Z] _ [a-z] [#x23] [#xA2-#xA5] [#xAA] [#xB5] [#xBA] [#xC0-#xD6] [#xD8-#xF6] [#xF8-#x21F] [#x222-#x233] [#x250-#x2AD] [#x2B0-#x2B8] [#x2BB-#x2C1] [#x2D0-#x2D1] [#x2E0-#x2E4] [#x2EE] [#x37A] [#x386] [#x388-#x38A] [#x38C] [#x38E-#x3A1] [#x3A3-#x3CE] [#x3D0-#x3D7] [#x3DA-#x3F3] [#x400-#x481] [#x48C-#x4C4] [#x4C7-#x4C8] [#x4CB-#x4CC] [#x4D0-#x4F5] [#x4F8-#x4F9] [#x531-#x556] [#x559] [#x561-#x587] [#x5D0-#x5EA] [#x5F0-#x5F2] [#x621-#x63A] [#x640-#x64A] [#x671-#x6D3] [#x6D5] [#x6E5-#x6E6] [#x6FA-#x6FC] [#x710] [#x712-#x72C] [#x780-#x7A5] [#x905-#x939] [#x93D] [#x950] [#x958-#x961] [#x985-#x98C] [#x98F-#x990] [#x993-#x9A8] [#x9AA-#x9B0] [#x9B2] [#x9B6-#x9B9] [#x9DC-#x9DD] [#x9DF-#x9E1] [#x9F0-#x9F3] [#xA05-#xA0A] [#xA0F-#xA10] [#xA13-#xA28] [#xA2A-#xA30] [#xA32-#xA33] [#xA35-#xA36] [#xA38-#xA39] [#xA59-#xA5C] [#xA5E] [#xA72-#xA74] [#xA85-#xA8B] [#xA8D] [#xA8F-#xA91] [#xA93-#xAA8] [#xAAA-#xAB0] [#xAB2-#xAB3] [#xAB5-#xAB9] [#xABD] [#xAD0] [#xAE0] [#xB05-#xB0C] [#xB0F-#xB10] [#xB13-#xB28] [#xB2A-#xB30] [#xB32-#xB33] [#xB36-#xB39] [#xB3D] [#xB5C-#xB5D] [#xB5F-#xB61] [#xB85-#xB8A] [#xB8E-#xB90] [#xB92-#xB95] [#xB99-#xB9A] [#xB9C] [#xB9E-#xB9F] [#xBA3-#xBA4] [#xBA8-#xBAA] [#xBAE-#xBB5] [#xBB7-#xBB9] [#xC05-#xC0C] [#xC0E-#xC10] [#xC12-#xC28] [#xC2A-#xC33] [#xC35-#xC39] [#xC60-#xC61] [#xC85-#xC8C] [#xC8E-#xC90] [#xC92-#xCA8] [#xCAA-#xCB3] [#xCB5-#xCB9] [#xCDE] [#xCE0-#xCE1] [#xD05-#xD0C] [#xD0E-#xD10] [#xD12-#xD28] [#xD2A-#xD39] [#xD60-#xD61] [#xD85-#xD96] [#xD9A-#xDB1] [#xDB3-#xDBB] [#xDBD] [#xDC0-#xDC6] [#xE01-#xE30] [#xE32-#xE33] [#xE3F-#xE46] [#xE81-#xE82] [#xE84] [#xE87-#xE88] [#xE8A] [#xE8D] [#xE94-#xE97] [#xE99-#xE9F] [#xEA1-#xEA3] [#xEA5] [#xEA7] [#xEAA-#xEAB] [#xEAD-#xEB0] [#xEB2-#xEB3] [#xEBD] [#xEC0-#xEC4] [#xEC6] [#xEDC-#xEDD] [#xF00] [#xF40-#xF47] [#xF49-#xF6A] [#xF88-#xF8B] [#x1000-#x1021] [#x1023-#x1027] [#x1029-#x102A] [#x1050-#x1055] [#x10A0-#x10C5] [#x10D0-#x10F6] [#x1100-#x1159] [#x115F-#x11A2] [#x11A8-#x11F9] [#x1200-#x1206] [#x1208-#x1246] [#x1248] [#x124A-#x124D] [#x1250-#x1256] [#x1258] [#x125A-#x125D] [#x1260-#x1286] [#x1288] [#x128A-#x128D] [#x1290-#x12AE] [#x12B0] [#x12B2-#x12B5] [#x12B8-#x12BE] [#x12C0] [#x12C2-#x12C5] [#x12C8-#x12CE] [#x12D0-#x12D6] [#x12D8-#x12EE] [#x12F0-#x130E] [#x1310] [#x1312-#x1315] [#x1318-#x131E] [#x1320-#x1346] [#x1348-#x135A] [#x13A0-#x13F4] [#x1401-#x166C] [#x166F-#x1676] [#x1681-#x169A] [#x16A0-#x16EA] [#x1780-#x17B3] [#x17DB] [#x1820-#x1877] [#x1880-#x18A8] [#x1E00-#x1E9B] [#x1EA0-#x1EF9] [#x1F00-#x1F15] [#x1F18-#x1F1D] [#x1F20-#x1F45] [#x1F48-#x1F4D] [#x1F50-#x1F57] [#x1F59] [#x1F5B] [#x1F5D] [#x1F5F-#x1F7D] [#x1F80-#x1FB4] [#x1FB6-#x1FBC] [#x1FBE] [#x1FC2-#x1FC4] [#x1FC6-#x1FCC] [#x1FD0-#x1FD3] [#x1FD6-#x1FDB] [#x1FE0-#x1FEC] [#x1FF2-#x1FF4] [#x1FF6-#x1FFC] [#x203F-#x2040] [#x207F] [#x20A0-#x20AF] [#x2102] [#x2107] [#x210A-#x2113] [#x2115] [#x2119-#x211D] [#x2124] [#x2126] [#x2128] [#x212A-#x212D] [#x212F-#x2131] [#x2133-#x2139] [#x2160-#x2183] [#x3005-#x3007] [#x3021-#x3029] [#x3031-#x3035] [#x3038-#x303A] [#x3041-#x3094] [#x309D-#x309E] [#x30A1-#x30FE] [#x3105-#x312C] [#x3131-#x318E] [#x31A0-#x31B7] [#x3400-#x4DB5] [#x4E00-#x9FA5] [#xA000-#xA48C] [#xAC00-#xD7A3] [#xF900-#xFA2D] [#xFB00-#xFB06] [#xFB13-#xFB17] [#xFB1D] [#xFB1F-#xFB28] [#xFB2A-#xFB36] [#xFB38-#xFB3C] [#xFB3E] [#xFB40-#xFB41] [#xFB43-#xFB44] [#xFB46-#xFBB1] [#xFBD3-#xFD3D] [#xFD50-#xFD8F] [#xFD92-#xFDC7] [#xFDF0-#xFDFB] [#xFE33-#xFE34] [#xFE4D-#xFE4F] [#xFE69] [#xFE70-#xFE72] [#xFE74] [#xFE76-#xFEFC] [#xFF04] [#xFF21-#xFF3A] [#xFF3F] [#xFF41-#xFF5A] [#xFF65-#xFFBE] [#xFFC2-#xFFC7] [#xFFCA-#xFFCF] [#xFFD2-#xFFD7] [#xFFDA-#xFFDC] [#xFFE0-#xFFE1] [#xFFE5-#xFFE6]
LETTER   ::= [$A-Z_a-z#x23#xA2-#xA5#xAA#xB5#xBA#xC0-#xD6#xD8-#xF6#xF8-#x21F#x222-#x233#x250-#x2AD#x2B0-#x2B8#x2BB-#x2C1#x2D0-#x2D1#x2E0-#x2E4#x2EE#x37A#x386#x388-#x38A#x38C#x38E-#x3A1#x3A3-#x3CE#x3D0-#x3D7#x3DA-#x3F3#x400-#x481#x48C-#x4C4#x4C7-#x4C8#x4CB-#x4CC#x4D0-#x4F5#x4F8-#x4F9#x531-#x556#x559#x561-#x587#x5D0-#x5EA#x5F0-#x5F2#x621-#x63A#x640-#x64A#x671-#x6D3#x6D5#x6E5-#x6E6#x6FA-#x6FC#x710#x712-#x72C#x780-#x7A5#x905-#x939#x93D#x950#x958-#x961#x985-#x98C#x98F-#x990#x993-#x9A8#x9AA-#x9B0#x9B2#x9B6-#x9B9#x9DC-#x9DD#x9DF-#x9E1#x9F0-#x9F3#xA05-#xA0A#xA0F-#xA10#xA13-#xA28#xA2A-#xA30#xA32-#xA33#xA35-#xA36#xA38-#xA39#xA59-#xA5C#xA5E#xA72-#xA74#xA85-#xA8B#xA8D#xA8F-#xA91#xA93-#xAA8#xAAA-#xAB0#xAB2-#xAB3#xAB5-#xAB9#xABD#xAD0#xAE0#xB05-#xB0C#xB0F-#xB10#xB13-#xB28#xB2A-#xB30#xB32-#xB33#xB36-#xB39#xB3D#xB5C-#xB5D#xB5F-#xB61#xB85-#xB8A#xB8E-#xB90#xB92-#xB95#xB99-#xB9A#xB9C#xB9E-#xB9F#xBA3-#xBA4#xBA8-#xBAA#xBAE-#xBB5#xBB7-#xBB9#xC05-#xC0C#xC0E-#xC10#xC12-#xC28#xC2A-#xC33#xC35-#xC39#xC60-#xC61#xC85-#xC8C#xC8E-#xC90#xC92-#xCA8#xCAA-#xCB3#xCB5-#xCB9#xCDE#xCE0-#xCE1#xD05-#xD0C#xD0E-#xD10#xD12-#xD28#xD2A-#xD39#xD60-#xD61#xD85-#xD96#xD9A-#xDB1#xDB3-#xDBB#xDBD#xDC0-#xDC6#xE01-#xE30#xE32-#xE33#xE3F-#xE46#xE81-#xE82#xE84#xE87-#xE88#xE8A#xE8D#xE94-#xE97#xE99-#xE9F#xEA1-#xEA3#xEA5#xEA7#xEAA-#xEAB#xEAD-#xEB0#xEB2-#xEB3#xEBD#xEC0-#xEC4#xEC6#xEDC-#xEDD#xF00#xF40-#xF47#xF49-#xF6A#xF88-#xF8B#x1000-#x1021#x1023-#x1027#x1029-#x102A#x1050-#x1055#x10A0-#x10C5#x10D0-#x10F6#x1100-#x1159#x115F-#x11A2#x11A8-#x11F9#x1200-#x1206#x1208-#x1246#x1248#x124A-#x124D#x1250-#x1256#x1258#x125A-#x125D#x1260-#x1286#x1288#x128A-#x128D#x1290-#x12AE#x12B0#x12B2-#x12B5#x12B8-#x12BE#x12C0#x12C2-#x12C5#x12C8-#x12CE#x12D0-#x12D6#x12D8-#x12EE#x12F0-#x130E#x1310#x1312-#x1315#x1318-#x131E#x1320-#x1346#x1348-#x135A#x13A0-#x13F4#x1401-#x166C#x166F-#x1676#x1681-#x169A#x16A0-#x16EA#x1780-#x17B3#x17DB#x1820-#x1877#x1880-#x18A8#x1E00-#x1E9B#x1EA0-#x1EF9#x1F00-#x1F15#x1F18-#x1F1D#x1F20-#x1F45#x1F48-#x1F4D#x1F50-#x1F57#x1F59#x1F5B#x1F5D#x1F5F-#x1F7D#x1F80-#x1FB4#x1FB6-#x1FBC#x1FBE#x1FC2-#x1FC4#x1FC6-#x1FCC#x1FD0-#x1FD3#x1FD6-#x1FDB#x1FE0-#x1FEC#x1FF2-#x1FF4#x1FF6-#x1FFC#x203F-#x2040#x207F#x20A0-#x20AF#x2102#x2107#x210A-#x2113#x2115#x2119-#x211D#x2124#x2126#x2128#x212A-#x212D#x212F-#x2131#x2133-#x2139#x2160-#x2183#x3005-#x3007#x3021-#x3029#x3031-#x3035#x3038-#x303A#x3041-#x3094#x309D-#x309E#x30A1-#x30FE#x3105-#x312C#x3131-#x318E#x31A0-#x31B7#x3400-#x4DB5#x4E00-#x9FA5#xA000-#xA48C#xAC00-#xD7A3#xF900-#xFA2D#xFB00-#xFB06#xFB13-#xFB17#xFB1D#xFB1F-#xFB28#xFB2A-#xFB36#xFB38-#xFB3C#xFB3E#xFB40-#xFB41#xFB43-#xFB44#xFB46-#xFBB1#xFBD3-#xFD3D#xFD50-#xFD8F#xFD92-#xFDC7#xFDF0-#xFDFB#xFE33-#xFE34#xFE4D-#xFE4F#xFE69#xFE70-#xFE72#xFE74#xFE76-#xFEFC#xFF04#xFF21-#xFF3A#xFF3F#xFF41-#xFF5A#xFF65-#xFFBE#xFFC2-#xFFC7#xFFCA-#xFFCF#xFFD2-#xFFD7#xFFDA-#xFFDC#xFFE0-#xFFE1#xFFE5-#xFFE6]

PART_LETTER

$ @ [0-9] [A-Z] _ [a-z] [#x23] [#x0-#x8] [#xE-#x1B] [#x7F-#x9F] [#xA2-#xA5] [#xAA] [#xB5] [#xBA] [#xC0-#xD6] [#xD8-#xF6] [#xF8-#x21F] [#x222-#x233] [#x250-#x2AD] [#x2B0-#x2B8] [#x2BB-#x2C1] [#x2D0-#x2D1] [#x2E0-#x2E4] [#x2EE] [#x300-#x34E] [#x360-#x362] [#x37A] [#x386] [#x388-#x38A] [#x38C] [#x38E-#x3A1] [#x3A3-#x3CE] [#x3D0-#x3D7] [#x3DA-#x3F3] [#x400-#x481] [#x483-#x486] [#x48C-#x4C4] [#x4C7-#x4C8] [#x4CB-#x4CC] [#x4D0-#x4F5] [#x4F8-#x4F9] [#x531-#x556] [#x559] [#x561-#x587] [#x591-#x5A1] [#x5A3-#x5B9] [#x5BB-#x5BD] [#x5BF] [#x5C1-#x5C2] [#x5C4] [#x5D0-#x5EA] [#x5F0-#x5F2] [#x621-#x63A] [#x640-#x655] [#x660-#x669] [#x670-#x6D3] [#x6D5-#x6DC] [#x6DF-#x6E8] [#x6EA-#x6ED] [#x6F0-#x6FC] [#x70F-#x72C] [#x730-#x74A] [#x780-#x7B0] [#x901-#x903] [#x905-#x939] [#x93C-#x94D] [#x950-#x954] [#x958-#x963] [#x966-#x96F] [#x981-#x983] [#x985-#x98C] [#x98F-#x990] [#x993-#x9A8] [#x9AA-#x9B0] [#x9B2] [#x9B6-#x9B9] [#x9BC] [#x9BE-#x9C4] [#x9C7-#x9C8] [#x9CB-#x9CD] [#x9D7] [#x9DC-#x9DD] [#x9DF-#x9E3] [#x9E6-#x9F3] [#xA02] [#xA05-#xA0A] [#xA0F-#xA10] [#xA13-#xA28] [#xA2A-#xA30] [#xA32-#xA33] [#xA35-#xA36] [#xA38-#xA39] [#xA3C] [#xA3E-#xA42] [#xA47-#xA48] [#xA4B-#xA4D] [#xA59-#xA5C] [#xA5E] [#xA66-#xA74] [#xA81-#xA83] [#xA85-#xA8B] [#xA8D] [#xA8F-#xA91] [#xA93-#xAA8] [#xAAA-#xAB0] [#xAB2-#xAB3] [#xAB5-#xAB9] [#xABC-#xAC5] [#xAC7-#xAC9] [#xACB-#xACD] [#xAD0] [#xAE0] [#xAE6-#xAEF] [#xB01-#xB03] [#xB05-#xB0C] [#xB0F-#xB10] [#xB13-#xB28] [#xB2A-#xB30] [#xB32-#xB33] [#xB36-#xB39] [#xB3C-#xB43] [#xB47-#xB48] [#xB4B-#xB4D] [#xB56-#xB57] [#xB5C-#xB5D] [#xB5F-#xB61] [#xB66-#xB6F] [#xB82-#xB83] [#xB85-#xB8A] [#xB8E-#xB90] [#xB92-#xB95] [#xB99-#xB9A] [#xB9C] [#xB9E-#xB9F] [#xBA3-#xBA4] [#xBA8-#xBAA] [#xBAE-#xBB5] [#xBB7-#xBB9] [#xBBE-#xBC2] [#xBC6-#xBC8] [#xBCA-#xBCD] [#xBD7] [#xBE7-#xBEF] [#xC01-#xC03] [#xC05-#xC0C] [#xC0E-#xC10] [#xC12-#xC28] [#xC2A-#xC33] [#xC35-#xC39] [#xC3E-#xC44] [#xC46-#xC48] [#xC4A-#xC4D] [#xC55-#xC56] [#xC60-#xC61] [#xC66-#xC6F] [#xC82-#xC83] [#xC85-#xC8C] [#xC8E-#xC90] [#xC92-#xCA8] [#xCAA-#xCB3] [#xCB5-#xCB9] [#xCBE-#xCC4] [#xCC6-#xCC8] [#xCCA-#xCCD] [#xCD5-#xCD6] [#xCDE] [#xCE0-#xCE1] [#xCE6-#xCEF] [#xD02-#xD03] [#xD05-#xD0C] [#xD0E-#xD10] [#xD12-#xD28] [#xD2A-#xD39] [#xD3E-#xD43] [#xD46-#xD48] [#xD4A-#xD4D] [#xD57] [#xD60-#xD61] [#xD66-#xD6F] [#xD82-#xD83] [#xD85-#xD96] [#xD9A-#xDB1] [#xDB3-#xDBB] [#xDBD] [#xDC0-#xDC6] [#xDCA] [#xDCF-#xDD4] [#xDD6] [#xDD8-#xDDF] [#xDF2-#xDF3] [#xE01-#xE3A] [#xE3F-#xE4E] [#xE50-#xE59] [#xE81-#xE82] [#xE84] [#xE87-#xE88] [#xE8A] [#xE8D] [#xE94-#xE97] [#xE99-#xE9F] [#xEA1-#xEA3] [#xEA5] [#xEA7] [#xEAA-#xEAB] [#xEAD-#xEB9] [#xEBB-#xEBD] [#xEC0-#xEC4] [#xEC6] [#xEC8-#xECD] [#xED0-#xED9] [#xEDC-#xEDD] [#xF00] [#xF18-#xF19] [#xF20-#xF29] [#xF35] [#xF37] [#xF39] [#xF3E-#xF47] [#xF49-#xF6A] [#xF71-#xF84] [#xF86-#xF8B] [#xF90-#xF97] [#xF99-#xFBC] [#xFC6] [#x1000-#x1021] [#x1023-#x1027] [#x1029-#x102A] [#x102C-#x1032] [#x1036-#x1039] [#x1040-#x1049] [#x1050-#x1059] [#x10A0-#x10C5] [#x10D0-#x10F6] [#x1100-#x1159] [#x115F-#x11A2] [#x11A8-#x11F9] [#x1200-#x1206] [#x1208-#x1246] [#x1248] [#x124A-#x124D] [#x1250-#x1256] [#x1258] [#x125A-#x125D] [#x1260-#x1286] [#x1288] [#x128A-#x128D] [#x1290-#x12AE] [#x12B0] [#x12B2-#x12B5] [#x12B8-#x12BE] [#x12C0] [#x12C2-#x12C5] [#x12C8-#x12CE] [#x12D0-#x12D6] [#x12D8-#x12EE] [#x12F0-#x130E] [#x1310] [#x1312-#x1315] [#x1318-#x131E] [#x1320-#x1346] [#x1348-#x135A] [#x1369-#x1371] [#x13A0-#x13F4] [#x1401-#x166C] [#x166F-#x1676] [#x1681-#x169A] [#x16A0-#x16EA] [#x1780-#x17D3] [#x17DB] [#x17E0-#x17E9] [#x180B-#x180E] [#x1810-#x1819] [#x1820-#x1877] [#x1880-#x18A9] [#x1E00-#x1E9B] [#x1EA0-#x1EF9] [#x1F00-#x1F15] [#x1F18-#x1F1D] [#x1F20-#x1F45] [#x1F48-#x1F4D] [#x1F50-#x1F57] [#x1F59] [#x1F5B] [#x1F5D] [#x1F5F-#x1F7D] [#x1F80-#x1FB4] [#x1FB6-#x1FBC] [#x1FBE] [#x1FC2-#x1FC4] [#x1FC6-#x1FCC] [#x1FD0-#x1FD3] [#x1FD6-#x1FDB] [#x1FE0-#x1FEC] [#x1FF2-#x1FF4] [#x1FF6-#x1FFC] [#x200C-#x200F] [#x202A-#x202E] [#x203F-#x2040] [#x206A-#x206F] [#x207F] [#x20A0-#x20AF] [#x20D0-#x20DC] [#x20E1] [#x2102] [#x2107] [#x210A-#x2113] [#x2115] [#x2119-#x211D] [#x2124] [#x2126] [#x2128] [#x212A-#x212D] [#x212F-#x2131] [#x2133-#x2139] [#x2160-#x2183] [#x3005-#x3007] [#x3021-#x302F] [#x3031-#x3035] [#x3038-#x303A] [#x3041-#x3094] [#x3099-#x309A] [#x309D-#x309E] [#x30A1-#x30FE] [#x3105-#x312C] [#x3131-#x318E] [#x31A0-#x31B7] [#x3400-#x4DB5] [#x4E00-#x9FA5] [#xA000-#xA48C] [#xAC00-#xD7A3] [#xF900-#xFA2D] [#xFB00-#xFB06] [#xFB13-#xFB17] [#xFB1D-#xFB28] [#xFB2A-#xFB36] [#xFB38-#xFB3C] [#xFB3E] [#xFB40-#xFB41] [#xFB43-#xFB44] [#xFB46-#xFBB1] [#xFBD3-#xFD3D] [#xFD50-#xFD8F] [#xFD92-#xFDC7] [#xFDF0-#xFDFB] [#xFE20-#xFE23] [#xFE33-#xFE34] [#xFE4D-#xFE4F] [#xFE69] [#xFE70-#xFE72] [#xFE74] [#xFE76-#xFEFC] [#xFEFF] [#xFF04] [#xFF10-#xFF19] [#xFF21-#xFF3A] [#xFF3F] [#xFF41-#xFF5A] [#xFF65-#xFFBE] [#xFFC2-#xFFC7] [#xFFCA-#xFFCF] [#xFFD2-#xFFD7] [#xFFDA-#xFFDC] [#xFFE0-#xFFE1] [#xFFE5-#xFFE6] [#xFFF9-#xFFFB]