Merge branch 'dev' into feat_sparkSql
This commit is contained in:
commit
8418c42c26
@ -11,6 +11,7 @@ const entry = [
|
|||||||
'plsql',
|
'plsql',
|
||||||
'spark',
|
'spark',
|
||||||
'impala',
|
'impala',
|
||||||
|
'flinksql',
|
||||||
];
|
];
|
||||||
|
|
||||||
entry.forEach((language) => {
|
entry.forEach((language) => {
|
||||||
|
332
src/grammar/flinksql/FlinkSqlLexer.g4
Normal file
332
src/grammar/flinksql/FlinkSqlLexer.g4
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
lexer grammar FlinkSqlLexer;
|
||||||
|
|
||||||
|
// SKIP
|
||||||
|
|
||||||
|
SPACE: [ \t\r\n]+ -> channel(HIDDEN);
|
||||||
|
COMMENT_INPUT: '/*' .*? '*/' -> channel(HIDDEN);
|
||||||
|
LINE_COMMENT: (
|
||||||
|
('-- ' | '#') ~[\r\n]* ('\r'? '\n' | EOF)
|
||||||
|
| '--' ('\r'? '\n' | EOF)
|
||||||
|
) -> channel(HIDDEN);
|
||||||
|
|
||||||
|
|
||||||
|
// Common Keywords
|
||||||
|
|
||||||
|
SELECT: 'SELECT';
|
||||||
|
FROM: 'FROM';
|
||||||
|
ADD: 'ADD';
|
||||||
|
AS: 'AS';
|
||||||
|
ALL: 'ALL';
|
||||||
|
ANY: 'ANY';
|
||||||
|
DISTINCT: 'DISTINCT';
|
||||||
|
WHERE: 'WHERE';
|
||||||
|
GROUP: 'GROUP';
|
||||||
|
BY: 'BY';
|
||||||
|
GROUPING: 'GROUPING';
|
||||||
|
SETS: 'SETS';
|
||||||
|
CUBE: 'CUBE';
|
||||||
|
ROLLUP: 'ROLLUP';
|
||||||
|
ORDER: 'ORDER';
|
||||||
|
HAVING: 'HAVING';
|
||||||
|
LIMIT: 'LIMIT';
|
||||||
|
AT: 'AT';
|
||||||
|
OR: 'OR';
|
||||||
|
AND: 'AND';
|
||||||
|
IN: 'IN';
|
||||||
|
NOT: 'NOT';
|
||||||
|
NO: 'NO';
|
||||||
|
EXISTS: 'EXISTS';
|
||||||
|
BETWEEN: 'BETWEEN';
|
||||||
|
LIKE: 'LIKE';
|
||||||
|
RLIKE: 'RLIKE';
|
||||||
|
IS: 'IS';
|
||||||
|
TRUE: 'TRUE';
|
||||||
|
FALSE: 'FALSE';
|
||||||
|
NULLS: 'NULLS';
|
||||||
|
ASC: 'ASC';
|
||||||
|
DESC: 'DESC';
|
||||||
|
FOR: 'FOR';
|
||||||
|
INTERVAL: 'INTERVAL';
|
||||||
|
CASE: 'CASE';
|
||||||
|
WHEN: 'WHEN';
|
||||||
|
THEN: 'THEN';
|
||||||
|
ELSE: 'ELSE';
|
||||||
|
END: 'END';
|
||||||
|
JOIN: 'JOIN';
|
||||||
|
CROSS: 'CROSS';
|
||||||
|
OUTER: 'OUTER';
|
||||||
|
INNER: 'INNER';
|
||||||
|
LEFT: 'LEFT';
|
||||||
|
SEMI: 'SEMI';
|
||||||
|
RIGHT: 'RIGHT';
|
||||||
|
FULL: 'FULL';
|
||||||
|
NATURAL: 'NATURAL';
|
||||||
|
ON: 'ON';
|
||||||
|
PIVOT: 'PIVOT';
|
||||||
|
LATERAL: 'LATERAL';
|
||||||
|
WINDOW: 'WINDOW';
|
||||||
|
OVER: 'OVER';
|
||||||
|
PARTITION: 'PARTITION';
|
||||||
|
RANGE: 'RANGE';
|
||||||
|
ROWS: 'ROWS';
|
||||||
|
UNBOUNDED: 'UNBOUNDED';
|
||||||
|
PRECEDING: 'PRECEDING';
|
||||||
|
FOLLOWING: 'FOLLOWING';
|
||||||
|
CURRENT: 'CURRENT';
|
||||||
|
FIRST: 'FIRST';
|
||||||
|
AFTER: 'AFTER';
|
||||||
|
LAST: 'LAST';
|
||||||
|
WITH: 'WITH';
|
||||||
|
VALUES: 'VALUES';
|
||||||
|
CREATE: 'CREATE';
|
||||||
|
TABLE: 'TABLE';
|
||||||
|
DIRECTORY: 'DIRECTORY';
|
||||||
|
VIEW: 'VIEW';
|
||||||
|
REPLACE: 'REPLACE';
|
||||||
|
INSERT: 'INSERT';
|
||||||
|
DELETE: 'DELETE';
|
||||||
|
INTO: 'INTO';
|
||||||
|
DESCRIBE: 'DESCRIBE';
|
||||||
|
EXPLAIN: 'EXPLAIN';
|
||||||
|
FORMAT: 'FORMAT';
|
||||||
|
LOGICAL: 'LOGICAL';
|
||||||
|
CODEGEN: 'CODEGEN';
|
||||||
|
COST: 'COST';
|
||||||
|
CAST: 'CAST';
|
||||||
|
SHOW: 'SHOW';
|
||||||
|
TABLES: 'TABLES';
|
||||||
|
COLUMNS: 'COLUMNS';
|
||||||
|
COLUMN: 'COLUMN';
|
||||||
|
USE: 'USE';
|
||||||
|
PARTITIONS: 'PARTITIONS';
|
||||||
|
FUNCTIONS: 'FUNCTIONS';
|
||||||
|
DROP: 'DROP';
|
||||||
|
UNION: 'UNION';
|
||||||
|
EXCEPT: 'EXCEPT';
|
||||||
|
SETMINUS: 'SETMINUS';
|
||||||
|
INTERSECT: 'INTERSECT';
|
||||||
|
TO: 'TO';
|
||||||
|
TABLESAMPLE: 'TABLESAMPLE';
|
||||||
|
STRATIFY: 'STRATIFY';
|
||||||
|
ALTER: 'ALTER';
|
||||||
|
RENAME: 'RENAME';
|
||||||
|
STRUCT: 'STRUCT';
|
||||||
|
COMMENT: 'COMMENT';
|
||||||
|
SET: 'SET';
|
||||||
|
RESET: 'RESET';
|
||||||
|
DATA: 'DATA';
|
||||||
|
START: 'START';
|
||||||
|
TRANSACTION: 'TRANSACTION';
|
||||||
|
COMMIT: 'COMMIT';
|
||||||
|
ROLLBACK: 'ROLLBACK';
|
||||||
|
MACRO: 'MACRO';
|
||||||
|
IGNORE: 'IGNORE';
|
||||||
|
BOTH: 'BOTH';
|
||||||
|
LEADING: 'LEADING';
|
||||||
|
TRAILING: 'TRAILING';
|
||||||
|
IF: 'IF';
|
||||||
|
POSITION: 'POSITION';
|
||||||
|
EXTRACT: 'EXTRACT';
|
||||||
|
MINUS: 'MINUS';
|
||||||
|
DIV: 'DIV';
|
||||||
|
PERCENTLIT: 'PERCENTLIT';
|
||||||
|
BUCKET: 'BUCKET';
|
||||||
|
OUT: 'OUT';
|
||||||
|
OF: 'OF';
|
||||||
|
SORT: 'SORT';
|
||||||
|
CLUSTER: 'CLUSTER';
|
||||||
|
DISTRIBUTE: 'DISTRIBUTE';
|
||||||
|
OVERWRITE: 'OVERWRITE';
|
||||||
|
TRANSFORM: 'TRANSFORM';
|
||||||
|
REDUCE: 'REDUCE';
|
||||||
|
USING: 'USING';
|
||||||
|
SERDE: 'SERDE';
|
||||||
|
SERDEPROPERTIES: 'SERDEPROPERTIES';
|
||||||
|
RECORDREADER: 'RECORDREADER';
|
||||||
|
RECORDWRITER: 'RECORDWRITER';
|
||||||
|
DELIMITED: 'DELIMITED';
|
||||||
|
FIELDS: 'FIELDS';
|
||||||
|
TERMINATED: 'TERMINATED';
|
||||||
|
COLLECTION: 'COLLECTION';
|
||||||
|
ITEMS: 'ITEMS';
|
||||||
|
KEYS: 'KEYS';
|
||||||
|
ESCAPED: 'ESCAPED';
|
||||||
|
LINES: 'LINES';
|
||||||
|
SEPARATED: 'SEPARATED';
|
||||||
|
FUNCTION: 'FUNCTION';
|
||||||
|
EXTENDED: 'EXTENDED';
|
||||||
|
REFRESH: 'REFRESH';
|
||||||
|
CLEAR: 'CLEAR';
|
||||||
|
CACHE: 'CACHE';
|
||||||
|
UNCACHE: 'UNCACHE';
|
||||||
|
LAZY: 'LAZY';
|
||||||
|
FORMATTED: 'FORMATTED';
|
||||||
|
GLOBAL: 'GLOBAL';
|
||||||
|
TEMPORARY: 'TEMPORARY';
|
||||||
|
OPTIONS: 'OPTIONS';
|
||||||
|
UNSET: 'UNSET';
|
||||||
|
TBLPROPERTIES: 'TBLPROPERTIES';
|
||||||
|
DBPROPERTIES: 'DBPROPERTIES';
|
||||||
|
BUCKETS: 'BUCKETS';
|
||||||
|
SKEWED: 'SKEWED';
|
||||||
|
STORED: 'STORED';
|
||||||
|
DIRECTORIES: 'DIRECTORIES';
|
||||||
|
LOCATION: 'LOCATION';
|
||||||
|
EXCHANGE: 'EXCHANGE';
|
||||||
|
ARCHIVE: 'ARCHIVE';
|
||||||
|
UNARCHIVE: 'UNARCHIVE';
|
||||||
|
FILEFORMAT: 'FILEFORMAT';
|
||||||
|
TOUCH: 'TOUCH';
|
||||||
|
COMPACT: 'COMPACT';
|
||||||
|
CONCATENATE: 'CONCATENATE';
|
||||||
|
CHANGE: 'CHANGE';
|
||||||
|
CASCADE: 'CASCADE';
|
||||||
|
CONSTRAINT: 'CONSTRAINT';
|
||||||
|
RESTRICT: 'RESTRICT';
|
||||||
|
CLUSTERED: 'CLUSTERED';
|
||||||
|
SORTED: 'SORTED';
|
||||||
|
PURGE: 'PURGE';
|
||||||
|
INPUTFORMAT: 'INPUTFORMAT';
|
||||||
|
OUTPUTFORMAT: 'OUTPUTFORMAT';
|
||||||
|
DATABASE: 'DATABASE';
|
||||||
|
DATABASES: 'DATABASES';
|
||||||
|
DFS: 'DFS';
|
||||||
|
TRUNCATE: 'TRUNCATE';
|
||||||
|
ANALYZE: 'ANALYZE';
|
||||||
|
COMPUTE: 'COMPUTE';
|
||||||
|
LIST: 'LIST';
|
||||||
|
STATISTICS: 'STATISTICS';
|
||||||
|
PARTITIONED: 'PARTITIONED';
|
||||||
|
EXTERNAL: 'EXTERNAL';
|
||||||
|
DEFINED: 'DEFINED';
|
||||||
|
REVOKE: 'REVOKE';
|
||||||
|
GRANT: 'GRANT';
|
||||||
|
LOCK: 'LOCK';
|
||||||
|
UNLOCK: 'UNLOCK';
|
||||||
|
MSCK: 'MSCK';
|
||||||
|
REPAIR: 'REPAIR';
|
||||||
|
RECOVER: 'RECOVER';
|
||||||
|
EXPORT: 'EXPORT';
|
||||||
|
IMPORT: 'IMPORT';
|
||||||
|
LOAD: 'LOAD';
|
||||||
|
ROLE: 'ROLE';
|
||||||
|
ROLES: 'ROLES';
|
||||||
|
COMPACTIONS: 'COMPACTIONS';
|
||||||
|
PRINCIPALS: 'PRINCIPALS';
|
||||||
|
TRANSACTIONS: 'TRANSACTIONS';
|
||||||
|
INDEX: 'INDEX';
|
||||||
|
INDEXES: 'INDEXES';
|
||||||
|
LOCKS: 'LOCKS';
|
||||||
|
OPTION: 'OPTION';
|
||||||
|
ANTI: 'ANTI';
|
||||||
|
LOCAL: 'LOCAL';
|
||||||
|
INPATH: 'INPATH';
|
||||||
|
WATERMARK: 'WATERMARK';
|
||||||
|
UNNEST: 'UNNEST';
|
||||||
|
MATCH: 'MATCH';
|
||||||
|
NEXT: 'NEXT';
|
||||||
|
WITHIN: 'WITHIN';
|
||||||
|
WS: 'WS';
|
||||||
|
SYSTEM: 'SYSTEM';
|
||||||
|
INCLUDING: 'INCLUDING';
|
||||||
|
EXCLUDING: 'EXCLUDING';
|
||||||
|
CONSTRAINTS: 'CONSTRAINTS';
|
||||||
|
GENERATED: 'GENERATED';
|
||||||
|
CATALOG: 'CATALOG';
|
||||||
|
LANGUAGE: 'LANGUAGE';
|
||||||
|
CATALOGS: 'CATALOGS';
|
||||||
|
VIEWS: 'VIEWS';
|
||||||
|
PRIMARY: 'PRIMARY';
|
||||||
|
KEY: 'KEY';
|
||||||
|
PERIOD: 'PERIOD';
|
||||||
|
SYSTEM_TIME: 'SYSTEM_TIME';
|
||||||
|
|
||||||
|
|
||||||
|
// DATA TYPE Keywords
|
||||||
|
|
||||||
|
STRING: 'STRING';
|
||||||
|
ARRAY: 'ARRAY';
|
||||||
|
MAP: 'MAP';
|
||||||
|
CHAR: 'CHAR';
|
||||||
|
VARCHAR: 'VARCHAR';
|
||||||
|
BINARY: 'BINARY';
|
||||||
|
VARBINARY: 'VARBINARY';
|
||||||
|
BYTES: 'BYTES';
|
||||||
|
DECIMAL: 'DECIMAL';
|
||||||
|
TINYINT: 'TINYINT';
|
||||||
|
SMALLINT: 'SMALLINT';
|
||||||
|
INT: 'INT';
|
||||||
|
BIGINT: 'BIGINT';
|
||||||
|
FLOAT: 'FLOAT';
|
||||||
|
DOUBLE: 'DOUBLE';
|
||||||
|
DATE: 'DATE';
|
||||||
|
TIME: 'TIME';
|
||||||
|
TIMESTAMP: 'TIMESTAMP';
|
||||||
|
MULTISET: 'MULTISET';
|
||||||
|
BOOLEAN: 'BOOLEAN';
|
||||||
|
RAW: 'RAW';
|
||||||
|
ROW: 'ROW';
|
||||||
|
NULL: 'NULL';
|
||||||
|
DATETIME: 'DATETIME'; // 数栈自定义类型
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Operators. Comparation
|
||||||
|
|
||||||
|
EQUAL_SYMBOL: '=';
|
||||||
|
GREATER_SYMBOL: '>';
|
||||||
|
LESS_SYMBOL: '<';
|
||||||
|
EXCLAMATION_SYMBOL: '!';
|
||||||
|
|
||||||
|
|
||||||
|
// Operators. Bit
|
||||||
|
|
||||||
|
BIT_NOT_OP: '~';
|
||||||
|
BIT_OR_OP: '|';
|
||||||
|
BIT_AND_OP: '&';
|
||||||
|
BIT_XOR_OP: '^';
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors symbols
|
||||||
|
|
||||||
|
DOT: '.';
|
||||||
|
LS_BRACKET: '[';
|
||||||
|
RS_BRACKET: ']';
|
||||||
|
LR_BRACKET: '(';
|
||||||
|
RR_BRACKET: ')';
|
||||||
|
COMMA: ',';
|
||||||
|
SEMICOLON: ';';
|
||||||
|
AT_SIGN: '@';
|
||||||
|
SINGLE_QUOTE_SYMB: '\'';
|
||||||
|
DOUBLE_QUOTE_SYMB: '"';
|
||||||
|
REVERSE_QUOTE_SYMB: '`';
|
||||||
|
COLON_SYMB: ':';
|
||||||
|
ASTERISK_SIGN: '*';
|
||||||
|
UNDERLINE_SIGN: '_';
|
||||||
|
HYPNEN_SIGN: '-';
|
||||||
|
ADD_SIGN: '+';
|
||||||
|
PENCENT_SIGN: '%';
|
||||||
|
DOUBLE_VERTICAL_SIGN: '||';
|
||||||
|
DOUBLE_HYPNEN_SIGN: '--';
|
||||||
|
SLASH_SIGN: '/';
|
||||||
|
DOT_ID: '.' ID_LITERAL_FRAG;
|
||||||
|
PLUS_DOT_ID: (':' | '.') PLUS_ID_LITERAL;
|
||||||
|
STRING_LITERAL: DQUOTA_STRING | SQUOTA_STRING | BQUOTA_STRING;
|
||||||
|
DIG_LITERAL: DEC_DIGIT+;
|
||||||
|
REAL_LITERAL: (DEC_DIGIT+)? '.' DEC_DIGIT+
|
||||||
|
| DEC_DIGIT+ '.' EXPONENT_NUM_PART
|
||||||
|
| (DEC_DIGIT+)? '.' (DEC_DIGIT+ EXPONENT_NUM_PART)
|
||||||
|
| DEC_DIGIT+ EXPONENT_NUM_PART;
|
||||||
|
BIT_STRING: BIT_STRING_L;
|
||||||
|
ID_LITERAL: ID_LITERAL_FRAG;
|
||||||
|
PLUS_ID_LITERAL: PLUS_ID_LITERAL_FRAG;
|
||||||
|
|
||||||
|
fragment EXPONENT_NUM_PART: 'E' [-+]? DEC_DIGIT+;
|
||||||
|
fragment ID_LITERAL_FRAG: [A-Z_0-9a-z]*?[A-Z_a-z]+?[A-Z_0-9a-z]*;
|
||||||
|
fragment PLUS_ID_LITERAL_FRAG: [A-Z_0-9a-z*@#^$%&{}]*?[A-Z_a-z*@#^$%&{}]+?[A-Z_0-9a-z*@#^$%&{}]*;
|
||||||
|
fragment DEC_DIGIT: [0-9];
|
||||||
|
fragment DEC_LETTER: [A-Za-z];
|
||||||
|
fragment DQUOTA_STRING: '"' ( '\\'. | '""' | ~('"'| '\\') )* '"';
|
||||||
|
fragment SQUOTA_STRING: '\'' ('\\'. | '\'\'' | ~('\'' | '\\'))* '\'';
|
||||||
|
fragment BIT_STRING_L: 'B' '\'' [01]+ '\'';
|
||||||
|
fragment BQUOTA_STRING: '`' ( '\\'. | '``' | ~('`'|'\\'))* '`';
|
1044
src/grammar/flinksql/FlinkSqlParser.g4
Normal file
1044
src/grammar/flinksql/FlinkSqlParser.g4
Normal file
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,9 @@
|
|||||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
(the "License"); you may not use this file except in compliance with
|
(the "License"); you may not use this file except in compliance with
|
||||||
the License. You may obtain a copy of the License at
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
Unless required by applicable law or agreed to in writing, software
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
@ -13,14 +15,17 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// HPL/SQL Procedural SQL Extension Grammar
|
parser grammar HiveSql;
|
||||||
grammar HiveSql;
|
|
||||||
|
|
||||||
options {
|
options {
|
||||||
tokenVocab=HiveSqlLexer;
|
tokenVocab=HiveSqlLexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
program: block EOF;
|
@parser::members {
|
||||||
|
this._input = input;
|
||||||
|
}
|
||||||
|
|
||||||
|
program : block EOF;
|
||||||
|
|
||||||
block : ((begin_end_block | stmt) T_GO?)+ ; // Multiple consecutive blocks/statements
|
block : ((begin_end_block | stmt) T_GO?)+ ; // Multiple consecutive blocks/statements
|
||||||
|
|
||||||
@ -34,7 +39,7 @@ single_block_stmt : // Single BEGIN END blo
|
|||||||
;
|
;
|
||||||
|
|
||||||
block_end :
|
block_end :
|
||||||
{!this._input.LT(2).getText().equalsIgnoreCase("TRANSACTION")}? T_END
|
{!this._input.LT(2).text.toUpperCase() === "TRANSACTION"}? T_END
|
||||||
;
|
;
|
||||||
|
|
||||||
proc_block :
|
proc_block :
|
||||||
@ -108,7 +113,7 @@ stmt :
|
|||||||
|
|
||||||
semicolon_stmt :
|
semicolon_stmt :
|
||||||
T_SEMICOLON
|
T_SEMICOLON
|
||||||
| '@' | '#' | '/'
|
| T_CALLS | T_SHARP | T_DIV
|
||||||
;
|
;
|
||||||
|
|
||||||
exception_block : // Exception block
|
exception_block : // Exception block
|
||||||
@ -124,7 +129,7 @@ null_stmt : // NULL statement (no operation)
|
|||||||
;
|
;
|
||||||
|
|
||||||
expr_stmt : // Standalone expression
|
expr_stmt : // Standalone expression
|
||||||
{!this._input.LT(1).getText().equalsIgnoreCase("GO")}? expr
|
{this._input.LT(1).text.toUpperCase() !== "GO"}? expr
|
||||||
;
|
;
|
||||||
|
|
||||||
assignment_stmt : // Assignment statement
|
assignment_stmt : // Assignment statement
|
||||||
@ -229,7 +234,7 @@ create_local_temp_table_stmt :
|
|||||||
;
|
;
|
||||||
|
|
||||||
create_table_definition :
|
create_table_definition :
|
||||||
(T_AS? T_OPEN_P select_stmt T_CLOSE_P | T_AS? select_stmt | T_OPEN_P create_table_columns T_CLOSE_P | T_LIKE table_name) create_table_options?
|
(T_AS? T_OPEN_P select_stmt T_CLOSE_P | T_AS? select_stmt | T_OPEN_P create_table_columns T_CLOSE_P) create_table_options?
|
||||||
;
|
;
|
||||||
|
|
||||||
create_table_columns :
|
create_table_columns :
|
||||||
@ -365,7 +370,6 @@ alter_table_add_constraint_item :
|
|||||||
|
|
||||||
dtype : // Data types
|
dtype : // Data types
|
||||||
T_CHAR
|
T_CHAR
|
||||||
| T_CHARACTER
|
|
||||||
| T_BIGINT
|
| T_BIGINT
|
||||||
| T_BINARY_DOUBLE
|
| T_BINARY_DOUBLE
|
||||||
| T_BINARY_FLOAT
|
| T_BINARY_FLOAT
|
||||||
@ -401,7 +405,7 @@ dtype : // Data types
|
|||||||
| T_VARCHAR
|
| T_VARCHAR
|
||||||
| T_VARCHAR2
|
| T_VARCHAR2
|
||||||
| T_XML
|
| T_XML
|
||||||
| ident ('%' (T_TYPE | T_ROWTYPE))? // User-defined or derived data type
|
| ident (T_PRECENT (T_TYPE | T_ROWTYPE))? // User-defined or derived data type
|
||||||
;
|
;
|
||||||
|
|
||||||
dtype_len : // Data type length or size specification
|
dtype_len : // Data type length or size specification
|
||||||
@ -471,9 +475,9 @@ create_procedure_stmt :
|
|||||||
create_routine_params :
|
create_routine_params :
|
||||||
T_OPEN_P T_CLOSE_P
|
T_OPEN_P T_CLOSE_P
|
||||||
| T_OPEN_P create_routine_param_item (T_COMMA create_routine_param_item)* T_CLOSE_P
|
| T_OPEN_P create_routine_param_item (T_COMMA create_routine_param_item)* T_CLOSE_P
|
||||||
| {!this._input.LT(1).getText().equalsIgnoreCase("IS") &&
|
| {this._input.LT(1).text.toUpperCase() !== "IS" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("AS") &&
|
this._input.LT(1).text.toUpperCase() !== "AS" &&
|
||||||
!(this._input.LT(1).getText().equalsIgnoreCase("DYNAMIC") && this._input.LT(2).getText().equalsIgnoreCase("RESULT"))
|
!(this._input.LT(1).text.toUpperCase() ==="DYNAMIC" && this._input.LT(2).text.toUpperCase() === "RESULT")
|
||||||
}?
|
}?
|
||||||
create_routine_param_item (T_COMMA create_routine_param_item)*
|
create_routine_param_item (T_COMMA create_routine_param_item)*
|
||||||
;
|
;
|
||||||
@ -520,7 +524,7 @@ if_tsql_stmt :
|
|||||||
;
|
;
|
||||||
|
|
||||||
if_bteq_stmt :
|
if_bteq_stmt :
|
||||||
'.' T_IF bool_expr T_THEN single_block_stmt
|
T_DOT T_IF bool_expr T_THEN single_block_stmt
|
||||||
;
|
;
|
||||||
|
|
||||||
elseif_block :
|
elseif_block :
|
||||||
@ -675,7 +679,7 @@ print_stmt : // PRINT statement
|
|||||||
;
|
;
|
||||||
|
|
||||||
quit_stmt :
|
quit_stmt :
|
||||||
'.'? T_QUIT expr?
|
T_DOT? T_QUIT expr?
|
||||||
;
|
;
|
||||||
|
|
||||||
raise_stmt :
|
raise_stmt :
|
||||||
@ -811,7 +815,7 @@ select_list_item :
|
|||||||
;
|
;
|
||||||
|
|
||||||
select_list_alias :
|
select_list_alias :
|
||||||
{!this._input.LT(1).getText().equalsIgnoreCase("INTO") && !this._input.LT(1).getText().equalsIgnoreCase("FROM")}? T_AS? ident
|
{this._input.LT(1).text.toUpperCase() !== "INTO" && this._input.LT(1).text.toUpperCase() !== "FROM"}? T_AS? ident
|
||||||
| T_OPEN_P T_TITLE L_S_STRING T_CLOSE_P
|
| T_OPEN_P T_TITLE L_S_STRING T_CLOSE_P
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -861,14 +865,15 @@ from_table_values_row:
|
|||||||
;
|
;
|
||||||
|
|
||||||
from_alias_clause :
|
from_alias_clause :
|
||||||
{!this._input.LT(1).getText().equalsIgnoreCase("EXEC") &&
|
{this._input.LT(1).text.toUpperCase() !== "EXEC" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("EXECUTE") &&
|
this._input.LT(1).text.toUpperCase() !== "EXECUTE" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("INNER") &&
|
this._input.LT(1).text.toUpperCase() !== "INNER" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("LEFT") &&
|
this._input.LT(1).text.toUpperCase() !== "LEFT" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("GROUP") &&
|
this._input.LT(1).text.toUpperCase() !== "GROUP" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("ORDER") &&
|
this._input.LT(1).text.toUpperCase() !== "ORDER" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("LIMIT") &&
|
this._input.LT(1).text.toUpperCase() !== "LIMIT" &&
|
||||||
!this._input.LT(1).getText().equalsIgnoreCase("WITH")}?
|
this._input.LT(1).text.toUpperCase() !== "WITH" &&
|
||||||
|
this._input.LT(1).text.toUpperCase() !== "JOIN"}?
|
||||||
T_AS? ident (T_OPEN_P L_ID (T_COMMA L_ID)* T_CLOSE_P)?
|
T_AS? ident (T_OPEN_P L_ID (T_COMMA L_ID)* T_CLOSE_P)?
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -945,7 +950,7 @@ delete_stmt :
|
|||||||
;
|
;
|
||||||
|
|
||||||
delete_alias :
|
delete_alias :
|
||||||
{!this._input.LT(1).getText().equalsIgnoreCase("ALL")}?
|
{this._input.LT(1).text.toUpperCase() !== "ALL"}?
|
||||||
T_AS? ident
|
T_AS? ident
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1070,7 +1075,7 @@ expr_case_searched :
|
|||||||
;
|
;
|
||||||
|
|
||||||
expr_cursor_attribute :
|
expr_cursor_attribute :
|
||||||
ident '%' (T_ISOPEN | T_FOUND | T_NOTFOUND)
|
ident T_PRECENT (T_ISOPEN | T_FOUND | T_NOTFOUND)
|
||||||
;
|
;
|
||||||
|
|
||||||
expr_agg_window_func :
|
expr_agg_window_func :
|
||||||
@ -1136,7 +1141,7 @@ expr_func_params :
|
|||||||
;
|
;
|
||||||
|
|
||||||
func_param :
|
func_param :
|
||||||
{!this._input.LT(1).getText().equalsIgnoreCase("INTO")}? (ident T_EQUAL T_GREATER?)? expr
|
{this._input.LT(1).text.toUpperCase() !== "INTO"}? (ident T_EQUAL T_GREATER?)? expr
|
||||||
;
|
;
|
||||||
|
|
||||||
expr_select :
|
expr_select :
|
||||||
@ -1160,7 +1165,7 @@ hive_item :
|
|||||||
;
|
;
|
||||||
|
|
||||||
host :
|
host :
|
||||||
'!' host_cmd ';' // OS command
|
T_NOTE host_cmd ';' // OS command
|
||||||
| host_stmt
|
| host_stmt
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1173,7 +1178,7 @@ host_stmt :
|
|||||||
;
|
;
|
||||||
|
|
||||||
file_name :
|
file_name :
|
||||||
L_FILE | ('/' | '.' '/')? ident ('/' ident)*
|
L_FILE | ('/' | T_DOT '/')? ident ('/' ident)*
|
||||||
;
|
;
|
||||||
|
|
||||||
date_literal : // DATE 'YYYY-MM-DD' literal
|
date_literal : // DATE 'YYYY-MM-DD' literal
|
||||||
@ -1185,7 +1190,7 @@ timestamp_literal : // TIMESTAMP 'YYYY-MM-DD HH:MI:SS.FFF'
|
|||||||
;
|
;
|
||||||
|
|
||||||
ident :
|
ident :
|
||||||
'-'? (L_ID | non_reserved_words) ('.' (L_ID | non_reserved_words))*
|
(L_ID | non_reserved_words) (T_DOT (L_ID | non_reserved_words))*
|
||||||
;
|
;
|
||||||
|
|
||||||
string : // String literal (single or double quoted)
|
string : // String literal (single or double quoted)
|
||||||
@ -1538,3 +1543,4 @@ non_reserved_words : // Tokens that are not reserved words
|
|||||||
| T_XML
|
| T_XML
|
||||||
| T_YES
|
| T_YES
|
||||||
;
|
;
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
lexer grammar HiveSqlLexer;
|
lexer grammar HiveSqlLexer;
|
||||||
|
|
||||||
// Lexer rules
|
// Lexer rules
|
||||||
@ -347,9 +348,12 @@ T_COLON : ':' ;
|
|||||||
T_COMMA : ',' ;
|
T_COMMA : ',' ;
|
||||||
T_PIPE : '||' ;
|
T_PIPE : '||' ;
|
||||||
T_DIV : '/' ;
|
T_DIV : '/' ;
|
||||||
|
T_DOT : '.' ;
|
||||||
T_DOT2 : '..' ;
|
T_DOT2 : '..' ;
|
||||||
T_EQUAL : '=' ;
|
T_EQUAL : '=' ;
|
||||||
T_EQUAL2 : '==' ;
|
T_EQUAL2 : '==' ;
|
||||||
|
T_SHARP : '#' ;
|
||||||
|
T_NOTE : '!' ;
|
||||||
T_NOTEQUAL : '<>' ;
|
T_NOTEQUAL : '<>' ;
|
||||||
T_NOTEQUAL2 : '!=' ;
|
T_NOTEQUAL2 : '!=' ;
|
||||||
T_GREATER : '>' ;
|
T_GREATER : '>' ;
|
||||||
@ -357,6 +361,8 @@ T_GREATEREQUAL : '>=' ;
|
|||||||
T_LESS : '<' ;
|
T_LESS : '<' ;
|
||||||
T_LESSEQUAL : '<=' ;
|
T_LESSEQUAL : '<=' ;
|
||||||
T_MUL : '*' ;
|
T_MUL : '*' ;
|
||||||
|
T_PRECENT : '%' ;
|
||||||
|
T_CALLS : '@' ;
|
||||||
T_OPEN_B : '{' ;
|
T_OPEN_B : '{' ;
|
||||||
T_OPEN_P : '(' ;
|
T_OPEN_P : '(' ;
|
||||||
T_OPEN_SB : '[' ;
|
T_OPEN_SB : '[' ;
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
# Hive SQL Grammar
|
|
||||||
|
|
||||||
Source file from [Hive Github](https://github.com/apache/hive/tree/master/hplsql/src/main/antlr4/org/apache/hive/hplsql)
|
|
899
src/lib/flinksql/FlinkSqlLexer.interp
Normal file
899
src/lib/flinksql/FlinkSqlLexer.interp
Normal file
File diff suppressed because one or more lines are too long
2314
src/lib/flinksql/FlinkSqlLexer.js
Normal file
2314
src/lib/flinksql/FlinkSqlLexer.js
Normal file
File diff suppressed because it is too large
Load Diff
571
src/lib/flinksql/FlinkSqlLexer.tokens
Normal file
571
src/lib/flinksql/FlinkSqlLexer.tokens
Normal file
@ -0,0 +1,571 @@
|
|||||||
|
SPACE=1
|
||||||
|
COMMENT_INPUT=2
|
||||||
|
LINE_COMMENT=3
|
||||||
|
SELECT=4
|
||||||
|
FROM=5
|
||||||
|
ADD=6
|
||||||
|
AS=7
|
||||||
|
ALL=8
|
||||||
|
ANY=9
|
||||||
|
DISTINCT=10
|
||||||
|
WHERE=11
|
||||||
|
GROUP=12
|
||||||
|
BY=13
|
||||||
|
GROUPING=14
|
||||||
|
SETS=15
|
||||||
|
CUBE=16
|
||||||
|
ROLLUP=17
|
||||||
|
ORDER=18
|
||||||
|
HAVING=19
|
||||||
|
LIMIT=20
|
||||||
|
AT=21
|
||||||
|
OR=22
|
||||||
|
AND=23
|
||||||
|
IN=24
|
||||||
|
NOT=25
|
||||||
|
NO=26
|
||||||
|
EXISTS=27
|
||||||
|
BETWEEN=28
|
||||||
|
LIKE=29
|
||||||
|
RLIKE=30
|
||||||
|
IS=31
|
||||||
|
TRUE=32
|
||||||
|
FALSE=33
|
||||||
|
NULLS=34
|
||||||
|
ASC=35
|
||||||
|
DESC=36
|
||||||
|
FOR=37
|
||||||
|
INTERVAL=38
|
||||||
|
CASE=39
|
||||||
|
WHEN=40
|
||||||
|
THEN=41
|
||||||
|
ELSE=42
|
||||||
|
END=43
|
||||||
|
JOIN=44
|
||||||
|
CROSS=45
|
||||||
|
OUTER=46
|
||||||
|
INNER=47
|
||||||
|
LEFT=48
|
||||||
|
SEMI=49
|
||||||
|
RIGHT=50
|
||||||
|
FULL=51
|
||||||
|
NATURAL=52
|
||||||
|
ON=53
|
||||||
|
PIVOT=54
|
||||||
|
LATERAL=55
|
||||||
|
WINDOW=56
|
||||||
|
OVER=57
|
||||||
|
PARTITION=58
|
||||||
|
RANGE=59
|
||||||
|
ROWS=60
|
||||||
|
UNBOUNDED=61
|
||||||
|
PRECEDING=62
|
||||||
|
FOLLOWING=63
|
||||||
|
CURRENT=64
|
||||||
|
FIRST=65
|
||||||
|
AFTER=66
|
||||||
|
LAST=67
|
||||||
|
WITH=68
|
||||||
|
VALUES=69
|
||||||
|
CREATE=70
|
||||||
|
TABLE=71
|
||||||
|
DIRECTORY=72
|
||||||
|
VIEW=73
|
||||||
|
REPLACE=74
|
||||||
|
INSERT=75
|
||||||
|
DELETE=76
|
||||||
|
INTO=77
|
||||||
|
DESCRIBE=78
|
||||||
|
EXPLAIN=79
|
||||||
|
FORMAT=80
|
||||||
|
LOGICAL=81
|
||||||
|
CODEGEN=82
|
||||||
|
COST=83
|
||||||
|
CAST=84
|
||||||
|
SHOW=85
|
||||||
|
TABLES=86
|
||||||
|
COLUMNS=87
|
||||||
|
COLUMN=88
|
||||||
|
USE=89
|
||||||
|
PARTITIONS=90
|
||||||
|
FUNCTIONS=91
|
||||||
|
DROP=92
|
||||||
|
UNION=93
|
||||||
|
EXCEPT=94
|
||||||
|
SETMINUS=95
|
||||||
|
INTERSECT=96
|
||||||
|
TO=97
|
||||||
|
TABLESAMPLE=98
|
||||||
|
STRATIFY=99
|
||||||
|
ALTER=100
|
||||||
|
RENAME=101
|
||||||
|
STRUCT=102
|
||||||
|
COMMENT=103
|
||||||
|
SET=104
|
||||||
|
RESET=105
|
||||||
|
DATA=106
|
||||||
|
START=107
|
||||||
|
TRANSACTION=108
|
||||||
|
COMMIT=109
|
||||||
|
ROLLBACK=110
|
||||||
|
MACRO=111
|
||||||
|
IGNORE=112
|
||||||
|
BOTH=113
|
||||||
|
LEADING=114
|
||||||
|
TRAILING=115
|
||||||
|
IF=116
|
||||||
|
POSITION=117
|
||||||
|
EXTRACT=118
|
||||||
|
MINUS=119
|
||||||
|
DIV=120
|
||||||
|
PERCENTLIT=121
|
||||||
|
BUCKET=122
|
||||||
|
OUT=123
|
||||||
|
OF=124
|
||||||
|
SORT=125
|
||||||
|
CLUSTER=126
|
||||||
|
DISTRIBUTE=127
|
||||||
|
OVERWRITE=128
|
||||||
|
TRANSFORM=129
|
||||||
|
REDUCE=130
|
||||||
|
USING=131
|
||||||
|
SERDE=132
|
||||||
|
SERDEPROPERTIES=133
|
||||||
|
RECORDREADER=134
|
||||||
|
RECORDWRITER=135
|
||||||
|
DELIMITED=136
|
||||||
|
FIELDS=137
|
||||||
|
TERMINATED=138
|
||||||
|
COLLECTION=139
|
||||||
|
ITEMS=140
|
||||||
|
KEYS=141
|
||||||
|
ESCAPED=142
|
||||||
|
LINES=143
|
||||||
|
SEPARATED=144
|
||||||
|
FUNCTION=145
|
||||||
|
EXTENDED=146
|
||||||
|
REFRESH=147
|
||||||
|
CLEAR=148
|
||||||
|
CACHE=149
|
||||||
|
UNCACHE=150
|
||||||
|
LAZY=151
|
||||||
|
FORMATTED=152
|
||||||
|
GLOBAL=153
|
||||||
|
TEMPORARY=154
|
||||||
|
OPTIONS=155
|
||||||
|
UNSET=156
|
||||||
|
TBLPROPERTIES=157
|
||||||
|
DBPROPERTIES=158
|
||||||
|
BUCKETS=159
|
||||||
|
SKEWED=160
|
||||||
|
STORED=161
|
||||||
|
DIRECTORIES=162
|
||||||
|
LOCATION=163
|
||||||
|
EXCHANGE=164
|
||||||
|
ARCHIVE=165
|
||||||
|
UNARCHIVE=166
|
||||||
|
FILEFORMAT=167
|
||||||
|
TOUCH=168
|
||||||
|
COMPACT=169
|
||||||
|
CONCATENATE=170
|
||||||
|
CHANGE=171
|
||||||
|
CASCADE=172
|
||||||
|
CONSTRAINT=173
|
||||||
|
RESTRICT=174
|
||||||
|
CLUSTERED=175
|
||||||
|
SORTED=176
|
||||||
|
PURGE=177
|
||||||
|
INPUTFORMAT=178
|
||||||
|
OUTPUTFORMAT=179
|
||||||
|
DATABASE=180
|
||||||
|
DATABASES=181
|
||||||
|
DFS=182
|
||||||
|
TRUNCATE=183
|
||||||
|
ANALYZE=184
|
||||||
|
COMPUTE=185
|
||||||
|
LIST=186
|
||||||
|
STATISTICS=187
|
||||||
|
PARTITIONED=188
|
||||||
|
EXTERNAL=189
|
||||||
|
DEFINED=190
|
||||||
|
REVOKE=191
|
||||||
|
GRANT=192
|
||||||
|
LOCK=193
|
||||||
|
UNLOCK=194
|
||||||
|
MSCK=195
|
||||||
|
REPAIR=196
|
||||||
|
RECOVER=197
|
||||||
|
EXPORT=198
|
||||||
|
IMPORT=199
|
||||||
|
LOAD=200
|
||||||
|
ROLE=201
|
||||||
|
ROLES=202
|
||||||
|
COMPACTIONS=203
|
||||||
|
PRINCIPALS=204
|
||||||
|
TRANSACTIONS=205
|
||||||
|
INDEX=206
|
||||||
|
INDEXES=207
|
||||||
|
LOCKS=208
|
||||||
|
OPTION=209
|
||||||
|
ANTI=210
|
||||||
|
LOCAL=211
|
||||||
|
INPATH=212
|
||||||
|
WATERMARK=213
|
||||||
|
UNNEST=214
|
||||||
|
MATCH=215
|
||||||
|
NEXT=216
|
||||||
|
WITHIN=217
|
||||||
|
WS=218
|
||||||
|
SYSTEM=219
|
||||||
|
INCLUDING=220
|
||||||
|
EXCLUDING=221
|
||||||
|
CONSTRAINTS=222
|
||||||
|
GENERATED=223
|
||||||
|
CATALOG=224
|
||||||
|
LANGUAGE=225
|
||||||
|
CATALOGS=226
|
||||||
|
VIEWS=227
|
||||||
|
PRIMARY=228
|
||||||
|
KEY=229
|
||||||
|
PERIOD=230
|
||||||
|
SYSTEM_TIME=231
|
||||||
|
STRING=232
|
||||||
|
ARRAY=233
|
||||||
|
MAP=234
|
||||||
|
CHAR=235
|
||||||
|
VARCHAR=236
|
||||||
|
BINARY=237
|
||||||
|
VARBINARY=238
|
||||||
|
BYTES=239
|
||||||
|
DECIMAL=240
|
||||||
|
TINYINT=241
|
||||||
|
SMALLINT=242
|
||||||
|
INT=243
|
||||||
|
BIGINT=244
|
||||||
|
FLOAT=245
|
||||||
|
DOUBLE=246
|
||||||
|
DATE=247
|
||||||
|
TIME=248
|
||||||
|
TIMESTAMP=249
|
||||||
|
MULTISET=250
|
||||||
|
BOOLEAN=251
|
||||||
|
RAW=252
|
||||||
|
ROW=253
|
||||||
|
NULL=254
|
||||||
|
DATETIME=255
|
||||||
|
EQUAL_SYMBOL=256
|
||||||
|
GREATER_SYMBOL=257
|
||||||
|
LESS_SYMBOL=258
|
||||||
|
EXCLAMATION_SYMBOL=259
|
||||||
|
BIT_NOT_OP=260
|
||||||
|
BIT_OR_OP=261
|
||||||
|
BIT_AND_OP=262
|
||||||
|
BIT_XOR_OP=263
|
||||||
|
DOT=264
|
||||||
|
LS_BRACKET=265
|
||||||
|
RS_BRACKET=266
|
||||||
|
LR_BRACKET=267
|
||||||
|
RR_BRACKET=268
|
||||||
|
COMMA=269
|
||||||
|
SEMICOLON=270
|
||||||
|
AT_SIGN=271
|
||||||
|
SINGLE_QUOTE_SYMB=272
|
||||||
|
DOUBLE_QUOTE_SYMB=273
|
||||||
|
REVERSE_QUOTE_SYMB=274
|
||||||
|
COLON_SYMB=275
|
||||||
|
ASTERISK_SIGN=276
|
||||||
|
UNDERLINE_SIGN=277
|
||||||
|
HYPNEN_SIGN=278
|
||||||
|
ADD_SIGN=279
|
||||||
|
PENCENT_SIGN=280
|
||||||
|
DOUBLE_VERTICAL_SIGN=281
|
||||||
|
DOUBLE_HYPNEN_SIGN=282
|
||||||
|
SLASH_SIGN=283
|
||||||
|
DOT_ID=284
|
||||||
|
PLUS_DOT_ID=285
|
||||||
|
STRING_LITERAL=286
|
||||||
|
DIG_LITERAL=287
|
||||||
|
REAL_LITERAL=288
|
||||||
|
BIT_STRING=289
|
||||||
|
ID_LITERAL=290
|
||||||
|
PLUS_ID_LITERAL=291
|
||||||
|
'SELECT'=4
|
||||||
|
'FROM'=5
|
||||||
|
'ADD'=6
|
||||||
|
'AS'=7
|
||||||
|
'ALL'=8
|
||||||
|
'ANY'=9
|
||||||
|
'DISTINCT'=10
|
||||||
|
'WHERE'=11
|
||||||
|
'GROUP'=12
|
||||||
|
'BY'=13
|
||||||
|
'GROUPING'=14
|
||||||
|
'SETS'=15
|
||||||
|
'CUBE'=16
|
||||||
|
'ROLLUP'=17
|
||||||
|
'ORDER'=18
|
||||||
|
'HAVING'=19
|
||||||
|
'LIMIT'=20
|
||||||
|
'AT'=21
|
||||||
|
'OR'=22
|
||||||
|
'AND'=23
|
||||||
|
'IN'=24
|
||||||
|
'NOT'=25
|
||||||
|
'NO'=26
|
||||||
|
'EXISTS'=27
|
||||||
|
'BETWEEN'=28
|
||||||
|
'LIKE'=29
|
||||||
|
'RLIKE'=30
|
||||||
|
'IS'=31
|
||||||
|
'TRUE'=32
|
||||||
|
'FALSE'=33
|
||||||
|
'NULLS'=34
|
||||||
|
'ASC'=35
|
||||||
|
'DESC'=36
|
||||||
|
'FOR'=37
|
||||||
|
'INTERVAL'=38
|
||||||
|
'CASE'=39
|
||||||
|
'WHEN'=40
|
||||||
|
'THEN'=41
|
||||||
|
'ELSE'=42
|
||||||
|
'END'=43
|
||||||
|
'JOIN'=44
|
||||||
|
'CROSS'=45
|
||||||
|
'OUTER'=46
|
||||||
|
'INNER'=47
|
||||||
|
'LEFT'=48
|
||||||
|
'SEMI'=49
|
||||||
|
'RIGHT'=50
|
||||||
|
'FULL'=51
|
||||||
|
'NATURAL'=52
|
||||||
|
'ON'=53
|
||||||
|
'PIVOT'=54
|
||||||
|
'LATERAL'=55
|
||||||
|
'WINDOW'=56
|
||||||
|
'OVER'=57
|
||||||
|
'PARTITION'=58
|
||||||
|
'RANGE'=59
|
||||||
|
'ROWS'=60
|
||||||
|
'UNBOUNDED'=61
|
||||||
|
'PRECEDING'=62
|
||||||
|
'FOLLOWING'=63
|
||||||
|
'CURRENT'=64
|
||||||
|
'FIRST'=65
|
||||||
|
'AFTER'=66
|
||||||
|
'LAST'=67
|
||||||
|
'WITH'=68
|
||||||
|
'VALUES'=69
|
||||||
|
'CREATE'=70
|
||||||
|
'TABLE'=71
|
||||||
|
'DIRECTORY'=72
|
||||||
|
'VIEW'=73
|
||||||
|
'REPLACE'=74
|
||||||
|
'INSERT'=75
|
||||||
|
'DELETE'=76
|
||||||
|
'INTO'=77
|
||||||
|
'DESCRIBE'=78
|
||||||
|
'EXPLAIN'=79
|
||||||
|
'FORMAT'=80
|
||||||
|
'LOGICAL'=81
|
||||||
|
'CODEGEN'=82
|
||||||
|
'COST'=83
|
||||||
|
'CAST'=84
|
||||||
|
'SHOW'=85
|
||||||
|
'TABLES'=86
|
||||||
|
'COLUMNS'=87
|
||||||
|
'COLUMN'=88
|
||||||
|
'USE'=89
|
||||||
|
'PARTITIONS'=90
|
||||||
|
'FUNCTIONS'=91
|
||||||
|
'DROP'=92
|
||||||
|
'UNION'=93
|
||||||
|
'EXCEPT'=94
|
||||||
|
'SETMINUS'=95
|
||||||
|
'INTERSECT'=96
|
||||||
|
'TO'=97
|
||||||
|
'TABLESAMPLE'=98
|
||||||
|
'STRATIFY'=99
|
||||||
|
'ALTER'=100
|
||||||
|
'RENAME'=101
|
||||||
|
'STRUCT'=102
|
||||||
|
'COMMENT'=103
|
||||||
|
'SET'=104
|
||||||
|
'RESET'=105
|
||||||
|
'DATA'=106
|
||||||
|
'START'=107
|
||||||
|
'TRANSACTION'=108
|
||||||
|
'COMMIT'=109
|
||||||
|
'ROLLBACK'=110
|
||||||
|
'MACRO'=111
|
||||||
|
'IGNORE'=112
|
||||||
|
'BOTH'=113
|
||||||
|
'LEADING'=114
|
||||||
|
'TRAILING'=115
|
||||||
|
'IF'=116
|
||||||
|
'POSITION'=117
|
||||||
|
'EXTRACT'=118
|
||||||
|
'MINUS'=119
|
||||||
|
'DIV'=120
|
||||||
|
'PERCENTLIT'=121
|
||||||
|
'BUCKET'=122
|
||||||
|
'OUT'=123
|
||||||
|
'OF'=124
|
||||||
|
'SORT'=125
|
||||||
|
'CLUSTER'=126
|
||||||
|
'DISTRIBUTE'=127
|
||||||
|
'OVERWRITE'=128
|
||||||
|
'TRANSFORM'=129
|
||||||
|
'REDUCE'=130
|
||||||
|
'USING'=131
|
||||||
|
'SERDE'=132
|
||||||
|
'SERDEPROPERTIES'=133
|
||||||
|
'RECORDREADER'=134
|
||||||
|
'RECORDWRITER'=135
|
||||||
|
'DELIMITED'=136
|
||||||
|
'FIELDS'=137
|
||||||
|
'TERMINATED'=138
|
||||||
|
'COLLECTION'=139
|
||||||
|
'ITEMS'=140
|
||||||
|
'KEYS'=141
|
||||||
|
'ESCAPED'=142
|
||||||
|
'LINES'=143
|
||||||
|
'SEPARATED'=144
|
||||||
|
'FUNCTION'=145
|
||||||
|
'EXTENDED'=146
|
||||||
|
'REFRESH'=147
|
||||||
|
'CLEAR'=148
|
||||||
|
'CACHE'=149
|
||||||
|
'UNCACHE'=150
|
||||||
|
'LAZY'=151
|
||||||
|
'FORMATTED'=152
|
||||||
|
'GLOBAL'=153
|
||||||
|
'TEMPORARY'=154
|
||||||
|
'OPTIONS'=155
|
||||||
|
'UNSET'=156
|
||||||
|
'TBLPROPERTIES'=157
|
||||||
|
'DBPROPERTIES'=158
|
||||||
|
'BUCKETS'=159
|
||||||
|
'SKEWED'=160
|
||||||
|
'STORED'=161
|
||||||
|
'DIRECTORIES'=162
|
||||||
|
'LOCATION'=163
|
||||||
|
'EXCHANGE'=164
|
||||||
|
'ARCHIVE'=165
|
||||||
|
'UNARCHIVE'=166
|
||||||
|
'FILEFORMAT'=167
|
||||||
|
'TOUCH'=168
|
||||||
|
'COMPACT'=169
|
||||||
|
'CONCATENATE'=170
|
||||||
|
'CHANGE'=171
|
||||||
|
'CASCADE'=172
|
||||||
|
'CONSTRAINT'=173
|
||||||
|
'RESTRICT'=174
|
||||||
|
'CLUSTERED'=175
|
||||||
|
'SORTED'=176
|
||||||
|
'PURGE'=177
|
||||||
|
'INPUTFORMAT'=178
|
||||||
|
'OUTPUTFORMAT'=179
|
||||||
|
'DATABASE'=180
|
||||||
|
'DATABASES'=181
|
||||||
|
'DFS'=182
|
||||||
|
'TRUNCATE'=183
|
||||||
|
'ANALYZE'=184
|
||||||
|
'COMPUTE'=185
|
||||||
|
'LIST'=186
|
||||||
|
'STATISTICS'=187
|
||||||
|
'PARTITIONED'=188
|
||||||
|
'EXTERNAL'=189
|
||||||
|
'DEFINED'=190
|
||||||
|
'REVOKE'=191
|
||||||
|
'GRANT'=192
|
||||||
|
'LOCK'=193
|
||||||
|
'UNLOCK'=194
|
||||||
|
'MSCK'=195
|
||||||
|
'REPAIR'=196
|
||||||
|
'RECOVER'=197
|
||||||
|
'EXPORT'=198
|
||||||
|
'IMPORT'=199
|
||||||
|
'LOAD'=200
|
||||||
|
'ROLE'=201
|
||||||
|
'ROLES'=202
|
||||||
|
'COMPACTIONS'=203
|
||||||
|
'PRINCIPALS'=204
|
||||||
|
'TRANSACTIONS'=205
|
||||||
|
'INDEX'=206
|
||||||
|
'INDEXES'=207
|
||||||
|
'LOCKS'=208
|
||||||
|
'OPTION'=209
|
||||||
|
'ANTI'=210
|
||||||
|
'LOCAL'=211
|
||||||
|
'INPATH'=212
|
||||||
|
'WATERMARK'=213
|
||||||
|
'UNNEST'=214
|
||||||
|
'MATCH'=215
|
||||||
|
'NEXT'=216
|
||||||
|
'WITHIN'=217
|
||||||
|
'WS'=218
|
||||||
|
'SYSTEM'=219
|
||||||
|
'INCLUDING'=220
|
||||||
|
'EXCLUDING'=221
|
||||||
|
'CONSTRAINTS'=222
|
||||||
|
'GENERATED'=223
|
||||||
|
'CATALOG'=224
|
||||||
|
'LANGUAGE'=225
|
||||||
|
'CATALOGS'=226
|
||||||
|
'VIEWS'=227
|
||||||
|
'PRIMARY'=228
|
||||||
|
'KEY'=229
|
||||||
|
'PERIOD'=230
|
||||||
|
'SYSTEM_TIME'=231
|
||||||
|
'STRING'=232
|
||||||
|
'ARRAY'=233
|
||||||
|
'MAP'=234
|
||||||
|
'CHAR'=235
|
||||||
|
'VARCHAR'=236
|
||||||
|
'BINARY'=237
|
||||||
|
'VARBINARY'=238
|
||||||
|
'BYTES'=239
|
||||||
|
'DECIMAL'=240
|
||||||
|
'TINYINT'=241
|
||||||
|
'SMALLINT'=242
|
||||||
|
'INT'=243
|
||||||
|
'BIGINT'=244
|
||||||
|
'FLOAT'=245
|
||||||
|
'DOUBLE'=246
|
||||||
|
'DATE'=247
|
||||||
|
'TIME'=248
|
||||||
|
'TIMESTAMP'=249
|
||||||
|
'MULTISET'=250
|
||||||
|
'BOOLEAN'=251
|
||||||
|
'RAW'=252
|
||||||
|
'ROW'=253
|
||||||
|
'NULL'=254
|
||||||
|
'DATETIME'=255
|
||||||
|
'='=256
|
||||||
|
'>'=257
|
||||||
|
'<'=258
|
||||||
|
'!'=259
|
||||||
|
'~'=260
|
||||||
|
'|'=261
|
||||||
|
'&'=262
|
||||||
|
'^'=263
|
||||||
|
'.'=264
|
||||||
|
'['=265
|
||||||
|
']'=266
|
||||||
|
'('=267
|
||||||
|
')'=268
|
||||||
|
','=269
|
||||||
|
';'=270
|
||||||
|
'@'=271
|
||||||
|
'\''=272
|
||||||
|
'"'=273
|
||||||
|
'`'=274
|
||||||
|
':'=275
|
||||||
|
'*'=276
|
||||||
|
'_'=277
|
||||||
|
'-'=278
|
||||||
|
'+'=279
|
||||||
|
'%'=280
|
||||||
|
'||'=281
|
||||||
|
'--'=282
|
||||||
|
'/'=283
|
709
src/lib/flinksql/FlinkSqlParser.interp
Normal file
709
src/lib/flinksql/FlinkSqlParser.interp
Normal file
File diff suppressed because one or more lines are too long
17483
src/lib/flinksql/FlinkSqlParser.js
Normal file
17483
src/lib/flinksql/FlinkSqlParser.js
Normal file
File diff suppressed because one or more lines are too long
571
src/lib/flinksql/FlinkSqlParser.tokens
Normal file
571
src/lib/flinksql/FlinkSqlParser.tokens
Normal file
@ -0,0 +1,571 @@
|
|||||||
|
SPACE=1
|
||||||
|
COMMENT_INPUT=2
|
||||||
|
LINE_COMMENT=3
|
||||||
|
SELECT=4
|
||||||
|
FROM=5
|
||||||
|
ADD=6
|
||||||
|
AS=7
|
||||||
|
ALL=8
|
||||||
|
ANY=9
|
||||||
|
DISTINCT=10
|
||||||
|
WHERE=11
|
||||||
|
GROUP=12
|
||||||
|
BY=13
|
||||||
|
GROUPING=14
|
||||||
|
SETS=15
|
||||||
|
CUBE=16
|
||||||
|
ROLLUP=17
|
||||||
|
ORDER=18
|
||||||
|
HAVING=19
|
||||||
|
LIMIT=20
|
||||||
|
AT=21
|
||||||
|
OR=22
|
||||||
|
AND=23
|
||||||
|
IN=24
|
||||||
|
NOT=25
|
||||||
|
NO=26
|
||||||
|
EXISTS=27
|
||||||
|
BETWEEN=28
|
||||||
|
LIKE=29
|
||||||
|
RLIKE=30
|
||||||
|
IS=31
|
||||||
|
TRUE=32
|
||||||
|
FALSE=33
|
||||||
|
NULLS=34
|
||||||
|
ASC=35
|
||||||
|
DESC=36
|
||||||
|
FOR=37
|
||||||
|
INTERVAL=38
|
||||||
|
CASE=39
|
||||||
|
WHEN=40
|
||||||
|
THEN=41
|
||||||
|
ELSE=42
|
||||||
|
END=43
|
||||||
|
JOIN=44
|
||||||
|
CROSS=45
|
||||||
|
OUTER=46
|
||||||
|
INNER=47
|
||||||
|
LEFT=48
|
||||||
|
SEMI=49
|
||||||
|
RIGHT=50
|
||||||
|
FULL=51
|
||||||
|
NATURAL=52
|
||||||
|
ON=53
|
||||||
|
PIVOT=54
|
||||||
|
LATERAL=55
|
||||||
|
WINDOW=56
|
||||||
|
OVER=57
|
||||||
|
PARTITION=58
|
||||||
|
RANGE=59
|
||||||
|
ROWS=60
|
||||||
|
UNBOUNDED=61
|
||||||
|
PRECEDING=62
|
||||||
|
FOLLOWING=63
|
||||||
|
CURRENT=64
|
||||||
|
FIRST=65
|
||||||
|
AFTER=66
|
||||||
|
LAST=67
|
||||||
|
WITH=68
|
||||||
|
VALUES=69
|
||||||
|
CREATE=70
|
||||||
|
TABLE=71
|
||||||
|
DIRECTORY=72
|
||||||
|
VIEW=73
|
||||||
|
REPLACE=74
|
||||||
|
INSERT=75
|
||||||
|
DELETE=76
|
||||||
|
INTO=77
|
||||||
|
DESCRIBE=78
|
||||||
|
EXPLAIN=79
|
||||||
|
FORMAT=80
|
||||||
|
LOGICAL=81
|
||||||
|
CODEGEN=82
|
||||||
|
COST=83
|
||||||
|
CAST=84
|
||||||
|
SHOW=85
|
||||||
|
TABLES=86
|
||||||
|
COLUMNS=87
|
||||||
|
COLUMN=88
|
||||||
|
USE=89
|
||||||
|
PARTITIONS=90
|
||||||
|
FUNCTIONS=91
|
||||||
|
DROP=92
|
||||||
|
UNION=93
|
||||||
|
EXCEPT=94
|
||||||
|
SETMINUS=95
|
||||||
|
INTERSECT=96
|
||||||
|
TO=97
|
||||||
|
TABLESAMPLE=98
|
||||||
|
STRATIFY=99
|
||||||
|
ALTER=100
|
||||||
|
RENAME=101
|
||||||
|
STRUCT=102
|
||||||
|
COMMENT=103
|
||||||
|
SET=104
|
||||||
|
RESET=105
|
||||||
|
DATA=106
|
||||||
|
START=107
|
||||||
|
TRANSACTION=108
|
||||||
|
COMMIT=109
|
||||||
|
ROLLBACK=110
|
||||||
|
MACRO=111
|
||||||
|
IGNORE=112
|
||||||
|
BOTH=113
|
||||||
|
LEADING=114
|
||||||
|
TRAILING=115
|
||||||
|
IF=116
|
||||||
|
POSITION=117
|
||||||
|
EXTRACT=118
|
||||||
|
MINUS=119
|
||||||
|
DIV=120
|
||||||
|
PERCENTLIT=121
|
||||||
|
BUCKET=122
|
||||||
|
OUT=123
|
||||||
|
OF=124
|
||||||
|
SORT=125
|
||||||
|
CLUSTER=126
|
||||||
|
DISTRIBUTE=127
|
||||||
|
OVERWRITE=128
|
||||||
|
TRANSFORM=129
|
||||||
|
REDUCE=130
|
||||||
|
USING=131
|
||||||
|
SERDE=132
|
||||||
|
SERDEPROPERTIES=133
|
||||||
|
RECORDREADER=134
|
||||||
|
RECORDWRITER=135
|
||||||
|
DELIMITED=136
|
||||||
|
FIELDS=137
|
||||||
|
TERMINATED=138
|
||||||
|
COLLECTION=139
|
||||||
|
ITEMS=140
|
||||||
|
KEYS=141
|
||||||
|
ESCAPED=142
|
||||||
|
LINES=143
|
||||||
|
SEPARATED=144
|
||||||
|
FUNCTION=145
|
||||||
|
EXTENDED=146
|
||||||
|
REFRESH=147
|
||||||
|
CLEAR=148
|
||||||
|
CACHE=149
|
||||||
|
UNCACHE=150
|
||||||
|
LAZY=151
|
||||||
|
FORMATTED=152
|
||||||
|
GLOBAL=153
|
||||||
|
TEMPORARY=154
|
||||||
|
OPTIONS=155
|
||||||
|
UNSET=156
|
||||||
|
TBLPROPERTIES=157
|
||||||
|
DBPROPERTIES=158
|
||||||
|
BUCKETS=159
|
||||||
|
SKEWED=160
|
||||||
|
STORED=161
|
||||||
|
DIRECTORIES=162
|
||||||
|
LOCATION=163
|
||||||
|
EXCHANGE=164
|
||||||
|
ARCHIVE=165
|
||||||
|
UNARCHIVE=166
|
||||||
|
FILEFORMAT=167
|
||||||
|
TOUCH=168
|
||||||
|
COMPACT=169
|
||||||
|
CONCATENATE=170
|
||||||
|
CHANGE=171
|
||||||
|
CASCADE=172
|
||||||
|
CONSTRAINT=173
|
||||||
|
RESTRICT=174
|
||||||
|
CLUSTERED=175
|
||||||
|
SORTED=176
|
||||||
|
PURGE=177
|
||||||
|
INPUTFORMAT=178
|
||||||
|
OUTPUTFORMAT=179
|
||||||
|
DATABASE=180
|
||||||
|
DATABASES=181
|
||||||
|
DFS=182
|
||||||
|
TRUNCATE=183
|
||||||
|
ANALYZE=184
|
||||||
|
COMPUTE=185
|
||||||
|
LIST=186
|
||||||
|
STATISTICS=187
|
||||||
|
PARTITIONED=188
|
||||||
|
EXTERNAL=189
|
||||||
|
DEFINED=190
|
||||||
|
REVOKE=191
|
||||||
|
GRANT=192
|
||||||
|
LOCK=193
|
||||||
|
UNLOCK=194
|
||||||
|
MSCK=195
|
||||||
|
REPAIR=196
|
||||||
|
RECOVER=197
|
||||||
|
EXPORT=198
|
||||||
|
IMPORT=199
|
||||||
|
LOAD=200
|
||||||
|
ROLE=201
|
||||||
|
ROLES=202
|
||||||
|
COMPACTIONS=203
|
||||||
|
PRINCIPALS=204
|
||||||
|
TRANSACTIONS=205
|
||||||
|
INDEX=206
|
||||||
|
INDEXES=207
|
||||||
|
LOCKS=208
|
||||||
|
OPTION=209
|
||||||
|
ANTI=210
|
||||||
|
LOCAL=211
|
||||||
|
INPATH=212
|
||||||
|
WATERMARK=213
|
||||||
|
UNNEST=214
|
||||||
|
MATCH=215
|
||||||
|
NEXT=216
|
||||||
|
WITHIN=217
|
||||||
|
WS=218
|
||||||
|
SYSTEM=219
|
||||||
|
INCLUDING=220
|
||||||
|
EXCLUDING=221
|
||||||
|
CONSTRAINTS=222
|
||||||
|
GENERATED=223
|
||||||
|
CATALOG=224
|
||||||
|
LANGUAGE=225
|
||||||
|
CATALOGS=226
|
||||||
|
VIEWS=227
|
||||||
|
PRIMARY=228
|
||||||
|
KEY=229
|
||||||
|
PERIOD=230
|
||||||
|
SYSTEM_TIME=231
|
||||||
|
STRING=232
|
||||||
|
ARRAY=233
|
||||||
|
MAP=234
|
||||||
|
CHAR=235
|
||||||
|
VARCHAR=236
|
||||||
|
BINARY=237
|
||||||
|
VARBINARY=238
|
||||||
|
BYTES=239
|
||||||
|
DECIMAL=240
|
||||||
|
TINYINT=241
|
||||||
|
SMALLINT=242
|
||||||
|
INT=243
|
||||||
|
BIGINT=244
|
||||||
|
FLOAT=245
|
||||||
|
DOUBLE=246
|
||||||
|
DATE=247
|
||||||
|
TIME=248
|
||||||
|
TIMESTAMP=249
|
||||||
|
MULTISET=250
|
||||||
|
BOOLEAN=251
|
||||||
|
RAW=252
|
||||||
|
ROW=253
|
||||||
|
NULL=254
|
||||||
|
DATETIME=255
|
||||||
|
EQUAL_SYMBOL=256
|
||||||
|
GREATER_SYMBOL=257
|
||||||
|
LESS_SYMBOL=258
|
||||||
|
EXCLAMATION_SYMBOL=259
|
||||||
|
BIT_NOT_OP=260
|
||||||
|
BIT_OR_OP=261
|
||||||
|
BIT_AND_OP=262
|
||||||
|
BIT_XOR_OP=263
|
||||||
|
DOT=264
|
||||||
|
LS_BRACKET=265
|
||||||
|
RS_BRACKET=266
|
||||||
|
LR_BRACKET=267
|
||||||
|
RR_BRACKET=268
|
||||||
|
COMMA=269
|
||||||
|
SEMICOLON=270
|
||||||
|
AT_SIGN=271
|
||||||
|
SINGLE_QUOTE_SYMB=272
|
||||||
|
DOUBLE_QUOTE_SYMB=273
|
||||||
|
REVERSE_QUOTE_SYMB=274
|
||||||
|
COLON_SYMB=275
|
||||||
|
ASTERISK_SIGN=276
|
||||||
|
UNDERLINE_SIGN=277
|
||||||
|
HYPNEN_SIGN=278
|
||||||
|
ADD_SIGN=279
|
||||||
|
PENCENT_SIGN=280
|
||||||
|
DOUBLE_VERTICAL_SIGN=281
|
||||||
|
DOUBLE_HYPNEN_SIGN=282
|
||||||
|
SLASH_SIGN=283
|
||||||
|
DOT_ID=284
|
||||||
|
PLUS_DOT_ID=285
|
||||||
|
STRING_LITERAL=286
|
||||||
|
DIG_LITERAL=287
|
||||||
|
REAL_LITERAL=288
|
||||||
|
BIT_STRING=289
|
||||||
|
ID_LITERAL=290
|
||||||
|
PLUS_ID_LITERAL=291
|
||||||
|
'SELECT'=4
|
||||||
|
'FROM'=5
|
||||||
|
'ADD'=6
|
||||||
|
'AS'=7
|
||||||
|
'ALL'=8
|
||||||
|
'ANY'=9
|
||||||
|
'DISTINCT'=10
|
||||||
|
'WHERE'=11
|
||||||
|
'GROUP'=12
|
||||||
|
'BY'=13
|
||||||
|
'GROUPING'=14
|
||||||
|
'SETS'=15
|
||||||
|
'CUBE'=16
|
||||||
|
'ROLLUP'=17
|
||||||
|
'ORDER'=18
|
||||||
|
'HAVING'=19
|
||||||
|
'LIMIT'=20
|
||||||
|
'AT'=21
|
||||||
|
'OR'=22
|
||||||
|
'AND'=23
|
||||||
|
'IN'=24
|
||||||
|
'NOT'=25
|
||||||
|
'NO'=26
|
||||||
|
'EXISTS'=27
|
||||||
|
'BETWEEN'=28
|
||||||
|
'LIKE'=29
|
||||||
|
'RLIKE'=30
|
||||||
|
'IS'=31
|
||||||
|
'TRUE'=32
|
||||||
|
'FALSE'=33
|
||||||
|
'NULLS'=34
|
||||||
|
'ASC'=35
|
||||||
|
'DESC'=36
|
||||||
|
'FOR'=37
|
||||||
|
'INTERVAL'=38
|
||||||
|
'CASE'=39
|
||||||
|
'WHEN'=40
|
||||||
|
'THEN'=41
|
||||||
|
'ELSE'=42
|
||||||
|
'END'=43
|
||||||
|
'JOIN'=44
|
||||||
|
'CROSS'=45
|
||||||
|
'OUTER'=46
|
||||||
|
'INNER'=47
|
||||||
|
'LEFT'=48
|
||||||
|
'SEMI'=49
|
||||||
|
'RIGHT'=50
|
||||||
|
'FULL'=51
|
||||||
|
'NATURAL'=52
|
||||||
|
'ON'=53
|
||||||
|
'PIVOT'=54
|
||||||
|
'LATERAL'=55
|
||||||
|
'WINDOW'=56
|
||||||
|
'OVER'=57
|
||||||
|
'PARTITION'=58
|
||||||
|
'RANGE'=59
|
||||||
|
'ROWS'=60
|
||||||
|
'UNBOUNDED'=61
|
||||||
|
'PRECEDING'=62
|
||||||
|
'FOLLOWING'=63
|
||||||
|
'CURRENT'=64
|
||||||
|
'FIRST'=65
|
||||||
|
'AFTER'=66
|
||||||
|
'LAST'=67
|
||||||
|
'WITH'=68
|
||||||
|
'VALUES'=69
|
||||||
|
'CREATE'=70
|
||||||
|
'TABLE'=71
|
||||||
|
'DIRECTORY'=72
|
||||||
|
'VIEW'=73
|
||||||
|
'REPLACE'=74
|
||||||
|
'INSERT'=75
|
||||||
|
'DELETE'=76
|
||||||
|
'INTO'=77
|
||||||
|
'DESCRIBE'=78
|
||||||
|
'EXPLAIN'=79
|
||||||
|
'FORMAT'=80
|
||||||
|
'LOGICAL'=81
|
||||||
|
'CODEGEN'=82
|
||||||
|
'COST'=83
|
||||||
|
'CAST'=84
|
||||||
|
'SHOW'=85
|
||||||
|
'TABLES'=86
|
||||||
|
'COLUMNS'=87
|
||||||
|
'COLUMN'=88
|
||||||
|
'USE'=89
|
||||||
|
'PARTITIONS'=90
|
||||||
|
'FUNCTIONS'=91
|
||||||
|
'DROP'=92
|
||||||
|
'UNION'=93
|
||||||
|
'EXCEPT'=94
|
||||||
|
'SETMINUS'=95
|
||||||
|
'INTERSECT'=96
|
||||||
|
'TO'=97
|
||||||
|
'TABLESAMPLE'=98
|
||||||
|
'STRATIFY'=99
|
||||||
|
'ALTER'=100
|
||||||
|
'RENAME'=101
|
||||||
|
'STRUCT'=102
|
||||||
|
'COMMENT'=103
|
||||||
|
'SET'=104
|
||||||
|
'RESET'=105
|
||||||
|
'DATA'=106
|
||||||
|
'START'=107
|
||||||
|
'TRANSACTION'=108
|
||||||
|
'COMMIT'=109
|
||||||
|
'ROLLBACK'=110
|
||||||
|
'MACRO'=111
|
||||||
|
'IGNORE'=112
|
||||||
|
'BOTH'=113
|
||||||
|
'LEADING'=114
|
||||||
|
'TRAILING'=115
|
||||||
|
'IF'=116
|
||||||
|
'POSITION'=117
|
||||||
|
'EXTRACT'=118
|
||||||
|
'MINUS'=119
|
||||||
|
'DIV'=120
|
||||||
|
'PERCENTLIT'=121
|
||||||
|
'BUCKET'=122
|
||||||
|
'OUT'=123
|
||||||
|
'OF'=124
|
||||||
|
'SORT'=125
|
||||||
|
'CLUSTER'=126
|
||||||
|
'DISTRIBUTE'=127
|
||||||
|
'OVERWRITE'=128
|
||||||
|
'TRANSFORM'=129
|
||||||
|
'REDUCE'=130
|
||||||
|
'USING'=131
|
||||||
|
'SERDE'=132
|
||||||
|
'SERDEPROPERTIES'=133
|
||||||
|
'RECORDREADER'=134
|
||||||
|
'RECORDWRITER'=135
|
||||||
|
'DELIMITED'=136
|
||||||
|
'FIELDS'=137
|
||||||
|
'TERMINATED'=138
|
||||||
|
'COLLECTION'=139
|
||||||
|
'ITEMS'=140
|
||||||
|
'KEYS'=141
|
||||||
|
'ESCAPED'=142
|
||||||
|
'LINES'=143
|
||||||
|
'SEPARATED'=144
|
||||||
|
'FUNCTION'=145
|
||||||
|
'EXTENDED'=146
|
||||||
|
'REFRESH'=147
|
||||||
|
'CLEAR'=148
|
||||||
|
'CACHE'=149
|
||||||
|
'UNCACHE'=150
|
||||||
|
'LAZY'=151
|
||||||
|
'FORMATTED'=152
|
||||||
|
'GLOBAL'=153
|
||||||
|
'TEMPORARY'=154
|
||||||
|
'OPTIONS'=155
|
||||||
|
'UNSET'=156
|
||||||
|
'TBLPROPERTIES'=157
|
||||||
|
'DBPROPERTIES'=158
|
||||||
|
'BUCKETS'=159
|
||||||
|
'SKEWED'=160
|
||||||
|
'STORED'=161
|
||||||
|
'DIRECTORIES'=162
|
||||||
|
'LOCATION'=163
|
||||||
|
'EXCHANGE'=164
|
||||||
|
'ARCHIVE'=165
|
||||||
|
'UNARCHIVE'=166
|
||||||
|
'FILEFORMAT'=167
|
||||||
|
'TOUCH'=168
|
||||||
|
'COMPACT'=169
|
||||||
|
'CONCATENATE'=170
|
||||||
|
'CHANGE'=171
|
||||||
|
'CASCADE'=172
|
||||||
|
'CONSTRAINT'=173
|
||||||
|
'RESTRICT'=174
|
||||||
|
'CLUSTERED'=175
|
||||||
|
'SORTED'=176
|
||||||
|
'PURGE'=177
|
||||||
|
'INPUTFORMAT'=178
|
||||||
|
'OUTPUTFORMAT'=179
|
||||||
|
'DATABASE'=180
|
||||||
|
'DATABASES'=181
|
||||||
|
'DFS'=182
|
||||||
|
'TRUNCATE'=183
|
||||||
|
'ANALYZE'=184
|
||||||
|
'COMPUTE'=185
|
||||||
|
'LIST'=186
|
||||||
|
'STATISTICS'=187
|
||||||
|
'PARTITIONED'=188
|
||||||
|
'EXTERNAL'=189
|
||||||
|
'DEFINED'=190
|
||||||
|
'REVOKE'=191
|
||||||
|
'GRANT'=192
|
||||||
|
'LOCK'=193
|
||||||
|
'UNLOCK'=194
|
||||||
|
'MSCK'=195
|
||||||
|
'REPAIR'=196
|
||||||
|
'RECOVER'=197
|
||||||
|
'EXPORT'=198
|
||||||
|
'IMPORT'=199
|
||||||
|
'LOAD'=200
|
||||||
|
'ROLE'=201
|
||||||
|
'ROLES'=202
|
||||||
|
'COMPACTIONS'=203
|
||||||
|
'PRINCIPALS'=204
|
||||||
|
'TRANSACTIONS'=205
|
||||||
|
'INDEX'=206
|
||||||
|
'INDEXES'=207
|
||||||
|
'LOCKS'=208
|
||||||
|
'OPTION'=209
|
||||||
|
'ANTI'=210
|
||||||
|
'LOCAL'=211
|
||||||
|
'INPATH'=212
|
||||||
|
'WATERMARK'=213
|
||||||
|
'UNNEST'=214
|
||||||
|
'MATCH'=215
|
||||||
|
'NEXT'=216
|
||||||
|
'WITHIN'=217
|
||||||
|
'WS'=218
|
||||||
|
'SYSTEM'=219
|
||||||
|
'INCLUDING'=220
|
||||||
|
'EXCLUDING'=221
|
||||||
|
'CONSTRAINTS'=222
|
||||||
|
'GENERATED'=223
|
||||||
|
'CATALOG'=224
|
||||||
|
'LANGUAGE'=225
|
||||||
|
'CATALOGS'=226
|
||||||
|
'VIEWS'=227
|
||||||
|
'PRIMARY'=228
|
||||||
|
'KEY'=229
|
||||||
|
'PERIOD'=230
|
||||||
|
'SYSTEM_TIME'=231
|
||||||
|
'STRING'=232
|
||||||
|
'ARRAY'=233
|
||||||
|
'MAP'=234
|
||||||
|
'CHAR'=235
|
||||||
|
'VARCHAR'=236
|
||||||
|
'BINARY'=237
|
||||||
|
'VARBINARY'=238
|
||||||
|
'BYTES'=239
|
||||||
|
'DECIMAL'=240
|
||||||
|
'TINYINT'=241
|
||||||
|
'SMALLINT'=242
|
||||||
|
'INT'=243
|
||||||
|
'BIGINT'=244
|
||||||
|
'FLOAT'=245
|
||||||
|
'DOUBLE'=246
|
||||||
|
'DATE'=247
|
||||||
|
'TIME'=248
|
||||||
|
'TIMESTAMP'=249
|
||||||
|
'MULTISET'=250
|
||||||
|
'BOOLEAN'=251
|
||||||
|
'RAW'=252
|
||||||
|
'ROW'=253
|
||||||
|
'NULL'=254
|
||||||
|
'DATETIME'=255
|
||||||
|
'='=256
|
||||||
|
'>'=257
|
||||||
|
'<'=258
|
||||||
|
'!'=259
|
||||||
|
'~'=260
|
||||||
|
'|'=261
|
||||||
|
'&'=262
|
||||||
|
'^'=263
|
||||||
|
'.'=264
|
||||||
|
'['=265
|
||||||
|
']'=266
|
||||||
|
'('=267
|
||||||
|
')'=268
|
||||||
|
','=269
|
||||||
|
';'=270
|
||||||
|
'@'=271
|
||||||
|
'\''=272
|
||||||
|
'"'=273
|
||||||
|
'`'=274
|
||||||
|
':'=275
|
||||||
|
'*'=276
|
||||||
|
'_'=277
|
||||||
|
'-'=278
|
||||||
|
'+'=279
|
||||||
|
'%'=280
|
||||||
|
'||'=281
|
||||||
|
'--'=282
|
||||||
|
'/'=283
|
1275
src/lib/flinksql/FlinkSqlParserListener.js
Normal file
1275
src/lib/flinksql/FlinkSqlParserListener.js
Normal file
File diff suppressed because it is too large
Load Diff
856
src/lib/flinksql/FlinkSqlParserVisitor.js
Normal file
856
src/lib/flinksql/FlinkSqlParserVisitor.js
Normal file
@ -0,0 +1,856 @@
|
|||||||
|
// Generated from /Users/erindeng/Desktop/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.8
|
||||||
|
// jshint ignore: start
|
||||||
|
var antlr4 = require('antlr4/index');
|
||||||
|
|
||||||
|
// This class defines a complete generic visitor for a parse tree produced by FlinkSqlParser.
|
||||||
|
|
||||||
|
function FlinkSqlParserVisitor() {
|
||||||
|
antlr4.tree.ParseTreeVisitor.call(this);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
FlinkSqlParserVisitor.prototype = Object.create(antlr4.tree.ParseTreeVisitor.prototype);
|
||||||
|
FlinkSqlParserVisitor.prototype.constructor = FlinkSqlParserVisitor;
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#program.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitProgram = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#statement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#sqlStatements.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSqlStatements = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#sqlStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSqlStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#emptyStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitEmptyStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#ddlStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDdlStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dmlStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDmlStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#describeStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDescribeStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#explainStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitExplainStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#useStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUseStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#showStatememt.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitShowStatememt = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#createTable.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCreateTable = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnOptionDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnOptionDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnName.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnName = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnNameList.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnNameList = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnType.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnType = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#lengthOneDimension.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLengthOneDimension = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#commentSpec.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCommentSpec = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#watermarkDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWatermarkDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tableConstraint.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTableConstraint = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#selfDefinitionClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSelfDefinitionClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#partitionDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitPartitionDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#transformList.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTransformList = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#identityTransform.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIdentityTransform = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#applyTransform.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitApplyTransform = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#transformArgument.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTransformArgument = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#likeDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLikeDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#likeOption.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLikeOption = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#createCatalog.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCreateCatalog = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#createDatabase.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCreateDatabase = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#createView.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCreateView = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#createFunction.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCreateFunction = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#alterTable.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitAlterTable = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#renameDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitRenameDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#setKeyValueDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSetKeyValueDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#alterDatabase.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitAlterDatabase = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#alterFunction.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitAlterFunction = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dropTable.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDropTable = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dropDatabase.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDropDatabase = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dropView.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDropView = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dropFunction.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDropFunction = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#insertStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitInsertStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#insertPartitionDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitInsertPartitionDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#valuesDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitValuesDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#valuesRowDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitValuesRowDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#queryStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitQueryStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#valuesCaluse.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitValuesCaluse = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#selectStatement.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSelectStatement = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#selectClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSelectClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#projectItemDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitProjectItemDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#fromClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFromClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tableExpression.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTableExpression = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tableReference.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTableReference = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tablePrimary.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTablePrimary = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#joinCondition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitJoinCondition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#whereClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWhereClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#groupByClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitGroupByClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#groupItemDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitGroupItemDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#havingClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitHavingClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#orderByCaluse.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitOrderByCaluse = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#orderItemDefition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitOrderItemDefition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#limitClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLimitClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#windowClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWindowClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#namedWindow.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitNamedWindow = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#windowSpec.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWindowSpec = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#sortItem.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSortItem = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#windowFrame.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWindowFrame = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#frameBound.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFrameBound = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#expression.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitExpression = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#logicalNot.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLogicalNot = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#predicated.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitPredicated = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#exists.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitExists = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#logicalBinary.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLogicalBinary = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#predicate.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitPredicate = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#valueExpressionDefault.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitValueExpressionDefault = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#comparison.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitComparison = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#arithmeticBinary.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitArithmeticBinary = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#arithmeticUnary.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitArithmeticUnary = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dereference.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDereference = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#simpleCase.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSimpleCase = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnReference.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnReference = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#last.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLast = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#star.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitStar = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#subscript.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSubscript = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#subqueryExpression.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSubqueryExpression = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#cast.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitCast = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#constantDefault.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitConstantDefault = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#parenthesizedExpression.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitParenthesizedExpression = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#functionCall.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFunctionCall = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#searchedCase.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSearchedCase = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#position.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitPosition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#first.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFirst = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#functionName.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFunctionName = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#dereferenceDefinition.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDereferenceDefinition = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#qualifiedName.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitQualifiedName = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#interval.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitInterval = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#errorCapturingMultiUnitsInterval.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitErrorCapturingMultiUnitsInterval = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#multiUnitsInterval.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitMultiUnitsInterval = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#errorCapturingUnitToUnitInterval.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitErrorCapturingUnitToUnitInterval = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#unitToUnitInterval.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUnitToUnitInterval = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#intervalValue.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIntervalValue = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#columnAlias.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitColumnAlias = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tableAlias.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTableAlias = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#errorCapturingIdentifier.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitErrorCapturingIdentifier = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#errorIdent.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitErrorIdent = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#realIdent.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitRealIdent = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#identifierList.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIdentifierList = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#identifierSeq.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIdentifierSeq = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#identifier.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIdentifier = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#unquotedIdentifierAlternative.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUnquotedIdentifierAlternative = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#quotedIdentifierAlternative.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitQuotedIdentifierAlternative = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#ansiNonReservedKeywords.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitAnsiNonReservedKeywords = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#nonReservedKeywords.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitNonReservedKeywords = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#unquotedIdentifier.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUnquotedIdentifier = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#quotedIdentifier.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitQuotedIdentifier = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#whenClause.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWhenClause = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#uidList.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUidList = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#uid.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUid = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#plusUid.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitPlusUid = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#withOption.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitWithOption = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#ifNotExists.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIfNotExists = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#ifExists.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitIfExists = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tablePropertyList.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTablePropertyList = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tableProperty.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTableProperty = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tablePropertyKey.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTablePropertyKey = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#tablePropertyValue.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitTablePropertyValue = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#logicalOperator.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitLogicalOperator = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#comparisonOperator.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitComparisonOperator = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#bitOperator.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitBitOperator = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#mathOperator.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitMathOperator = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#unaryOperator.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitUnaryOperator = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#fullColumnName.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitFullColumnName = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#constant.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitConstant = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#stringLiteral.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitStringLiteral = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#decimalLiteral.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitDecimalLiteral = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#booleanLiteral.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitBooleanLiteral = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#setQuantifier.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitSetQuantifier = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#ansiNonReserved.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitAnsiNonReserved = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#strictNonReserved.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitStrictNonReserved = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// Visit a parse tree produced by FlinkSqlParser#nonReserved.
|
||||||
|
FlinkSqlParserVisitor.prototype.visitNonReserved = function(ctx) {
|
||||||
|
return this.visitChildren(ctx);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exports.FlinkSqlParserVisitor = FlinkSqlParserVisitor;
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,384 +1,404 @@
|
|||||||
T__0=1
|
T_ACTION=1
|
||||||
T__1=2
|
T_ADD2=2
|
||||||
T__2=3
|
T_ALL=3
|
||||||
T__3=4
|
T_ALLOCATE=4
|
||||||
T__4=5
|
T_ALTER=5
|
||||||
T__5=6
|
T_AND=6
|
||||||
T__6=7
|
T_ANSI_NULLS=7
|
||||||
T__7=8
|
T_ANSI_PADDING=8
|
||||||
T__8=9
|
T_AS=9
|
||||||
T__9=10
|
T_ASC=10
|
||||||
T_GO=11
|
T_ASSOCIATE=11
|
||||||
T_BEGIN=12
|
T_AT=12
|
||||||
T_SEMICOLON=13
|
T_AUTO_INCREMENT=13
|
||||||
T_END=14
|
T_AVG=14
|
||||||
T_EXCEPTION=15
|
T_BATCHSIZE=15
|
||||||
T_WHEN=16
|
T_BEGIN=16
|
||||||
L_ID=17
|
T_BETWEEN=17
|
||||||
T_THEN=18
|
T_BIGINT=18
|
||||||
T_NULL=19
|
T_BINARY_DOUBLE=19
|
||||||
T_SET=20
|
T_BINARY_FLOAT=20
|
||||||
T_COMMA=21
|
T_BINARY_INTEGER=21
|
||||||
T_COLON=22
|
T_BIT=22
|
||||||
T_EQUAL=23
|
T_BODY=23
|
||||||
T_OPEN_P=24
|
T_BREAK=24
|
||||||
T_CLOSE_P=25
|
T_BY=25
|
||||||
T_ALLOCATE=26
|
T_BYTE=26
|
||||||
T_CURSOR=27
|
T_CALL=27
|
||||||
T_FOR=28
|
T_CALLER=28
|
||||||
T_RESULT=29
|
T_CASCADE=29
|
||||||
T_PROCEDURE=30
|
T_CASE=30
|
||||||
T_ASSOCIATE=31
|
T_CASESPECIFIC=31
|
||||||
T_LOCATOR=32
|
T_CAST=32
|
||||||
T_LOCATORS=33
|
T_CHAR=33
|
||||||
T_WITH=34
|
T_CHARACTER=34
|
||||||
T_TRANSACTION=35
|
T_CHARSET=35
|
||||||
T_BREAK=36
|
T_CLIENT=36
|
||||||
T_CALL=37
|
T_CLOSE=37
|
||||||
T_DECLARE=38
|
T_CLUSTERED=38
|
||||||
T_AS=39
|
T_CMP=39
|
||||||
T_CONSTANT=40
|
T_COLLECT=40
|
||||||
T_CONDITION=41
|
T_COLLECTION=41
|
||||||
T_IS=42
|
T_COLUMN=42
|
||||||
T_RETURN=43
|
T_COMMENT=43
|
||||||
T_ONLY=44
|
T_CONSTANT=44
|
||||||
T_TO=45
|
T_COMMIT=45
|
||||||
T_CALLER=46
|
T_COMPRESS=46
|
||||||
T_CLIENT=47
|
T_CONCAT=47
|
||||||
T_WITHOUT=48
|
T_CONDITION=48
|
||||||
T_CONTINUE=49
|
T_CONSTRAINT=49
|
||||||
T_EXIT=50
|
T_CONTINUE=50
|
||||||
T_HANDLER=51
|
T_COPY=51
|
||||||
T_SQLEXCEPTION=52
|
T_COUNT=52
|
||||||
T_SQLWARNING=53
|
T_COUNT_BIG=53
|
||||||
T_NOT=54
|
T_CREATE=54
|
||||||
T_FOUND=55
|
T_CREATION=55
|
||||||
T_GLOBAL=56
|
T_CREATOR=56
|
||||||
T_TEMPORARY=57
|
T_CS=57
|
||||||
T_TABLE=58
|
T_CURRENT=58
|
||||||
T_CREATE=59
|
T_CURRENT_SCHEMA=59
|
||||||
T_IF=60
|
T_CURSOR=60
|
||||||
T_EXISTS=61
|
T_DATABASE=61
|
||||||
T_LOCAL=62
|
T_DATA=62
|
||||||
T_MULTISET=63
|
T_DATE=63
|
||||||
T_VOLATILE=64
|
T_DATETIME=64
|
||||||
T_LIKE=65
|
T_DAY=65
|
||||||
T_CONSTRAINT=66
|
T_DAYS=66
|
||||||
T_PRIMARY=67
|
T_DEC=67
|
||||||
T_KEY=68
|
T_DECIMAL=68
|
||||||
T_UNIQUE=69
|
T_DECLARE=69
|
||||||
T_REFERENCES=70
|
T_DEFAULT=70
|
||||||
T_IDENTITY=71
|
T_DEFERRED=71
|
||||||
L_INT=72
|
T_DEFINED=72
|
||||||
T_AUTO_INCREMENT=73
|
T_DEFINER=73
|
||||||
T_ENABLE=74
|
T_DEFINITION=74
|
||||||
T_CLUSTERED=75
|
T_DELETE=75
|
||||||
T_ASC=76
|
T_DELIMITED=76
|
||||||
T_DESC=77
|
T_DELIMITER=77
|
||||||
T_FOREIGN=78
|
T_DESC=78
|
||||||
T_ON=79
|
T_DESCRIBE=79
|
||||||
T_UPDATE=80
|
T_DIAGNOSTICS=80
|
||||||
T_DELETE=81
|
T_DIR=81
|
||||||
T_NO=82
|
T_DIRECTORY=82
|
||||||
T_ACTION=83
|
T_DISTINCT=83
|
||||||
T_RESTRICT=84
|
T_DISTRIBUTE=84
|
||||||
T_DEFAULT=85
|
T_DO=85
|
||||||
T_CASCADE=86
|
T_DOUBLE=86
|
||||||
T_LOG=87
|
T_DROP=87
|
||||||
T_FALLBACK=88
|
T_DYNAMIC=88
|
||||||
T_COMMIT=89
|
T_ELSE=89
|
||||||
T_PRESERVE=90
|
T_ELSEIF=90
|
||||||
T_ROWS=91
|
T_ELSIF=91
|
||||||
T_SEGMENT=92
|
T_ENABLE=92
|
||||||
T_CREATION=93
|
T_END=93
|
||||||
T_IMMEDIATE=94
|
T_ENGINE=94
|
||||||
T_DEFERRED=95
|
T_ESCAPED=95
|
||||||
T_PCTFREE=96
|
T_EXCEPT=96
|
||||||
T_PCTUSED=97
|
T_EXEC=97
|
||||||
T_INITRANS=98
|
T_EXECUTE=98
|
||||||
T_MAXTRANS=99
|
T_EXCEPTION=99
|
||||||
T_NOCOMPRESS=100
|
T_EXCLUSIVE=100
|
||||||
T_LOGGING=101
|
T_EXISTS=101
|
||||||
T_NOLOGGING=102
|
T_EXIT=102
|
||||||
T_STORAGE=103
|
T_FALLBACK=103
|
||||||
T_TABLESPACE=104
|
T_FALSE=104
|
||||||
T_INDEX=105
|
T_FETCH=105
|
||||||
T_IN=106
|
T_FIELDS=106
|
||||||
T_REPLACE=107
|
T_FILE=107
|
||||||
T_DISTRIBUTE=108
|
T_FILES=108
|
||||||
T_BY=109
|
T_FLOAT=109
|
||||||
T_HASH=110
|
T_FOR=110
|
||||||
T_LOGGED=111
|
T_FOREIGN=111
|
||||||
T_COMPRESS=112
|
T_FORMAT=112
|
||||||
T_YES=113
|
T_FOUND=113
|
||||||
T_DEFINITION=114
|
T_FROM=114
|
||||||
T_DROP=115
|
T_FULL=115
|
||||||
T_DATA=116
|
T_FUNCTION=116
|
||||||
T_STORED=117
|
T_GET=117
|
||||||
T_ROW=118
|
T_GLOBAL=118
|
||||||
T_FORMAT=119
|
T_GO=119
|
||||||
T_DELIMITED=120
|
T_GRANT=120
|
||||||
T_FIELDS=121
|
T_GROUP=121
|
||||||
T_TERMINATED=122
|
T_HANDLER=122
|
||||||
T_ESCAPED=123
|
T_HASH=123
|
||||||
T_COLLECTION=124
|
T_HAVING=124
|
||||||
T_ITEMS=125
|
T_HDFS=125
|
||||||
T_MAP=126
|
T_HIVE=126
|
||||||
T_KEYS=127
|
T_HOST=127
|
||||||
T_LINES=128
|
T_IDENTITY=128
|
||||||
T_DEFINED=129
|
T_IF=129
|
||||||
T_TEXTIMAGE_ON=130
|
T_IGNORE=130
|
||||||
T_COMMENT=131
|
T_IMMEDIATE=131
|
||||||
T_CHARACTER=132
|
T_IN=132
|
||||||
T_CHARSET=133
|
T_INCLUDE=133
|
||||||
T_ENGINE=134
|
T_INDEX=134
|
||||||
T_ALTER=135
|
T_INITRANS=135
|
||||||
T_ADD2=136
|
T_INNER=136
|
||||||
T_CHAR=137
|
T_INOUT=137
|
||||||
T_BIGINT=138
|
T_INSERT=138
|
||||||
T_BINARY_DOUBLE=139
|
T_INT=139
|
||||||
T_BINARY_FLOAT=140
|
T_INT2=140
|
||||||
T_BINARY_INTEGER=141
|
T_INT4=141
|
||||||
T_BIT=142
|
T_INT8=142
|
||||||
T_DATE=143
|
T_INTEGER=143
|
||||||
T_DATETIME=144
|
T_INTERSECT=144
|
||||||
T_DEC=145
|
T_INTERVAL=145
|
||||||
T_DECIMAL=146
|
T_INTO=146
|
||||||
T_DOUBLE=147
|
T_INVOKER=147
|
||||||
T_PRECISION=148
|
T_IS=148
|
||||||
T_FLOAT=149
|
T_ISOPEN=149
|
||||||
T_INT=150
|
T_ITEMS=150
|
||||||
T_INT2=151
|
T_JOIN=151
|
||||||
T_INT4=152
|
T_KEEP=152
|
||||||
T_INT8=153
|
T_KEY=153
|
||||||
T_INTEGER=154
|
T_KEYS=154
|
||||||
T_NCHAR=155
|
T_LANGUAGE=155
|
||||||
T_NVARCHAR=156
|
T_LEAVE=156
|
||||||
T_NUMBER=157
|
T_LEFT=157
|
||||||
T_NUMERIC=158
|
T_LIKE=158
|
||||||
T_PLS_INTEGER=159
|
T_LIMIT=159
|
||||||
T_REAL=160
|
T_LINES=160
|
||||||
T_RESULT_SET_LOCATOR=161
|
T_LOCAL=161
|
||||||
T_VARYING=162
|
T_LOCATION=162
|
||||||
T_SIMPLE_FLOAT=163
|
T_LOCATOR=163
|
||||||
T_SIMPLE_DOUBLE=164
|
T_LOCATORS=164
|
||||||
T_SIMPLE_INTEGER=165
|
T_LOCKS=165
|
||||||
T_SMALLINT=166
|
T_LOG=166
|
||||||
T_SMALLDATETIME=167
|
T_LOGGED=167
|
||||||
T_STRING=168
|
T_LOGGING=168
|
||||||
T_SYS_REFCURSOR=169
|
T_LOOP=169
|
||||||
T_TIMESTAMP=170
|
T_MAP=170
|
||||||
T_TINYINT=171
|
T_MATCHED=171
|
||||||
T_VARCHAR=172
|
T_MAX=172
|
||||||
T_VARCHAR2=173
|
T_MAXTRANS=173
|
||||||
T_XML=174
|
T_MERGE=174
|
||||||
T_TYPE=175
|
T_MESSAGE_TEXT=175
|
||||||
T_ROWTYPE=176
|
T_MICROSECOND=176
|
||||||
T_MAX=177
|
T_MICROSECONDS=177
|
||||||
T_BYTE=178
|
T_MIN=178
|
||||||
T_CASESPECIFIC=179
|
T_MULTISET=179
|
||||||
T_CS=180
|
T_NCHAR=180
|
||||||
T_DATABASE=181
|
T_NEW=181
|
||||||
T_SCHEMA=182
|
T_NVARCHAR=182
|
||||||
T_LOCATION=183
|
T_NO=183
|
||||||
T_OR=184
|
T_NOCOUNT=184
|
||||||
T_FUNCTION=185
|
T_NOCOMPRESS=185
|
||||||
T_RETURNS=186
|
T_NOLOGGING=186
|
||||||
T_PACKAGE=187
|
T_NONE=187
|
||||||
T_PROC=188
|
T_NOT=188
|
||||||
T_BODY=189
|
T_NOTFOUND=189
|
||||||
T_OUT=190
|
T_NULL=190
|
||||||
T_INOUT=191
|
T_NUMERIC=191
|
||||||
T_LANGUAGE=192
|
T_NUMBER=192
|
||||||
T_SQL=193
|
T_OBJECT=193
|
||||||
T_SECURITY=194
|
T_OFF=194
|
||||||
T_CREATOR=195
|
T_ON=195
|
||||||
T_DEFINER=196
|
T_ONLY=196
|
||||||
T_INVOKER=197
|
T_OPEN=197
|
||||||
T_OWNER=198
|
T_OR=198
|
||||||
T_DYNAMIC=199
|
T_ORDER=199
|
||||||
T_SETS=200
|
T_OUT=200
|
||||||
T_EXEC=201
|
T_OUTER=201
|
||||||
T_EXECUTE=202
|
T_OVER=202
|
||||||
T_INTO=203
|
T_OVERWRITE=203
|
||||||
T_ELSE=204
|
T_OWNER=204
|
||||||
T_ELSIF=205
|
T_PACKAGE=205
|
||||||
T_ELSEIF=206
|
T_PARTITION=206
|
||||||
T_INCLUDE=207
|
T_PCTFREE=207
|
||||||
T_INSERT=208
|
T_PCTUSED=208
|
||||||
T_OVERWRITE=209
|
T_PLS_INTEGER=209
|
||||||
T_VALUES=210
|
T_PRECISION=210
|
||||||
T_DIRECTORY=211
|
T_PRESERVE=211
|
||||||
T_GET=212
|
T_PRIMARY=212
|
||||||
T_DIAGNOSTICS=213
|
T_PRINT=213
|
||||||
T_MESSAGE_TEXT=214
|
T_PROC=214
|
||||||
T_ROW_COUNT=215
|
T_PROCEDURE=215
|
||||||
T_GRANT=216
|
T_QUALIFY=216
|
||||||
T_ROLE=217
|
T_QUERY_BAND=217
|
||||||
T_LEAVE=218
|
T_QUIT=218
|
||||||
T_OBJECT=219
|
T_QUOTED_IDENTIFIER=219
|
||||||
T_AT=220
|
T_RAISE=220
|
||||||
T_OPEN=221
|
T_REAL=221
|
||||||
T_FETCH=222
|
T_REFERENCES=222
|
||||||
T_FROM=223
|
T_REGEXP=223
|
||||||
T_COLLECT=224
|
T_REPLACE=224
|
||||||
T_STATISTICS=225
|
T_RESIGNAL=225
|
||||||
T_STATS=226
|
T_RESTRICT=226
|
||||||
T_COLUMN=227
|
T_RESULT=227
|
||||||
T_CLOSE=228
|
T_RESULT_SET_LOCATOR=228
|
||||||
T_CMP=229
|
T_RETURN=229
|
||||||
T_SUM=230
|
T_RETURNS=230
|
||||||
T_COPY=231
|
T_REVERSE=231
|
||||||
T_HDFS=232
|
T_RIGHT=232
|
||||||
T_BATCHSIZE=233
|
T_RLIKE=233
|
||||||
T_DELIMITER=234
|
T_ROLE=234
|
||||||
T_SQLINSERT=235
|
T_ROLLBACK=235
|
||||||
T_IGNORE=236
|
T_ROW=236
|
||||||
T_WORK=237
|
T_ROWS=237
|
||||||
T_PRINT=238
|
T_ROWTYPE=238
|
||||||
T_QUIT=239
|
T_ROW_COUNT=239
|
||||||
T_RAISE=240
|
T_RR=240
|
||||||
T_RESIGNAL=241
|
T_RS=241
|
||||||
T_SQLSTATE=242
|
T_PWD=242
|
||||||
T_VALUE=243
|
T_TRIM=243
|
||||||
T_ROLLBACK=244
|
T_SCHEMA=244
|
||||||
T_CURRENT=245
|
T_SECOND=245
|
||||||
T_CURRENT_SCHEMA=246
|
T_SECONDS=246
|
||||||
T_ANSI_NULLS=247
|
T_SECURITY=247
|
||||||
T_ANSI_PADDING=248
|
T_SEGMENT=248
|
||||||
T_NOCOUNT=249
|
T_SEL=249
|
||||||
T_QUOTED_IDENTIFIER=250
|
T_SELECT=250
|
||||||
T_XACT_ABORT=251
|
T_SET=251
|
||||||
T_OFF=252
|
T_SESSION=252
|
||||||
T_QUERY_BAND=253
|
T_SESSIONS=253
|
||||||
T_NONE=254
|
T_SETS=254
|
||||||
T_SESSION=255
|
T_SHARE=255
|
||||||
T_SIGNAL=256
|
T_SIGNAL=256
|
||||||
T_SUMMARY=257
|
T_SIMPLE_DOUBLE=257
|
||||||
T_TOP=258
|
T_SIMPLE_FLOAT=258
|
||||||
T_LIMIT=259
|
T_SIMPLE_INTEGER=259
|
||||||
T_TRUNCATE=260
|
T_SMALLDATETIME=260
|
||||||
T_USE=261
|
T_SMALLINT=261
|
||||||
T_WHILE=262
|
T_SQL=262
|
||||||
T_DO=263
|
T_SQLEXCEPTION=263
|
||||||
T_LOOP=264
|
T_SQLINSERT=264
|
||||||
T_REVERSE=265
|
T_SQLSTATE=265
|
||||||
T_DOT2=266
|
T_SQLWARNING=266
|
||||||
T_STEP=267
|
T_STATS=267
|
||||||
L_LABEL=268
|
T_STATISTICS=268
|
||||||
T_LESS=269
|
T_STEP=269
|
||||||
T_GREATER=270
|
T_STORAGE=270
|
||||||
T_USING=271
|
T_STORED=271
|
||||||
T_UNION=272
|
T_STRING=272
|
||||||
T_ALL=273
|
T_SUBDIR=273
|
||||||
T_EXCEPT=274
|
T_SUBSTRING=274
|
||||||
T_INTERSECT=275
|
T_SUM=275
|
||||||
T_SELECT=276
|
T_SUMMARY=276
|
||||||
T_SEL=277
|
T_SYS_REFCURSOR=277
|
||||||
T_DISTINCT=278
|
T_TABLE=278
|
||||||
T_TITLE=279
|
T_TABLESPACE=279
|
||||||
L_S_STRING=280
|
T_TEMPORARY=280
|
||||||
T_INNER=281
|
T_TERMINATED=281
|
||||||
T_JOIN=282
|
T_TEXTIMAGE_ON=282
|
||||||
T_LEFT=283
|
T_THEN=283
|
||||||
T_RIGHT=284
|
T_TIMESTAMP=284
|
||||||
T_FULL=285
|
T_TINYINT=285
|
||||||
T_OUTER=286
|
T_TITLE=286
|
||||||
T_WHERE=287
|
T_TO=287
|
||||||
T_GROUP=288
|
T_TOP=288
|
||||||
T_HAVING=289
|
T_TRANSACTION=289
|
||||||
T_QUALIFY=290
|
T_TRUE=290
|
||||||
T_ORDER=291
|
T_TRUNCATE=291
|
||||||
T_RR=292
|
T_TYPE=292
|
||||||
T_RS=293
|
T_UNION=293
|
||||||
T_UR=294
|
T_UNIQUE=294
|
||||||
T_AND=295
|
T_UPDATE=295
|
||||||
T_KEEP=296
|
T_UR=296
|
||||||
T_EXCLUSIVE=297
|
T_USE=297
|
||||||
T_SHARE=298
|
T_USING=298
|
||||||
T_LOCKS=299
|
T_VALUE=299
|
||||||
T_MERGE=300
|
T_VALUES=300
|
||||||
T_MATCHED=301
|
T_VAR=301
|
||||||
T_DESCRIBE=302
|
T_VARCHAR=302
|
||||||
T_BETWEEN=303
|
T_VARCHAR2=303
|
||||||
T_EQUAL2=304
|
T_VARYING=304
|
||||||
T_NOTEQUAL=305
|
T_VOLATILE=305
|
||||||
T_NOTEQUAL2=306
|
T_WHEN=306
|
||||||
T_LESSEQUAL=307
|
T_WHERE=307
|
||||||
T_GREATEREQUAL=308
|
T_WHILE=308
|
||||||
T_RLIKE=309
|
T_WITH=309
|
||||||
T_REGEXP=310
|
T_WITHOUT=310
|
||||||
T_MUL=311
|
T_WORK=311
|
||||||
T_DIV=312
|
T_XACT_ABORT=312
|
||||||
T_ADD=313
|
T_XML=313
|
||||||
T_SUB=314
|
T_YES=314
|
||||||
T_INTERVAL=315
|
T_ACTIVITY_COUNT=315
|
||||||
T_DAY=316
|
T_CUME_DIST=316
|
||||||
T_DAYS=317
|
T_CURRENT_DATE=317
|
||||||
T_MICROSECOND=318
|
T_CURRENT_TIMESTAMP=318
|
||||||
T_MICROSECONDS=319
|
T_CURRENT_USER=319
|
||||||
T_SECOND=320
|
T_DENSE_RANK=320
|
||||||
T_SECONDS=321
|
T_FIRST_VALUE=321
|
||||||
T_PIPE=322
|
T_LAG=322
|
||||||
T_CONCAT=323
|
T_LAST_VALUE=323
|
||||||
T_CASE=324
|
T_LEAD=324
|
||||||
T_ISOPEN=325
|
T_MAX_PART_STRING=325
|
||||||
T_NOTFOUND=326
|
T_MIN_PART_STRING=326
|
||||||
T_AVG=327
|
T_MAX_PART_INT=327
|
||||||
T_COUNT=328
|
T_MIN_PART_INT=328
|
||||||
T_COUNT_BIG=329
|
T_MAX_PART_DATE=329
|
||||||
T_CUME_DIST=330
|
T_MIN_PART_DATE=330
|
||||||
T_DENSE_RANK=331
|
T_PART_COUNT=331
|
||||||
T_FIRST_VALUE=332
|
T_PART_LOC=332
|
||||||
T_LAG=333
|
T_RANK=333
|
||||||
T_LAST_VALUE=334
|
T_ROW_NUMBER=334
|
||||||
T_LEAD=335
|
T_STDEV=335
|
||||||
T_MIN=336
|
T_SYSDATE=336
|
||||||
T_RANK=337
|
T_VARIANCE=337
|
||||||
T_ROW_NUMBER=338
|
T_USER=338
|
||||||
T_STDEV=339
|
T_ADD=339
|
||||||
T_VAR=340
|
T_COLON=340
|
||||||
T_VARIANCE=341
|
T_COMMA=341
|
||||||
T_OVER=342
|
T_PIPE=342
|
||||||
T_PARTITION=343
|
T_DIV=343
|
||||||
T_ACTIVITY_COUNT=344
|
T_DOT=344
|
||||||
T_CAST=345
|
T_DOT2=345
|
||||||
T_CURRENT_DATE=346
|
T_EQUAL=346
|
||||||
T_CURRENT_TIMESTAMP=347
|
T_EQUAL2=347
|
||||||
T_CURRENT_USER=348
|
T_SHARP=348
|
||||||
T_USER=349
|
T_NOTE=349
|
||||||
T_MAX_PART_STRING=350
|
T_NOTEQUAL=350
|
||||||
T_MIN_PART_STRING=351
|
T_NOTEQUAL2=351
|
||||||
T_MAX_PART_INT=352
|
T_GREATER=352
|
||||||
T_MIN_PART_INT=353
|
T_GREATEREQUAL=353
|
||||||
T_MAX_PART_DATE=354
|
T_LESS=354
|
||||||
T_MIN_PART_DATE=355
|
T_LESSEQUAL=355
|
||||||
T_PART_COUNT=356
|
T_MUL=356
|
||||||
T_PART_LOC=357
|
T_PRECENT=357
|
||||||
T_TRIM=358
|
T_CALLS=358
|
||||||
T_SUBSTRING=359
|
T_OPEN_B=359
|
||||||
T_SYSDATE=360
|
T_OPEN_P=360
|
||||||
T_HIVE=361
|
T_OPEN_SB=361
|
||||||
T_HOST=362
|
T_CLOSE_B=362
|
||||||
L_FILE=363
|
T_CLOSE_P=363
|
||||||
L_D_STRING=364
|
T_CLOSE_SB=364
|
||||||
L_DEC=365
|
T_SEMICOLON=365
|
||||||
T_TRUE=366
|
T_SUB=366
|
||||||
T_FALSE=367
|
L_ID=367
|
||||||
T_DIR=368
|
L_S_STRING=368
|
||||||
T_FILE=369
|
L_D_STRING=369
|
||||||
T_FILES=370
|
L_INT=370
|
||||||
T_NEW=371
|
L_DEC=371
|
||||||
T_PWD=372
|
L_WS=372
|
||||||
T_SESSIONS=373
|
L_M_COMMENT=373
|
||||||
T_SUBDIR=374
|
L_S_COMMENT=374
|
||||||
'@'=1
|
L_FILE=375
|
||||||
'#'=2
|
L_LABEL=376
|
||||||
'/'=3
|
'+'=339
|
||||||
'%'=4
|
':'=340
|
||||||
'.'=5
|
','=341
|
||||||
'*'=6
|
'||'=342
|
||||||
'!'=7
|
'/'=343
|
||||||
';'=8
|
'.'=344
|
||||||
'-'=9
|
'..'=345
|
||||||
'+'=10
|
'='=346
|
||||||
|
'=='=347
|
||||||
|
'#'=348
|
||||||
|
'!'=349
|
||||||
|
'<>'=350
|
||||||
|
'!='=351
|
||||||
|
'>'=352
|
||||||
|
'>='=353
|
||||||
|
'<'=354
|
||||||
|
'<='=355
|
||||||
|
'*'=356
|
||||||
|
'%'=357
|
||||||
|
'@'=358
|
||||||
|
'{'=359
|
||||||
|
'('=360
|
||||||
|
'['=361
|
||||||
|
'}'=362
|
||||||
|
')'=363
|
||||||
|
']'=364
|
||||||
|
';'=365
|
||||||
|
'-'=366
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
@ -1,20 +1,404 @@
|
|||||||
T__0=1
|
T_ACTION=1
|
||||||
T__1=2
|
T_ADD2=2
|
||||||
T__2=3
|
T_ALL=3
|
||||||
T__3=4
|
T_ALLOCATE=4
|
||||||
T__4=5
|
T_ALTER=5
|
||||||
T__5=6
|
T_AND=6
|
||||||
T__6=7
|
T_ANSI_NULLS=7
|
||||||
T__7=8
|
T_ANSI_PADDING=8
|
||||||
T__8=9
|
T_AS=9
|
||||||
T__9=10
|
T_ASC=10
|
||||||
'@'=1
|
T_ASSOCIATE=11
|
||||||
'#'=2
|
T_AT=12
|
||||||
'/'=3
|
T_AUTO_INCREMENT=13
|
||||||
'%'=4
|
T_AVG=14
|
||||||
'.'=5
|
T_BATCHSIZE=15
|
||||||
'*'=6
|
T_BEGIN=16
|
||||||
'!'=7
|
T_BETWEEN=17
|
||||||
';'=8
|
T_BIGINT=18
|
||||||
'-'=9
|
T_BINARY_DOUBLE=19
|
||||||
'+'=10
|
T_BINARY_FLOAT=20
|
||||||
|
T_BINARY_INTEGER=21
|
||||||
|
T_BIT=22
|
||||||
|
T_BODY=23
|
||||||
|
T_BREAK=24
|
||||||
|
T_BY=25
|
||||||
|
T_BYTE=26
|
||||||
|
T_CALL=27
|
||||||
|
T_CALLER=28
|
||||||
|
T_CASCADE=29
|
||||||
|
T_CASE=30
|
||||||
|
T_CASESPECIFIC=31
|
||||||
|
T_CAST=32
|
||||||
|
T_CHAR=33
|
||||||
|
T_CHARACTER=34
|
||||||
|
T_CHARSET=35
|
||||||
|
T_CLIENT=36
|
||||||
|
T_CLOSE=37
|
||||||
|
T_CLUSTERED=38
|
||||||
|
T_CMP=39
|
||||||
|
T_COLLECT=40
|
||||||
|
T_COLLECTION=41
|
||||||
|
T_COLUMN=42
|
||||||
|
T_COMMENT=43
|
||||||
|
T_CONSTANT=44
|
||||||
|
T_COMMIT=45
|
||||||
|
T_COMPRESS=46
|
||||||
|
T_CONCAT=47
|
||||||
|
T_CONDITION=48
|
||||||
|
T_CONSTRAINT=49
|
||||||
|
T_CONTINUE=50
|
||||||
|
T_COPY=51
|
||||||
|
T_COUNT=52
|
||||||
|
T_COUNT_BIG=53
|
||||||
|
T_CREATE=54
|
||||||
|
T_CREATION=55
|
||||||
|
T_CREATOR=56
|
||||||
|
T_CS=57
|
||||||
|
T_CURRENT=58
|
||||||
|
T_CURRENT_SCHEMA=59
|
||||||
|
T_CURSOR=60
|
||||||
|
T_DATABASE=61
|
||||||
|
T_DATA=62
|
||||||
|
T_DATE=63
|
||||||
|
T_DATETIME=64
|
||||||
|
T_DAY=65
|
||||||
|
T_DAYS=66
|
||||||
|
T_DEC=67
|
||||||
|
T_DECIMAL=68
|
||||||
|
T_DECLARE=69
|
||||||
|
T_DEFAULT=70
|
||||||
|
T_DEFERRED=71
|
||||||
|
T_DEFINED=72
|
||||||
|
T_DEFINER=73
|
||||||
|
T_DEFINITION=74
|
||||||
|
T_DELETE=75
|
||||||
|
T_DELIMITED=76
|
||||||
|
T_DELIMITER=77
|
||||||
|
T_DESC=78
|
||||||
|
T_DESCRIBE=79
|
||||||
|
T_DIAGNOSTICS=80
|
||||||
|
T_DIR=81
|
||||||
|
T_DIRECTORY=82
|
||||||
|
T_DISTINCT=83
|
||||||
|
T_DISTRIBUTE=84
|
||||||
|
T_DO=85
|
||||||
|
T_DOUBLE=86
|
||||||
|
T_DROP=87
|
||||||
|
T_DYNAMIC=88
|
||||||
|
T_ELSE=89
|
||||||
|
T_ELSEIF=90
|
||||||
|
T_ELSIF=91
|
||||||
|
T_ENABLE=92
|
||||||
|
T_END=93
|
||||||
|
T_ENGINE=94
|
||||||
|
T_ESCAPED=95
|
||||||
|
T_EXCEPT=96
|
||||||
|
T_EXEC=97
|
||||||
|
T_EXECUTE=98
|
||||||
|
T_EXCEPTION=99
|
||||||
|
T_EXCLUSIVE=100
|
||||||
|
T_EXISTS=101
|
||||||
|
T_EXIT=102
|
||||||
|
T_FALLBACK=103
|
||||||
|
T_FALSE=104
|
||||||
|
T_FETCH=105
|
||||||
|
T_FIELDS=106
|
||||||
|
T_FILE=107
|
||||||
|
T_FILES=108
|
||||||
|
T_FLOAT=109
|
||||||
|
T_FOR=110
|
||||||
|
T_FOREIGN=111
|
||||||
|
T_FORMAT=112
|
||||||
|
T_FOUND=113
|
||||||
|
T_FROM=114
|
||||||
|
T_FULL=115
|
||||||
|
T_FUNCTION=116
|
||||||
|
T_GET=117
|
||||||
|
T_GLOBAL=118
|
||||||
|
T_GO=119
|
||||||
|
T_GRANT=120
|
||||||
|
T_GROUP=121
|
||||||
|
T_HANDLER=122
|
||||||
|
T_HASH=123
|
||||||
|
T_HAVING=124
|
||||||
|
T_HDFS=125
|
||||||
|
T_HIVE=126
|
||||||
|
T_HOST=127
|
||||||
|
T_IDENTITY=128
|
||||||
|
T_IF=129
|
||||||
|
T_IGNORE=130
|
||||||
|
T_IMMEDIATE=131
|
||||||
|
T_IN=132
|
||||||
|
T_INCLUDE=133
|
||||||
|
T_INDEX=134
|
||||||
|
T_INITRANS=135
|
||||||
|
T_INNER=136
|
||||||
|
T_INOUT=137
|
||||||
|
T_INSERT=138
|
||||||
|
T_INT=139
|
||||||
|
T_INT2=140
|
||||||
|
T_INT4=141
|
||||||
|
T_INT8=142
|
||||||
|
T_INTEGER=143
|
||||||
|
T_INTERSECT=144
|
||||||
|
T_INTERVAL=145
|
||||||
|
T_INTO=146
|
||||||
|
T_INVOKER=147
|
||||||
|
T_IS=148
|
||||||
|
T_ISOPEN=149
|
||||||
|
T_ITEMS=150
|
||||||
|
T_JOIN=151
|
||||||
|
T_KEEP=152
|
||||||
|
T_KEY=153
|
||||||
|
T_KEYS=154
|
||||||
|
T_LANGUAGE=155
|
||||||
|
T_LEAVE=156
|
||||||
|
T_LEFT=157
|
||||||
|
T_LIKE=158
|
||||||
|
T_LIMIT=159
|
||||||
|
T_LINES=160
|
||||||
|
T_LOCAL=161
|
||||||
|
T_LOCATION=162
|
||||||
|
T_LOCATOR=163
|
||||||
|
T_LOCATORS=164
|
||||||
|
T_LOCKS=165
|
||||||
|
T_LOG=166
|
||||||
|
T_LOGGED=167
|
||||||
|
T_LOGGING=168
|
||||||
|
T_LOOP=169
|
||||||
|
T_MAP=170
|
||||||
|
T_MATCHED=171
|
||||||
|
T_MAX=172
|
||||||
|
T_MAXTRANS=173
|
||||||
|
T_MERGE=174
|
||||||
|
T_MESSAGE_TEXT=175
|
||||||
|
T_MICROSECOND=176
|
||||||
|
T_MICROSECONDS=177
|
||||||
|
T_MIN=178
|
||||||
|
T_MULTISET=179
|
||||||
|
T_NCHAR=180
|
||||||
|
T_NEW=181
|
||||||
|
T_NVARCHAR=182
|
||||||
|
T_NO=183
|
||||||
|
T_NOCOUNT=184
|
||||||
|
T_NOCOMPRESS=185
|
||||||
|
T_NOLOGGING=186
|
||||||
|
T_NONE=187
|
||||||
|
T_NOT=188
|
||||||
|
T_NOTFOUND=189
|
||||||
|
T_NULL=190
|
||||||
|
T_NUMERIC=191
|
||||||
|
T_NUMBER=192
|
||||||
|
T_OBJECT=193
|
||||||
|
T_OFF=194
|
||||||
|
T_ON=195
|
||||||
|
T_ONLY=196
|
||||||
|
T_OPEN=197
|
||||||
|
T_OR=198
|
||||||
|
T_ORDER=199
|
||||||
|
T_OUT=200
|
||||||
|
T_OUTER=201
|
||||||
|
T_OVER=202
|
||||||
|
T_OVERWRITE=203
|
||||||
|
T_OWNER=204
|
||||||
|
T_PACKAGE=205
|
||||||
|
T_PARTITION=206
|
||||||
|
T_PCTFREE=207
|
||||||
|
T_PCTUSED=208
|
||||||
|
T_PLS_INTEGER=209
|
||||||
|
T_PRECISION=210
|
||||||
|
T_PRESERVE=211
|
||||||
|
T_PRIMARY=212
|
||||||
|
T_PRINT=213
|
||||||
|
T_PROC=214
|
||||||
|
T_PROCEDURE=215
|
||||||
|
T_QUALIFY=216
|
||||||
|
T_QUERY_BAND=217
|
||||||
|
T_QUIT=218
|
||||||
|
T_QUOTED_IDENTIFIER=219
|
||||||
|
T_RAISE=220
|
||||||
|
T_REAL=221
|
||||||
|
T_REFERENCES=222
|
||||||
|
T_REGEXP=223
|
||||||
|
T_REPLACE=224
|
||||||
|
T_RESIGNAL=225
|
||||||
|
T_RESTRICT=226
|
||||||
|
T_RESULT=227
|
||||||
|
T_RESULT_SET_LOCATOR=228
|
||||||
|
T_RETURN=229
|
||||||
|
T_RETURNS=230
|
||||||
|
T_REVERSE=231
|
||||||
|
T_RIGHT=232
|
||||||
|
T_RLIKE=233
|
||||||
|
T_ROLE=234
|
||||||
|
T_ROLLBACK=235
|
||||||
|
T_ROW=236
|
||||||
|
T_ROWS=237
|
||||||
|
T_ROWTYPE=238
|
||||||
|
T_ROW_COUNT=239
|
||||||
|
T_RR=240
|
||||||
|
T_RS=241
|
||||||
|
T_PWD=242
|
||||||
|
T_TRIM=243
|
||||||
|
T_SCHEMA=244
|
||||||
|
T_SECOND=245
|
||||||
|
T_SECONDS=246
|
||||||
|
T_SECURITY=247
|
||||||
|
T_SEGMENT=248
|
||||||
|
T_SEL=249
|
||||||
|
T_SELECT=250
|
||||||
|
T_SET=251
|
||||||
|
T_SESSION=252
|
||||||
|
T_SESSIONS=253
|
||||||
|
T_SETS=254
|
||||||
|
T_SHARE=255
|
||||||
|
T_SIGNAL=256
|
||||||
|
T_SIMPLE_DOUBLE=257
|
||||||
|
T_SIMPLE_FLOAT=258
|
||||||
|
T_SIMPLE_INTEGER=259
|
||||||
|
T_SMALLDATETIME=260
|
||||||
|
T_SMALLINT=261
|
||||||
|
T_SQL=262
|
||||||
|
T_SQLEXCEPTION=263
|
||||||
|
T_SQLINSERT=264
|
||||||
|
T_SQLSTATE=265
|
||||||
|
T_SQLWARNING=266
|
||||||
|
T_STATS=267
|
||||||
|
T_STATISTICS=268
|
||||||
|
T_STEP=269
|
||||||
|
T_STORAGE=270
|
||||||
|
T_STORED=271
|
||||||
|
T_STRING=272
|
||||||
|
T_SUBDIR=273
|
||||||
|
T_SUBSTRING=274
|
||||||
|
T_SUM=275
|
||||||
|
T_SUMMARY=276
|
||||||
|
T_SYS_REFCURSOR=277
|
||||||
|
T_TABLE=278
|
||||||
|
T_TABLESPACE=279
|
||||||
|
T_TEMPORARY=280
|
||||||
|
T_TERMINATED=281
|
||||||
|
T_TEXTIMAGE_ON=282
|
||||||
|
T_THEN=283
|
||||||
|
T_TIMESTAMP=284
|
||||||
|
T_TINYINT=285
|
||||||
|
T_TITLE=286
|
||||||
|
T_TO=287
|
||||||
|
T_TOP=288
|
||||||
|
T_TRANSACTION=289
|
||||||
|
T_TRUE=290
|
||||||
|
T_TRUNCATE=291
|
||||||
|
T_TYPE=292
|
||||||
|
T_UNION=293
|
||||||
|
T_UNIQUE=294
|
||||||
|
T_UPDATE=295
|
||||||
|
T_UR=296
|
||||||
|
T_USE=297
|
||||||
|
T_USING=298
|
||||||
|
T_VALUE=299
|
||||||
|
T_VALUES=300
|
||||||
|
T_VAR=301
|
||||||
|
T_VARCHAR=302
|
||||||
|
T_VARCHAR2=303
|
||||||
|
T_VARYING=304
|
||||||
|
T_VOLATILE=305
|
||||||
|
T_WHEN=306
|
||||||
|
T_WHERE=307
|
||||||
|
T_WHILE=308
|
||||||
|
T_WITH=309
|
||||||
|
T_WITHOUT=310
|
||||||
|
T_WORK=311
|
||||||
|
T_XACT_ABORT=312
|
||||||
|
T_XML=313
|
||||||
|
T_YES=314
|
||||||
|
T_ACTIVITY_COUNT=315
|
||||||
|
T_CUME_DIST=316
|
||||||
|
T_CURRENT_DATE=317
|
||||||
|
T_CURRENT_TIMESTAMP=318
|
||||||
|
T_CURRENT_USER=319
|
||||||
|
T_DENSE_RANK=320
|
||||||
|
T_FIRST_VALUE=321
|
||||||
|
T_LAG=322
|
||||||
|
T_LAST_VALUE=323
|
||||||
|
T_LEAD=324
|
||||||
|
T_MAX_PART_STRING=325
|
||||||
|
T_MIN_PART_STRING=326
|
||||||
|
T_MAX_PART_INT=327
|
||||||
|
T_MIN_PART_INT=328
|
||||||
|
T_MAX_PART_DATE=329
|
||||||
|
T_MIN_PART_DATE=330
|
||||||
|
T_PART_COUNT=331
|
||||||
|
T_PART_LOC=332
|
||||||
|
T_RANK=333
|
||||||
|
T_ROW_NUMBER=334
|
||||||
|
T_STDEV=335
|
||||||
|
T_SYSDATE=336
|
||||||
|
T_VARIANCE=337
|
||||||
|
T_USER=338
|
||||||
|
T_ADD=339
|
||||||
|
T_COLON=340
|
||||||
|
T_COMMA=341
|
||||||
|
T_PIPE=342
|
||||||
|
T_DIV=343
|
||||||
|
T_DOT=344
|
||||||
|
T_DOT2=345
|
||||||
|
T_EQUAL=346
|
||||||
|
T_EQUAL2=347
|
||||||
|
T_SHARP=348
|
||||||
|
T_NOTE=349
|
||||||
|
T_NOTEQUAL=350
|
||||||
|
T_NOTEQUAL2=351
|
||||||
|
T_GREATER=352
|
||||||
|
T_GREATEREQUAL=353
|
||||||
|
T_LESS=354
|
||||||
|
T_LESSEQUAL=355
|
||||||
|
T_MUL=356
|
||||||
|
T_PRECENT=357
|
||||||
|
T_CALLS=358
|
||||||
|
T_OPEN_B=359
|
||||||
|
T_OPEN_P=360
|
||||||
|
T_OPEN_SB=361
|
||||||
|
T_CLOSE_B=362
|
||||||
|
T_CLOSE_P=363
|
||||||
|
T_CLOSE_SB=364
|
||||||
|
T_SEMICOLON=365
|
||||||
|
T_SUB=366
|
||||||
|
L_ID=367
|
||||||
|
L_S_STRING=368
|
||||||
|
L_D_STRING=369
|
||||||
|
L_INT=370
|
||||||
|
L_DEC=371
|
||||||
|
L_WS=372
|
||||||
|
L_M_COMMENT=373
|
||||||
|
L_S_COMMENT=374
|
||||||
|
L_FILE=375
|
||||||
|
L_LABEL=376
|
||||||
|
'+'=339
|
||||||
|
':'=340
|
||||||
|
','=341
|
||||||
|
'||'=342
|
||||||
|
'/'=343
|
||||||
|
'.'=344
|
||||||
|
'..'=345
|
||||||
|
'='=346
|
||||||
|
'=='=347
|
||||||
|
'#'=348
|
||||||
|
'!'=349
|
||||||
|
'<>'=350
|
||||||
|
'!='=351
|
||||||
|
'>'=352
|
||||||
|
'>='=353
|
||||||
|
'<'=354
|
||||||
|
'<='=355
|
||||||
|
'*'=356
|
||||||
|
'%'=357
|
||||||
|
'@'=358
|
||||||
|
'{'=359
|
||||||
|
'('=360
|
||||||
|
'['=361
|
||||||
|
'}'=362
|
||||||
|
')'=363
|
||||||
|
']'=364
|
||||||
|
';'=365
|
||||||
|
'-'=366
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
20
src/parser/flinksql.ts
Normal file
20
src/parser/flinksql.ts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import { InputStream, CommonTokenStream, Lexer } from 'antlr4';
|
||||||
|
import { FlinkSqlLexer } from '../lib/flinksql/FlinkSqlLexer';
|
||||||
|
import { FlinkSqlParser } from '../lib/flinksql/FlinkSqlParser';
|
||||||
|
export * from '../lib/flinksql/FlinkSqlParserListener';
|
||||||
|
export * from '../lib/flinksql/FlinkSqlParserVisitor';
|
||||||
|
|
||||||
|
import BasicParser from './common/BasicParser';
|
||||||
|
|
||||||
|
export default class FlinkSQL extends BasicParser {
|
||||||
|
public createLexer(input: string): Lexer {
|
||||||
|
const chars = new InputStream(input.toUpperCase()); // Some Lexer only support uppercase token, So you need transform
|
||||||
|
const lexer = <unknown> new FlinkSqlLexer(chars) as Lexer;
|
||||||
|
return lexer;
|
||||||
|
}
|
||||||
|
public createParserFromLexer(lexer: Lexer) {
|
||||||
|
const tokenStream = new CommonTokenStream(lexer);
|
||||||
|
return new FlinkSqlParser(tokenStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
import { InputStream, CommonTokenStream, Lexer } from 'antlr4';
|
import { InputStream, CommonTokenStream, Lexer } from 'antlr4';
|
||||||
import { HiveSqlLexer } from '../lib/hive/HiveSqlLexer';
|
import { HiveSqlLexer } from '../lib/hive/HiveSqlLexer';
|
||||||
import { HiveSqlParser } from '../lib/hive/HiveSqlParser';
|
import { HiveSql } from '../lib/hive/HiveSql';
|
||||||
export * from '../lib/hive/HiveSqlListener';
|
export * from '../lib/hive/HiveSqlListener';
|
||||||
export * from '../lib/hive/HiveSqlVisitor';
|
export * from '../lib/hive/HiveSqlVisitor';
|
||||||
|
|
||||||
@ -14,7 +14,7 @@ export default class HiveSQL extends BasicParser {
|
|||||||
}
|
}
|
||||||
public createParserFromLexer(lexer: Lexer) {
|
public createParserFromLexer(lexer: Lexer) {
|
||||||
const tokenStream = new CommonTokenStream(lexer);
|
const tokenStream = new CommonTokenStream(lexer);
|
||||||
return new HiveSqlParser(tokenStream);
|
return new HiveSql(tokenStream);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
export * from './generic';
|
export * from './generic';
|
||||||
export * from './plsql';
|
export * from './plsql';
|
||||||
export * from './hive';
|
export * from './hive';
|
||||||
|
export * from './flinksql';
|
||||||
|
@ -1,125 +1,183 @@
|
|||||||
function replaceStrFormIndexArr(str, replaceStr, indexArr) {
|
|
||||||
let result = '';
|
|
||||||
let index = 0;
|
|
||||||
|
|
||||||
if (!indexArr || indexArr.length < 1) {
|
import { TokenType, Token, TokenReg } from './token';
|
||||||
return str;
|
|
||||||
}
|
|
||||||
for (let i = 0; i < indexArr.length; i++) {
|
|
||||||
const indexItem = indexArr[i];
|
|
||||||
const begin = indexItem.begin;
|
|
||||||
|
|
||||||
result = result + str.substring(index, begin) + replaceStr;
|
/**
|
||||||
index = indexItem.end + 1;
|
* 获取 注释 以及 分隔符 等词法信息
|
||||||
|
* @param {String} sql
|
||||||
|
*/
|
||||||
|
function lexer(input: string): Token[] {
|
||||||
|
// 记录当前字符的位置
|
||||||
|
let current = 0;
|
||||||
|
let line = 1;
|
||||||
|
// 最终的 TokenTypes 结果
|
||||||
|
const tokens: Token[] = [];
|
||||||
|
|
||||||
if (i == indexArr.length - 1) {
|
/**
|
||||||
result = result + str.substring(index);
|
* 提取 TokenType
|
||||||
|
*/
|
||||||
|
// eslint-disable-next-line
|
||||||
|
const extract = (currentChar: string, validator: RegExp, TokenType: TokenType): Token => {
|
||||||
|
let value = '';
|
||||||
|
const start = current;
|
||||||
|
while (validator.test(currentChar)) {
|
||||||
|
value += currentChar;
|
||||||
|
currentChar = input[++current];
|
||||||
}
|
}
|
||||||
}
|
return {
|
||||||
|
type: TokenType,
|
||||||
return result;
|
start: start,
|
||||||
}
|
end: current,
|
||||||
function splitSql(sql: string) {
|
lineNumber: line,
|
||||||
let haveEnd = true;
|
value: value,
|
||||||
if (!sql.endsWith(';')) {
|
|
||||||
sql += ';';
|
|
||||||
haveEnd = false;
|
|
||||||
}
|
|
||||||
interface splitParser {
|
|
||||||
index: number;
|
|
||||||
queue: string;
|
|
||||||
sqls: number[];
|
|
||||||
}
|
|
||||||
function pushSql(parser: splitParser, sql: string) {
|
|
||||||
if (!haveEnd && parser.index == sql.length - 1) {
|
|
||||||
parser.sqls.push(parser.index - 1);
|
|
||||||
parser.queue = '';
|
|
||||||
} else {
|
|
||||||
parser.sqls.push(parser.index);
|
|
||||||
parser.queue = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 处理引号
|
|
||||||
function quoteToken(parser: splitParser, sql: string): string {
|
|
||||||
const queue = parser.queue;
|
|
||||||
const endsWith = queue[queue.length - 1];
|
|
||||||
if (endsWith == '\'' || endsWith == '"') {
|
|
||||||
const nextToken = sql.indexOf(endsWith, parser.index + 1);
|
|
||||||
if (nextToken != -1) {
|
|
||||||
parser.index = nextToken;
|
|
||||||
parser.queue = '';
|
|
||||||
} else {
|
|
||||||
parser.index = sql.length - 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 处理单行注释
|
|
||||||
function singleLineCommentToken(parser: splitParser, sql: string): string {
|
|
||||||
let queue = parser.queue;
|
|
||||||
if (queue.endsWith('--')) {
|
|
||||||
const nextToken = sql.indexOf('\n', parser.index + 1);
|
|
||||||
if (nextToken != -1) {
|
|
||||||
parser.index = nextToken;
|
|
||||||
queue = '';
|
|
||||||
} else {
|
|
||||||
parser.index = sql.length - 1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// 处理多行注释
|
|
||||||
function multipleLineCommentToken(
|
|
||||||
parser: splitParser, sql: string,
|
|
||||||
): string {
|
|
||||||
const queue = parser.queue;
|
|
||||||
if (queue.endsWith('/*')) {
|
|
||||||
const nextToken = sql.indexOf('*/', parser.index + 1);
|
|
||||||
if (nextToken != -1) {
|
|
||||||
parser.index = nextToken + 1;
|
|
||||||
parser.queue = '';
|
|
||||||
} else {
|
|
||||||
parser.index = sql.length - 1;
|
|
||||||
parser.queue = '';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function splitToken(parser: splitParser, sql: string): string {
|
|
||||||
const queue = parser.queue;
|
|
||||||
if (queue.endsWith(';')) {
|
|
||||||
pushSql(parser, sql);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const parser: splitParser = {
|
|
||||||
index: 0,
|
|
||||||
queue: '',
|
|
||||||
sqls: [],
|
|
||||||
};
|
};
|
||||||
for (parser.index = 0; parser.index < sql.length; parser.index++) {
|
};
|
||||||
const char = sql[parser.index];
|
|
||||||
parser.queue += char;
|
/**
|
||||||
const tokenFuncs = [
|
* 过滤(提取) 引号中的内容
|
||||||
quoteToken,
|
*/
|
||||||
singleLineCommentToken,
|
// eslint-disable-next-line
|
||||||
multipleLineCommentToken,
|
const matchQuotation = (currentChar: string, validator: RegExp, TokenType: TokenType) => {
|
||||||
splitToken,
|
do {
|
||||||
];
|
if (currentChar === '\n') {
|
||||||
for (let i = 0; i < tokenFuncs.length; i++) {
|
line++;
|
||||||
tokenFuncs[i](parser, sql);
|
|
||||||
}
|
}
|
||||||
if (parser.index == sql.length - 1 && parser.queue) {
|
currentChar = input[++current];
|
||||||
pushSql(parser, sql);
|
} while (!validator.test(currentChar));
|
||||||
|
|
||||||
|
++current;
|
||||||
|
};
|
||||||
|
|
||||||
|
while (current < input.length) {
|
||||||
|
let char = input[current];
|
||||||
|
|
||||||
|
// 按顺序处理 换行符 反引号 单引号 双引号 注释 分号
|
||||||
|
// 引号内 可能包含注释包含的符号以及分号 所以优先处理引号里面的内容 去除干扰信息
|
||||||
|
|
||||||
|
if (char === '\n') {
|
||||||
|
line++;
|
||||||
|
current++;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TokenReg.BackQuotation.test(char)) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
matchQuotation(char, TokenReg.BackQuotation, TokenType.BackQuotation);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
return parser.sqls;
|
|
||||||
|
if (TokenReg.SingleQuotation.test(char)) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
matchQuotation(char, TokenReg.SingleQuotation, TokenType.SingleQuotation);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (TokenReg.DoubleQuotation.test(char)) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
matchQuotation(char, TokenReg.DoubleQuotation, TokenType.DoubleQuotation);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理单行注释,以--开始,\n 结束
|
||||||
|
if (char === '-' && input[current + 1] === '-') {
|
||||||
|
let value = '';
|
||||||
|
const start = current;
|
||||||
|
|
||||||
|
while (char !== '\n') {
|
||||||
|
value += char;
|
||||||
|
char = input[++current];
|
||||||
|
}
|
||||||
|
tokens.push({
|
||||||
|
type: TokenType.Comment,
|
||||||
|
value,
|
||||||
|
start: start,
|
||||||
|
lineNumber: line,
|
||||||
|
end: current,
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理多行注释,以 /* 开始, */结束
|
||||||
|
if (char === '/' && input[current + 1] === '*') {
|
||||||
|
let value = '';
|
||||||
|
const start = current;
|
||||||
|
const startLine = line;
|
||||||
|
|
||||||
|
while (!(char === '/' && input[current - 1] === '*')) {
|
||||||
|
if (char === '\n') {
|
||||||
|
line++;
|
||||||
|
}
|
||||||
|
value += char;
|
||||||
|
char = input[++current];
|
||||||
|
}
|
||||||
|
value += char;
|
||||||
|
++current;
|
||||||
|
|
||||||
|
tokens.push({
|
||||||
|
type: TokenType.Comment,
|
||||||
|
value,
|
||||||
|
start: start,
|
||||||
|
lineNumber: startLine,
|
||||||
|
end: current,
|
||||||
|
});
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理结束符 ;
|
||||||
|
if (TokenReg.StatementTerminator.test(char)) {
|
||||||
|
const newToken = extract(
|
||||||
|
char,
|
||||||
|
TokenReg.StatementTerminator,
|
||||||
|
TokenType.StatementTerminator,
|
||||||
|
);
|
||||||
|
tokens.push(newToken);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
current++;
|
||||||
|
}
|
||||||
|
return tokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分割sql
|
||||||
|
* @param {String} sql
|
||||||
|
*/
|
||||||
|
function splitSql(sql: string) {
|
||||||
|
const tokens = lexer(sql);
|
||||||
|
const sqlArr = [];
|
||||||
|
let startIndex = 0;
|
||||||
|
tokens.forEach((ele: Token) => {
|
||||||
|
if (ele.type === TokenType.StatementTerminator) {
|
||||||
|
sqlArr.push(sql.slice(startIndex, ele.end));
|
||||||
|
startIndex = ele.end;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (startIndex < sql.length) {
|
||||||
|
sqlArr.push(sql.slice(startIndex));
|
||||||
|
}
|
||||||
|
return sqlArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 清除注释和前后空格
|
||||||
|
* @param {String} sql
|
||||||
|
*/
|
||||||
|
function cleanSql(sql: string) {
|
||||||
|
sql.trim(); // 删除前后空格
|
||||||
|
const tokens = lexer(sql);
|
||||||
|
let resultSql = '';
|
||||||
|
let startIndex = 0;
|
||||||
|
tokens.forEach((ele: Token) => {
|
||||||
|
if (ele.type === TokenType.Comment) {
|
||||||
|
resultSql += sql.slice(startIndex, ele.start);
|
||||||
|
startIndex = ele.end + 1;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
resultSql += sql.slice(startIndex);
|
||||||
|
return resultSql;
|
||||||
}
|
}
|
||||||
export {
|
export {
|
||||||
replaceStrFormIndexArr,
|
cleanSql,
|
||||||
splitSql,
|
splitSql,
|
||||||
|
lexer,
|
||||||
};
|
};
|
||||||
|
46
src/utils/token.ts
Executable file
46
src/utils/token.ts
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
export enum TokenType {
|
||||||
|
/**
|
||||||
|
* Enclosed in single/double/back quotation, `` Symbol
|
||||||
|
* 'abc', "abc", `abc`
|
||||||
|
*/
|
||||||
|
SingleQuotation = 'SingleQuotation',
|
||||||
|
DoubleQuotation = 'DoubleQuotation',
|
||||||
|
BackQuotation = 'BackQuotation',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Language element type
|
||||||
|
*/
|
||||||
|
Comment = 'Comment',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Statement
|
||||||
|
*/
|
||||||
|
StatementTerminator = 'StatementTerminator',
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Others
|
||||||
|
*/
|
||||||
|
Error = 'Error'
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token object
|
||||||
|
*/
|
||||||
|
export interface Token {
|
||||||
|
type: TokenType,
|
||||||
|
value: string;
|
||||||
|
start: number;
|
||||||
|
end: number;
|
||||||
|
lineNumber: number;
|
||||||
|
message?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Token recognition rules
|
||||||
|
*/
|
||||||
|
export const TokenReg = {
|
||||||
|
[TokenType.StatementTerminator]: /[;]/,
|
||||||
|
[TokenType.SingleQuotation]: /[']/,
|
||||||
|
[TokenType.DoubleQuotation]: /["]/,
|
||||||
|
[TokenType.BackQuotation]: /[`]/,
|
||||||
|
};
|
11
test/parser/flinksql/lexer.test.ts
Normal file
11
test/parser/flinksql/lexer.test.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import SQLParser from '../../../src/parser/flinksql';
|
||||||
|
describe('FlinkSQL Lexer tests', () => {
|
||||||
|
const parser = new SQLParser();
|
||||||
|
|
||||||
|
const sql = 'SELECT * FROM table1';
|
||||||
|
const tokens = parser.getAllTokens(sql);
|
||||||
|
|
||||||
|
test('token counts', () => {
|
||||||
|
expect(tokens.length).toBe(7);
|
||||||
|
});
|
||||||
|
});
|
24
test/parser/flinksql/listener.test.ts
Normal file
24
test/parser/flinksql/listener.test.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import
|
||||||
|
SQLParser, { FlinkSqlParserListener }
|
||||||
|
from '../../../src/parser/flinksql';
|
||||||
|
|
||||||
|
describe('Flink SQL Listener Tests', () => {
|
||||||
|
const expectTableName = 'user1';
|
||||||
|
const sql = `select id,name,sex from ${expectTableName};`;
|
||||||
|
const parser = new SQLParser();
|
||||||
|
|
||||||
|
const parserTree = parser.parse(sql);
|
||||||
|
|
||||||
|
test('Listener enterTableName', async () => {
|
||||||
|
let result = '';
|
||||||
|
class MyListener extends FlinkSqlParserListener {
|
||||||
|
enterTableExpression(ctx): void {
|
||||||
|
result = ctx.getText().toLowerCase();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const listenTableName: any = new MyListener();
|
||||||
|
|
||||||
|
await parser.listen(listenTableName, parserTree);
|
||||||
|
expect(result).toBe(expectTableName);
|
||||||
|
});
|
||||||
|
});
|
221
test/parser/flinksql/syntax.test.ts
Normal file
221
test/parser/flinksql/syntax.test.ts
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
import SQLParser from '../../../src/parser/flinksql';
|
||||||
|
import sqlMockData from '../../mock/flinkSql';
|
||||||
|
|
||||||
|
describe('FlinkSQL Syntax Tests', () => {
|
||||||
|
const parser = new SQLParser();
|
||||||
|
|
||||||
|
// Create statements
|
||||||
|
test('Test simple CreateTable Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
CREATE TABLE Orders (
|
||||||
|
user BIGINT
|
||||||
|
) WITH (
|
||||||
|
"connector" = "kafka",
|
||||||
|
"scan.startup.mode" = "earliest-offset"
|
||||||
|
);
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple CreateDatabase Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
CREATE DATABASE IF NOT EXISTS dataApi
|
||||||
|
WITH (
|
||||||
|
"owner" = "admin"
|
||||||
|
);
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple CreateView Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
CREATE TEMPORARY VIEW IF NOT EXISTS tempView
|
||||||
|
AS SELECT product, amount FROM Orders;
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple CreateFunction Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
CREATE TEMPORARY FUNCTION IF NOT EXISTS tempFunction AS 'SimpleUdf';
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Alter statements
|
||||||
|
test('Test simple AlterTable Statement', () => {
|
||||||
|
const sql = `ALTER TABLE Orders RENAME TO NewOrders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple AlterDatabase Statement', () => {
|
||||||
|
const sql = `ALTER DATABASE tempDB SET ("key1"="value1");`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple AlterFunction Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
ALTER TEMPORARY FUNCTION IF EXISTS tempFunction AS 'SimpleUdf';
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Drop statements
|
||||||
|
test('Test simple DropTable Statement', () => {
|
||||||
|
const sql = `DROP TABLE IF EXISTS Orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple DropDatabase Statement', () => {
|
||||||
|
const sql = `DROP DATABASE IF EXISTS Orders RESTRICT;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple DropView Statement', () => {
|
||||||
|
const sql = `DROP TEMPORARY VIEW IF EXISTS Orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test simple DropFunction Statement', () => {
|
||||||
|
const sql = `DROP TEMPORARY FUNCTION IF EXISTS Orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// insert statements
|
||||||
|
test('Test one simple Insert Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
INSERT INTO students VALUES
|
||||||
|
('Amy Smith', '123 Park Ave, San Jose', 111111);
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test two simple Insert Statement', () => {
|
||||||
|
const sql = `
|
||||||
|
INSERT INTO students PARTITION (student_id = 444444)
|
||||||
|
SELECT name, address FROM persons WHERE name = "Dora Williams";
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// query statements
|
||||||
|
test('Test simple Select Statement', () => {
|
||||||
|
const sql = `SELECT product, amount FROM Orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with where clause', () => {
|
||||||
|
const sql = `SELECT * FROM person WHERE id = 200 OR id = 300;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with group by clause', () => {
|
||||||
|
const sql = `SELECT id, sum(quantity) FROM dealer GROUP BY id;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with having clause', () => {
|
||||||
|
const sql = `
|
||||||
|
SELECT city, sum(quantity) AS sum
|
||||||
|
FROM dealer GROUP BY city HAVING city = 'Fremont';
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with order by clause', () => {
|
||||||
|
const sql = `SELECT name, age FROM person ORDER BY age;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with limit clause', () => {
|
||||||
|
const sql = `SELECT name, age FROM person ORDER BY name LIMIT 2;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test Select Statement with join', () => {
|
||||||
|
const sql = `
|
||||||
|
SELECT id, name, employee.deptno, deptname FROM employee
|
||||||
|
FULL JOIN department ON employee.deptno = department.deptno;
|
||||||
|
`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// describe statements
|
||||||
|
test('Test simple Describe Statement', () => {
|
||||||
|
const sql = `DESCRIBE Orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// describe statements
|
||||||
|
test('Test simple Explain Statement', () => {
|
||||||
|
const sql = `EXPLAIN tempTable FOR SELECT k, SUM(v) FROM oneTable;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// use statements
|
||||||
|
test('Test simple Use Statement', () => {
|
||||||
|
const sql = `USE CATALOG orders;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
// show statements
|
||||||
|
test('Test simple Show Statement', () => {
|
||||||
|
const sql = `SHOW CATALOGS;`;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Test complex sql Statement one', () => {
|
||||||
|
const sql = sqlMockData.sqlStrOne;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement two', () => {
|
||||||
|
const sql = sqlMockData.sqlStrTwo;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement three', () => {
|
||||||
|
const sql = sqlMockData.sqlStrThree;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement four', () => {
|
||||||
|
const sql = sqlMockData.sqlStrFour;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement five', () => {
|
||||||
|
const sql = sqlMockData.sqlStrFive;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement six', () => {
|
||||||
|
const sql = sqlMockData.sqlStrSix;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement seven', () => {
|
||||||
|
const sql = sqlMockData.sqlStrSeven;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement eight', () => {
|
||||||
|
const sql = sqlMockData.sqlStrEight;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
test('Test complex sql Statement nine', () => {
|
||||||
|
const sql = sqlMockData.allSqlStr;
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(0);
|
||||||
|
});
|
||||||
|
});
|
27
test/parser/flinksql/visitor.test.ts
Normal file
27
test/parser/flinksql/visitor.test.ts
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import SQLParser, { FlinkSqlParserVisitor } from '../../../src/parser/flinksql';
|
||||||
|
|
||||||
|
describe('Flink SQL Visitor Tests', () => {
|
||||||
|
const expectTableName = 'user1';
|
||||||
|
const sql = `select id,name,sex from ${expectTableName};`;
|
||||||
|
const parser = new SQLParser();
|
||||||
|
|
||||||
|
const parserTree = parser.parse(sql, (error) => {
|
||||||
|
console.log('Parse error:', error);
|
||||||
|
});
|
||||||
|
|
||||||
|
// console.log('Parser tree string:', parser.toString(parserTree));
|
||||||
|
|
||||||
|
test('Visitor visitTableName', () => {
|
||||||
|
let result = '';
|
||||||
|
class MyVisitor extends FlinkSqlParserVisitor {
|
||||||
|
visitTableExpression(ctx): void {
|
||||||
|
result = ctx.getText().toLowerCase();
|
||||||
|
super.visitTableExpression(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const visitor: any = new MyVisitor();
|
||||||
|
visitor.visit(parserTree);
|
||||||
|
|
||||||
|
expect(result).toBe(expectTableName);
|
||||||
|
});
|
||||||
|
});
|
@ -2,11 +2,15 @@ import SQLParser from '../../../src/parser/hive';
|
|||||||
|
|
||||||
describe('HiveSQL Lexer tests', () => {
|
describe('HiveSQL Lexer tests', () => {
|
||||||
const parser = new SQLParser();
|
const parser = new SQLParser();
|
||||||
// select id,name,sex from user1;
|
test('select token counts', () => {
|
||||||
const sql = 'SELECT * FROM t1';
|
const sql = 'SELECT * FROM t1';
|
||||||
const tokens = parser.getAllTokens(sql);
|
const tokens = parser.getAllTokens(sql);
|
||||||
|
expect(tokens.length).toBe(4);
|
||||||
|
});
|
||||||
|
|
||||||
test('token counts', () => {
|
test('select token counts', () => {
|
||||||
expect(tokens.length).toBe(12);
|
const sql = 'show create table_name;';
|
||||||
|
const tokens = parser.getAllTokens(sql);
|
||||||
|
expect(tokens.length).toBe(4);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
import SQLParser, { HiveSqlListener } from '../../../src/parser/hive';
|
import SQLParser, { HiveSqlListener } from '../../../src/parser/hive';
|
||||||
|
|
||||||
describe('Hive SQL Listener Tests', () => {
|
describe('Hive SQL Listener Tests', () => {
|
||||||
const expectTableName = 'user1';
|
|
||||||
const sql = `select id,name,sex from ${expectTableName};`;
|
|
||||||
const parser = new SQLParser();
|
const parser = new SQLParser();
|
||||||
|
test('Listener enterSelectList', async () => {
|
||||||
|
const expectTableName = 'userName';
|
||||||
|
const sql = `select ${expectTableName} from user1 where inc_day='20190601' limit 1000;`;
|
||||||
const parserTree = parser.parse(sql);
|
const parserTree = parser.parse(sql);
|
||||||
|
|
||||||
test('Listener enterTableName', async () => {
|
|
||||||
let result = '';
|
let result = '';
|
||||||
class MyListener extends HiveSqlListener {
|
class MyListener extends HiveSqlListener {
|
||||||
enterTableName(ctx): void {
|
enterSelect_list(ctx): void {
|
||||||
result = ctx.getText().toLowerCase();
|
result = ctx.getText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const listenTableName: any = new MyListener();
|
const listenTableName: any = new MyListener();
|
||||||
@ -19,4 +18,18 @@ describe('Hive SQL Listener Tests', () => {
|
|||||||
await parser.listen(listenTableName, parserTree);
|
await parser.listen(listenTableName, parserTree);
|
||||||
expect(result).toBe(expectTableName);
|
expect(result).toBe(expectTableName);
|
||||||
});
|
});
|
||||||
|
test('Listener enterCreateTable', async () => {
|
||||||
|
const sql = `drop table table_name;`;
|
||||||
|
const parserTree = parser.parse(sql);
|
||||||
|
let result = '';
|
||||||
|
class MyListener extends HiveSqlListener {
|
||||||
|
enterDrop_stmt(ctx): void {
|
||||||
|
result = ctx.getText();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const listenTableName: any = new MyListener();
|
||||||
|
|
||||||
|
await parser.listen(listenTableName, parserTree);
|
||||||
|
expect(result).toBe('droptabletable_name');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -2,17 +2,21 @@ import SQLParser from '../../../src/parser/hive';
|
|||||||
|
|
||||||
describe('Hive SQL Syntax Tests', () => {
|
describe('Hive SQL Syntax Tests', () => {
|
||||||
const parser = new SQLParser();
|
const parser = new SQLParser();
|
||||||
|
test('Create Table Statement', () => {
|
||||||
test('Select Statement', () => {
|
const sql = 'CREATE TABLE person(name STRING,age INT);';
|
||||||
const sql = 'SELECT * FROM employee WHERE salary>30000;';
|
|
||||||
const result = parser.validate(sql);
|
const result = parser.validate(sql);
|
||||||
|
|
||||||
expect(result.length).toBe(0);
|
expect(result.length).toBe(0);
|
||||||
});
|
});
|
||||||
|
test('Create Table Statement', () => {
|
||||||
test('Select 1+1', () => {
|
const sql = `alter table dm_gis.table_name add if not exists partition (inc_day = '20190601');`;
|
||||||
const sql = 'SELECT 1+1;';
|
|
||||||
const result = parser.validate(sql);
|
const result = parser.validate(sql);
|
||||||
expect(result.length).toBe(0);
|
expect(result.length).toBe(0);
|
||||||
});
|
});
|
||||||
|
test('Wrong Select Statement', () => {
|
||||||
|
const sql = 'SELECT add ABC from Where ;'
|
||||||
|
const result = parser.validate(sql);
|
||||||
|
expect(result.length).toBe(2);
|
||||||
|
expect(result[0].message).toBe(`no viable alternative at input 'SELECTaddABCfromWhere'`)
|
||||||
|
expect(result[1].message).toBe(`mismatched input 'Where' expecting <EOF>`)
|
||||||
|
});
|
||||||
});
|
});
|
@ -1,15 +1,15 @@
|
|||||||
import SQLParser, { HiveSqlVisitor } from '../../../src/parser/hive';
|
import SQLParser, { HiveSqlVisitor } from '../../../src/parser/hive';
|
||||||
|
|
||||||
describe('Generic SQL Visitor Tests', () => {
|
describe('Generic SQL Visitor Tests', () => {
|
||||||
const expectTableName = 'user1';
|
const expectTableName = 'dm_gis.dlv_addr_tc_count';
|
||||||
const sql = `select id,name,sex from ${expectTableName};`;
|
const sql = `select citycode,tc,inc_day from ${expectTableName} where inc_day='20190501' limit 100;`;
|
||||||
const parser = new SQLParser();
|
const parser = new SQLParser();
|
||||||
|
|
||||||
const parserTree = parser.parse(sql, (error) => {
|
const parserTree = parser.parse(sql, (error) => {
|
||||||
console.log('Parse error:', error);
|
console.log('Parse error:', error);
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Parser tree string:', parser.toString(parserTree));
|
// console.log('Parser tree string:', parser.toString(parserTree));
|
||||||
|
|
||||||
test('Visitor visitTableName', () => {
|
test('Visitor visitTableName', () => {
|
||||||
let result = '';
|
let result = '';
|
||||||
@ -19,6 +19,7 @@ describe('Generic SQL Visitor Tests', () => {
|
|||||||
super.visitTable_name(ctx);
|
super.visitTable_name(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const visitor: any = new MyVisitor();
|
const visitor: any = new MyVisitor();
|
||||||
visitor.visit(parserTree);
|
visitor.visit(parserTree);
|
||||||
|
|
||||||
|
@ -1,48 +1,41 @@
|
|||||||
import * as utils from '../../src/utils';
|
import * as utils from '../../src/utils';
|
||||||
describe('utils', () => {
|
describe('utils', () => {
|
||||||
describe('split sql', () => {
|
test('split single sql', () => {
|
||||||
test('single', () => {
|
const sql = 'select id,name from user';
|
||||||
let sql = 'select id,name from user';
|
const result = utils.splitSql(sql);
|
||||||
let result = utils.splitSql(sql);
|
expect(result.length).toEqual(1);
|
||||||
expect(result).toEqual([sql.length - 1]);
|
|
||||||
sql += ';';
|
|
||||||
result = utils.splitSql(sql);
|
|
||||||
expect(result).toEqual([sql.length - 1]);
|
|
||||||
});
|
});
|
||||||
test('multiple', () => {
|
test('split multiple sql', () => {
|
||||||
const sql = `-- a ;
|
const sql = `-- a ;
|
||||||
select * from a;
|
select * from a;
|
||||||
|
/*
|
||||||
|
xxx
|
||||||
|
xxx
|
||||||
|
*/
|
||||||
select user from b`;
|
select user from b`;
|
||||||
const result = utils.splitSql(sql);
|
const result = utils.splitSql(sql);
|
||||||
expect(result).toEqual([34, 65]);
|
expect(result.length).toEqual(2);
|
||||||
});
|
});
|
||||||
test('error sql', () => {
|
test('lexer', () => {
|
||||||
const sql = `CREATE TABLE MyResult(
|
const sql = `-- a ;
|
||||||
a double,
|
select * from a;
|
||||||
b timestamp,
|
/*
|
||||||
c timestamp
|
xxx
|
||||||
)WITH(
|
xxx
|
||||||
type ='mysql,
|
*/
|
||||||
url ='jdbc:mysql://1.1.1.1:3306/hi?charset=utf8',
|
select user from b;`;
|
||||||
userName ='name',
|
const result = utils.lexer(sql);
|
||||||
password ='123',
|
expect(result.length).toEqual(4);
|
||||||
tableName ='user'
|
|
||||||
);`;
|
|
||||||
const result = utils.splitSql(sql);
|
|
||||||
expect(result).toEqual([337]);
|
|
||||||
const sql2 = `CREATE TABLE MyResult(
|
|
||||||
a double,
|
|
||||||
b timestamp,
|
|
||||||
c timestamp
|
|
||||||
)WITH(
|
|
||||||
type ='mysql,
|
|
||||||
url ='jdbc:mysql://1.1.1.1:3306/hi?charset=utf8',
|
|
||||||
userName ='name',
|
|
||||||
password ='123',
|
|
||||||
tableName ='user'
|
|
||||||
)`;
|
|
||||||
const result2 = utils.splitSql(sql2);
|
|
||||||
expect(result2).toEqual([336]);
|
|
||||||
});
|
});
|
||||||
|
test('cleanSql', () => {
|
||||||
|
const sql = `-- a ;
|
||||||
|
select * from a;
|
||||||
|
/*
|
||||||
|
xxx
|
||||||
|
xxx
|
||||||
|
*/
|
||||||
|
select user from b`;
|
||||||
|
const result = utils.cleanSql(sql);
|
||||||
|
expect(result.indexOf('xxx')).toEqual(-1);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user