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
SingleStatement¶
| Upsert
| Replace
| Drop
| Analyze
| Truncate
| Execute
| Set
| Reset
| Show
| Use
| 'COMMIT'
| Comment
| Describe
| Explain
| Declare
| Grant
Block¶
Statements¶
::= ';'* ( 'IF' Condition ( SingleStatement | Block ) ( ';'? 'ELSE' ( SingleStatement | Block ) )? | SingleStatement | Block ';'? | UnsupportedStatement ) ( ';' ( 'IF' Condition ( SingleStatement | Block ) ( ';'? 'ELSE' ( SingleStatement | Block ) )? | SingleStatement | Block ';'? | UnsupportedStatement )? )* EOF
Declare¶
Declare ::= 'DECLARE' UserVariable ( 'TABLE' '(' ColumnDefinition ( ',' ColumnDefinition )* ')' | 'AS' RelObjectName | ColDataType ( '=' Expression )? ( ',' UserVariable ColDataType ( '=' Expression )? )* )
Set¶
Set ::= 'SET' ( 'LOCAL' | 'SESSION' )? ( K_DATETIMELITERAL 'ZONE' | ( UserVariable | RelObjectNameExt ) '='? ) Expression ( ',' ( K_DATETIMELITERAL 'ZONE' | RelObjectNameExt '='? )? Expression )*
Reset¶
RenameTableStatement¶
PurgeStatement¶
::= 'PURGE' ( 'TABLE' Table | 'INDEX' Index | 'RECYCLEBIN' | 'DBA_RECYCLEBIN' | 'TABLESPACE' S_IDENTIFIER ( 'USER' S_IDENTIFIER )? )
Describe¶
Explain¶
ExplainOptionBoolean¶
::= ( 'TRUE' | 'FALSE' | 'ON' | 'OFF' )?
ExplainFormatOption¶
::= ( 'XML' | 'JSON' | 'YAML' )?
ExplainStatementOptions¶
::= ( ( 'ANALYZE' | 'BUFFERS' | 'COSTS' | 'VERBOSE' ) ExplainOptionBoolean | 'FORMAT' ExplainFormatOption )*
Use¶
Use ::= 'USE' 'SCHEMA'? RelObjectNameExt
ShowColumns¶
::= 'SHOW' 'COLUMNS' 'FROM' RelObjectNameExt
ShowTables¶
::= 'SHOW' 'EXTENDED'? 'FULL'? 'TABLES' ( ( 'FROM' | 'IN' ) RelObjectNameExt )? ( 'LIKE' SimpleExpression | 'WHERE' Expression )?
Show¶
Show ::= 'SHOW' RelObjectNameExt
Values¶
Values ::= ( 'VALUES' | 'VALUE' ) SimpleExpressionList
Update¶
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 ::= 'REPLACE' 'INTO'? Table ( 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | ( '(' Column ( ',' Column )* ')' )? ( ( 'VALUES' | 'VALUE' )? '(' PrimaryExpression ( ',' PrimaryExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SubSelect ) )
ListExpressionItem¶
::= SelectExpressionItem ( ',' SelectExpressionItem )*
Insert¶
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
InsertConflictAction¶
::= 'DO' ( 'NOTHING' | 'UPDATE' 'SET' ( Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* | '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) ( ',' '('? Column ( ',' Column )* ')'? '=' ( SubSelect | '(' ComplexExpressionList ')' | Expression ) )* ) WhereClause? )
OutputClause¶
Upsert¶
Upsert ::= 'UPSERT' 'INTO'? Table ( '(' Column ( ',' Column )* ')' )? ( ( ( 'VALUES' | 'VALUE' )? '(' SimpleExpression ( ',' SimpleExpression )* ( ')' ',' '(' SimpleExpression ( ',' SimpleExpression )* )* | '(' SelectWithWithItems ) ')' | SelectWithWithItems ) ( 'ON' 'DUPLICATE' 'KEY' 'UPDATE' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* )?
Delete¶
Delete ::= 'DELETE' 'LOW_PRIORITY'? 'QUICK'? 'IGNORE'? ( ( TableWithAlias ( ',' TableWithAlias )* OutputClause? )? 'FROM' )? ( TableWithAlias JoinsList )? ( 'USING' TableWithAlias ( ',' TableWithAlias )* )? WhereClause? OrderByElements? PlainLimit? ( 'RETURNING' SelectItemsList )?
Merge¶
Merge ::= 'MERGE' 'INTO' TableWithAlias 'USING' ( Table | '(' SubSelect ')' ) Alias? 'ON' '(' Expression ')' ( MergeUpdateClause MergeInsertClause? | MergeInsertClause MergeUpdateClause? )?
MergeUpdateClause¶
::= 'WHEN' 'MATCHED' 'THEN' 'UPDATE' 'SET' Column '=' SimpleExpression ( ',' Column '=' SimpleExpression )* ( 'WHERE' Expression )? ( 'DELETE' 'WHERE' Expression )?
MergeInsertClause¶
::= 'WHEN' 'NOT' 'MATCHED' 'THEN' 'INSERT' ( '(' Column ( ',' Column )* ')' )? 'VALUES' '(' SimpleExpression ( ',' SimpleExpression )* ')' ( 'WHERE' Expression )?
RelObjectNameList¶
::= RelObjectNameExt ( ( '.' | ':' ) '.'* RelObjectNameExt2 )*
Column¶
RelObjectNameWithoutValue¶
::= S_IDENTIFIER
| '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¶
| 'GROUP'
| 'INTERVAL'
| 'ON'
| 'START'
| 'TOP'
| 'VALUE'
| 'VALUES'
| 'CREATE'
| 'TABLES'
| 'CONNECT'
| 'IGNORE'
RelObjectNameWithoutStart¶
| 'TOP'
| 'VALUE'
| 'VALUES'
| 'INTERVAL'
RelObjectNameExt¶
::= 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'
Table¶
TableWithAlias¶
SelectWithWithItems¶
Select¶
Select ::= SelectBody
SelectBody¶
::= 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 ( ',' 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 ) ( ( 'UNION' ( 'ALL' | 'DISTINCT' )? | 'INTERSECT' | 'MINUS' | 'EXCEPT' ) ( '('
SelectBody ')' | PlainSelect | Values ) )* OrderByElements? LimitWithOffset? Offset? Fetch? WithIsolation?
SetOperationListWithoutIntialSelect¶
::= ( ( 'UNION' ( 'ALL' | 'DISTINCT' )? | 'INTERSECT' | 'MINUS' | 'EXCEPT'
) '(' SelectBody ')' )+
WithList¶
WithItem¶
WithItem ::= 'RECURSIVE'? RelObjectName ( '(' SelectItemsList ')' )? 'AS' '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'
SelectItemsList¶
::= SelectItem ( ',' SelectItem )*
SelectExpressionItem¶
::= Expression Alias?
SelectItem¶
::= '*'
AllTableColumns¶
::= Table '.' '*'
Alias¶
Alias ::= 'AS'? ( RelObjectNameWithoutStart | S_CHAR_LITERAL ) ( '(' RelObjectName ColDataType? ( ',' RelObjectName ColDataType? )* ')' )?
SQLServerHint¶
::= 'INDEX' '(' RelObjectName ')'
| 'NOLOCK'
SQLServerHints¶
::= 'WITH' '(' SQLServerHint ( ',' SQLServerHint )* ')'
MySQLIndexHint¶
::= ( 'USE' | 'SHOW' | 'IGNORE' | 'FORCE' ) ( 'INDEX' | 'KEY' ) '(' RelObjectNameWithoutValue ( ',' RelObjectNameWithoutValue )* ')'
FunctionItem¶
PivotForColumns¶
| Column
PivotFunctionItems¶
::= FunctionItem ( ',' FunctionItem )*
PivotSingleInItems¶
::= PivotSelectExprItem ( ',' PivotSelectExprItem )*
PivotSelectExprItem¶
::= SimpleExpression Alias?
ExpressionListItem¶
::= '(' SimpleExpressionList ')' Alias?
PivotMultiInItems¶
::= ExpressionListItem ( ',' ExpressionListItem )*
Pivot¶
Pivot ::= 'PIVOT' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( PivotSingleInItems | PivotMultiInItems ) ')' ')' Alias?
PivotXml¶
PivotXml ::= 'PIVOT' 'XML' '(' PivotFunctionItems 'FOR' PivotForColumns 'IN' '(' ( 'ANY' | SelectBody | PivotSingleInItems | PivotMultiInItems ) ')' ')'
UnPivot¶
UnPivot ::= 'UNPIVOT' ( ( 'INCLUDE' | 'EXCLUDE' ) 'NULLS' )? '(' PivotForColumns 'FOR' PivotForColumns 'IN' '(' PivotSingleInItems ')' ')' Alias?
IntoClause¶
FromItem¶
FromItem ::= ValuesList
| ( '(' ( FromItem SubJoin? | SubSelect ) SetOperationListWithoutIntialSelect? ')' UnPivot? | TableFunction | Table | LateralSubSelect ) Alias? UnPivot? ( PivotXml | Pivot )? ( MySQLIndexHint | SQLServerHints )?
ValuesList¶
::= '(' 'VALUES' ( '(' SimpleExpression ( ',' SimpleExpression )* ')' ( ',' '(' SimpleExpression ( ',' SimpleExpression )* ')' )* | SimpleExpression ( ',' SimpleExpression )* ) ')' ( Alias ( '(' RelObjectName ( ',' RelObjectName )* ')' )? )?
LateralSubSelect¶
::= 'LATERAL' '(' SubSelect ')'
SubJoin¶
SubJoin ::= SubJoinsList
JoinsList¶
::= JoinerExpression*
SubJoinsList¶
::= JoinerExpression+
JoinerExpression¶
::= 'GLOBAL'? 'NATURAL'? ( ( 'RIGHT' | 'FULL' )? 'OUTER'? | 'LEFT' ( 'SEMI'
| 'OUTER' )? | 'INNER' | 'CROSS' ) ( 'JOIN' | ',' 'OUTER'? | 'STRAIGHT_JOIN' | 'APPLY'
) FromItem ( ( 'WITHIN' '(' JoinWindow ')' )? ( 'ON' Expression )+ | 'USING' '(' Column ( ',' Column )* ')' )?
JoinWindow¶
KSQLWindowClause¶
::= 'WINDOW' ( 'HOPPING' '(' 'SIZE' S_LONG S_IDENTIFIER ',' 'ADVANCE' 'BY' | 'SESSION' '(' | 'TUMBLING' '(' 'SIZE' ) S_LONG S_IDENTIFIER ')'
WhereClause¶
::= 'WHERE' Expression
OracleHierarchicalQueryClause¶
::= ( 'START' 'WITH' AndExpression 'CONNECT' 'BY' 'NOCYCLE'? | 'CONNECT' 'BY' 'NOCYCLE'? ( AndExpression 'START' 'WITH' )? ) AndExpression
GroupByColumnReferences¶
::= 'GROUP' 'BY' ( ( '(' ')' | ComplexExpressionList ) ( 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )? | 'GROUPING' 'SETS' '(' ( '(' SimpleExpressionList? ')' | SimpleExpression ) ( ',' ( '(' SimpleExpressionList? ')' | SimpleExpression ) )* ')' )
Having¶
Having ::= 'HAVING' Expression
OrderByElements¶
::= 'ORDER' 'SIBLINGS'? 'BY' OrderByElement ( ',' OrderByElement )*
OrderByElement¶
::= Expression ( 'ASC' | 'DESC' )? ( 'NULLS' ( 'FIRST' | 'LAST' )? )?
SimpleJdbcParameter¶
::= '?' S_LONG?
SimpleJdbcNamedParameter¶
::= ':' RelObjectNameExt
LimitWithOffset¶
::= 'LIMIT' Expression ',' Expression
PlainLimit¶
::= 'LIMIT' ( '(' SubSelect ')' | Expression )
Offset¶
Offset ::= 'OFFSET' Expression ( 'ROWS' | 'ROW' )?
Fetch¶
WithIsolation¶
::= 'WITH' K_ISOLATION
OptimizeFor¶
::= 'OPTIMIZE' 'FOR' S_LONG 'ROWS'
Top¶
Top ::= 'TOP' ( S_LONG | SimpleJdbcParameter | ':' S_IDENTIFIER? | '(' AdditiveExpression ')' ) 'PERCENT'? 'WITH TIES'?
Skip¶
First¶
Expression¶
::= XorExpression
XorExpression¶
::= OrExpression ( 'XOR' OrExpression )*
OrExpression¶
::= AndExpression ( 'OR' AndExpression )*
AndExpression¶
::= ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) ( ( 'AND' | '&&' ) ( Condition | ( 'NOT' | '!' )? '(' XorExpression ')' ) )*
Condition¶
::= ( 'NOT' | '!' )? ( RegularCondition | SQLCondition )
OverlapsCondition¶
::= '(' SimpleExpressionListAtLeastTwoItems ')' 'OVERLAPS' '(' SimpleExpressionListAtLeastTwoItems ')'
RegularCondition¶
::= 'PRIOR'? ComparisonItem ( '(' '+' ')' )? ( '>' | '<' | '=' | OP_GREATERTHANEQUALS | OP_MINORTHANEQUALS | OP_NOTEQUALSSTANDARD | OP_NOTEQUALSBANG | '@@' | '~' | ( 'NOT'? 'REGEXP' | 'RLIKE' ) 'BINARY'? | '~*' | '!~' | '!~*' | '@>'
| '<@' | '?' | '?|' | '?&' | OP_CONCAT | '-' | '-#' | '<->' | '<#>' ) 'PRIOR'? ComparisonItem ( '(' '+' ')' )?
SQLCondition¶
::= ExistsExpression
InExpression¶
::= SimpleExpression ( '(' '+' ')' )? 'NOT'? 'IN' ( S_CHAR_LITERAL | Function | '(' ( ComplexExpressionList | SubSelect ) ')' | SimpleExpression )
MultiInExpressions¶
::= '(' '(' SimpleExpressionList ')' ( ',' '(' SimpleExpressionList ')' )* ')'
Between¶
LikeExpression¶
::= 'NOT'? ( 'LIKE' | 'ILIKE' ) SimpleExpression ( 'ESCAPE' Expression )?
SimilarToExpression¶
::= 'NOT'? 'SIMILAR' 'TO' SimpleExpression ( 'ESCAPE' S_CHAR_LITERAL )?
IsDistinctExpression¶
::= 'IS' 'NOT'? 'DISTINCT' 'FROM' SimpleExpression
IsNullExpression¶
::= 'ISNULL'
| 'IS' 'NOT'? 'NULL'
IsBooleanExpression¶
::= 'IS' 'NOT'? ( 'TRUE' | 'FALSE' )
ExistsExpression¶
::= 'EXISTS' SimpleExpression
SQLExpressionList¶
::= Expression ( ',' Expression )*
SimpleExpressionList¶
::= SimpleExpression ( ',' SimpleExpression )*
ComplexExpressionList¶
::= ( OracleNamedFunctionParameter | Expression ) ( ',' ( OracleNamedFunctionParameter | Expression ) )*
NamedExpressionList1¶
::= ( 'BOTH' | 'LEADING' | 'TRAILING' ) SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression
NamedExpressionListExprFirst¶
::= SimpleExpression ( 'FROM' | 'IN' | 'PLACING' ) SimpleExpression ( ( 'FOR' | 'FROM' ) SimpleExpression ( 'FOR' SimpleExpression )? )?
SimpleExpressionListAtLeastTwoItems¶
::= SimpleExpression ( ',' SimpleExpression )+
ComparisonItem¶
AnyComparisonExpression¶
::= ( 'ANY' | 'SOME' | 'ALL' ) '(' ( 'VALUES' SimpleExpressionList | SubSelect ) ')'
SimpleExpression¶
::= ( UserVariable ( '=' | ':=' ) )? ConcatExpression
ConcatExpression¶
BitwiseAndOr¶
::= AdditiveExpression ( ( '|' | '&' | '<<' | '>>' ) AdditiveExpression )*
AdditiveExpression¶
::= MultiplicativeExpression ( ( '+' | '-' ) MultiplicativeExpression )*
MultiplicativeExpression¶
::= BitwiseXor ( ( '*' | '/' | 'DIV' | '%' ) BitwiseXor )*
BitwiseXor¶
::= PrimaryExpression ( '^' PrimaryExpression )*
ArrayExpression¶
::= ( '[' 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 )*
ConnectByRootOperator¶
::= 'CONNECT_BY_ROOT' Column
NextValExpression¶
JdbcNamedParameter¶
::= ':' RelObjectNameExt2
OracleNamedFunctionParameter¶
::= RelObjectNameExt2 '=>' Expression
UserVariable¶
::= ( '@' | '@@' ) RelObjectNameExt2 ( '.' RelObjectNameExt2 )*
NumericBind¶
::= ':' S_LONG
DateTimeLiteralExpression¶
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' )? ( ',' 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? ')' )?
IntervalExpression¶
::= 'INTERVAL' '-'? ( S_LONG | S_DOUBLE | S_CHAR_LITERAL | SimpleJdbcParameter | JdbcNamedParameter | Function | Column ) ( S_IDENTIFIER | K_DATE_LITERAL )?
IntervalExpressionWithoutInterval¶
::= K_DATE_LITERAL
KeepExpression¶
::= 'KEEP' '(' S_IDENTIFIER ( 'FIRST' | 'LAST' ) OrderByElements ')'
windowFun¶
::= ( ( 'IGNORE' 'NULLS' )? 'OVER' | 'WITHIN' 'GROUP' ) ( RelObjectName | windowDefinition ( 'OVER' '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? ')' )? )
windowDefinition¶
::= '(' ( 'PARTITION' 'BY' ( ComplexExpressionList | '(' ComplexExpressionList ')' ) )? OrderByElements? WindowElement? ')'
AnalyticExpression¶
::= 'FILTER' '(' 'WHERE' Expression ')' windowFun?
WindowElement¶
::= ( 'ROWS' | 'RANGE' ) ( 'BETWEEN' WindowOffset 'AND' )? WindowOffset
WindowOffset¶
::= ( 'UNBOUNDED' | SimpleExpression ) ( 'PRECEDING' | 'FOLLOWING' )
| 'CURRENT' 'ROW'
ExtractExpression¶
CastExpression¶
TryCastExpression¶
SafeCastExpression¶
CaseWhenExpression¶
::= 'CASE' Expression? WhenThenSearchCondition+ ( 'ELSE' ( '('? CaseWhenExpression ')'? | Expression ) )? 'END'
WhenThenSearchCondition¶
RowConstructor¶
::= 'ROW'? '(' ColumnDefinition ( ',' ColumnDefinition )* ')'
VariableExpression¶
::= UserVariable '=' SimpleExpression
Execute¶
Execute ::= ( 'EXEC' | 'EXECUTE' | 'CALL' ) RelObjectNameList ( VariableExpression ( ',' VariableExpression )* | SimpleExpressionList | '(' SimpleExpressionList ')' )?
FullTextSearch¶
::= '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¶
Function ::= '{' 'FN' InternalFunction '}'
SpecialStringFunctionWithNamedParameters¶
InternalFunction¶
::= RelObjectNameList '(' ( ( 'DISTINCT' | 'ALL' | 'UNIQUE' )? ( '*' | AllTableColumns | ( ComplexExpressionList | SimpleExpressionList ) OrderByElements? | SubSelect ) )? ( 'IGNORE' 'NULLS' )? ')' ( '.' ( Function | RelObjectName ) )? KeepExpression?
XMLSerializeExpr¶
::= 'XMLSERIALIZE' '(' 'XMLAGG' '(' 'XMLTEXT' '(' SimpleExpression ')' OrderByElements? ')' 'AS' ColDataType ')'
MySQLGroupConcat¶
::= 'GROUP_CONCAT' '(' 'DISTINCT'? SimpleExpressionList OrderByElements? ( 'SEPARATOR' S_CHAR_LITERAL )? ')'
ValueListExpression¶
::= '(' SimpleExpressionListAtLeastTwoItems ')'
TableFunction¶
SubSelect¶
::= WithList? SelectBody
ColumnNamesWithParamsList¶
Index¶
CreateIndex¶
::= 'CREATE' CreateParameter? 'INDEX' Index 'ON' Table ( 'USING' S_IDENTIFIER )? ColumnNamesWithParamsList CreateParameter*
ColumnDefinition¶
CreateSchema¶
::= 'CREATE' 'SCHEMA' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER )? ( 'AUTHORIZATION' ( S_IDENTIFIER | S_QUOTED_IDENTIFIER ) )? PathSpecification? ( CreateTable | CreateView )*
PathSpecification¶
CreateTable¶
::= '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' ) )?
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' ) )?
Analyze¶
CreateView¶
::= 'CREATE' ( 'OR' 'REPLACE' )? ( 'NO'? 'FORCE' )? ( 'TEMP' | 'TEMPORARY'
)? 'MATERIALIZED'? 'VIEW' Table ( 'IF' 'NOT' 'EXISTS' )? ColumnsNamesList? 'AS' SelectWithWithItems ( 'WITH' 'READ' 'ONLY' )?
Action¶
Action ::= 'CASCADE'
| 'RESTRICT'
| 'NO' 'ACTION'
| 'SET' ( 'NULL' | 'DEFAULT' )
AlterView¶
CreateParameter¶
| 'NULL'
| 'NOT'
| 'PRIMARY'
| 'DEFAULT'
| 'FOREIGN'
| 'REFERENCES'
| 'KEY'
| 'AS' ( '(' Expression ')' )?
| 'STORED'
| 'ON'
| 'COMMIT'
| 'DROP'
| 'ROWS'
| 'UNIQUE'
| 'CASCADE'
| 'DELETE'
| 'UPDATE'
| '='
| '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'
AList¶
AList ::= '(' ( ( S_LONG | S_DOUBLE | S_CHAR_LITERAL | RelObjectNameWithoutValue ) ( ',' | '=' )? )* ')'
ColumnsNamesListItem¶
::= RelObjectName ( '(' S_LONG ')' )?
ColumnsNamesList¶
::= '(' ColumnsNamesListItem ( ',' ColumnsNamesListItem )* ')'
FuncArgsListItem¶
FuncArgsList¶
::= '(' ( FuncArgsListItem ( ',' FuncArgsListItem )* )? ')'
Drop¶
Drop ::= 'DROP' ( S_IDENTIFIER | 'TABLE' | 'INDEX' | 'VIEW' | 'SCHEMA' | 'SEQUENCE' | 'FUNCTION' ) ( 'IF' 'EXISTS'
)? Table FuncArgsList? ( S_IDENTIFIER | 'CASCADE' | 'RESTRICT' | 'ON' )*
Truncate¶
AlterExpressionColumnDataType¶
AlterExpressionColumnDropNotNull¶
::= RelObjectName 'DROP' 'NOT'? 'NULL'
AlterExpressionColumnDropDefault¶
::= RelObjectName 'DROP' 'DEFAULT'
AlterExpressionConstraintState¶
::= ( '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 )* ')' | 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 )
| '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
AlterTable¶
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' )*
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
Wait¶
SavepointStatement¶
::= 'SAVEPOINT' S_IDENTIFIER
RollbackStatement¶
::= 'ROLLBACK' 'WORK'? ( 'TO' 'SAVEPOINT'? S_IDENTIFIER | 'FORCE' S_CHAR_LITERAL )?
Comment¶
Grant¶
Grant ::= 'GRANT' ( ( readGrantTypes ( ',' readGrantTypes )* )? 'ON' RelObjectNameList | S_IDENTIFIER ) 'TO' UsersList
UsersList¶
::= RelObjectName ( ',' ColumnsNamesListItem )*
readGrantTypes¶
::= K_SELECT
| 'INSERT'
| 'UPDATE'
| 'DELETE'
| 'EXECUTE'
| 'ALTER'
| 'DROP'
Sequence¶
SequenceParameters¶
CreateSequence¶
::= 'CREATE' 'SEQUENCE' Sequence SequenceParameters
AlterSequence¶
::= 'ALTER' 'SEQUENCE' Sequence SequenceParameters
CreateFunctionStatement¶
::= 'CREATE' ( 'OR' 'REPLACE' )? ( 'FUNCTION' | 'PROCEDURE' ) captureRest
CreateSynonym¶
::= 'CREATE' ( 'OR' 'REPLACE' )? 'PUBLIC'? 'SYNONYM' Synonym 'FOR' RelObjectNameList
Synonym¶
UnsupportedStatement¶
WHITESPACE¶
::= [ #x9#xD#xA]
K_DATETIMELITERAL¶
::= 'DATE'
| 'TIME'
| 'TIMESTAMP'
| 'TIMESTAMPTZ'
K_DATE_LITERAL¶
::= 'YEAR'
| 'MONTH'
| 'DAY'
| 'HOUR'
| 'MINUTE'
| 'SECOND'
K_ISOLATION¶
::= 'UR'
| 'RS'
| 'RR'
| 'CS'
K_NEXTVAL¶
::= ( 'NEXTVAL' | 'NEXT' ' '+ 'VALUE' ) ' '+ 'FOR'
K_SELECT¶
K_SELECT ::= 'SELECT'
| 'SEL'
K_TIME_KEY_EXPR¶
::= 'CURRENT' ( '_' | ' '+ ) ( 'TIMESTAMP' | 'TIME' | 'DATE' ) '()'?
K_STRING_FUNCTION_NAME¶
::= 'SUBSTR'
| 'SUBSTRING'
| 'TRIM'
| 'POSITION'
| 'OVERLAY'
OP_GREATERTHANEQUALS¶
::= '>' WHITESPACE* '='
OP_MINORTHANEQUALS¶
::= '<' WHITESPACE* '='
OP_NOTEQUALSSTANDARD¶
::= '<' WHITESPACE* '>'
OP_NOTEQUALSBANG¶
::= '!' WHITESPACE* '='
OP_CONCAT¶
::= '|' WHITESPACE* '|'
DT_ZONE¶
DT_ZONE ::= K_DATETIMELITERAL WHITESPACE* ( '(' S_LONG ')' )? WHITESPACE* ( 'WITH' | 'WITHOUT' ) WHITESPACE+ ( 'LOCAL' WHITESPACE+ )? 'TIME' WHITESPACE+ 'ZONE'
S_DOUBLE¶
S_LONG¶
DIGIT¶
DIGIT ::= [0-9]
S_HEX¶
| '0x' HEX_VALUE+
HEX_VALUE¶
::= [0-9A-F]
LINE_COMMENT¶
::= ( '--' | '//' ) [^#xD#xA]*
MULTI_LINE_COMMENT¶
::= '/*' [^*]* '*' ( ( [^*/] [^*]* )? '*' )* '/'
S_IDENTIFIER¶
::= LETTER PART_LETTER*
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]