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