feat: support impala (#184)
* feat(impala): add impala sqlLexer * feat(impala): add impala grammar * feat(impala): add alter table sql * feat(impala): update alter table sql * feat(impala): add alter db sql * feat(impala): add alter view sql * feat(impala): add compute stats/comment statement and update partition_desc for alter table * feat(impala): add drop statement sql * feat(impala): add revoke and grant sql * feat(impala): add create db/function/role/view sql * feat(impala): add describe/explain/invalidata_metadata/load_data sql * feat(impala): add refresh/set/shutdown sql * feat(impala): add truncate_table/use/values sql * fix(impala): update shutdown and invaliddate_metadata * feat(impala): add show/update/upsert sql * feat(impala): add create/insert sql * feat(impala): add select and delete sql * feat(impala): add impala tokens and fix todo * feat(impala): update impalaparser and some test unit * feat(impala): add syntax suggestion * feat(impala): add syntax suggestion * feat(impala): update test unit * feat(impala): remove reference * fix(impala): add statement for sqlname and collect tableName * fix(impala): fix syntax suggestion unit test * fix(impala): update syntax suggestion and collect column * feat(impala): add collect column create
This commit is contained in:
366
src/grammar/impala/ImpalaSqlLexer.g4
Normal file
366
src/grammar/impala/ImpalaSqlLexer.g4
Normal file
@ -0,0 +1,366 @@
|
||||
/*
|
||||
Apache Impala grammar.
|
||||
The MIT License (MIT).
|
||||
Copyright (c) 2023, Michał Lorek.
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
*/
|
||||
|
||||
lexer grammar ImpalaSqlLexer;
|
||||
|
||||
options { caseInsensitive = true; }
|
||||
|
||||
KW_ADD : 'ADD';
|
||||
KW_ALL : 'ALL';
|
||||
KW_ANALYTIC : 'ANALYTIC';
|
||||
KW_ALTER : 'ALTER';
|
||||
KW_AND : 'AND';
|
||||
KW_ANY : 'ANY';
|
||||
KW_ANTI : 'ANTI';
|
||||
KW_ARRAY : 'ARRAY';
|
||||
KW_AS : 'AS';
|
||||
KW_ASC : 'ASC';
|
||||
KW_AT : 'AT';
|
||||
KW_AGGREGATE : 'AGGREGATE';
|
||||
KW_AUTHORIZATION : 'AUTHORIZATION';
|
||||
KW_BERNOULLI : 'BERNOULLI';
|
||||
KW_BETWEEN : 'BETWEEN';
|
||||
KW_BLOCK_SIZE : 'BLOCK_SIZE';
|
||||
KW_PARTITIONED : 'PARTITIONED';
|
||||
KW_PREPARE_FN : 'PREPARE_FN';
|
||||
KW_EXTERNAL : 'EXTERNAL';
|
||||
KW_CLOSEFN : 'CLOSEFN';
|
||||
KW_SORT : 'SORT';
|
||||
KW_PURGE : 'PURGE';
|
||||
KW_STORED : 'STORED';
|
||||
KW_LOCATION : 'LOCATION';
|
||||
KW_TBLPROPERTIES : 'TBLPROPERTIES';
|
||||
KW_BY : 'BY';
|
||||
KW_CASCADE : 'CASCADE';
|
||||
KW_CASE : 'CASE';
|
||||
KW_CAST : 'CAST';
|
||||
KW_CACHED : 'CACHED';
|
||||
KW_CHANGE : 'CHANGE';
|
||||
KW_COLUMN : 'COLUMN';
|
||||
KW_COLUMNS : 'COLUMNS';
|
||||
KW_COMMENT : 'COMMENT';
|
||||
KW_COMPRESSION : 'COMPRESSION';
|
||||
KW_COMPUTE : 'COMPUTE';
|
||||
KW_CREATE : 'CREATE';
|
||||
KW_CROSS : 'CROSS';
|
||||
KW_CURRENT : 'CURRENT';
|
||||
KW_CURRENT_DATE : 'CURRENT_DATE';
|
||||
KW_CURRENT_PATH : 'CURRENT_PATH';
|
||||
KW_CURRENT_TIME : 'CURRENT_TIME';
|
||||
KW_CURRENT_TIMESTAMP : 'CURRENT_TIMESTAMP';
|
||||
KW_CURRENT_USER : 'CURRENT_USER';
|
||||
KW_DATA : 'DATA';
|
||||
KW_DATABASE : 'DATABASE';
|
||||
KW_DATABASES : 'DATABASES';
|
||||
KW_DAY : 'DAY';
|
||||
KW_DAYS : 'DAYS';
|
||||
KW_DELETE : 'DELETE';
|
||||
KW_DEFAULT : 'DEFAULT';
|
||||
KW_DELIMITED : 'DELIMITED';
|
||||
KW_DISABLE : 'DISABLE';
|
||||
KW_UPDATE : 'UPDATE';
|
||||
KW_DESC : 'DESC';
|
||||
KW_DESCRIBE : 'DESCRIBE';
|
||||
KW_DISTINCT : 'DISTINCT';
|
||||
KW_DROP : 'DROP';
|
||||
KW_ELSE : 'ELSE';
|
||||
KW_ENCODING : 'ENCODING';
|
||||
KW_END : 'END';
|
||||
KW_ESCAPE : 'ESCAPE';
|
||||
KW_ESCAPED : 'ESCAPED';
|
||||
KW_EXCEPT : 'EXCEPT';
|
||||
KW_EXCLUDING : 'EXCLUDING';
|
||||
KW_EXISTS : 'EXISTS';
|
||||
KW_EXPLAIN : 'EXPLAIN';
|
||||
KW_EXTRACT : 'EXTRACT';
|
||||
KW_EXTENDED : 'EXTENDED';
|
||||
KW_FALSE : 'FALSE';
|
||||
KW_FIELDS : 'FIELDS';
|
||||
KW_FILEFORMAT : 'FILEFORMAT';
|
||||
KW_FILES : 'FILES';
|
||||
KW_FILTER : 'FILTER';
|
||||
KW_FIRST : 'FIRST';
|
||||
KW_FINALIZE_FN : 'FINALIZE_FN';
|
||||
KW_FOLLOWING : 'FOLLOWING';
|
||||
KW_FOR : 'FOR';
|
||||
KW_FORMAT : 'FORMAT';
|
||||
KW_FORMATTED : 'FORMATTED';
|
||||
KW_FOREIGN : 'FOREIGN';
|
||||
KW_FROM : 'FROM';
|
||||
KW_FULL : 'FULL';
|
||||
KW_FUNCTION : 'FUNCTION';
|
||||
KW_FUNCTIONS : 'FUNCTIONS';
|
||||
KW_GRANT : 'GRANT';
|
||||
KW_GROUP : 'GROUP';
|
||||
KW_GROUPING : 'GROUPING';
|
||||
KW_HASH : 'HASH';
|
||||
KW_HAVING : 'HAVING';
|
||||
KW_HOUR : 'HOUR';
|
||||
KW_HOURS : 'HOURS';
|
||||
KW_IF : 'IF';
|
||||
KW_IN : 'IN';
|
||||
KW_INCLUDING : 'INCLUDING';
|
||||
KW_INCREMENTAL : 'INCREMENTAL';
|
||||
KW_INNER : 'INNER';
|
||||
KW_INPATH : 'INPATH';
|
||||
KW_INSERT : 'INSERT';
|
||||
KW_INTERSECT : 'INTERSECT';
|
||||
KW_INTERVAL : 'INTERVAL';
|
||||
KW_INTERMEDIATE : 'INTERMEDIATE';
|
||||
KW_INTO : 'INTO';
|
||||
KW_INIT_FN : 'INIT_FN';
|
||||
KW_INVALIDATE : 'INVALIDATE';
|
||||
KW_IS : 'IS';
|
||||
KW_JOIN : 'JOIN';
|
||||
KW_KEY : 'KEY';
|
||||
KW_KUDU : 'KUDU';
|
||||
KW_LAST : 'LAST';
|
||||
KW_LATERAL : 'LATERAL';
|
||||
KW_LEFT : 'LEFT';
|
||||
KW_LIKE : 'LIKE';
|
||||
KW_LIMIT : 'LIMIT';
|
||||
KW_LINES : 'LINES';
|
||||
KW_LOAD : 'LOAD';
|
||||
KW_LOCALTIME : 'LOCALTIME';
|
||||
KW_LOCALTIMESTAMP : 'LOCALTIMESTAMP';
|
||||
KW_METADATA : 'METADATA';
|
||||
KW_MAP : 'MAP';
|
||||
KW_MINUTE : 'MINUTE';
|
||||
KW_MINUTES : 'MINUTES';
|
||||
KW_MONTH : 'MONTH';
|
||||
KW_MONTHS : 'MONTHS';
|
||||
KW_MERGE_FN : 'MERGE_FN';
|
||||
KW_NFC : 'NFC';
|
||||
KW_NFD : 'NFD';
|
||||
KW_NFKC : 'NFKC';
|
||||
KW_NFKD : 'NFKD';
|
||||
KW_NORMALIZE : 'NORMALIZE';
|
||||
KW_NOT : 'NOT';
|
||||
KW_NULL : 'NULL';
|
||||
KW_NULLS : 'NULLS';
|
||||
KW_OFFSET : 'OFFSET';
|
||||
KW_ON : 'ON';
|
||||
KW_OPTION : 'OPTION';
|
||||
KW_OR : 'OR';
|
||||
KW_ORDER : 'ORDER';
|
||||
KW_ORDINALITY : 'ORDINALITY';
|
||||
KW_OUTER : 'OUTER';
|
||||
KW_OWNER : 'OWNER';
|
||||
KW_OVER : 'OVER';
|
||||
KW_OVERWRITE : 'OVERWRITE';
|
||||
KW_PARTITION : 'PARTITION';
|
||||
KW_PARTITIONS : 'PARTITIONS';
|
||||
KW_PARQUET : 'PARQUET';
|
||||
KW_POSITION : 'POSITION';
|
||||
KW_PRECEDING : 'PRECEDING';
|
||||
KW_PRIMARY : 'PRIMARY';
|
||||
KW_REPLICATION : 'REPLICATION';
|
||||
KW_PRIVILEGES : 'PRIVILEGES';
|
||||
KW_PROPERTIES : 'PROPERTIES';
|
||||
KW_RANGE : 'RANGE';
|
||||
KW_RECOVER : 'RECOVER';
|
||||
KW_RENAME : 'RENAME';
|
||||
KW_REPEATABLE : 'REPEATABLE';
|
||||
KW_REPLACE : 'REPLACE';
|
||||
KW_RESTRICT : 'RESTRICT';
|
||||
KW_RETURNS : 'RETURNS';
|
||||
KW_REVOKE : 'REVOKE';
|
||||
KW_REFRESH : 'REFRESH';
|
||||
KW_REGEXP : 'REGEXP';
|
||||
KW_RLIKE : 'RLIKE';
|
||||
KW_RIGHT : 'RIGHT';
|
||||
KW_ROLE : 'ROLE';
|
||||
KW_ROLES : 'ROLES';
|
||||
KW_ROW : 'ROW';
|
||||
KW_ROWS : 'ROWS';
|
||||
KW_SCHEMA : 'SCHEMA';
|
||||
KW_SCHEMAS : 'SCHEMAS';
|
||||
KW_SECOND : 'SECOND';
|
||||
KW_SECONDS : 'SECONDS';
|
||||
KW_SELECT : 'SELECT';
|
||||
KW_SERDEPROPERTIES : 'SERDEPROPERTIES';
|
||||
KW_SET : 'SET';
|
||||
KW_SEMI : 'SEMI';
|
||||
KW_SERVER : 'SERVER';
|
||||
KW_SHOW : 'SHOW';
|
||||
KW_SHUTDOWN : 'SHUTDOWN';
|
||||
KW_SOME : 'SOME';
|
||||
KW_STATS : 'STATS';
|
||||
KW_STRUCT : 'STRUCT';
|
||||
KW_STRAIGHT_JOIN : 'STRAIGHT_JOIN';
|
||||
KW_SUBSTRING : 'SUBSTRING';
|
||||
KW_SYSTEM : 'SYSTEM';
|
||||
KW_SYMBOL : 'SYMBOL';
|
||||
KW_SERIALIZE_FN : 'SERIALIZE_FN';
|
||||
KW_TABLE : 'TABLE';
|
||||
KW_TABLES : 'TABLES';
|
||||
KW_TABLESAMPLE : 'TABLESAMPLE';
|
||||
KW_TERMINATED : 'TERMINATED ';
|
||||
KW_THEN : 'THEN';
|
||||
KW_TO : 'TO';
|
||||
KW_TRUE : 'TRUE';
|
||||
KW_TRY_CAST : 'TRY_CAST';
|
||||
KW_TRUNCATE : 'TRUNCATE';
|
||||
KW_UNCACHED : 'UNCACHED';
|
||||
KW_UESCAPE : 'UESCAPE';
|
||||
KW_UNBOUNDED : 'UNBOUNDED';
|
||||
KW_UNION : 'UNION';
|
||||
KW_UNNEST : 'UNNEST';
|
||||
KW_UNSET : 'UNSET';
|
||||
KW_USE : 'USE';
|
||||
KW_USER : 'USER';
|
||||
KW_USING : 'USING';
|
||||
KW_UPDATE_FN : 'UPDATE_FN';
|
||||
KW_UPSERT : 'UPSERT';
|
||||
KW_URI : 'URI';
|
||||
KW_VALUE : 'VALUE';
|
||||
KW_VALUES : 'VALUES';
|
||||
KW_VIEW : 'VIEW';
|
||||
KW_VIEWS : 'VIEWS';
|
||||
KW_WHEN : 'WHEN';
|
||||
KW_WHERE : 'WHERE';
|
||||
KW_WITH : 'WITH';
|
||||
KW_YEAR : 'YEAR';
|
||||
KW_YEARS : 'YEARS';
|
||||
KW_TEXTFILE : 'TEXTFILE';
|
||||
KW_ORC : 'ORC';
|
||||
KW_AVRO : 'AVRO';
|
||||
KW_SEQUENCEFILE : 'SEQUENCEFILE';
|
||||
KW_RCFILE : 'RCFILE';
|
||||
KW_REFERENCES : 'REFERENCES';
|
||||
KW_NOVALIDATE : 'NOVALIDATE';
|
||||
KW_RELY : 'RELY';
|
||||
|
||||
STATS_NUMDVS : '\'NUMDVS\'';
|
||||
STATS_NUMNULLS : '\'NUMNULLS\'';
|
||||
STATS_AVGSIZE : '\'AVGSIZE\'';
|
||||
STATS_MAXSIZE : '\'MAXSIZE\'';
|
||||
|
||||
EQ : '=';
|
||||
NEQ : '<>' | '!=';
|
||||
LT : '<';
|
||||
LTE : '<=';
|
||||
GT : '>';
|
||||
GTE : '>=';
|
||||
PLUS: '+';
|
||||
MINUS: '-';
|
||||
ASTERISK: '*';
|
||||
SLASH: '/';
|
||||
PERCENT: '%';
|
||||
CONCAT: '||';
|
||||
|
||||
DOT : '.';
|
||||
SEMICOLON: ';';
|
||||
COMMA: ',';
|
||||
COLON : ':' ;
|
||||
LPAREN : '(' ;
|
||||
RPAREN : ')' ;
|
||||
LSQUARE : '[' ;
|
||||
RSQUARE : ']' ;
|
||||
LCURLY : '{';
|
||||
RCURLY : '}';
|
||||
|
||||
BITWISEOR : '|';
|
||||
QUESTION : '?';
|
||||
|
||||
RIGHT_ARROW : '->';
|
||||
|
||||
STRING
|
||||
: '\'' ( ~'\'' | '\'\'' )* '\''
|
||||
| '"' ( ~'"' | '""' )* '"'
|
||||
;
|
||||
|
||||
UNICODE_STRING
|
||||
: 'U&\'' ( ~'\'' | '\'\'' )* '\''
|
||||
;
|
||||
|
||||
// Note: we allow any character inside the binary literal and validate
|
||||
// its a correct literal when the AST is being constructed. This
|
||||
// allows us to provide more meaningful error messages to the user
|
||||
BINARY_LITERAL
|
||||
: 'X\'' (~'\'')* '\''
|
||||
;
|
||||
|
||||
INTEGER_VALUE
|
||||
: DIGIT+
|
||||
;
|
||||
|
||||
DECIMAL_VALUE
|
||||
: DIGIT+ '.' DIGIT*
|
||||
| '.' DIGIT+
|
||||
;
|
||||
|
||||
DOUBLE_VALUE
|
||||
: DIGIT+ ('.' DIGIT*)? EXPONENT
|
||||
| '.' DIGIT+ EXPONENT
|
||||
;
|
||||
|
||||
IDENTIFIER
|
||||
: (LETTER | '_') (LETTER | DIGIT | '_' | '@' | ':')*
|
||||
;
|
||||
|
||||
DIGIT_IDENTIFIER
|
||||
: DIGIT (LETTER | DIGIT | '_' | '@' | ':')+
|
||||
;
|
||||
|
||||
QUOTED_IDENTIFIER
|
||||
: '"' ( ~'"' | '""' )* '"'
|
||||
;
|
||||
|
||||
BACKQUOTED_IDENTIFIER
|
||||
: '`' ( ~'`' | '``' )* '`'
|
||||
;
|
||||
|
||||
TIME_WITH_TIME_ZONE
|
||||
: 'TIME' WS 'WITH' WS 'TIME' WS 'ZONE'
|
||||
;
|
||||
|
||||
TIMESTAMP_WITH_TIME_ZONE
|
||||
: 'TIMESTAMP' WS 'WITH' WS 'TIME' WS 'ZONE'
|
||||
;
|
||||
|
||||
DOUBLE_PRECISION
|
||||
: 'DOUBLE' WS 'PRECISION'
|
||||
;
|
||||
|
||||
fragment EXPONENT
|
||||
: 'E' [+-]? DIGIT+
|
||||
;
|
||||
|
||||
fragment DIGIT
|
||||
: [0-9]
|
||||
;
|
||||
|
||||
fragment LETTER
|
||||
: [A-Z]
|
||||
;
|
||||
|
||||
SIMPLE_COMMENT
|
||||
: '--' ~[\r\n]* '\r'? '\n'? -> channel(HIDDEN)
|
||||
;
|
||||
|
||||
BRACKETED_COMMENT
|
||||
: '/*' .*? '*/' -> channel(HIDDEN)
|
||||
;
|
||||
|
||||
WS
|
||||
: [ \r\n\t]+ -> channel(HIDDEN)
|
||||
;
|
946
src/grammar/impala/ImpalaSqlParser.g4
Normal file
946
src/grammar/impala/ImpalaSqlParser.g4
Normal file
@ -0,0 +1,946 @@
|
||||
/*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
parser grammar ImpalaSqlParser;
|
||||
|
||||
options
|
||||
{
|
||||
tokenVocab=ImpalaSqlLexer;
|
||||
}
|
||||
|
||||
program : (statement SEMICOLON?)* EOF;
|
||||
|
||||
statement
|
||||
: queryStatement
|
||||
| useStatement
|
||||
| createStatement
|
||||
| alterStatement
|
||||
| truncateTableStatement
|
||||
| describeStatement
|
||||
| computeStatement
|
||||
| dropStatement
|
||||
| grantStatement
|
||||
| revokeStatement
|
||||
| insertStatement
|
||||
| deleteStatement
|
||||
| updateStatement
|
||||
| upsertStatement
|
||||
| showStatement
|
||||
| addCommentStatement
|
||||
| explainStatement
|
||||
| setStatement
|
||||
| shutdownStatement
|
||||
| invalidateMetaStatement
|
||||
| loadDataStatement
|
||||
| refreshStatement
|
||||
;
|
||||
|
||||
useStatement: KW_USE databaseNamePath;
|
||||
|
||||
createStatement
|
||||
: createSchema
|
||||
| createRole
|
||||
| createAggregateFunction
|
||||
| createFunction
|
||||
| createView
|
||||
| createKuduTableAsSelect
|
||||
| createTableLike
|
||||
| createTableSelect
|
||||
;
|
||||
|
||||
createTableSelect
|
||||
: KW_CREATE KW_EXTERNAL? KW_TABLE ifNotExists? tableNameCreate
|
||||
(LPAREN columnDefinition (COMMA columnDefinition)* (COMMA constraintSpecification)? RPAREN)?
|
||||
(KW_PARTITIONED KW_BY (partitionedBy | createColumnAliases) )?
|
||||
createCommonItem
|
||||
(KW_AS queryStatement)?
|
||||
;
|
||||
|
||||
createTableLike
|
||||
: KW_CREATE KW_EXTERNAL? KW_TABLE ifNotExists? tableNameCreate
|
||||
KW_LIKE (tableNamePath | KW_PARQUET parquet=stringLiteral)
|
||||
(KW_PARTITIONED KW_BY partitionedBy)?
|
||||
createCommonItem
|
||||
;
|
||||
|
||||
createKuduTableAsSelect
|
||||
: KW_CREATE KW_EXTERNAL? KW_TABLE ifNotExists? tableNameCreate
|
||||
(LPAREN kuduTableElement (COMMA kuduTableElement)* (COMMA KW_PRIMARY KW_KEY columnAliases)? RPAREN)?
|
||||
(KW_PRIMARY KW_KEY columnAliases?)?
|
||||
(KW_PARTITION KW_BY kuduPartitionClause)?
|
||||
(KW_COMMENT stringLiteral)?
|
||||
KW_STORED KW_AS KW_KUDU
|
||||
(KW_TBLPROPERTIES tblProp=properties)?
|
||||
(KW_AS queryStatement)?
|
||||
;
|
||||
|
||||
createView: KW_CREATE KW_VIEW ifNotExists? viewNameCreate viewColumns? (KW_COMMENT stringLiteral)? (KW_TBLPROPERTIES tblProp=properties)? KW_AS queryStatement;
|
||||
|
||||
createSchema:
|
||||
KW_CREATE (KW_SCHEMA | KW_DATABASE) ifNotExists? databaseNameCreate
|
||||
(KW_COMMENT comment=stringLiteral)? (KW_LOCATION location=stringLiteral)?
|
||||
;
|
||||
|
||||
createRole: KW_CREATE KW_ROLE name=identifier;
|
||||
|
||||
createAggregateFunction
|
||||
: KW_CREATE KW_AGGREGATE? KW_FUNCTION ifNotExists? functionNameCreate (LPAREN(type (COMMA type)*)? RPAREN)?
|
||||
KW_RETURNS type
|
||||
(KW_INTERMEDIATE type)?
|
||||
KW_LOCATION STRING
|
||||
(KW_INIT_FN EQ STRING)?
|
||||
KW_UPDATE_FN EQ STRING
|
||||
KW_MERGE_FN EQ STRING
|
||||
(KW_PREPARE_FN EQ STRING)?
|
||||
(KW_CLOSEFN EQ STRING)?
|
||||
(KW_SERIALIZE_FN EQ STRING)?
|
||||
(KW_FINALIZE_FN EQ STRING)?
|
||||
;
|
||||
|
||||
createFunction
|
||||
: KW_CREATE KW_FUNCTION ifNotExists? functionNameCreate (LPAREN(type (COMMA type)*)? RPAREN)?
|
||||
(KW_RETURNS type)?
|
||||
KW_LOCATION STRING
|
||||
KW_SYMBOL EQ symbol=stringLiteral
|
||||
;
|
||||
|
||||
alterStatement
|
||||
: alterDatabase
|
||||
| alterUnSetOrSetViewTblproperties
|
||||
| renameTable
|
||||
| alterViewOwner
|
||||
| alterView
|
||||
| renameView
|
||||
| dropPartitionByRangeOrValue
|
||||
| alterFormat
|
||||
| recoverPartitions
|
||||
| addPartitionByRangeOrValue
|
||||
| alterTableNonKuduOrKuduOnly
|
||||
| addSingleColumn
|
||||
| replaceOrAddColumns
|
||||
| changeColumnDefine
|
||||
| alterStatsKey
|
||||
| alterPartitionCache
|
||||
| alterDropSingleColumn
|
||||
| alterTableOwner
|
||||
;
|
||||
|
||||
alterDatabase: KW_ALTER KW_DATABASE databaseNamePath KW_SET KW_OWNER (KW_USER | KW_ROLE) identifier;
|
||||
|
||||
alterStatsKey: KW_ALTER KW_TABLE tableNamePath KW_SET KW_COLUMN KW_STATS columnNamePath LPAREN statsKey EQ stringLiteral (COMMA statsKey EQ stringLiteral)? RPAREN;
|
||||
|
||||
alterPartitionCache: KW_ALTER KW_TABLE tableNamePath (KW_PARTITION expression)? KW_SET ((KW_CACHED KW_IN stringLiteral (KW_WITH KW_REPLICATION EQ number)?) | KW_UNCACHED);
|
||||
|
||||
changeColumnDefine: KW_ALTER KW_TABLE tableNamePath KW_CHANGE KW_COLUMN columnSpecWithKudu;
|
||||
|
||||
alterDropSingleColumn: KW_ALTER KW_TABLE tableNamePath KW_DROP (KW_COLUMN)? columnNamePath;
|
||||
|
||||
alterTableOwner: KW_ALTER KW_TABLE tableNamePath KW_SET KW_OWNER (KW_USER | KW_ROLE) identifier;
|
||||
|
||||
replaceOrAddColumns: KW_ALTER KW_TABLE tableNamePath (KW_REPLACE | KW_ADD ifNotExists?) KW_COLUMNS LPAREN columnSpecWithKudu (COMMA columnSpecWithKudu)*? RPAREN;
|
||||
|
||||
addSingleColumn: KW_ALTER KW_TABLE tableNamePath KW_ADD KW_COLUMN ifNotExists? createColumnSpecWithKudu;
|
||||
|
||||
alterTableNonKuduOrKuduOnly: KW_ALTER KW_TABLE tableNamePath KW_ALTER (KW_COLUMN)? columnNamePath (KW_SET (kuduStorageAttr | KW_COMMENT stringLiteral ) | KW_DROP KW_DEFAULT);
|
||||
|
||||
addPartitionByRangeOrValue: KW_ALTER KW_TABLE tableNamePath KW_ADD ifNotExists? (KW_PARTITION expression (KW_LOCATION stringLiteral)? (cacheSpec)? | KW_RANGE KW_PARTITION kuduPartitionSpec);
|
||||
|
||||
alterFormat: KW_ALTER KW_TABLE tableNamePath (KW_PARTITION expression)? KW_SET ((KW_FILEFORMAT fileFormat) | (KW_ROW KW_FORMAT rowFormat) | (KW_LOCATION stringLiteral) | (KW_TBLPROPERTIES tblProp=properties) | (KW_SERDEPROPERTIES tblProp=properties));
|
||||
|
||||
recoverPartitions: KW_ALTER KW_TABLE tableNamePath KW_RECOVER KW_PARTITIONS;
|
||||
|
||||
dropPartitionByRangeOrValue: KW_ALTER KW_TABLE tableNamePath KW_DROP ifExists? (KW_PARTITION expression KW_PURGE? | KW_RANGE KW_PARTITION kuduPartitionSpec);
|
||||
|
||||
alterView: KW_ALTER KW_VIEW viewNamePath viewColumns? KW_AS queryStatement;
|
||||
|
||||
renameView: KW_ALTER KW_VIEW viewNamePath KW_RENAME KW_TO viewNamePath;
|
||||
|
||||
alterViewOwner: KW_ALTER KW_VIEW viewNamePath KW_SET KW_OWNER (KW_USER | KW_ROLE) qualifiedName;
|
||||
|
||||
renameTable: KW_ALTER KW_TABLE tableNamePath KW_RENAME KW_TO tableNamePath;
|
||||
|
||||
alterUnSetOrSetViewTblproperties: KW_ALTER KW_VIEW viewNamePath (KW_UNSET | KW_SET) KW_TBLPROPERTIES tblProp=properties;
|
||||
|
||||
truncateTableStatement: KW_TRUNCATE KW_TABLE? ifExists? tableNamePath;
|
||||
|
||||
describeStatement: KW_DESCRIBE KW_DATABASE? (KW_FORMATTED | KW_EXTENDED)? qualifiedName;
|
||||
|
||||
computeStatement
|
||||
: computeStats
|
||||
| computeIncrementalStats
|
||||
;
|
||||
|
||||
computeStats: KW_COMPUTE KW_STATS tableNamePath (columnAliases)? (KW_TABLESAMPLE KW_SYSTEM LPAREN number RPAREN (KW_REPEATABLE LPAREN number RPAREN)?)?;
|
||||
|
||||
computeIncrementalStats: KW_COMPUTE KW_INCREMENTAL KW_STATS tableNamePath (KW_PARTITION expression)?;
|
||||
|
||||
dropStatement
|
||||
: dropRole
|
||||
| dropFunction
|
||||
| dropIncrementalStats
|
||||
| dropView
|
||||
| dropTable
|
||||
| dropSchema
|
||||
;
|
||||
|
||||
dropSchema: KW_DROP (KW_SCHEMA | KW_DATABASE) (ifExists)? databaseNamePath (KW_CASCADE | KW_RESTRICT)?;
|
||||
|
||||
dropView: KW_DROP KW_VIEW ifExists? viewNamePath;
|
||||
|
||||
dropTable: KW_DROP KW_TABLE ifExists? tableNamePath KW_PURGE?;
|
||||
|
||||
dropIncrementalStats: KW_DROP KW_INCREMENTAL? KW_STATS tableNamePath (KW_PARTITION expression)?;
|
||||
|
||||
dropFunction: KW_DROP KW_AGGREGATE? KW_FUNCTION ifExists? functionNamePath (LPAREN(type (COMMA type)*)? RPAREN)?;
|
||||
|
||||
dropRole: KW_DROP KW_ROLE name=identifier;
|
||||
|
||||
grantStatement
|
||||
: grantRole
|
||||
| grant
|
||||
;
|
||||
|
||||
grantRole: KW_GRANT KW_ROLE identifier KW_TO KW_GROUP identifier;
|
||||
|
||||
grant: KW_GRANT privilege KW_ON objectType (qualifiedName)? KW_TO grantee=principal;
|
||||
|
||||
revokeStatement
|
||||
: revokeRole
|
||||
| revoke
|
||||
;
|
||||
|
||||
revokeRole: KW_REVOKE KW_ROLE identifier KW_FROM KW_GROUP identifier;
|
||||
|
||||
revoke: KW_REVOKE (KW_GRANT KW_OPTION KW_FOR)? privilege KW_ON objectType (qualifiedName)? KW_FROM (grantee=principal | (KW_ROLE)? identifier);
|
||||
|
||||
insertStatement
|
||||
: with? KW_INSERT (KW_INTO | KW_OVERWRITE) KW_TABLE? tableNamePath
|
||||
columnAliases?
|
||||
(KW_PARTITION LPAREN expression(COMMA expression)*RPAREN)?
|
||||
queryStatement
|
||||
;
|
||||
|
||||
deleteStatement
|
||||
: delete
|
||||
| deleteTableRef
|
||||
;
|
||||
|
||||
delete: KW_DELETE KW_FROM? tableNamePath (KW_WHERE booleanExpression)?;
|
||||
|
||||
deleteTableRef: KW_DELETE tableNamePath (KW_AS? identifier)? KW_FROM (relation (COMMA relation)*)? (KW_WHERE booleanExpression)?;
|
||||
|
||||
updateStatement: KW_UPDATE tableNamePath KW_SET assignmentList (KW_FROM relation (COMMA relation)*)? (KW_WHERE booleanExpression)?;
|
||||
|
||||
upsertStatement: KW_UPSERT KW_INTO KW_TABLE? tableNamePath columnAliases? queryStatement;
|
||||
|
||||
showStatement
|
||||
: showRoles
|
||||
| showRoleGrant
|
||||
| showGrants
|
||||
| showFiles
|
||||
| showPartitions
|
||||
| showColumnStats
|
||||
| showTableStats
|
||||
| showCreateView
|
||||
| showCreateTable
|
||||
| showFunctions
|
||||
| showTables
|
||||
| showSchemas
|
||||
;
|
||||
|
||||
showSchemas
|
||||
: KW_SHOW (KW_SCHEMAS | KW_DATABASES)
|
||||
(KW_LIKE? pattern=stringLiteral (BITWISEOR stringLiteral)*)?
|
||||
;
|
||||
|
||||
showTables
|
||||
:
|
||||
KW_SHOW KW_TABLES (KW_IN tableNamePath)?
|
||||
(KW_LIKE? pattern=stringLiteral (BITWISEOR stringLiteral)*)?
|
||||
;
|
||||
|
||||
showFunctions
|
||||
:
|
||||
KW_SHOW (KW_AGGREGATE | KW_ANALYTIC)? KW_FUNCTIONS (KW_IN databaseNamePath)?
|
||||
(KW_LIKE? pattern=stringLiteral (BITWISEOR stringLiteral)*)?
|
||||
;
|
||||
|
||||
showCreateTable: KW_SHOW KW_CREATE KW_TABLE tableNamePath;
|
||||
|
||||
showCreateView: KW_SHOW KW_CREATE KW_VIEW viewNamePath;
|
||||
|
||||
showTableStats: KW_SHOW KW_TABLE KW_STATS tableNamePath;
|
||||
|
||||
showColumnStats: KW_SHOW KW_COLUMN KW_STATS tableNamePath;
|
||||
|
||||
showPartitions: KW_SHOW (KW_RANGE)? KW_PARTITIONS tableNamePath;
|
||||
|
||||
showFiles: KW_SHOW KW_FILES KW_IN tableNamePath (KW_PARTITION LPAREN expression (COMMA expression)?RPAREN)?;
|
||||
|
||||
showRoles: KW_SHOW (KW_CURRENT)? KW_ROLES;
|
||||
|
||||
showRoleGrant: KW_SHOW KW_ROLE KW_GRANT KW_GROUP identifier;
|
||||
|
||||
showGrants
|
||||
: showDatabaseGrant
|
||||
| showTableGrant
|
||||
| showColumnGrant
|
||||
| KW_SHOW KW_GRANT (KW_USER | KW_ROLE | KW_GROUP) identifier
|
||||
(KW_ON (KW_SERVER | KW_URI) (qualifiedName)?)?
|
||||
;
|
||||
|
||||
showDatabaseGrant:
|
||||
KW_SHOW KW_GRANT (KW_USER | KW_ROLE | KW_GROUP) identifier
|
||||
(KW_ON KW_DATABASE (databaseNamePath)?)?
|
||||
;
|
||||
|
||||
showTableGrant:
|
||||
KW_SHOW KW_GRANT (KW_USER | KW_ROLE | KW_GROUP) identifier
|
||||
(KW_ON KW_TABLE (tableNamePath)?)?
|
||||
;
|
||||
|
||||
showColumnGrant:
|
||||
KW_SHOW KW_GRANT (KW_USER | KW_ROLE | KW_GROUP) identifier
|
||||
(KW_ON KW_COLUMN (columnNamePath)?)?
|
||||
;
|
||||
|
||||
addCommentStatement
|
||||
: addDatabaseComments
|
||||
| addTableComments
|
||||
| addColumnComments
|
||||
;
|
||||
|
||||
addDatabaseComments: KW_COMMENT KW_ON KW_DATABASE databaseNamePath KW_IS (stringLiteral | KW_NULL);
|
||||
|
||||
addTableComments: KW_COMMENT KW_ON KW_TABLE tableNamePath KW_IS (stringLiteral | KW_NULL);
|
||||
|
||||
addColumnComments: KW_COMMENT KW_ON KW_COLUMN columnNamePath KW_IS (stringLiteral | KW_NULL);
|
||||
|
||||
explainStatement: KW_EXPLAIN statement;
|
||||
|
||||
setStatement: KW_SET (KW_ALL | identifier EQ expression)?;
|
||||
|
||||
shutdownStatement: COLON KW_SHUTDOWN LPAREN (stringLiteral? | stringLiteral (COMMA expression)? | expression) RPAREN;
|
||||
|
||||
invalidateMetaStatement: KW_INVALIDATE KW_METADATA tableNamePath;
|
||||
|
||||
loadDataStatement:
|
||||
KW_LOAD KW_DATA KW_INPATH STRING (KW_OVERWRITE)? KW_INTO KW_TABLE tableNamePath
|
||||
(KW_PARTITION LPAREN expression (COMMA expression)?RPAREN)?
|
||||
;
|
||||
|
||||
refreshStatement: refreshMeta | refreshAuth | refreshFunction;
|
||||
|
||||
refreshMeta: KW_REFRESH tableNamePath (KW_PARTITION LPAREN expression (COMMA expression)*? RPAREN)?;
|
||||
|
||||
refreshAuth: KW_REFRESH KW_AUTHORIZATION;
|
||||
|
||||
refreshFunction: KW_REFRESH KW_FUNCTIONS functionNamePath;
|
||||
|
||||
ifExists
|
||||
: KW_IF KW_EXISTS
|
||||
;
|
||||
|
||||
ifNotExists
|
||||
: KW_IF KW_NOT KW_EXISTS
|
||||
;
|
||||
|
||||
tableNameCreate: qualifiedName;
|
||||
|
||||
databaseNameCreate: qualifiedName;
|
||||
|
||||
viewNameCreate: qualifiedName;
|
||||
|
||||
functionNameCreate: qualifiedName;
|
||||
|
||||
columnNamePathCreate: qualifiedName;
|
||||
|
||||
databaseNamePath: qualifiedName;
|
||||
|
||||
tableNamePath: identifier (DOT identifier)*;
|
||||
|
||||
viewNamePath: identifier (DOT identifier)*;
|
||||
|
||||
functionNamePath: qualifiedName;
|
||||
|
||||
columnNamePath: qualifiedName;
|
||||
|
||||
tableOrViewPath: tableNamePath | viewNamePath;
|
||||
|
||||
createCommonItem
|
||||
:
|
||||
(KW_SORT KW_BY columnAliases)?
|
||||
(KW_COMMENT comment=stringLiteral)?
|
||||
(KW_ROW KW_FORMAT rowFormat)?
|
||||
(KW_WITH KW_SERDEPROPERTIES serdProp=properties)?
|
||||
(KW_STORED KW_AS fileFormat)?
|
||||
(KW_LOCATION location=stringLiteral)?
|
||||
(KW_CACHED KW_IN cacheName=qualifiedName (KW_WITH KW_REPLICATION EQ INTEGER_VALUE )? | KW_UNCACHED)?
|
||||
(KW_TBLPROPERTIES tblProp=properties)?
|
||||
;
|
||||
|
||||
assignmentList
|
||||
: assignmentItem (COMMA assignmentItem)*
|
||||
;
|
||||
|
||||
assignmentItem
|
||||
: qualifiedName EQ expression
|
||||
;
|
||||
|
||||
viewColumns
|
||||
: LPAREN columnNamePath (KW_COMMENT stringLiteral)? (COMMA identifier (KW_COMMENT stringLiteral)?)* RPAREN
|
||||
;
|
||||
|
||||
queryStatement
|
||||
: with? queryNoWith
|
||||
;
|
||||
|
||||
with
|
||||
: KW_WITH namedQuery (COMMA namedQuery)*
|
||||
;
|
||||
|
||||
constraintSpecification
|
||||
:
|
||||
KW_PRIMARY KW_KEY columnAliases (KW_DISABLE)? (KW_NOVALIDATE | COMMA KW_NOVALIDATE)? (KW_RELY | COMMA KW_RELY)? ((COMMA foreignKeySpecification | foreignKeySpecification) (COMMA foreignKeySpecification)*?)?
|
||||
;
|
||||
|
||||
foreignKeySpecification
|
||||
:
|
||||
KW_FOREIGN KW_KEY columnAliases KW_REFERENCES tableNamePath columnAliases (KW_DISABLE)? (KW_NOVALIDATE)? (KW_RELY)?
|
||||
;
|
||||
|
||||
columnDefinition
|
||||
: columnNamePathCreate type (KW_COMMENT stringLiteral)?
|
||||
;
|
||||
|
||||
kuduTableElement
|
||||
: kuduColumnDefinition
|
||||
;
|
||||
|
||||
kuduColumnDefinition
|
||||
: columnNamePathCreate type (kuduAttributes kuduAttributes*?)? (KW_COMMENT stringLiteral)? (KW_PRIMARY KW_KEY )?
|
||||
;
|
||||
|
||||
columnSpecWithKudu
|
||||
: columnNamePath type (KW_COMMENT stringLiteral)? (kuduAttributes kuduAttributes*?)?
|
||||
;
|
||||
|
||||
createColumnSpecWithKudu
|
||||
: columnNamePathCreate type (KW_COMMENT stringLiteral)? (kuduAttributes kuduAttributes*?)?
|
||||
;
|
||||
|
||||
kuduAttributes
|
||||
: ((KW_NOT)? KW_NULL | kuduStorageAttr)
|
||||
;
|
||||
|
||||
kuduStorageAttr
|
||||
: KW_ENCODING expression
|
||||
| KW_COMPRESSION expression
|
||||
| KW_DEFAULT expression
|
||||
| KW_BLOCK_SIZE number
|
||||
;
|
||||
|
||||
statsKey
|
||||
: STATS_NUMDVS
|
||||
| STATS_NUMNULLS
|
||||
| STATS_AVGSIZE
|
||||
| STATS_MAXSIZE
|
||||
;
|
||||
|
||||
fileFormat
|
||||
: KW_TEXTFILE
|
||||
| KW_PARQUET
|
||||
| KW_ORC
|
||||
| KW_AVRO
|
||||
| KW_SEQUENCEFILE
|
||||
| KW_RCFILE
|
||||
;
|
||||
|
||||
kuduPartitionClause
|
||||
: (hashClause (COMMA hashClause)*? (COMMA rangeClause)?) | rangeClause
|
||||
;
|
||||
|
||||
hashClause
|
||||
: KW_HASH columnAliases? KW_PARTITIONS number
|
||||
;
|
||||
|
||||
rangeClause
|
||||
: KW_RANGE columnAliases? LPAREN (KW_PARTITION kuduPartitionSpec (COMMA KW_PARTITION kuduPartitionSpec)*?) RPAREN
|
||||
;
|
||||
|
||||
kuduPartitionSpec
|
||||
: KW_VALUE partitionCol expression | (expression rangeOperator)? KW_VALUES (rangeOperator expression)?
|
||||
;
|
||||
|
||||
cacheSpec
|
||||
: KW_CACHED KW_IN identifier (KW_WITH KW_REPLICATION EQ number)?
|
||||
| KW_UNCACHED
|
||||
;
|
||||
|
||||
rangeOperator
|
||||
:
|
||||
| LT
|
||||
| LTE
|
||||
| GT
|
||||
| GTE
|
||||
;
|
||||
|
||||
partitionCol
|
||||
: EQ
|
||||
| NEQ
|
||||
| KW_LIKE
|
||||
| KW_RLIKE
|
||||
| KW_REGEXP
|
||||
| KW_BETWEEN
|
||||
| KW_IN
|
||||
| rangeOperator
|
||||
;
|
||||
|
||||
likeClause
|
||||
: KW_LIKE qualifiedName (optionType=(KW_INCLUDING | KW_EXCLUDING) KW_PROPERTIES)?
|
||||
;
|
||||
|
||||
properties
|
||||
: LPAREN property (COMMA property)* RPAREN
|
||||
;
|
||||
|
||||
partitionedBy
|
||||
: LPAREN columnDefinition (COMMA columnDefinition)*? RPAREN
|
||||
;
|
||||
|
||||
sortedBy
|
||||
: expression (COMMA expression)*
|
||||
;
|
||||
|
||||
rowFormat
|
||||
: KW_DELIMITED (KW_FIELDS KW_TERMINATED KW_BY stringLiteral (KW_ESCAPED KW_BY stringLiteral)?)? (KW_LINES KW_TERMINATED KW_BY stringLiteral)?
|
||||
;
|
||||
|
||||
property
|
||||
: identifier (EQ expression)?
|
||||
;
|
||||
|
||||
queryNoWith:
|
||||
queryTerm
|
||||
(KW_ORDER KW_BY sortItem (COMMA sortItem)*)?
|
||||
(KW_LIMIT rows=expression (KW_OFFSET offset=INTEGER_VALUE )?)?
|
||||
;
|
||||
|
||||
queryTerm
|
||||
: queryPrimary #queryTermDefault
|
||||
| left=queryTerm operator=KW_INTERSECT setQuantifier? right=queryTerm #setOperation
|
||||
| left=queryTerm operator=(KW_UNION | KW_EXCEPT) setQuantifier? right=queryTerm #setOperation
|
||||
;
|
||||
|
||||
queryPrimary
|
||||
: querySpecification #queryPrimaryDefault
|
||||
| KW_TABLE tableNamePath #table
|
||||
| KW_VALUES expression (COMMA expression)* #inlineTable
|
||||
| LPAREN queryNoWith RPAREN #subquery
|
||||
;
|
||||
|
||||
sortItem
|
||||
: columnItem ordering=(KW_ASC | KW_DESC)? (KW_NULLS nullOrdering=(KW_FIRST | KW_LAST))?
|
||||
;
|
||||
|
||||
querySpecification
|
||||
: KW_SELECT setQuantifier? (KW_STRAIGHT_JOIN)? selectItem (COMMA selectItem)*
|
||||
(KW_FROM relation (COMMA relation)*)?
|
||||
(KW_WHERE where=booleanExpression)?
|
||||
(KW_GROUP KW_BY groupBy)?
|
||||
(KW_HAVING having=booleanExpression)?
|
||||
;
|
||||
|
||||
groupBy
|
||||
: setQuantifier? groupingElement (COMMA groupingElement)*
|
||||
;
|
||||
|
||||
groupingElement
|
||||
: groupingSet #singleGroupingSet
|
||||
;
|
||||
|
||||
groupingSet
|
||||
: LPAREN (columnItem (COMMA columnItem)*)? RPAREN
|
||||
| columnItem
|
||||
;
|
||||
|
||||
namedQuery
|
||||
: name=identifier (columnAliases)? KW_AS subQueryRelation
|
||||
;
|
||||
|
||||
setQuantifier
|
||||
: KW_DISTINCT
|
||||
| KW_ALL
|
||||
;
|
||||
|
||||
selectItem
|
||||
: columnItem (KW_AS? identifier)? #selectSingle
|
||||
| qualifiedName DOT ASTERISK #selectAll
|
||||
| ASTERISK #selectAll
|
||||
;
|
||||
|
||||
relation
|
||||
: left=relation
|
||||
( KW_CROSS KW_JOIN right=sampledRelation
|
||||
| joinType KW_JOIN rightRelation=relation joinCriteria
|
||||
) #joinRelation
|
||||
| sampledRelation #relationDefault
|
||||
;
|
||||
|
||||
joinType
|
||||
: KW_INNER?
|
||||
| KW_LEFT KW_INNER?
|
||||
| KW_RIGHT KW_INNER?
|
||||
| KW_LEFT KW_OUTER?
|
||||
| KW_RIGHT KW_OUTER?
|
||||
| KW_FULL KW_OUTER?
|
||||
| KW_LEFT KW_SEMI
|
||||
| KW_RIGHT KW_SEMI
|
||||
| KW_LEFT KW_ANTI
|
||||
| KW_RIGHT KW_ANTI
|
||||
;
|
||||
|
||||
joinCriteria
|
||||
: KW_ON booleanExpression
|
||||
| KW_USING LPAREN identifier (COMMA identifier)* RPAREN
|
||||
;
|
||||
|
||||
sampledRelation
|
||||
: aliasedRelation (
|
||||
KW_TABLESAMPLE sampleType LPAREN percentage=expression RPAREN (KW_REPEATABLE LPAREN seed=expression RPAREN)?
|
||||
)?
|
||||
;
|
||||
|
||||
sampleType
|
||||
: KW_BERNOULLI
|
||||
| KW_SYSTEM
|
||||
;
|
||||
|
||||
aliasedRelation
|
||||
: relationPrimary (KW_AS? identifier columnAliases?)?
|
||||
;
|
||||
|
||||
columnAliases
|
||||
: LPAREN columnNamePath (COMMA columnNamePath)* RPAREN
|
||||
;
|
||||
|
||||
createColumnAliases
|
||||
: LPAREN columnNamePathCreate (COMMA columnNamePathCreate)* RPAREN
|
||||
;
|
||||
|
||||
relationPrimary
|
||||
: tableOrViewPath
|
||||
| KW_LATERAL? subQueryRelation
|
||||
| unnest
|
||||
| parenthesizedRelation
|
||||
;
|
||||
|
||||
subQueryRelation: LPAREN queryStatement RPAREN;
|
||||
|
||||
unnest: KW_UNNEST LPAREN expression (COMMA expression)* RPAREN (KW_WITH KW_ORDINALITY)?;
|
||||
|
||||
parenthesizedRelation: LPAREN relation RPAREN;
|
||||
|
||||
columnItem: columnNamePath | expression;
|
||||
|
||||
expression
|
||||
: booleanExpression
|
||||
;
|
||||
|
||||
booleanExpression
|
||||
: valueExpression predicate[$valueExpression.ctx]? #predicated
|
||||
| KW_NOT booleanExpression #logicalNot
|
||||
| left=booleanExpression operator=KW_AND right=booleanExpression #logicalBinary
|
||||
| left=booleanExpression operator=KW_OR right=booleanExpression #logicalBinary
|
||||
;
|
||||
|
||||
predicate[ParserRuleContext value]
|
||||
: comparisonOperator right=valueExpression #comparison
|
||||
| comparisonOperator comparisonQuantifier subQueryRelation #quantifiedComparison
|
||||
| KW_NOT? KW_BETWEEN lower=valueExpression KW_AND upper=valueExpression #between
|
||||
| KW_NOT? KW_IN LPAREN expression (COMMA expression)* RPAREN #inList
|
||||
| KW_NOT? KW_IN subQueryRelation #inSubquery
|
||||
| KW_NOT? KW_LIKE pattern=valueExpression (KW_ESCAPE escape=valueExpression)? #like
|
||||
| KW_REGEXP pattern=valueExpression #REGEXP
|
||||
| KW_IS KW_NOT? KW_NULL #nullPredicate
|
||||
| KW_IS KW_NOT? KW_DISTINCT KW_FROM right=valueExpression #distinctFrom
|
||||
;
|
||||
|
||||
valueExpression
|
||||
: primaryExpression #valueExpressionDefault
|
||||
| operator=(MINUS | PLUS) valueExpression #arithmeticUnary
|
||||
| left=valueExpression operator=(ASTERISK | SLASH | PERCENT) right=valueExpression #arithmeticBinary
|
||||
| left=valueExpression operator=(PLUS | MINUS) right=valueExpression #arithmeticBinary
|
||||
| left=valueExpression CONCAT right=valueExpression #concatenation
|
||||
;
|
||||
|
||||
primaryExpression
|
||||
: KW_NULL #nullLiteral
|
||||
| interval #intervalLiteral
|
||||
| identifier stringLiteral #typeConstructor
|
||||
| DOUBLE_PRECISION stringLiteral #typeConstructor
|
||||
| number #numericLiteral
|
||||
| booleanValue #booleanLiteral
|
||||
| stringLiteral #stringLiteralValues
|
||||
| BINARY_LITERAL #binaryLiteral
|
||||
| QUESTION #parameter
|
||||
| KW_POSITION LPAREN valueExpression KW_IN valueExpression RPAREN #position
|
||||
| LPAREN expression (KW_AS type)? (COMMA expression (KW_AS type)?)*? RPAREN #rowConstructor
|
||||
| KW_ROW LPAREN expression (COMMA expression)* RPAREN #rowConstructor
|
||||
| functionNamePath LPAREN ASTERISK RPAREN filter? over? #functionCall
|
||||
| functionNamePath LPAREN (setQuantifier? expression (COMMA expression)*)?
|
||||
(KW_ORDER KW_BY sortItem (COMMA sortItem)*)? RPAREN filter? over? #functionCall
|
||||
| identifier RIGHT_ARROW expression #lambda
|
||||
| LPAREN (identifier (COMMA identifier)*)? RPAREN RIGHT_ARROW expression #lambda
|
||||
| LPAREN queryStatement RPAREN #subqueryExpression
|
||||
| KW_EXISTS LPAREN queryStatement RPAREN #exists
|
||||
| KW_CASE valueExpression whenClause+ (KW_ELSE elseExpression=expression)? KW_END #simpleCase
|
||||
| KW_CASE whenClause+ (KW_ELSE elseExpression=expression)? KW_END #searchedCase
|
||||
| KW_CAST LPAREN expression KW_AS type RPAREN #cast
|
||||
| KW_TRY_CAST LPAREN expression KW_AS type RPAREN #cast
|
||||
| KW_ARRAY LSQUARE (expression (COMMA expression)*)? RSQUARE #arrayConstructor
|
||||
| value=primaryExpression LSQUARE index=valueExpression RSQUARE #subscript
|
||||
| identifier #columnReference
|
||||
| base=primaryExpression DOT fieldName=identifier #dereference
|
||||
| name=KW_CURRENT_DATE #specialDateTimeFunction
|
||||
| name=KW_CURRENT_TIME (LPAREN precision=INTEGER_VALUE RPAREN)? #specialDateTimeFunction
|
||||
| name=KW_CURRENT_TIMESTAMP (LPAREN precision=INTEGER_VALUE RPAREN)? #specialDateTimeFunction
|
||||
| name=KW_LOCALTIME (LPAREN precision=INTEGER_VALUE RPAREN)? #specialDateTimeFunction
|
||||
| name=KW_LOCALTIMESTAMP (LPAREN precision=INTEGER_VALUE RPAREN)? #specialDateTimeFunction
|
||||
| name=KW_CURRENT_USER #currentUser
|
||||
| name=KW_CURRENT_PATH #currentPath
|
||||
| KW_SUBSTRING LPAREN valueExpression KW_FROM valueExpression (KW_FOR valueExpression)? RPAREN #substring
|
||||
| KW_NORMALIZE LPAREN valueExpression (COMMA normalForm)? RPAREN #normalize
|
||||
| KW_EXTRACT LPAREN identifier KW_FROM valueExpression RPAREN #extract
|
||||
| LPAREN expression RPAREN #parenthesizedExpression
|
||||
| KW_GROUPING LPAREN (qualifiedName (COMMA qualifiedName)*)? RPAREN #groupingOperation
|
||||
;
|
||||
|
||||
stringLiteral
|
||||
: STRING #basicStringLiteral
|
||||
| UNICODE_STRING (KW_UESCAPE STRING)? #unicodeStringLiteral
|
||||
;
|
||||
|
||||
comparisonOperator
|
||||
: EQ | NEQ | LT | LTE | GT | GTE
|
||||
;
|
||||
|
||||
comparisonQuantifier
|
||||
: KW_ALL | KW_SOME | KW_ANY
|
||||
;
|
||||
|
||||
booleanValue
|
||||
: KW_TRUE | KW_FALSE
|
||||
;
|
||||
|
||||
interval
|
||||
: INTEGER_VALUE intervalField
|
||||
| LPAREN INTEGER_VALUE RPAREN intervalField
|
||||
| KW_INTERVAL INTEGER_VALUE intervalField
|
||||
| KW_INTERVAL LPAREN INTEGER_VALUE RPAREN intervalField
|
||||
;
|
||||
|
||||
intervalField
|
||||
: KW_YEAR | KW_YEARS | KW_MONTH | KW_MONTHS | KW_DAY | KW_DAYS | KW_HOUR | KW_HOURS | KW_MINUTE | KW_MINUTES | KW_SECOND | KW_SECONDS
|
||||
;
|
||||
|
||||
normalForm
|
||||
: KW_NFD | KW_NFC | KW_NFKD | KW_NFKC
|
||||
;
|
||||
|
||||
type
|
||||
: type KW_ARRAY
|
||||
| KW_ARRAY LT type GT
|
||||
| KW_MAP LT type COMMA type GT
|
||||
| KW_STRUCT LT identifier COLON type (COMMA identifier COLON type)* GT
|
||||
| baseType (LPAREN typeParameter (COMMA typeParameter)* RPAREN)?
|
||||
;
|
||||
|
||||
typeParameter
|
||||
: INTEGER_VALUE | type
|
||||
;
|
||||
|
||||
baseType
|
||||
: TIME_WITH_TIME_ZONE
|
||||
| TIMESTAMP_WITH_TIME_ZONE
|
||||
| DOUBLE_PRECISION
|
||||
| identifier
|
||||
;
|
||||
|
||||
whenClause
|
||||
: KW_WHEN condition=expression KW_THEN result=expression
|
||||
;
|
||||
|
||||
filter
|
||||
: KW_FILTER LPAREN KW_WHERE booleanExpression RPAREN
|
||||
;
|
||||
|
||||
over
|
||||
: KW_OVER LPAREN
|
||||
(KW_PARTITION KW_BY partition+=expression (COMMA partition+=expression)*)?
|
||||
(KW_ORDER KW_BY sortItem (COMMA sortItem)*)?
|
||||
windowFrame?
|
||||
RPAREN
|
||||
;
|
||||
|
||||
/**
|
||||
* replace start identifier with start_ in grammar.
|
||||
* https://github.com/tunnelvisionlabs/antlr4ts/issues/417
|
||||
*/
|
||||
windowFrame
|
||||
: frameType=KW_RANGE start_=frameBound
|
||||
| frameType=KW_ROWS start_=frameBound
|
||||
| frameType=KW_RANGE KW_BETWEEN start_=frameBound KW_AND end=frameBound
|
||||
| frameType=KW_ROWS KW_BETWEEN start_=frameBound KW_AND end=frameBound
|
||||
;
|
||||
|
||||
frameBound
|
||||
: KW_UNBOUNDED boundType=KW_PRECEDING #unboundedFrame
|
||||
| KW_UNBOUNDED boundType=KW_FOLLOWING #unboundedFrame
|
||||
| KW_CURRENT KW_ROW #currentRowBound
|
||||
| expression boundType=(KW_PRECEDING | KW_FOLLOWING) #boundedFrame
|
||||
;
|
||||
|
||||
pathElement
|
||||
: identifier DOT identifier #qualifiedArgument
|
||||
| identifier #unqualifiedArgument
|
||||
;
|
||||
|
||||
pathSpecification
|
||||
: pathElement (COMMA pathElement)*
|
||||
;
|
||||
|
||||
privilege
|
||||
: KW_ALL | KW_ALTER | KW_DROP | KW_CREATE | KW_INSERT | KW_REFRESH | KW_SELECT (LPAREN columnName=identifier RPAREN)?
|
||||
;
|
||||
objectType
|
||||
: KW_SERVER | KW_URI | KW_DATABASE | KW_TABLE
|
||||
;
|
||||
qualifiedName
|
||||
: identifier (DOT identifier)*
|
||||
;
|
||||
|
||||
principal
|
||||
: KW_ROLE identifier #rolePrincipal
|
||||
| KW_USER identifier #userPrincipal
|
||||
| KW_GROUP identifier #groupPrincipal
|
||||
;
|
||||
|
||||
identifier
|
||||
: IDENTIFIER #unquotedIdentifier
|
||||
| STRING #quotedIdentifier
|
||||
| nonReserved #unquotedIdentifier
|
||||
| BACKQUOTED_IDENTIFIER #backQuotedIdentifier
|
||||
| DIGIT_IDENTIFIER #digitIdentifier
|
||||
;
|
||||
|
||||
number
|
||||
: MINUS? DECIMAL_VALUE #decimalLiteral
|
||||
| MINUS? DOUBLE_VALUE #doubleLiteral
|
||||
| MINUS? INTEGER_VALUE #integerLiteral
|
||||
;
|
||||
|
||||
|
||||
nonReserved
|
||||
// IMPORTANT: this rule must only contain tokens. Nested rules are not supported. See SqlParser.exitNonReserved
|
||||
: KW_ADD
|
||||
| KW_ALL
|
||||
| KW_ANY
|
||||
| KW_ARRAY
|
||||
| KW_ASC
|
||||
| KW_AT
|
||||
| KW_BERNOULLI
|
||||
| KW_CASCADE
|
||||
| KW_COLUMN
|
||||
| KW_COLUMNS
|
||||
| KW_COMMENT
|
||||
| KW_CURRENT
|
||||
| KW_DATA
|
||||
| KW_DATABASE
|
||||
| KW_DATABASES
|
||||
| KW_DAY
|
||||
| KW_DAYS
|
||||
| KW_DESC
|
||||
| KW_EXCLUDING
|
||||
| KW_EXPLAIN
|
||||
| KW_FILTER
|
||||
| KW_FIRST
|
||||
| KW_FOLLOWING
|
||||
| KW_FORMAT
|
||||
| KW_FUNCTIONS
|
||||
| KW_GRANT
|
||||
| KW_HOUR
|
||||
| KW_IF
|
||||
| KW_INCLUDING
|
||||
| KW_INTERVAL
|
||||
| KW_LAST
|
||||
| KW_LATERAL
|
||||
| KW_LIMIT
|
||||
| KW_MAP
|
||||
| KW_MINUTE
|
||||
| KW_MONTH
|
||||
| KW_NFC
|
||||
| KW_NFD
|
||||
| KW_NFKC
|
||||
| KW_NFKD
|
||||
| KW_NULLS
|
||||
| KW_OFFSET
|
||||
| KW_OPTION
|
||||
| KW_ORDINALITY
|
||||
| KW_OVER
|
||||
| KW_PARTITION
|
||||
| KW_PARTITIONS
|
||||
| KW_PARQUET
|
||||
| KW_POSITION
|
||||
| KW_PRECEDING
|
||||
| KW_PRIVILEGES
|
||||
| KW_PROPERTIES
|
||||
| KW_RANGE
|
||||
| KW_RENAME
|
||||
| KW_REPEATABLE
|
||||
| KW_REPLACE
|
||||
| KW_RESTRICT
|
||||
| KW_REVOKE
|
||||
| KW_ROLE
|
||||
| KW_ROLES
|
||||
| KW_ROW
|
||||
| KW_ROWS
|
||||
| KW_SCHEMA
|
||||
| KW_SCHEMAS
|
||||
| KW_SECOND
|
||||
| KW_SECONDS
|
||||
| KW_SET
|
||||
| KW_SHOW
|
||||
| KW_SOME
|
||||
| KW_STATS
|
||||
| KW_SUBSTRING
|
||||
| KW_SYSTEM
|
||||
| KW_TABLES
|
||||
| KW_TABLESAMPLE
|
||||
| KW_TRUNCATE
|
||||
| KW_TO
|
||||
| KW_TRY_CAST
|
||||
| KW_UNBOUNDED
|
||||
| KW_USE
|
||||
| KW_USER
|
||||
| KW_VIEW
|
||||
| KW_VIEWS
|
||||
| KW_YEAR
|
||||
| KW_DEFAULT
|
||||
| KW_TEXTFILE
|
||||
| KW_ORC
|
||||
| KW_AVRO
|
||||
| KW_SEQUENCEFILE
|
||||
| KW_RCFILE
|
||||
;
|
@ -1,3 +0,0 @@
|
||||
# Impala SQL Grammar
|
||||
|
||||
SQL-like HiveQL, [Hive Grammar](https://github.com/apache/hive/tree/master/hplsql/src/main/antlr4/org/apache/hive/hplsql)
|
830
src/lib/impala/ImpalaSqlLexer.interp
Normal file
830
src/lib/impala/ImpalaSqlLexer.interp
Normal file
File diff suppressed because one or more lines are too long
523
src/lib/impala/ImpalaSqlLexer.tokens
Normal file
523
src/lib/impala/ImpalaSqlLexer.tokens
Normal file
@ -0,0 +1,523 @@
|
||||
KW_ADD=1
|
||||
KW_ALL=2
|
||||
KW_ANALYTIC=3
|
||||
KW_ALTER=4
|
||||
KW_AND=5
|
||||
KW_ANY=6
|
||||
KW_ANTI=7
|
||||
KW_ARRAY=8
|
||||
KW_AS=9
|
||||
KW_ASC=10
|
||||
KW_AT=11
|
||||
KW_AGGREGATE=12
|
||||
KW_AUTHORIZATION=13
|
||||
KW_BERNOULLI=14
|
||||
KW_BETWEEN=15
|
||||
KW_BLOCK_SIZE=16
|
||||
KW_PARTITIONED=17
|
||||
KW_PREPARE_FN=18
|
||||
KW_EXTERNAL=19
|
||||
KW_CLOSEFN=20
|
||||
KW_SORT=21
|
||||
KW_PURGE=22
|
||||
KW_STORED=23
|
||||
KW_LOCATION=24
|
||||
KW_TBLPROPERTIES=25
|
||||
KW_BY=26
|
||||
KW_CASCADE=27
|
||||
KW_CASE=28
|
||||
KW_CAST=29
|
||||
KW_CACHED=30
|
||||
KW_CHANGE=31
|
||||
KW_COLUMN=32
|
||||
KW_COLUMNS=33
|
||||
KW_COMMENT=34
|
||||
KW_COMPRESSION=35
|
||||
KW_COMPUTE=36
|
||||
KW_CREATE=37
|
||||
KW_CROSS=38
|
||||
KW_CURRENT=39
|
||||
KW_CURRENT_DATE=40
|
||||
KW_CURRENT_PATH=41
|
||||
KW_CURRENT_TIME=42
|
||||
KW_CURRENT_TIMESTAMP=43
|
||||
KW_CURRENT_USER=44
|
||||
KW_DATA=45
|
||||
KW_DATABASE=46
|
||||
KW_DATABASES=47
|
||||
KW_DAY=48
|
||||
KW_DAYS=49
|
||||
KW_DELETE=50
|
||||
KW_DEFAULT=51
|
||||
KW_DELIMITED=52
|
||||
KW_DISABLE=53
|
||||
KW_UPDATE=54
|
||||
KW_DESC=55
|
||||
KW_DESCRIBE=56
|
||||
KW_DISTINCT=57
|
||||
KW_DROP=58
|
||||
KW_ELSE=59
|
||||
KW_ENCODING=60
|
||||
KW_END=61
|
||||
KW_ESCAPE=62
|
||||
KW_ESCAPED=63
|
||||
KW_EXCEPT=64
|
||||
KW_EXCLUDING=65
|
||||
KW_EXISTS=66
|
||||
KW_EXPLAIN=67
|
||||
KW_EXTRACT=68
|
||||
KW_EXTENDED=69
|
||||
KW_FALSE=70
|
||||
KW_FIELDS=71
|
||||
KW_FILEFORMAT=72
|
||||
KW_FILES=73
|
||||
KW_FILTER=74
|
||||
KW_FIRST=75
|
||||
KW_FINALIZE_FN=76
|
||||
KW_FOLLOWING=77
|
||||
KW_FOR=78
|
||||
KW_FORMAT=79
|
||||
KW_FORMATTED=80
|
||||
KW_FOREIGN=81
|
||||
KW_FROM=82
|
||||
KW_FULL=83
|
||||
KW_FUNCTION=84
|
||||
KW_FUNCTIONS=85
|
||||
KW_GRANT=86
|
||||
KW_GROUP=87
|
||||
KW_GROUPING=88
|
||||
KW_HASH=89
|
||||
KW_HAVING=90
|
||||
KW_HOUR=91
|
||||
KW_HOURS=92
|
||||
KW_IF=93
|
||||
KW_IN=94
|
||||
KW_INCLUDING=95
|
||||
KW_INCREMENTAL=96
|
||||
KW_INNER=97
|
||||
KW_INPATH=98
|
||||
KW_INSERT=99
|
||||
KW_INTERSECT=100
|
||||
KW_INTERVAL=101
|
||||
KW_INTERMEDIATE=102
|
||||
KW_INTO=103
|
||||
KW_INIT_FN=104
|
||||
KW_INVALIDATE=105
|
||||
KW_IS=106
|
||||
KW_JOIN=107
|
||||
KW_KEY=108
|
||||
KW_KUDU=109
|
||||
KW_LAST=110
|
||||
KW_LATERAL=111
|
||||
KW_LEFT=112
|
||||
KW_LIKE=113
|
||||
KW_LIMIT=114
|
||||
KW_LINES=115
|
||||
KW_LOAD=116
|
||||
KW_LOCALTIME=117
|
||||
KW_LOCALTIMESTAMP=118
|
||||
KW_METADATA=119
|
||||
KW_MAP=120
|
||||
KW_MINUTE=121
|
||||
KW_MINUTES=122
|
||||
KW_MONTH=123
|
||||
KW_MONTHS=124
|
||||
KW_MERGE_FN=125
|
||||
KW_NFC=126
|
||||
KW_NFD=127
|
||||
KW_NFKC=128
|
||||
KW_NFKD=129
|
||||
KW_NORMALIZE=130
|
||||
KW_NOT=131
|
||||
KW_NULL=132
|
||||
KW_NULLS=133
|
||||
KW_OFFSET=134
|
||||
KW_ON=135
|
||||
KW_OPTION=136
|
||||
KW_OR=137
|
||||
KW_ORDER=138
|
||||
KW_ORDINALITY=139
|
||||
KW_OUTER=140
|
||||
KW_OWNER=141
|
||||
KW_OVER=142
|
||||
KW_OVERWRITE=143
|
||||
KW_PARTITION=144
|
||||
KW_PARTITIONS=145
|
||||
KW_PARQUET=146
|
||||
KW_POSITION=147
|
||||
KW_PRECEDING=148
|
||||
KW_PRIMARY=149
|
||||
KW_REPLICATION=150
|
||||
KW_PRIVILEGES=151
|
||||
KW_PROPERTIES=152
|
||||
KW_RANGE=153
|
||||
KW_RECOVER=154
|
||||
KW_RENAME=155
|
||||
KW_REPEATABLE=156
|
||||
KW_REPLACE=157
|
||||
KW_RESTRICT=158
|
||||
KW_RETURNS=159
|
||||
KW_REVOKE=160
|
||||
KW_REFRESH=161
|
||||
KW_REGEXP=162
|
||||
KW_RLIKE=163
|
||||
KW_RIGHT=164
|
||||
KW_ROLE=165
|
||||
KW_ROLES=166
|
||||
KW_ROW=167
|
||||
KW_ROWS=168
|
||||
KW_SCHEMA=169
|
||||
KW_SCHEMAS=170
|
||||
KW_SECOND=171
|
||||
KW_SECONDS=172
|
||||
KW_SELECT=173
|
||||
KW_SERDEPROPERTIES=174
|
||||
KW_SET=175
|
||||
KW_SEMI=176
|
||||
KW_SERVER=177
|
||||
KW_SHOW=178
|
||||
KW_SHUTDOWN=179
|
||||
KW_SOME=180
|
||||
KW_STATS=181
|
||||
KW_STRUCT=182
|
||||
KW_STRAIGHT_JOIN=183
|
||||
KW_SUBSTRING=184
|
||||
KW_SYSTEM=185
|
||||
KW_SYMBOL=186
|
||||
KW_SERIALIZE_FN=187
|
||||
KW_TABLE=188
|
||||
KW_TABLES=189
|
||||
KW_TABLESAMPLE=190
|
||||
KW_TERMINATED=191
|
||||
KW_THEN=192
|
||||
KW_TO=193
|
||||
KW_TRUE=194
|
||||
KW_TRY_CAST=195
|
||||
KW_TRUNCATE=196
|
||||
KW_UNCACHED=197
|
||||
KW_UESCAPE=198
|
||||
KW_UNBOUNDED=199
|
||||
KW_UNION=200
|
||||
KW_UNNEST=201
|
||||
KW_UNSET=202
|
||||
KW_USE=203
|
||||
KW_USER=204
|
||||
KW_USING=205
|
||||
KW_UPDATE_FN=206
|
||||
KW_UPSERT=207
|
||||
KW_URI=208
|
||||
KW_VALUE=209
|
||||
KW_VALUES=210
|
||||
KW_VIEW=211
|
||||
KW_VIEWS=212
|
||||
KW_WHEN=213
|
||||
KW_WHERE=214
|
||||
KW_WITH=215
|
||||
KW_YEAR=216
|
||||
KW_YEARS=217
|
||||
KW_TEXTFILE=218
|
||||
KW_ORC=219
|
||||
KW_AVRO=220
|
||||
KW_SEQUENCEFILE=221
|
||||
KW_RCFILE=222
|
||||
KW_REFERENCES=223
|
||||
KW_NOVALIDATE=224
|
||||
KW_RELY=225
|
||||
STATS_NUMDVS=226
|
||||
STATS_NUMNULLS=227
|
||||
STATS_AVGSIZE=228
|
||||
STATS_MAXSIZE=229
|
||||
EQ=230
|
||||
NEQ=231
|
||||
LT=232
|
||||
LTE=233
|
||||
GT=234
|
||||
GTE=235
|
||||
PLUS=236
|
||||
MINUS=237
|
||||
ASTERISK=238
|
||||
SLASH=239
|
||||
PERCENT=240
|
||||
CONCAT=241
|
||||
DOT=242
|
||||
SEMICOLON=243
|
||||
COMMA=244
|
||||
COLON=245
|
||||
LPAREN=246
|
||||
RPAREN=247
|
||||
LSQUARE=248
|
||||
RSQUARE=249
|
||||
LCURLY=250
|
||||
RCURLY=251
|
||||
BITWISEOR=252
|
||||
QUESTION=253
|
||||
RIGHT_ARROW=254
|
||||
STRING=255
|
||||
UNICODE_STRING=256
|
||||
BINARY_LITERAL=257
|
||||
INTEGER_VALUE=258
|
||||
DECIMAL_VALUE=259
|
||||
DOUBLE_VALUE=260
|
||||
IDENTIFIER=261
|
||||
DIGIT_IDENTIFIER=262
|
||||
QUOTED_IDENTIFIER=263
|
||||
BACKQUOTED_IDENTIFIER=264
|
||||
TIME_WITH_TIME_ZONE=265
|
||||
TIMESTAMP_WITH_TIME_ZONE=266
|
||||
DOUBLE_PRECISION=267
|
||||
SIMPLE_COMMENT=268
|
||||
BRACKETED_COMMENT=269
|
||||
WS=270
|
||||
'ADD'=1
|
||||
'ALL'=2
|
||||
'ANALYTIC'=3
|
||||
'ALTER'=4
|
||||
'AND'=5
|
||||
'ANY'=6
|
||||
'ANTI'=7
|
||||
'ARRAY'=8
|
||||
'AS'=9
|
||||
'ASC'=10
|
||||
'AT'=11
|
||||
'AGGREGATE'=12
|
||||
'AUTHORIZATION'=13
|
||||
'BERNOULLI'=14
|
||||
'BETWEEN'=15
|
||||
'BLOCK_SIZE'=16
|
||||
'PARTITIONED'=17
|
||||
'PREPARE_FN'=18
|
||||
'EXTERNAL'=19
|
||||
'CLOSEFN'=20
|
||||
'SORT'=21
|
||||
'PURGE'=22
|
||||
'STORED'=23
|
||||
'LOCATION'=24
|
||||
'TBLPROPERTIES'=25
|
||||
'BY'=26
|
||||
'CASCADE'=27
|
||||
'CASE'=28
|
||||
'CAST'=29
|
||||
'CACHED'=30
|
||||
'CHANGE'=31
|
||||
'COLUMN'=32
|
||||
'COLUMNS'=33
|
||||
'COMMENT'=34
|
||||
'COMPRESSION'=35
|
||||
'COMPUTE'=36
|
||||
'CREATE'=37
|
||||
'CROSS'=38
|
||||
'CURRENT'=39
|
||||
'CURRENT_DATE'=40
|
||||
'CURRENT_PATH'=41
|
||||
'CURRENT_TIME'=42
|
||||
'CURRENT_TIMESTAMP'=43
|
||||
'CURRENT_USER'=44
|
||||
'DATA'=45
|
||||
'DATABASE'=46
|
||||
'DATABASES'=47
|
||||
'DAY'=48
|
||||
'DAYS'=49
|
||||
'DELETE'=50
|
||||
'DEFAULT'=51
|
||||
'DELIMITED'=52
|
||||
'DISABLE'=53
|
||||
'UPDATE'=54
|
||||
'DESC'=55
|
||||
'DESCRIBE'=56
|
||||
'DISTINCT'=57
|
||||
'DROP'=58
|
||||
'ELSE'=59
|
||||
'ENCODING'=60
|
||||
'END'=61
|
||||
'ESCAPE'=62
|
||||
'ESCAPED'=63
|
||||
'EXCEPT'=64
|
||||
'EXCLUDING'=65
|
||||
'EXISTS'=66
|
||||
'EXPLAIN'=67
|
||||
'EXTRACT'=68
|
||||
'EXTENDED'=69
|
||||
'FALSE'=70
|
||||
'FIELDS'=71
|
||||
'FILEFORMAT'=72
|
||||
'FILES'=73
|
||||
'FILTER'=74
|
||||
'FIRST'=75
|
||||
'FINALIZE_FN'=76
|
||||
'FOLLOWING'=77
|
||||
'FOR'=78
|
||||
'FORMAT'=79
|
||||
'FORMATTED'=80
|
||||
'FOREIGN'=81
|
||||
'FROM'=82
|
||||
'FULL'=83
|
||||
'FUNCTION'=84
|
||||
'FUNCTIONS'=85
|
||||
'GRANT'=86
|
||||
'GROUP'=87
|
||||
'GROUPING'=88
|
||||
'HASH'=89
|
||||
'HAVING'=90
|
||||
'HOUR'=91
|
||||
'HOURS'=92
|
||||
'IF'=93
|
||||
'IN'=94
|
||||
'INCLUDING'=95
|
||||
'INCREMENTAL'=96
|
||||
'INNER'=97
|
||||
'INPATH'=98
|
||||
'INSERT'=99
|
||||
'INTERSECT'=100
|
||||
'INTERVAL'=101
|
||||
'INTERMEDIATE'=102
|
||||
'INTO'=103
|
||||
'INIT_FN'=104
|
||||
'INVALIDATE'=105
|
||||
'IS'=106
|
||||
'JOIN'=107
|
||||
'KEY'=108
|
||||
'KUDU'=109
|
||||
'LAST'=110
|
||||
'LATERAL'=111
|
||||
'LEFT'=112
|
||||
'LIKE'=113
|
||||
'LIMIT'=114
|
||||
'LINES'=115
|
||||
'LOAD'=116
|
||||
'LOCALTIME'=117
|
||||
'LOCALTIMESTAMP'=118
|
||||
'METADATA'=119
|
||||
'MAP'=120
|
||||
'MINUTE'=121
|
||||
'MINUTES'=122
|
||||
'MONTH'=123
|
||||
'MONTHS'=124
|
||||
'MERGE_FN'=125
|
||||
'NFC'=126
|
||||
'NFD'=127
|
||||
'NFKC'=128
|
||||
'NFKD'=129
|
||||
'NORMALIZE'=130
|
||||
'NOT'=131
|
||||
'NULL'=132
|
||||
'NULLS'=133
|
||||
'OFFSET'=134
|
||||
'ON'=135
|
||||
'OPTION'=136
|
||||
'OR'=137
|
||||
'ORDER'=138
|
||||
'ORDINALITY'=139
|
||||
'OUTER'=140
|
||||
'OWNER'=141
|
||||
'OVER'=142
|
||||
'OVERWRITE'=143
|
||||
'PARTITION'=144
|
||||
'PARTITIONS'=145
|
||||
'PARQUET'=146
|
||||
'POSITION'=147
|
||||
'PRECEDING'=148
|
||||
'PRIMARY'=149
|
||||
'REPLICATION'=150
|
||||
'PRIVILEGES'=151
|
||||
'PROPERTIES'=152
|
||||
'RANGE'=153
|
||||
'RECOVER'=154
|
||||
'RENAME'=155
|
||||
'REPEATABLE'=156
|
||||
'REPLACE'=157
|
||||
'RESTRICT'=158
|
||||
'RETURNS'=159
|
||||
'REVOKE'=160
|
||||
'REFRESH'=161
|
||||
'REGEXP'=162
|
||||
'RLIKE'=163
|
||||
'RIGHT'=164
|
||||
'ROLE'=165
|
||||
'ROLES'=166
|
||||
'ROW'=167
|
||||
'ROWS'=168
|
||||
'SCHEMA'=169
|
||||
'SCHEMAS'=170
|
||||
'SECOND'=171
|
||||
'SECONDS'=172
|
||||
'SELECT'=173
|
||||
'SERDEPROPERTIES'=174
|
||||
'SET'=175
|
||||
'SEMI'=176
|
||||
'SERVER'=177
|
||||
'SHOW'=178
|
||||
'SHUTDOWN'=179
|
||||
'SOME'=180
|
||||
'STATS'=181
|
||||
'STRUCT'=182
|
||||
'STRAIGHT_JOIN'=183
|
||||
'SUBSTRING'=184
|
||||
'SYSTEM'=185
|
||||
'SYMBOL'=186
|
||||
'SERIALIZE_FN'=187
|
||||
'TABLE'=188
|
||||
'TABLES'=189
|
||||
'TABLESAMPLE'=190
|
||||
'TERMINATED '=191
|
||||
'THEN'=192
|
||||
'TO'=193
|
||||
'TRUE'=194
|
||||
'TRY_CAST'=195
|
||||
'TRUNCATE'=196
|
||||
'UNCACHED'=197
|
||||
'UESCAPE'=198
|
||||
'UNBOUNDED'=199
|
||||
'UNION'=200
|
||||
'UNNEST'=201
|
||||
'UNSET'=202
|
||||
'USE'=203
|
||||
'USER'=204
|
||||
'USING'=205
|
||||
'UPDATE_FN'=206
|
||||
'UPSERT'=207
|
||||
'URI'=208
|
||||
'VALUE'=209
|
||||
'VALUES'=210
|
||||
'VIEW'=211
|
||||
'VIEWS'=212
|
||||
'WHEN'=213
|
||||
'WHERE'=214
|
||||
'WITH'=215
|
||||
'YEAR'=216
|
||||
'YEARS'=217
|
||||
'TEXTFILE'=218
|
||||
'ORC'=219
|
||||
'AVRO'=220
|
||||
'SEQUENCEFILE'=221
|
||||
'RCFILE'=222
|
||||
'REFERENCES'=223
|
||||
'NOVALIDATE'=224
|
||||
'RELY'=225
|
||||
'\'NUMDVS\''=226
|
||||
'\'NUMNULLS\''=227
|
||||
'\'AVGSIZE\''=228
|
||||
'\'MAXSIZE\''=229
|
||||
'='=230
|
||||
'<'=232
|
||||
'<='=233
|
||||
'>'=234
|
||||
'>='=235
|
||||
'+'=236
|
||||
'-'=237
|
||||
'*'=238
|
||||
'/'=239
|
||||
'%'=240
|
||||
'||'=241
|
||||
'.'=242
|
||||
';'=243
|
||||
','=244
|
||||
':'=245
|
||||
'('=246
|
||||
')'=247
|
||||
'['=248
|
||||
']'=249
|
||||
'{'=250
|
||||
'}'=251
|
||||
'|'=252
|
||||
'?'=253
|
||||
'->'=254
|
1749
src/lib/impala/ImpalaSqlLexer.ts
Normal file
1749
src/lib/impala/ImpalaSqlLexer.ts
Normal file
File diff suppressed because it is too large
Load Diff
731
src/lib/impala/ImpalaSqlParser.interp
Normal file
731
src/lib/impala/ImpalaSqlParser.interp
Normal file
File diff suppressed because one or more lines are too long
523
src/lib/impala/ImpalaSqlParser.tokens
Normal file
523
src/lib/impala/ImpalaSqlParser.tokens
Normal file
@ -0,0 +1,523 @@
|
||||
KW_ADD=1
|
||||
KW_ALL=2
|
||||
KW_ANALYTIC=3
|
||||
KW_ALTER=4
|
||||
KW_AND=5
|
||||
KW_ANY=6
|
||||
KW_ANTI=7
|
||||
KW_ARRAY=8
|
||||
KW_AS=9
|
||||
KW_ASC=10
|
||||
KW_AT=11
|
||||
KW_AGGREGATE=12
|
||||
KW_AUTHORIZATION=13
|
||||
KW_BERNOULLI=14
|
||||
KW_BETWEEN=15
|
||||
KW_BLOCK_SIZE=16
|
||||
KW_PARTITIONED=17
|
||||
KW_PREPARE_FN=18
|
||||
KW_EXTERNAL=19
|
||||
KW_CLOSEFN=20
|
||||
KW_SORT=21
|
||||
KW_PURGE=22
|
||||
KW_STORED=23
|
||||
KW_LOCATION=24
|
||||
KW_TBLPROPERTIES=25
|
||||
KW_BY=26
|
||||
KW_CASCADE=27
|
||||
KW_CASE=28
|
||||
KW_CAST=29
|
||||
KW_CACHED=30
|
||||
KW_CHANGE=31
|
||||
KW_COLUMN=32
|
||||
KW_COLUMNS=33
|
||||
KW_COMMENT=34
|
||||
KW_COMPRESSION=35
|
||||
KW_COMPUTE=36
|
||||
KW_CREATE=37
|
||||
KW_CROSS=38
|
||||
KW_CURRENT=39
|
||||
KW_CURRENT_DATE=40
|
||||
KW_CURRENT_PATH=41
|
||||
KW_CURRENT_TIME=42
|
||||
KW_CURRENT_TIMESTAMP=43
|
||||
KW_CURRENT_USER=44
|
||||
KW_DATA=45
|
||||
KW_DATABASE=46
|
||||
KW_DATABASES=47
|
||||
KW_DAY=48
|
||||
KW_DAYS=49
|
||||
KW_DELETE=50
|
||||
KW_DEFAULT=51
|
||||
KW_DELIMITED=52
|
||||
KW_DISABLE=53
|
||||
KW_UPDATE=54
|
||||
KW_DESC=55
|
||||
KW_DESCRIBE=56
|
||||
KW_DISTINCT=57
|
||||
KW_DROP=58
|
||||
KW_ELSE=59
|
||||
KW_ENCODING=60
|
||||
KW_END=61
|
||||
KW_ESCAPE=62
|
||||
KW_ESCAPED=63
|
||||
KW_EXCEPT=64
|
||||
KW_EXCLUDING=65
|
||||
KW_EXISTS=66
|
||||
KW_EXPLAIN=67
|
||||
KW_EXTRACT=68
|
||||
KW_EXTENDED=69
|
||||
KW_FALSE=70
|
||||
KW_FIELDS=71
|
||||
KW_FILEFORMAT=72
|
||||
KW_FILES=73
|
||||
KW_FILTER=74
|
||||
KW_FIRST=75
|
||||
KW_FINALIZE_FN=76
|
||||
KW_FOLLOWING=77
|
||||
KW_FOR=78
|
||||
KW_FORMAT=79
|
||||
KW_FORMATTED=80
|
||||
KW_FOREIGN=81
|
||||
KW_FROM=82
|
||||
KW_FULL=83
|
||||
KW_FUNCTION=84
|
||||
KW_FUNCTIONS=85
|
||||
KW_GRANT=86
|
||||
KW_GROUP=87
|
||||
KW_GROUPING=88
|
||||
KW_HASH=89
|
||||
KW_HAVING=90
|
||||
KW_HOUR=91
|
||||
KW_HOURS=92
|
||||
KW_IF=93
|
||||
KW_IN=94
|
||||
KW_INCLUDING=95
|
||||
KW_INCREMENTAL=96
|
||||
KW_INNER=97
|
||||
KW_INPATH=98
|
||||
KW_INSERT=99
|
||||
KW_INTERSECT=100
|
||||
KW_INTERVAL=101
|
||||
KW_INTERMEDIATE=102
|
||||
KW_INTO=103
|
||||
KW_INIT_FN=104
|
||||
KW_INVALIDATE=105
|
||||
KW_IS=106
|
||||
KW_JOIN=107
|
||||
KW_KEY=108
|
||||
KW_KUDU=109
|
||||
KW_LAST=110
|
||||
KW_LATERAL=111
|
||||
KW_LEFT=112
|
||||
KW_LIKE=113
|
||||
KW_LIMIT=114
|
||||
KW_LINES=115
|
||||
KW_LOAD=116
|
||||
KW_LOCALTIME=117
|
||||
KW_LOCALTIMESTAMP=118
|
||||
KW_METADATA=119
|
||||
KW_MAP=120
|
||||
KW_MINUTE=121
|
||||
KW_MINUTES=122
|
||||
KW_MONTH=123
|
||||
KW_MONTHS=124
|
||||
KW_MERGE_FN=125
|
||||
KW_NFC=126
|
||||
KW_NFD=127
|
||||
KW_NFKC=128
|
||||
KW_NFKD=129
|
||||
KW_NORMALIZE=130
|
||||
KW_NOT=131
|
||||
KW_NULL=132
|
||||
KW_NULLS=133
|
||||
KW_OFFSET=134
|
||||
KW_ON=135
|
||||
KW_OPTION=136
|
||||
KW_OR=137
|
||||
KW_ORDER=138
|
||||
KW_ORDINALITY=139
|
||||
KW_OUTER=140
|
||||
KW_OWNER=141
|
||||
KW_OVER=142
|
||||
KW_OVERWRITE=143
|
||||
KW_PARTITION=144
|
||||
KW_PARTITIONS=145
|
||||
KW_PARQUET=146
|
||||
KW_POSITION=147
|
||||
KW_PRECEDING=148
|
||||
KW_PRIMARY=149
|
||||
KW_REPLICATION=150
|
||||
KW_PRIVILEGES=151
|
||||
KW_PROPERTIES=152
|
||||
KW_RANGE=153
|
||||
KW_RECOVER=154
|
||||
KW_RENAME=155
|
||||
KW_REPEATABLE=156
|
||||
KW_REPLACE=157
|
||||
KW_RESTRICT=158
|
||||
KW_RETURNS=159
|
||||
KW_REVOKE=160
|
||||
KW_REFRESH=161
|
||||
KW_REGEXP=162
|
||||
KW_RLIKE=163
|
||||
KW_RIGHT=164
|
||||
KW_ROLE=165
|
||||
KW_ROLES=166
|
||||
KW_ROW=167
|
||||
KW_ROWS=168
|
||||
KW_SCHEMA=169
|
||||
KW_SCHEMAS=170
|
||||
KW_SECOND=171
|
||||
KW_SECONDS=172
|
||||
KW_SELECT=173
|
||||
KW_SERDEPROPERTIES=174
|
||||
KW_SET=175
|
||||
KW_SEMI=176
|
||||
KW_SERVER=177
|
||||
KW_SHOW=178
|
||||
KW_SHUTDOWN=179
|
||||
KW_SOME=180
|
||||
KW_STATS=181
|
||||
KW_STRUCT=182
|
||||
KW_STRAIGHT_JOIN=183
|
||||
KW_SUBSTRING=184
|
||||
KW_SYSTEM=185
|
||||
KW_SYMBOL=186
|
||||
KW_SERIALIZE_FN=187
|
||||
KW_TABLE=188
|
||||
KW_TABLES=189
|
||||
KW_TABLESAMPLE=190
|
||||
KW_TERMINATED=191
|
||||
KW_THEN=192
|
||||
KW_TO=193
|
||||
KW_TRUE=194
|
||||
KW_TRY_CAST=195
|
||||
KW_TRUNCATE=196
|
||||
KW_UNCACHED=197
|
||||
KW_UESCAPE=198
|
||||
KW_UNBOUNDED=199
|
||||
KW_UNION=200
|
||||
KW_UNNEST=201
|
||||
KW_UNSET=202
|
||||
KW_USE=203
|
||||
KW_USER=204
|
||||
KW_USING=205
|
||||
KW_UPDATE_FN=206
|
||||
KW_UPSERT=207
|
||||
KW_URI=208
|
||||
KW_VALUE=209
|
||||
KW_VALUES=210
|
||||
KW_VIEW=211
|
||||
KW_VIEWS=212
|
||||
KW_WHEN=213
|
||||
KW_WHERE=214
|
||||
KW_WITH=215
|
||||
KW_YEAR=216
|
||||
KW_YEARS=217
|
||||
KW_TEXTFILE=218
|
||||
KW_ORC=219
|
||||
KW_AVRO=220
|
||||
KW_SEQUENCEFILE=221
|
||||
KW_RCFILE=222
|
||||
KW_REFERENCES=223
|
||||
KW_NOVALIDATE=224
|
||||
KW_RELY=225
|
||||
STATS_NUMDVS=226
|
||||
STATS_NUMNULLS=227
|
||||
STATS_AVGSIZE=228
|
||||
STATS_MAXSIZE=229
|
||||
EQ=230
|
||||
NEQ=231
|
||||
LT=232
|
||||
LTE=233
|
||||
GT=234
|
||||
GTE=235
|
||||
PLUS=236
|
||||
MINUS=237
|
||||
ASTERISK=238
|
||||
SLASH=239
|
||||
PERCENT=240
|
||||
CONCAT=241
|
||||
DOT=242
|
||||
SEMICOLON=243
|
||||
COMMA=244
|
||||
COLON=245
|
||||
LPAREN=246
|
||||
RPAREN=247
|
||||
LSQUARE=248
|
||||
RSQUARE=249
|
||||
LCURLY=250
|
||||
RCURLY=251
|
||||
BITWISEOR=252
|
||||
QUESTION=253
|
||||
RIGHT_ARROW=254
|
||||
STRING=255
|
||||
UNICODE_STRING=256
|
||||
BINARY_LITERAL=257
|
||||
INTEGER_VALUE=258
|
||||
DECIMAL_VALUE=259
|
||||
DOUBLE_VALUE=260
|
||||
IDENTIFIER=261
|
||||
DIGIT_IDENTIFIER=262
|
||||
QUOTED_IDENTIFIER=263
|
||||
BACKQUOTED_IDENTIFIER=264
|
||||
TIME_WITH_TIME_ZONE=265
|
||||
TIMESTAMP_WITH_TIME_ZONE=266
|
||||
DOUBLE_PRECISION=267
|
||||
SIMPLE_COMMENT=268
|
||||
BRACKETED_COMMENT=269
|
||||
WS=270
|
||||
'ADD'=1
|
||||
'ALL'=2
|
||||
'ANALYTIC'=3
|
||||
'ALTER'=4
|
||||
'AND'=5
|
||||
'ANY'=6
|
||||
'ANTI'=7
|
||||
'ARRAY'=8
|
||||
'AS'=9
|
||||
'ASC'=10
|
||||
'AT'=11
|
||||
'AGGREGATE'=12
|
||||
'AUTHORIZATION'=13
|
||||
'BERNOULLI'=14
|
||||
'BETWEEN'=15
|
||||
'BLOCK_SIZE'=16
|
||||
'PARTITIONED'=17
|
||||
'PREPARE_FN'=18
|
||||
'EXTERNAL'=19
|
||||
'CLOSEFN'=20
|
||||
'SORT'=21
|
||||
'PURGE'=22
|
||||
'STORED'=23
|
||||
'LOCATION'=24
|
||||
'TBLPROPERTIES'=25
|
||||
'BY'=26
|
||||
'CASCADE'=27
|
||||
'CASE'=28
|
||||
'CAST'=29
|
||||
'CACHED'=30
|
||||
'CHANGE'=31
|
||||
'COLUMN'=32
|
||||
'COLUMNS'=33
|
||||
'COMMENT'=34
|
||||
'COMPRESSION'=35
|
||||
'COMPUTE'=36
|
||||
'CREATE'=37
|
||||
'CROSS'=38
|
||||
'CURRENT'=39
|
||||
'CURRENT_DATE'=40
|
||||
'CURRENT_PATH'=41
|
||||
'CURRENT_TIME'=42
|
||||
'CURRENT_TIMESTAMP'=43
|
||||
'CURRENT_USER'=44
|
||||
'DATA'=45
|
||||
'DATABASE'=46
|
||||
'DATABASES'=47
|
||||
'DAY'=48
|
||||
'DAYS'=49
|
||||
'DELETE'=50
|
||||
'DEFAULT'=51
|
||||
'DELIMITED'=52
|
||||
'DISABLE'=53
|
||||
'UPDATE'=54
|
||||
'DESC'=55
|
||||
'DESCRIBE'=56
|
||||
'DISTINCT'=57
|
||||
'DROP'=58
|
||||
'ELSE'=59
|
||||
'ENCODING'=60
|
||||
'END'=61
|
||||
'ESCAPE'=62
|
||||
'ESCAPED'=63
|
||||
'EXCEPT'=64
|
||||
'EXCLUDING'=65
|
||||
'EXISTS'=66
|
||||
'EXPLAIN'=67
|
||||
'EXTRACT'=68
|
||||
'EXTENDED'=69
|
||||
'FALSE'=70
|
||||
'FIELDS'=71
|
||||
'FILEFORMAT'=72
|
||||
'FILES'=73
|
||||
'FILTER'=74
|
||||
'FIRST'=75
|
||||
'FINALIZE_FN'=76
|
||||
'FOLLOWING'=77
|
||||
'FOR'=78
|
||||
'FORMAT'=79
|
||||
'FORMATTED'=80
|
||||
'FOREIGN'=81
|
||||
'FROM'=82
|
||||
'FULL'=83
|
||||
'FUNCTION'=84
|
||||
'FUNCTIONS'=85
|
||||
'GRANT'=86
|
||||
'GROUP'=87
|
||||
'GROUPING'=88
|
||||
'HASH'=89
|
||||
'HAVING'=90
|
||||
'HOUR'=91
|
||||
'HOURS'=92
|
||||
'IF'=93
|
||||
'IN'=94
|
||||
'INCLUDING'=95
|
||||
'INCREMENTAL'=96
|
||||
'INNER'=97
|
||||
'INPATH'=98
|
||||
'INSERT'=99
|
||||
'INTERSECT'=100
|
||||
'INTERVAL'=101
|
||||
'INTERMEDIATE'=102
|
||||
'INTO'=103
|
||||
'INIT_FN'=104
|
||||
'INVALIDATE'=105
|
||||
'IS'=106
|
||||
'JOIN'=107
|
||||
'KEY'=108
|
||||
'KUDU'=109
|
||||
'LAST'=110
|
||||
'LATERAL'=111
|
||||
'LEFT'=112
|
||||
'LIKE'=113
|
||||
'LIMIT'=114
|
||||
'LINES'=115
|
||||
'LOAD'=116
|
||||
'LOCALTIME'=117
|
||||
'LOCALTIMESTAMP'=118
|
||||
'METADATA'=119
|
||||
'MAP'=120
|
||||
'MINUTE'=121
|
||||
'MINUTES'=122
|
||||
'MONTH'=123
|
||||
'MONTHS'=124
|
||||
'MERGE_FN'=125
|
||||
'NFC'=126
|
||||
'NFD'=127
|
||||
'NFKC'=128
|
||||
'NFKD'=129
|
||||
'NORMALIZE'=130
|
||||
'NOT'=131
|
||||
'NULL'=132
|
||||
'NULLS'=133
|
||||
'OFFSET'=134
|
||||
'ON'=135
|
||||
'OPTION'=136
|
||||
'OR'=137
|
||||
'ORDER'=138
|
||||
'ORDINALITY'=139
|
||||
'OUTER'=140
|
||||
'OWNER'=141
|
||||
'OVER'=142
|
||||
'OVERWRITE'=143
|
||||
'PARTITION'=144
|
||||
'PARTITIONS'=145
|
||||
'PARQUET'=146
|
||||
'POSITION'=147
|
||||
'PRECEDING'=148
|
||||
'PRIMARY'=149
|
||||
'REPLICATION'=150
|
||||
'PRIVILEGES'=151
|
||||
'PROPERTIES'=152
|
||||
'RANGE'=153
|
||||
'RECOVER'=154
|
||||
'RENAME'=155
|
||||
'REPEATABLE'=156
|
||||
'REPLACE'=157
|
||||
'RESTRICT'=158
|
||||
'RETURNS'=159
|
||||
'REVOKE'=160
|
||||
'REFRESH'=161
|
||||
'REGEXP'=162
|
||||
'RLIKE'=163
|
||||
'RIGHT'=164
|
||||
'ROLE'=165
|
||||
'ROLES'=166
|
||||
'ROW'=167
|
||||
'ROWS'=168
|
||||
'SCHEMA'=169
|
||||
'SCHEMAS'=170
|
||||
'SECOND'=171
|
||||
'SECONDS'=172
|
||||
'SELECT'=173
|
||||
'SERDEPROPERTIES'=174
|
||||
'SET'=175
|
||||
'SEMI'=176
|
||||
'SERVER'=177
|
||||
'SHOW'=178
|
||||
'SHUTDOWN'=179
|
||||
'SOME'=180
|
||||
'STATS'=181
|
||||
'STRUCT'=182
|
||||
'STRAIGHT_JOIN'=183
|
||||
'SUBSTRING'=184
|
||||
'SYSTEM'=185
|
||||
'SYMBOL'=186
|
||||
'SERIALIZE_FN'=187
|
||||
'TABLE'=188
|
||||
'TABLES'=189
|
||||
'TABLESAMPLE'=190
|
||||
'TERMINATED '=191
|
||||
'THEN'=192
|
||||
'TO'=193
|
||||
'TRUE'=194
|
||||
'TRY_CAST'=195
|
||||
'TRUNCATE'=196
|
||||
'UNCACHED'=197
|
||||
'UESCAPE'=198
|
||||
'UNBOUNDED'=199
|
||||
'UNION'=200
|
||||
'UNNEST'=201
|
||||
'UNSET'=202
|
||||
'USE'=203
|
||||
'USER'=204
|
||||
'USING'=205
|
||||
'UPDATE_FN'=206
|
||||
'UPSERT'=207
|
||||
'URI'=208
|
||||
'VALUE'=209
|
||||
'VALUES'=210
|
||||
'VIEW'=211
|
||||
'VIEWS'=212
|
||||
'WHEN'=213
|
||||
'WHERE'=214
|
||||
'WITH'=215
|
||||
'YEAR'=216
|
||||
'YEARS'=217
|
||||
'TEXTFILE'=218
|
||||
'ORC'=219
|
||||
'AVRO'=220
|
||||
'SEQUENCEFILE'=221
|
||||
'RCFILE'=222
|
||||
'REFERENCES'=223
|
||||
'NOVALIDATE'=224
|
||||
'RELY'=225
|
||||
'\'NUMDVS\''=226
|
||||
'\'NUMNULLS\''=227
|
||||
'\'AVGSIZE\''=228
|
||||
'\'MAXSIZE\''=229
|
||||
'='=230
|
||||
'<'=232
|
||||
'<='=233
|
||||
'>'=234
|
||||
'>='=235
|
||||
'+'=236
|
||||
'-'=237
|
||||
'*'=238
|
||||
'/'=239
|
||||
'%'=240
|
||||
'||'=241
|
||||
'.'=242
|
||||
';'=243
|
||||
','=244
|
||||
':'=245
|
||||
'('=246
|
||||
')'=247
|
||||
'['=248
|
||||
']'=249
|
||||
'{'=250
|
||||
'}'=251
|
||||
'|'=252
|
||||
'?'=253
|
||||
'->'=254
|
25304
src/lib/impala/ImpalaSqlParser.ts
Normal file
25304
src/lib/impala/ImpalaSqlParser.ts
Normal file
File diff suppressed because one or more lines are too long
3195
src/lib/impala/ImpalaSqlParserListener.ts
Normal file
3195
src/lib/impala/ImpalaSqlParserListener.ts
Normal file
File diff suppressed because it is too large
Load Diff
2113
src/lib/impala/ImpalaSqlParserVisitor.ts
Normal file
2113
src/lib/impala/ImpalaSqlParserVisitor.ts
Normal file
File diff suppressed because it is too large
Load Diff
139
src/parser/impala.ts
Normal file
139
src/parser/impala.ts
Normal file
@ -0,0 +1,139 @@
|
||||
import { Token } from 'antlr4ts';
|
||||
import { CandidatesCollection } from 'antlr4-c3';
|
||||
import { ImpalaSqlLexer } from '../lib/impala/ImpalaSqlLexer';
|
||||
import { ImpalaSqlParser, ProgramContext, StatementContext } from '../lib/impala/ImpalaSqlParser';
|
||||
import BasicParser from './common/basicParser';
|
||||
import { ImpalaSqlParserListener } from '../lib/impala/ImpalaSqlParserListener';
|
||||
import { SyntaxContextType, Suggestions, SyntaxSuggestion } from './common/basic-parser-types';
|
||||
|
||||
export default class ImpalaSQL extends BasicParser<
|
||||
ImpalaSqlLexer,
|
||||
ProgramContext,
|
||||
ImpalaSqlParser
|
||||
> {
|
||||
protected createLexerFormCharStream(charStreams) {
|
||||
const lexer = new ImpalaSqlLexer(charStreams);
|
||||
return lexer;
|
||||
}
|
||||
|
||||
protected createParserFromTokenStream(tokenStream) {
|
||||
return new ImpalaSqlParser(tokenStream);
|
||||
}
|
||||
|
||||
protected preferredRules: Set<number> = new Set([
|
||||
ImpalaSqlParser.RULE_functionNameCreate,
|
||||
ImpalaSqlParser.RULE_tableNameCreate,
|
||||
ImpalaSqlParser.RULE_viewNameCreate,
|
||||
ImpalaSqlParser.RULE_databaseNameCreate,
|
||||
ImpalaSqlParser.RULE_columnNamePathCreate,
|
||||
ImpalaSqlParser.RULE_tableNamePath,
|
||||
ImpalaSqlParser.RULE_functionNamePath,
|
||||
ImpalaSqlParser.RULE_viewNamePath,
|
||||
ImpalaSqlParser.RULE_databaseNamePath,
|
||||
ImpalaSqlParser.RULE_columnNamePath,
|
||||
]);
|
||||
|
||||
protected get splitListener() {
|
||||
return new ImpalaSqlSplitListener();
|
||||
}
|
||||
|
||||
protected processCandidates(
|
||||
candidates: CandidatesCollection,
|
||||
allTokens: Token[],
|
||||
caretTokenIndex: number,
|
||||
tokenIndexOffset: number
|
||||
): Suggestions<Token> {
|
||||
const originalSyntaxSuggestions: SyntaxSuggestion<Token>[] = [];
|
||||
const keywords: string[] = [];
|
||||
for (let candidate of candidates.rules) {
|
||||
const [ruleType, candidateRule] = candidate;
|
||||
const startTokenIndex = candidateRule.startTokenIndex + tokenIndexOffset;
|
||||
const tokenRanges = allTokens.slice(
|
||||
startTokenIndex,
|
||||
caretTokenIndex + tokenIndexOffset + 1
|
||||
);
|
||||
|
||||
let syntaxContextType: SyntaxContextType;
|
||||
switch (ruleType) {
|
||||
case ImpalaSqlParser.RULE_functionNameCreate: {
|
||||
syntaxContextType = SyntaxContextType.FUNCTION_CREATE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_tableNameCreate: {
|
||||
syntaxContextType = SyntaxContextType.TABLE_CREATE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_databaseNameCreate: {
|
||||
syntaxContextType = SyntaxContextType.DATABASE_CREATE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_viewNameCreate: {
|
||||
syntaxContextType = SyntaxContextType.VIEW_CREATE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_columnNamePathCreate: {
|
||||
syntaxContextType = SyntaxContextType.COLUMN_CREATE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_databaseNamePath: {
|
||||
syntaxContextType = SyntaxContextType.DATABASE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_tableNamePath: {
|
||||
syntaxContextType = SyntaxContextType.TABLE;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_viewNamePath: {
|
||||
syntaxContextType = SyntaxContextType.VIEW;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_functionNamePath: {
|
||||
syntaxContextType = SyntaxContextType.FUNCTION;
|
||||
break;
|
||||
}
|
||||
case ImpalaSqlParser.RULE_columnNamePath: {
|
||||
syntaxContextType = SyntaxContextType.COLUMN;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (syntaxContextType) {
|
||||
originalSyntaxSuggestions.push({
|
||||
syntaxContextType,
|
||||
wordRanges: tokenRanges,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
for (let candidate of candidates.tokens) {
|
||||
const symbolicName = this._parser.vocabulary.getSymbolicName(candidate[0]);
|
||||
const displayName = this._parser.vocabulary.getDisplayName(candidate[0]);
|
||||
if (symbolicName && symbolicName.startsWith('KW_')) {
|
||||
const keyword =
|
||||
displayName.startsWith("'") && displayName.endsWith("'")
|
||||
? displayName.slice(1, -1)
|
||||
: displayName;
|
||||
keywords.push(keyword);
|
||||
}
|
||||
}
|
||||
return {
|
||||
syntax: originalSyntaxSuggestions,
|
||||
keywords,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export class ImpalaSqlSplitListener implements ImpalaSqlParserListener {
|
||||
private _statementContext: StatementContext[] = [];
|
||||
|
||||
exitStatement = (ctx: StatementContext) => {
|
||||
this._statementContext.push(ctx);
|
||||
};
|
||||
|
||||
enterStatement = (ctx: StatementContext) => {};
|
||||
|
||||
get statementsContext() {
|
||||
return this._statementContext;
|
||||
}
|
||||
}
|
@ -5,3 +5,4 @@ export { default as FlinkSQL } from './flinksql';
|
||||
export { default as SparkSQL } from './spark';
|
||||
export { default as PostgresSQL } from './pgsql';
|
||||
export { default as TrinoSQL } from './trinosql';
|
||||
export { default as ImpalaSQL } from './impala';
|
||||
|
Reference in New Issue
Block a user