fix: add missing expression predicate to impala parser(#225)
* fix(impala): add select supprt is true/false/unknown and support more SEMICOLON * fix(impala): not use emptyStatement replace SEMICOLON * test(impala): add select unit test sql and test splitSQLByStatement
This commit is contained in:
		@ -127,6 +127,8 @@ KW_INTERVAL                               : 'INTERVAL';
 | 
				
			|||||||
KW_INTERMEDIATE                           : 'INTERMEDIATE';
 | 
					KW_INTERMEDIATE                           : 'INTERMEDIATE';
 | 
				
			||||||
KW_INTO                                   : 'INTO';
 | 
					KW_INTO                                   : 'INTO';
 | 
				
			||||||
KW_INIT_FN                                : 'INIT_FN';
 | 
					KW_INIT_FN                                : 'INIT_FN';
 | 
				
			||||||
 | 
					KW_IREGEXP                                : 'IREGEXP';
 | 
				
			||||||
 | 
					KW_ILIKE                                  : 'ILIKE';
 | 
				
			||||||
KW_INVALIDATE                             : 'INVALIDATE';
 | 
					KW_INVALIDATE                             : 'INVALIDATE';
 | 
				
			||||||
KW_IS                                     : 'IS';
 | 
					KW_IS                                     : 'IS';
 | 
				
			||||||
KW_JOIN                                   : 'JOIN';
 | 
					KW_JOIN                                   : 'JOIN';
 | 
				
			||||||
@ -230,6 +232,7 @@ KW_USER                                   : 'USER';
 | 
				
			|||||||
KW_USING                                  : 'USING';
 | 
					KW_USING                                  : 'USING';
 | 
				
			||||||
KW_UPDATE_FN                              : 'UPDATE_FN';
 | 
					KW_UPDATE_FN                              : 'UPDATE_FN';
 | 
				
			||||||
KW_UPSERT                                 : 'UPSERT';
 | 
					KW_UPSERT                                 : 'UPSERT';
 | 
				
			||||||
 | 
					KW_UNKNOWN                                : 'UNKNOWN';
 | 
				
			||||||
KW_URI                                    : 'URI';
 | 
					KW_URI                                    : 'URI';
 | 
				
			||||||
KW_VALUE                                  : 'VALUE';
 | 
					KW_VALUE                                  : 'VALUE';
 | 
				
			||||||
KW_VALUES                                 : 'VALUES';
 | 
					KW_VALUES                                 : 'VALUES';
 | 
				
			||||||
 | 
				
			|||||||
@ -19,31 +19,41 @@ options
 | 
				
			|||||||
    tokenVocab=ImpalaSqlLexer;
 | 
					    tokenVocab=ImpalaSqlLexer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
program : (statement SEMICOLON?)* EOF;
 | 
					program: statement EOF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
statement
 | 
					statement
 | 
				
			||||||
    : queryStatement
 | 
					    : sqlStatements EOF
 | 
				
			||||||
    | useStatement
 | 
					    ;
 | 
				
			||||||
    | createStatement
 | 
					
 | 
				
			||||||
    | alterStatement
 | 
					sqlStatements
 | 
				
			||||||
    | truncateTableStatement
 | 
					    : (sqlStatement | emptyStatement)*
 | 
				
			||||||
    | describeStatement
 | 
					    ;
 | 
				
			||||||
    | computeStatement
 | 
					
 | 
				
			||||||
    | dropStatement
 | 
					emptyStatement: SEMICOLON;
 | 
				
			||||||
    | grantStatement
 | 
					
 | 
				
			||||||
    | revokeStatement
 | 
					sqlStatement
 | 
				
			||||||
    | insertStatement
 | 
					    : queryStatement SEMICOLON?
 | 
				
			||||||
    | deleteStatement
 | 
					    | useStatement SEMICOLON?
 | 
				
			||||||
    | updateStatement
 | 
					    | createStatement SEMICOLON?
 | 
				
			||||||
    | upsertStatement
 | 
					    | alterStatement SEMICOLON?
 | 
				
			||||||
    | showStatement
 | 
					    | truncateTableStatement SEMICOLON?
 | 
				
			||||||
    | addCommentStatement
 | 
					    | describeStatement SEMICOLON?
 | 
				
			||||||
    | explainStatement
 | 
					    | computeStatement SEMICOLON?
 | 
				
			||||||
    | setStatement
 | 
					    | dropStatement SEMICOLON?
 | 
				
			||||||
    | shutdownStatement
 | 
					    | grantStatement SEMICOLON?
 | 
				
			||||||
    | invalidateMetaStatement
 | 
					    | revokeStatement SEMICOLON?
 | 
				
			||||||
    | loadDataStatement
 | 
					    | insertStatement SEMICOLON?
 | 
				
			||||||
    | refreshStatement
 | 
					    | deleteStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | updateStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | upsertStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | showStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | addCommentStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | explainStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | setStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | shutdownStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | invalidateMetaStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | loadDataStatement SEMICOLON?
 | 
				
			||||||
 | 
					    | refreshStatement SEMICOLON?
 | 
				
			||||||
    ;
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
useStatement: KW_USE databaseNamePath;
 | 
					useStatement: KW_USE databaseNamePath;
 | 
				
			||||||
@ -671,9 +681,9 @@ predicate[ParserRuleContext value]
 | 
				
			|||||||
    | KW_NOT? KW_BETWEEN lower=valueExpression KW_AND upper=valueExpression        #between
 | 
					    | KW_NOT? KW_BETWEEN lower=valueExpression KW_AND upper=valueExpression        #between
 | 
				
			||||||
    | KW_NOT? KW_IN LPAREN expression (COMMA expression)* RPAREN                        #inList
 | 
					    | KW_NOT? KW_IN LPAREN expression (COMMA expression)* RPAREN                        #inList
 | 
				
			||||||
    | KW_NOT? KW_IN subQueryRelation                                               #inSubquery
 | 
					    | KW_NOT? KW_IN subQueryRelation                                               #inSubquery
 | 
				
			||||||
    | KW_NOT? KW_LIKE pattern=valueExpression (KW_ESCAPE escape=valueExpression)?  #like
 | 
					    | KW_NOT? (KW_LIKE | KW_ILIKE | KW_RLIKE) pattern=valueExpression (KW_ESCAPE escape=valueExpression)?  #like
 | 
				
			||||||
    | KW_REGEXP pattern=valueExpression                      #REGEXP
 | 
					    | (KW_REGEXP | KW_IREGEXP) pattern=valueExpression                      #REGEXP
 | 
				
			||||||
    | KW_IS KW_NOT? KW_NULL                                                        #nullPredicate
 | 
					    | KW_IS KW_NOT? (KW_NULL | KW_UNKNOWN | KW_TRUE | KW_FALSE)                                                    #nullOrUnKnownOrBooleanPredicate
 | 
				
			||||||
    | KW_IS KW_NOT? KW_DISTINCT KW_FROM right=valueExpression                         #distinctFrom
 | 
					    | KW_IS KW_NOT? KW_DISTINCT KW_FROM right=valueExpression                         #distinctFrom
 | 
				
			||||||
    ;
 | 
					    ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -934,6 +944,7 @@ nonReserved
 | 
				
			|||||||
	| KW_UNBOUNDED
 | 
						| KW_UNBOUNDED
 | 
				
			||||||
	| KW_USE
 | 
						| KW_USE
 | 
				
			||||||
	| KW_USER
 | 
						| KW_USER
 | 
				
			||||||
 | 
					    | KW_UNKNOWN
 | 
				
			||||||
	| KW_VIEW
 | 
						| KW_VIEW
 | 
				
			||||||
	| KW_VIEWS
 | 
						| KW_VIEWS
 | 
				
			||||||
	| KW_YEAR
 | 
						| KW_YEAR
 | 
				
			||||||
@ -943,4 +954,6 @@ nonReserved
 | 
				
			|||||||
    | KW_AVRO
 | 
					    | KW_AVRO
 | 
				
			||||||
    | KW_SEQUENCEFILE
 | 
					    | KW_SEQUENCEFILE
 | 
				
			||||||
    | KW_RCFILE
 | 
					    | KW_RCFILE
 | 
				
			||||||
 | 
					    | KW_IREGEXP
 | 
				
			||||||
 | 
					    | KW_ILIKE
 | 
				
			||||||
    ;
 | 
					    ;
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -102,172 +102,175 @@ KW_INTERVAL=101
 | 
				
			|||||||
KW_INTERMEDIATE=102
 | 
					KW_INTERMEDIATE=102
 | 
				
			||||||
KW_INTO=103
 | 
					KW_INTO=103
 | 
				
			||||||
KW_INIT_FN=104
 | 
					KW_INIT_FN=104
 | 
				
			||||||
KW_INVALIDATE=105
 | 
					KW_IREGEXP=105
 | 
				
			||||||
KW_IS=106
 | 
					KW_ILIKE=106
 | 
				
			||||||
KW_JOIN=107
 | 
					KW_INVALIDATE=107
 | 
				
			||||||
KW_KEY=108
 | 
					KW_IS=108
 | 
				
			||||||
KW_KUDU=109
 | 
					KW_JOIN=109
 | 
				
			||||||
KW_LAST=110
 | 
					KW_KEY=110
 | 
				
			||||||
KW_LATERAL=111
 | 
					KW_KUDU=111
 | 
				
			||||||
KW_LEFT=112
 | 
					KW_LAST=112
 | 
				
			||||||
KW_LIKE=113
 | 
					KW_LATERAL=113
 | 
				
			||||||
KW_LIMIT=114
 | 
					KW_LEFT=114
 | 
				
			||||||
KW_LINES=115
 | 
					KW_LIKE=115
 | 
				
			||||||
KW_LOAD=116
 | 
					KW_LIMIT=116
 | 
				
			||||||
KW_LOCALTIME=117
 | 
					KW_LINES=117
 | 
				
			||||||
KW_LOCALTIMESTAMP=118
 | 
					KW_LOAD=118
 | 
				
			||||||
KW_METADATA=119
 | 
					KW_LOCALTIME=119
 | 
				
			||||||
KW_MAP=120
 | 
					KW_LOCALTIMESTAMP=120
 | 
				
			||||||
KW_MINUTE=121
 | 
					KW_METADATA=121
 | 
				
			||||||
KW_MINUTES=122
 | 
					KW_MAP=122
 | 
				
			||||||
KW_MONTH=123
 | 
					KW_MINUTE=123
 | 
				
			||||||
KW_MONTHS=124
 | 
					KW_MINUTES=124
 | 
				
			||||||
KW_MERGE_FN=125
 | 
					KW_MONTH=125
 | 
				
			||||||
KW_NFC=126
 | 
					KW_MONTHS=126
 | 
				
			||||||
KW_NFD=127
 | 
					KW_MERGE_FN=127
 | 
				
			||||||
KW_NFKC=128
 | 
					KW_NFC=128
 | 
				
			||||||
KW_NFKD=129
 | 
					KW_NFD=129
 | 
				
			||||||
KW_NORMALIZE=130
 | 
					KW_NFKC=130
 | 
				
			||||||
KW_NOT=131
 | 
					KW_NFKD=131
 | 
				
			||||||
KW_NULL=132
 | 
					KW_NORMALIZE=132
 | 
				
			||||||
KW_NULLS=133
 | 
					KW_NOT=133
 | 
				
			||||||
KW_OFFSET=134
 | 
					KW_NULL=134
 | 
				
			||||||
KW_ON=135
 | 
					KW_NULLS=135
 | 
				
			||||||
KW_OPTION=136
 | 
					KW_OFFSET=136
 | 
				
			||||||
KW_OR=137
 | 
					KW_ON=137
 | 
				
			||||||
KW_ORDER=138
 | 
					KW_OPTION=138
 | 
				
			||||||
KW_ORDINALITY=139
 | 
					KW_OR=139
 | 
				
			||||||
KW_OUTER=140
 | 
					KW_ORDER=140
 | 
				
			||||||
KW_OWNER=141
 | 
					KW_ORDINALITY=141
 | 
				
			||||||
KW_OVER=142
 | 
					KW_OUTER=142
 | 
				
			||||||
KW_OVERWRITE=143
 | 
					KW_OWNER=143
 | 
				
			||||||
KW_PARTITION=144
 | 
					KW_OVER=144
 | 
				
			||||||
KW_PARTITIONS=145
 | 
					KW_OVERWRITE=145
 | 
				
			||||||
KW_PARQUET=146
 | 
					KW_PARTITION=146
 | 
				
			||||||
KW_POSITION=147
 | 
					KW_PARTITIONS=147
 | 
				
			||||||
KW_PRECEDING=148
 | 
					KW_PARQUET=148
 | 
				
			||||||
KW_PRIMARY=149
 | 
					KW_POSITION=149
 | 
				
			||||||
KW_REPLICATION=150
 | 
					KW_PRECEDING=150
 | 
				
			||||||
KW_PRIVILEGES=151
 | 
					KW_PRIMARY=151
 | 
				
			||||||
KW_PROPERTIES=152
 | 
					KW_REPLICATION=152
 | 
				
			||||||
KW_RANGE=153
 | 
					KW_PRIVILEGES=153
 | 
				
			||||||
KW_RECOVER=154
 | 
					KW_PROPERTIES=154
 | 
				
			||||||
KW_RENAME=155
 | 
					KW_RANGE=155
 | 
				
			||||||
KW_REPEATABLE=156
 | 
					KW_RECOVER=156
 | 
				
			||||||
KW_REPLACE=157
 | 
					KW_RENAME=157
 | 
				
			||||||
KW_RESTRICT=158
 | 
					KW_REPEATABLE=158
 | 
				
			||||||
KW_RETURNS=159
 | 
					KW_REPLACE=159
 | 
				
			||||||
KW_REVOKE=160
 | 
					KW_RESTRICT=160
 | 
				
			||||||
KW_REFRESH=161
 | 
					KW_RETURNS=161
 | 
				
			||||||
KW_REGEXP=162
 | 
					KW_REVOKE=162
 | 
				
			||||||
KW_RLIKE=163
 | 
					KW_REFRESH=163
 | 
				
			||||||
KW_RIGHT=164
 | 
					KW_REGEXP=164
 | 
				
			||||||
KW_ROLE=165
 | 
					KW_RLIKE=165
 | 
				
			||||||
KW_ROLES=166
 | 
					KW_RIGHT=166
 | 
				
			||||||
KW_ROW=167
 | 
					KW_ROLE=167
 | 
				
			||||||
KW_ROWS=168
 | 
					KW_ROLES=168
 | 
				
			||||||
KW_SCHEMA=169
 | 
					KW_ROW=169
 | 
				
			||||||
KW_SCHEMAS=170
 | 
					KW_ROWS=170
 | 
				
			||||||
KW_SECOND=171
 | 
					KW_SCHEMA=171
 | 
				
			||||||
KW_SECONDS=172
 | 
					KW_SCHEMAS=172
 | 
				
			||||||
KW_SELECT=173
 | 
					KW_SECOND=173
 | 
				
			||||||
KW_SERDEPROPERTIES=174
 | 
					KW_SECONDS=174
 | 
				
			||||||
KW_SET=175
 | 
					KW_SELECT=175
 | 
				
			||||||
KW_SEMI=176
 | 
					KW_SERDEPROPERTIES=176
 | 
				
			||||||
KW_SERVER=177
 | 
					KW_SET=177
 | 
				
			||||||
KW_SHOW=178
 | 
					KW_SEMI=178
 | 
				
			||||||
KW_SHUTDOWN=179
 | 
					KW_SERVER=179
 | 
				
			||||||
KW_SOME=180
 | 
					KW_SHOW=180
 | 
				
			||||||
KW_STATS=181
 | 
					KW_SHUTDOWN=181
 | 
				
			||||||
KW_STRUCT=182
 | 
					KW_SOME=182
 | 
				
			||||||
KW_STRAIGHT_JOIN=183
 | 
					KW_STATS=183
 | 
				
			||||||
KW_SUBSTRING=184
 | 
					KW_STRUCT=184
 | 
				
			||||||
KW_SYSTEM=185
 | 
					KW_STRAIGHT_JOIN=185
 | 
				
			||||||
KW_SYMBOL=186
 | 
					KW_SUBSTRING=186
 | 
				
			||||||
KW_SERIALIZE_FN=187
 | 
					KW_SYSTEM=187
 | 
				
			||||||
KW_TABLE=188
 | 
					KW_SYMBOL=188
 | 
				
			||||||
KW_TABLES=189
 | 
					KW_SERIALIZE_FN=189
 | 
				
			||||||
KW_TABLESAMPLE=190
 | 
					KW_TABLE=190
 | 
				
			||||||
KW_TERMINATED=191
 | 
					KW_TABLES=191
 | 
				
			||||||
KW_THEN=192
 | 
					KW_TABLESAMPLE=192
 | 
				
			||||||
KW_TO=193
 | 
					KW_TERMINATED=193
 | 
				
			||||||
KW_TRUE=194
 | 
					KW_THEN=194
 | 
				
			||||||
KW_TRY_CAST=195
 | 
					KW_TO=195
 | 
				
			||||||
KW_TRUNCATE=196
 | 
					KW_TRUE=196
 | 
				
			||||||
KW_UNCACHED=197
 | 
					KW_TRY_CAST=197
 | 
				
			||||||
KW_UESCAPE=198
 | 
					KW_TRUNCATE=198
 | 
				
			||||||
KW_UNBOUNDED=199
 | 
					KW_UNCACHED=199
 | 
				
			||||||
KW_UNION=200
 | 
					KW_UESCAPE=200
 | 
				
			||||||
KW_UNNEST=201
 | 
					KW_UNBOUNDED=201
 | 
				
			||||||
KW_UNSET=202
 | 
					KW_UNION=202
 | 
				
			||||||
KW_USE=203
 | 
					KW_UNNEST=203
 | 
				
			||||||
KW_USER=204
 | 
					KW_UNSET=204
 | 
				
			||||||
KW_USING=205
 | 
					KW_USE=205
 | 
				
			||||||
KW_UPDATE_FN=206
 | 
					KW_USER=206
 | 
				
			||||||
KW_UPSERT=207
 | 
					KW_USING=207
 | 
				
			||||||
KW_URI=208
 | 
					KW_UPDATE_FN=208
 | 
				
			||||||
KW_VALUE=209
 | 
					KW_UPSERT=209
 | 
				
			||||||
KW_VALUES=210
 | 
					KW_UNKNOWN=210
 | 
				
			||||||
KW_VIEW=211
 | 
					KW_URI=211
 | 
				
			||||||
KW_VIEWS=212
 | 
					KW_VALUE=212
 | 
				
			||||||
KW_WHEN=213
 | 
					KW_VALUES=213
 | 
				
			||||||
KW_WHERE=214
 | 
					KW_VIEW=214
 | 
				
			||||||
KW_WITH=215
 | 
					KW_VIEWS=215
 | 
				
			||||||
KW_YEAR=216
 | 
					KW_WHEN=216
 | 
				
			||||||
KW_YEARS=217
 | 
					KW_WHERE=217
 | 
				
			||||||
KW_TEXTFILE=218
 | 
					KW_WITH=218
 | 
				
			||||||
KW_ORC=219
 | 
					KW_YEAR=219
 | 
				
			||||||
KW_AVRO=220
 | 
					KW_YEARS=220
 | 
				
			||||||
KW_SEQUENCEFILE=221
 | 
					KW_TEXTFILE=221
 | 
				
			||||||
KW_RCFILE=222
 | 
					KW_ORC=222
 | 
				
			||||||
KW_REFERENCES=223
 | 
					KW_AVRO=223
 | 
				
			||||||
KW_NOVALIDATE=224
 | 
					KW_SEQUENCEFILE=224
 | 
				
			||||||
KW_RELY=225
 | 
					KW_RCFILE=225
 | 
				
			||||||
STATS_NUMDVS=226
 | 
					KW_REFERENCES=226
 | 
				
			||||||
STATS_NUMNULLS=227
 | 
					KW_NOVALIDATE=227
 | 
				
			||||||
STATS_AVGSIZE=228
 | 
					KW_RELY=228
 | 
				
			||||||
STATS_MAXSIZE=229
 | 
					STATS_NUMDVS=229
 | 
				
			||||||
EQ=230
 | 
					STATS_NUMNULLS=230
 | 
				
			||||||
NEQ=231
 | 
					STATS_AVGSIZE=231
 | 
				
			||||||
LT=232
 | 
					STATS_MAXSIZE=232
 | 
				
			||||||
LTE=233
 | 
					EQ=233
 | 
				
			||||||
GT=234
 | 
					NEQ=234
 | 
				
			||||||
GTE=235
 | 
					LT=235
 | 
				
			||||||
PLUS=236
 | 
					LTE=236
 | 
				
			||||||
MINUS=237
 | 
					GT=237
 | 
				
			||||||
ASTERISK=238
 | 
					GTE=238
 | 
				
			||||||
SLASH=239
 | 
					PLUS=239
 | 
				
			||||||
PERCENT=240
 | 
					MINUS=240
 | 
				
			||||||
CONCAT=241
 | 
					ASTERISK=241
 | 
				
			||||||
DOT=242
 | 
					SLASH=242
 | 
				
			||||||
SEMICOLON=243
 | 
					PERCENT=243
 | 
				
			||||||
COMMA=244
 | 
					CONCAT=244
 | 
				
			||||||
COLON=245
 | 
					DOT=245
 | 
				
			||||||
LPAREN=246
 | 
					SEMICOLON=246
 | 
				
			||||||
RPAREN=247
 | 
					COMMA=247
 | 
				
			||||||
LSQUARE=248
 | 
					COLON=248
 | 
				
			||||||
RSQUARE=249
 | 
					LPAREN=249
 | 
				
			||||||
LCURLY=250
 | 
					RPAREN=250
 | 
				
			||||||
RCURLY=251
 | 
					LSQUARE=251
 | 
				
			||||||
BITWISEOR=252
 | 
					RSQUARE=252
 | 
				
			||||||
QUESTION=253
 | 
					LCURLY=253
 | 
				
			||||||
RIGHT_ARROW=254
 | 
					RCURLY=254
 | 
				
			||||||
STRING=255
 | 
					BITWISEOR=255
 | 
				
			||||||
UNICODE_STRING=256
 | 
					QUESTION=256
 | 
				
			||||||
BINARY_LITERAL=257
 | 
					RIGHT_ARROW=257
 | 
				
			||||||
INTEGER_VALUE=258
 | 
					STRING=258
 | 
				
			||||||
DECIMAL_VALUE=259
 | 
					UNICODE_STRING=259
 | 
				
			||||||
DOUBLE_VALUE=260
 | 
					BINARY_LITERAL=260
 | 
				
			||||||
IDENTIFIER=261
 | 
					INTEGER_VALUE=261
 | 
				
			||||||
DIGIT_IDENTIFIER=262
 | 
					DECIMAL_VALUE=262
 | 
				
			||||||
QUOTED_IDENTIFIER=263
 | 
					DOUBLE_VALUE=263
 | 
				
			||||||
BACKQUOTED_IDENTIFIER=264
 | 
					IDENTIFIER=264
 | 
				
			||||||
TIME_WITH_TIME_ZONE=265
 | 
					DIGIT_IDENTIFIER=265
 | 
				
			||||||
TIMESTAMP_WITH_TIME_ZONE=266
 | 
					QUOTED_IDENTIFIER=266
 | 
				
			||||||
DOUBLE_PRECISION=267
 | 
					BACKQUOTED_IDENTIFIER=267
 | 
				
			||||||
SIMPLE_COMMENT=268
 | 
					TIME_WITH_TIME_ZONE=268
 | 
				
			||||||
BRACKETED_COMMENT=269
 | 
					TIMESTAMP_WITH_TIME_ZONE=269
 | 
				
			||||||
WS=270
 | 
					DOUBLE_PRECISION=270
 | 
				
			||||||
 | 
					SIMPLE_COMMENT=271
 | 
				
			||||||
 | 
					BRACKETED_COMMENT=272
 | 
				
			||||||
 | 
					WS=273
 | 
				
			||||||
'ADD'=1
 | 
					'ADD'=1
 | 
				
			||||||
'ALL'=2
 | 
					'ALL'=2
 | 
				
			||||||
'ANALYTIC'=3
 | 
					'ANALYTIC'=3
 | 
				
			||||||
@ -372,152 +375,155 @@ WS=270
 | 
				
			|||||||
'INTERMEDIATE'=102
 | 
					'INTERMEDIATE'=102
 | 
				
			||||||
'INTO'=103
 | 
					'INTO'=103
 | 
				
			||||||
'INIT_FN'=104
 | 
					'INIT_FN'=104
 | 
				
			||||||
'INVALIDATE'=105
 | 
					'IREGEXP'=105
 | 
				
			||||||
'IS'=106
 | 
					'ILIKE'=106
 | 
				
			||||||
'JOIN'=107
 | 
					'INVALIDATE'=107
 | 
				
			||||||
'KEY'=108
 | 
					'IS'=108
 | 
				
			||||||
'KUDU'=109
 | 
					'JOIN'=109
 | 
				
			||||||
'LAST'=110
 | 
					'KEY'=110
 | 
				
			||||||
'LATERAL'=111
 | 
					'KUDU'=111
 | 
				
			||||||
'LEFT'=112
 | 
					'LAST'=112
 | 
				
			||||||
'LIKE'=113
 | 
					'LATERAL'=113
 | 
				
			||||||
'LIMIT'=114
 | 
					'LEFT'=114
 | 
				
			||||||
'LINES'=115
 | 
					'LIKE'=115
 | 
				
			||||||
'LOAD'=116
 | 
					'LIMIT'=116
 | 
				
			||||||
'LOCALTIME'=117
 | 
					'LINES'=117
 | 
				
			||||||
'LOCALTIMESTAMP'=118
 | 
					'LOAD'=118
 | 
				
			||||||
'METADATA'=119
 | 
					'LOCALTIME'=119
 | 
				
			||||||
'MAP'=120
 | 
					'LOCALTIMESTAMP'=120
 | 
				
			||||||
'MINUTE'=121
 | 
					'METADATA'=121
 | 
				
			||||||
'MINUTES'=122
 | 
					'MAP'=122
 | 
				
			||||||
'MONTH'=123
 | 
					'MINUTE'=123
 | 
				
			||||||
'MONTHS'=124
 | 
					'MINUTES'=124
 | 
				
			||||||
'MERGE_FN'=125
 | 
					'MONTH'=125
 | 
				
			||||||
'NFC'=126
 | 
					'MONTHS'=126
 | 
				
			||||||
'NFD'=127
 | 
					'MERGE_FN'=127
 | 
				
			||||||
'NFKC'=128
 | 
					'NFC'=128
 | 
				
			||||||
'NFKD'=129
 | 
					'NFD'=129
 | 
				
			||||||
'NORMALIZE'=130
 | 
					'NFKC'=130
 | 
				
			||||||
'NOT'=131
 | 
					'NFKD'=131
 | 
				
			||||||
'NULL'=132
 | 
					'NORMALIZE'=132
 | 
				
			||||||
'NULLS'=133
 | 
					'NOT'=133
 | 
				
			||||||
'OFFSET'=134
 | 
					'NULL'=134
 | 
				
			||||||
'ON'=135
 | 
					'NULLS'=135
 | 
				
			||||||
'OPTION'=136
 | 
					'OFFSET'=136
 | 
				
			||||||
'OR'=137
 | 
					'ON'=137
 | 
				
			||||||
'ORDER'=138
 | 
					'OPTION'=138
 | 
				
			||||||
'ORDINALITY'=139
 | 
					'OR'=139
 | 
				
			||||||
'OUTER'=140
 | 
					'ORDER'=140
 | 
				
			||||||
'OWNER'=141
 | 
					'ORDINALITY'=141
 | 
				
			||||||
'OVER'=142
 | 
					'OUTER'=142
 | 
				
			||||||
'OVERWRITE'=143
 | 
					'OWNER'=143
 | 
				
			||||||
'PARTITION'=144
 | 
					'OVER'=144
 | 
				
			||||||
'PARTITIONS'=145
 | 
					'OVERWRITE'=145
 | 
				
			||||||
'PARQUET'=146
 | 
					'PARTITION'=146
 | 
				
			||||||
'POSITION'=147
 | 
					'PARTITIONS'=147
 | 
				
			||||||
'PRECEDING'=148
 | 
					'PARQUET'=148
 | 
				
			||||||
'PRIMARY'=149
 | 
					'POSITION'=149
 | 
				
			||||||
'REPLICATION'=150
 | 
					'PRECEDING'=150
 | 
				
			||||||
'PRIVILEGES'=151
 | 
					'PRIMARY'=151
 | 
				
			||||||
'PROPERTIES'=152
 | 
					'REPLICATION'=152
 | 
				
			||||||
'RANGE'=153
 | 
					'PRIVILEGES'=153
 | 
				
			||||||
'RECOVER'=154
 | 
					'PROPERTIES'=154
 | 
				
			||||||
'RENAME'=155
 | 
					'RANGE'=155
 | 
				
			||||||
'REPEATABLE'=156
 | 
					'RECOVER'=156
 | 
				
			||||||
'REPLACE'=157
 | 
					'RENAME'=157
 | 
				
			||||||
'RESTRICT'=158
 | 
					'REPEATABLE'=158
 | 
				
			||||||
'RETURNS'=159
 | 
					'REPLACE'=159
 | 
				
			||||||
'REVOKE'=160
 | 
					'RESTRICT'=160
 | 
				
			||||||
'REFRESH'=161
 | 
					'RETURNS'=161
 | 
				
			||||||
'REGEXP'=162
 | 
					'REVOKE'=162
 | 
				
			||||||
'RLIKE'=163
 | 
					'REFRESH'=163
 | 
				
			||||||
'RIGHT'=164
 | 
					'REGEXP'=164
 | 
				
			||||||
'ROLE'=165
 | 
					'RLIKE'=165
 | 
				
			||||||
'ROLES'=166
 | 
					'RIGHT'=166
 | 
				
			||||||
'ROW'=167
 | 
					'ROLE'=167
 | 
				
			||||||
'ROWS'=168
 | 
					'ROLES'=168
 | 
				
			||||||
'SCHEMA'=169
 | 
					'ROW'=169
 | 
				
			||||||
'SCHEMAS'=170
 | 
					'ROWS'=170
 | 
				
			||||||
'SECOND'=171
 | 
					'SCHEMA'=171
 | 
				
			||||||
'SECONDS'=172
 | 
					'SCHEMAS'=172
 | 
				
			||||||
'SELECT'=173
 | 
					'SECOND'=173
 | 
				
			||||||
'SERDEPROPERTIES'=174
 | 
					'SECONDS'=174
 | 
				
			||||||
'SET'=175
 | 
					'SELECT'=175
 | 
				
			||||||
'SEMI'=176
 | 
					'SERDEPROPERTIES'=176
 | 
				
			||||||
'SERVER'=177
 | 
					'SET'=177
 | 
				
			||||||
'SHOW'=178
 | 
					'SEMI'=178
 | 
				
			||||||
'SHUTDOWN'=179
 | 
					'SERVER'=179
 | 
				
			||||||
'SOME'=180
 | 
					'SHOW'=180
 | 
				
			||||||
'STATS'=181
 | 
					'SHUTDOWN'=181
 | 
				
			||||||
'STRUCT'=182
 | 
					'SOME'=182
 | 
				
			||||||
'STRAIGHT_JOIN'=183
 | 
					'STATS'=183
 | 
				
			||||||
'SUBSTRING'=184
 | 
					'STRUCT'=184
 | 
				
			||||||
'SYSTEM'=185
 | 
					'STRAIGHT_JOIN'=185
 | 
				
			||||||
'SYMBOL'=186
 | 
					'SUBSTRING'=186
 | 
				
			||||||
'SERIALIZE_FN'=187
 | 
					'SYSTEM'=187
 | 
				
			||||||
'TABLE'=188
 | 
					'SYMBOL'=188
 | 
				
			||||||
'TABLES'=189
 | 
					'SERIALIZE_FN'=189
 | 
				
			||||||
'TABLESAMPLE'=190
 | 
					'TABLE'=190
 | 
				
			||||||
'TERMINATED '=191
 | 
					'TABLES'=191
 | 
				
			||||||
'THEN'=192
 | 
					'TABLESAMPLE'=192
 | 
				
			||||||
'TO'=193
 | 
					'TERMINATED '=193
 | 
				
			||||||
'TRUE'=194
 | 
					'THEN'=194
 | 
				
			||||||
'TRY_CAST'=195
 | 
					'TO'=195
 | 
				
			||||||
'TRUNCATE'=196
 | 
					'TRUE'=196
 | 
				
			||||||
'UNCACHED'=197
 | 
					'TRY_CAST'=197
 | 
				
			||||||
'UESCAPE'=198
 | 
					'TRUNCATE'=198
 | 
				
			||||||
'UNBOUNDED'=199
 | 
					'UNCACHED'=199
 | 
				
			||||||
'UNION'=200
 | 
					'UESCAPE'=200
 | 
				
			||||||
'UNNEST'=201
 | 
					'UNBOUNDED'=201
 | 
				
			||||||
'UNSET'=202
 | 
					'UNION'=202
 | 
				
			||||||
'USE'=203
 | 
					'UNNEST'=203
 | 
				
			||||||
'USER'=204
 | 
					'UNSET'=204
 | 
				
			||||||
'USING'=205
 | 
					'USE'=205
 | 
				
			||||||
'UPDATE_FN'=206
 | 
					'USER'=206
 | 
				
			||||||
'UPSERT'=207
 | 
					'USING'=207
 | 
				
			||||||
'URI'=208
 | 
					'UPDATE_FN'=208
 | 
				
			||||||
'VALUE'=209
 | 
					'UPSERT'=209
 | 
				
			||||||
'VALUES'=210
 | 
					'UNKNOWN'=210
 | 
				
			||||||
'VIEW'=211
 | 
					'URI'=211
 | 
				
			||||||
'VIEWS'=212
 | 
					'VALUE'=212
 | 
				
			||||||
'WHEN'=213
 | 
					'VALUES'=213
 | 
				
			||||||
'WHERE'=214
 | 
					'VIEW'=214
 | 
				
			||||||
'WITH'=215
 | 
					'VIEWS'=215
 | 
				
			||||||
'YEAR'=216
 | 
					'WHEN'=216
 | 
				
			||||||
'YEARS'=217
 | 
					'WHERE'=217
 | 
				
			||||||
'TEXTFILE'=218
 | 
					'WITH'=218
 | 
				
			||||||
'ORC'=219
 | 
					'YEAR'=219
 | 
				
			||||||
'AVRO'=220
 | 
					'YEARS'=220
 | 
				
			||||||
'SEQUENCEFILE'=221
 | 
					'TEXTFILE'=221
 | 
				
			||||||
'RCFILE'=222
 | 
					'ORC'=222
 | 
				
			||||||
'REFERENCES'=223
 | 
					'AVRO'=223
 | 
				
			||||||
'NOVALIDATE'=224
 | 
					'SEQUENCEFILE'=224
 | 
				
			||||||
'RELY'=225
 | 
					'RCFILE'=225
 | 
				
			||||||
'\'NUMDVS\''=226
 | 
					'REFERENCES'=226
 | 
				
			||||||
'\'NUMNULLS\''=227
 | 
					'NOVALIDATE'=227
 | 
				
			||||||
'\'AVGSIZE\''=228
 | 
					'RELY'=228
 | 
				
			||||||
'\'MAXSIZE\''=229
 | 
					'\'NUMDVS\''=229
 | 
				
			||||||
'='=230
 | 
					'\'NUMNULLS\''=230
 | 
				
			||||||
'<'=232
 | 
					'\'AVGSIZE\''=231
 | 
				
			||||||
'<='=233
 | 
					'\'MAXSIZE\''=232
 | 
				
			||||||
'>'=234
 | 
					'='=233
 | 
				
			||||||
'>='=235
 | 
					'<'=235
 | 
				
			||||||
'+'=236
 | 
					'<='=236
 | 
				
			||||||
'-'=237
 | 
					'>'=237
 | 
				
			||||||
'*'=238
 | 
					'>='=238
 | 
				
			||||||
'/'=239
 | 
					'+'=239
 | 
				
			||||||
'%'=240
 | 
					'-'=240
 | 
				
			||||||
'||'=241
 | 
					'*'=241
 | 
				
			||||||
'.'=242
 | 
					'/'=242
 | 
				
			||||||
';'=243
 | 
					'%'=243
 | 
				
			||||||
','=244
 | 
					'||'=244
 | 
				
			||||||
':'=245
 | 
					'.'=245
 | 
				
			||||||
'('=246
 | 
					';'=246
 | 
				
			||||||
')'=247
 | 
					','=247
 | 
				
			||||||
'['=248
 | 
					':'=248
 | 
				
			||||||
']'=249
 | 
					'('=249
 | 
				
			||||||
'{'=250
 | 
					')'=250
 | 
				
			||||||
'}'=251
 | 
					'['=251
 | 
				
			||||||
'|'=252
 | 
					']'=252
 | 
				
			||||||
'?'=253
 | 
					'{'=253
 | 
				
			||||||
'->'=254
 | 
					'}'=254
 | 
				
			||||||
 | 
					'|'=255
 | 
				
			||||||
 | 
					'?'=256
 | 
				
			||||||
 | 
					'->'=257
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -102,172 +102,175 @@ KW_INTERVAL=101
 | 
				
			|||||||
KW_INTERMEDIATE=102
 | 
					KW_INTERMEDIATE=102
 | 
				
			||||||
KW_INTO=103
 | 
					KW_INTO=103
 | 
				
			||||||
KW_INIT_FN=104
 | 
					KW_INIT_FN=104
 | 
				
			||||||
KW_INVALIDATE=105
 | 
					KW_IREGEXP=105
 | 
				
			||||||
KW_IS=106
 | 
					KW_ILIKE=106
 | 
				
			||||||
KW_JOIN=107
 | 
					KW_INVALIDATE=107
 | 
				
			||||||
KW_KEY=108
 | 
					KW_IS=108
 | 
				
			||||||
KW_KUDU=109
 | 
					KW_JOIN=109
 | 
				
			||||||
KW_LAST=110
 | 
					KW_KEY=110
 | 
				
			||||||
KW_LATERAL=111
 | 
					KW_KUDU=111
 | 
				
			||||||
KW_LEFT=112
 | 
					KW_LAST=112
 | 
				
			||||||
KW_LIKE=113
 | 
					KW_LATERAL=113
 | 
				
			||||||
KW_LIMIT=114
 | 
					KW_LEFT=114
 | 
				
			||||||
KW_LINES=115
 | 
					KW_LIKE=115
 | 
				
			||||||
KW_LOAD=116
 | 
					KW_LIMIT=116
 | 
				
			||||||
KW_LOCALTIME=117
 | 
					KW_LINES=117
 | 
				
			||||||
KW_LOCALTIMESTAMP=118
 | 
					KW_LOAD=118
 | 
				
			||||||
KW_METADATA=119
 | 
					KW_LOCALTIME=119
 | 
				
			||||||
KW_MAP=120
 | 
					KW_LOCALTIMESTAMP=120
 | 
				
			||||||
KW_MINUTE=121
 | 
					KW_METADATA=121
 | 
				
			||||||
KW_MINUTES=122
 | 
					KW_MAP=122
 | 
				
			||||||
KW_MONTH=123
 | 
					KW_MINUTE=123
 | 
				
			||||||
KW_MONTHS=124
 | 
					KW_MINUTES=124
 | 
				
			||||||
KW_MERGE_FN=125
 | 
					KW_MONTH=125
 | 
				
			||||||
KW_NFC=126
 | 
					KW_MONTHS=126
 | 
				
			||||||
KW_NFD=127
 | 
					KW_MERGE_FN=127
 | 
				
			||||||
KW_NFKC=128
 | 
					KW_NFC=128
 | 
				
			||||||
KW_NFKD=129
 | 
					KW_NFD=129
 | 
				
			||||||
KW_NORMALIZE=130
 | 
					KW_NFKC=130
 | 
				
			||||||
KW_NOT=131
 | 
					KW_NFKD=131
 | 
				
			||||||
KW_NULL=132
 | 
					KW_NORMALIZE=132
 | 
				
			||||||
KW_NULLS=133
 | 
					KW_NOT=133
 | 
				
			||||||
KW_OFFSET=134
 | 
					KW_NULL=134
 | 
				
			||||||
KW_ON=135
 | 
					KW_NULLS=135
 | 
				
			||||||
KW_OPTION=136
 | 
					KW_OFFSET=136
 | 
				
			||||||
KW_OR=137
 | 
					KW_ON=137
 | 
				
			||||||
KW_ORDER=138
 | 
					KW_OPTION=138
 | 
				
			||||||
KW_ORDINALITY=139
 | 
					KW_OR=139
 | 
				
			||||||
KW_OUTER=140
 | 
					KW_ORDER=140
 | 
				
			||||||
KW_OWNER=141
 | 
					KW_ORDINALITY=141
 | 
				
			||||||
KW_OVER=142
 | 
					KW_OUTER=142
 | 
				
			||||||
KW_OVERWRITE=143
 | 
					KW_OWNER=143
 | 
				
			||||||
KW_PARTITION=144
 | 
					KW_OVER=144
 | 
				
			||||||
KW_PARTITIONS=145
 | 
					KW_OVERWRITE=145
 | 
				
			||||||
KW_PARQUET=146
 | 
					KW_PARTITION=146
 | 
				
			||||||
KW_POSITION=147
 | 
					KW_PARTITIONS=147
 | 
				
			||||||
KW_PRECEDING=148
 | 
					KW_PARQUET=148
 | 
				
			||||||
KW_PRIMARY=149
 | 
					KW_POSITION=149
 | 
				
			||||||
KW_REPLICATION=150
 | 
					KW_PRECEDING=150
 | 
				
			||||||
KW_PRIVILEGES=151
 | 
					KW_PRIMARY=151
 | 
				
			||||||
KW_PROPERTIES=152
 | 
					KW_REPLICATION=152
 | 
				
			||||||
KW_RANGE=153
 | 
					KW_PRIVILEGES=153
 | 
				
			||||||
KW_RECOVER=154
 | 
					KW_PROPERTIES=154
 | 
				
			||||||
KW_RENAME=155
 | 
					KW_RANGE=155
 | 
				
			||||||
KW_REPEATABLE=156
 | 
					KW_RECOVER=156
 | 
				
			||||||
KW_REPLACE=157
 | 
					KW_RENAME=157
 | 
				
			||||||
KW_RESTRICT=158
 | 
					KW_REPEATABLE=158
 | 
				
			||||||
KW_RETURNS=159
 | 
					KW_REPLACE=159
 | 
				
			||||||
KW_REVOKE=160
 | 
					KW_RESTRICT=160
 | 
				
			||||||
KW_REFRESH=161
 | 
					KW_RETURNS=161
 | 
				
			||||||
KW_REGEXP=162
 | 
					KW_REVOKE=162
 | 
				
			||||||
KW_RLIKE=163
 | 
					KW_REFRESH=163
 | 
				
			||||||
KW_RIGHT=164
 | 
					KW_REGEXP=164
 | 
				
			||||||
KW_ROLE=165
 | 
					KW_RLIKE=165
 | 
				
			||||||
KW_ROLES=166
 | 
					KW_RIGHT=166
 | 
				
			||||||
KW_ROW=167
 | 
					KW_ROLE=167
 | 
				
			||||||
KW_ROWS=168
 | 
					KW_ROLES=168
 | 
				
			||||||
KW_SCHEMA=169
 | 
					KW_ROW=169
 | 
				
			||||||
KW_SCHEMAS=170
 | 
					KW_ROWS=170
 | 
				
			||||||
KW_SECOND=171
 | 
					KW_SCHEMA=171
 | 
				
			||||||
KW_SECONDS=172
 | 
					KW_SCHEMAS=172
 | 
				
			||||||
KW_SELECT=173
 | 
					KW_SECOND=173
 | 
				
			||||||
KW_SERDEPROPERTIES=174
 | 
					KW_SECONDS=174
 | 
				
			||||||
KW_SET=175
 | 
					KW_SELECT=175
 | 
				
			||||||
KW_SEMI=176
 | 
					KW_SERDEPROPERTIES=176
 | 
				
			||||||
KW_SERVER=177
 | 
					KW_SET=177
 | 
				
			||||||
KW_SHOW=178
 | 
					KW_SEMI=178
 | 
				
			||||||
KW_SHUTDOWN=179
 | 
					KW_SERVER=179
 | 
				
			||||||
KW_SOME=180
 | 
					KW_SHOW=180
 | 
				
			||||||
KW_STATS=181
 | 
					KW_SHUTDOWN=181
 | 
				
			||||||
KW_STRUCT=182
 | 
					KW_SOME=182
 | 
				
			||||||
KW_STRAIGHT_JOIN=183
 | 
					KW_STATS=183
 | 
				
			||||||
KW_SUBSTRING=184
 | 
					KW_STRUCT=184
 | 
				
			||||||
KW_SYSTEM=185
 | 
					KW_STRAIGHT_JOIN=185
 | 
				
			||||||
KW_SYMBOL=186
 | 
					KW_SUBSTRING=186
 | 
				
			||||||
KW_SERIALIZE_FN=187
 | 
					KW_SYSTEM=187
 | 
				
			||||||
KW_TABLE=188
 | 
					KW_SYMBOL=188
 | 
				
			||||||
KW_TABLES=189
 | 
					KW_SERIALIZE_FN=189
 | 
				
			||||||
KW_TABLESAMPLE=190
 | 
					KW_TABLE=190
 | 
				
			||||||
KW_TERMINATED=191
 | 
					KW_TABLES=191
 | 
				
			||||||
KW_THEN=192
 | 
					KW_TABLESAMPLE=192
 | 
				
			||||||
KW_TO=193
 | 
					KW_TERMINATED=193
 | 
				
			||||||
KW_TRUE=194
 | 
					KW_THEN=194
 | 
				
			||||||
KW_TRY_CAST=195
 | 
					KW_TO=195
 | 
				
			||||||
KW_TRUNCATE=196
 | 
					KW_TRUE=196
 | 
				
			||||||
KW_UNCACHED=197
 | 
					KW_TRY_CAST=197
 | 
				
			||||||
KW_UESCAPE=198
 | 
					KW_TRUNCATE=198
 | 
				
			||||||
KW_UNBOUNDED=199
 | 
					KW_UNCACHED=199
 | 
				
			||||||
KW_UNION=200
 | 
					KW_UESCAPE=200
 | 
				
			||||||
KW_UNNEST=201
 | 
					KW_UNBOUNDED=201
 | 
				
			||||||
KW_UNSET=202
 | 
					KW_UNION=202
 | 
				
			||||||
KW_USE=203
 | 
					KW_UNNEST=203
 | 
				
			||||||
KW_USER=204
 | 
					KW_UNSET=204
 | 
				
			||||||
KW_USING=205
 | 
					KW_USE=205
 | 
				
			||||||
KW_UPDATE_FN=206
 | 
					KW_USER=206
 | 
				
			||||||
KW_UPSERT=207
 | 
					KW_USING=207
 | 
				
			||||||
KW_URI=208
 | 
					KW_UPDATE_FN=208
 | 
				
			||||||
KW_VALUE=209
 | 
					KW_UPSERT=209
 | 
				
			||||||
KW_VALUES=210
 | 
					KW_UNKNOWN=210
 | 
				
			||||||
KW_VIEW=211
 | 
					KW_URI=211
 | 
				
			||||||
KW_VIEWS=212
 | 
					KW_VALUE=212
 | 
				
			||||||
KW_WHEN=213
 | 
					KW_VALUES=213
 | 
				
			||||||
KW_WHERE=214
 | 
					KW_VIEW=214
 | 
				
			||||||
KW_WITH=215
 | 
					KW_VIEWS=215
 | 
				
			||||||
KW_YEAR=216
 | 
					KW_WHEN=216
 | 
				
			||||||
KW_YEARS=217
 | 
					KW_WHERE=217
 | 
				
			||||||
KW_TEXTFILE=218
 | 
					KW_WITH=218
 | 
				
			||||||
KW_ORC=219
 | 
					KW_YEAR=219
 | 
				
			||||||
KW_AVRO=220
 | 
					KW_YEARS=220
 | 
				
			||||||
KW_SEQUENCEFILE=221
 | 
					KW_TEXTFILE=221
 | 
				
			||||||
KW_RCFILE=222
 | 
					KW_ORC=222
 | 
				
			||||||
KW_REFERENCES=223
 | 
					KW_AVRO=223
 | 
				
			||||||
KW_NOVALIDATE=224
 | 
					KW_SEQUENCEFILE=224
 | 
				
			||||||
KW_RELY=225
 | 
					KW_RCFILE=225
 | 
				
			||||||
STATS_NUMDVS=226
 | 
					KW_REFERENCES=226
 | 
				
			||||||
STATS_NUMNULLS=227
 | 
					KW_NOVALIDATE=227
 | 
				
			||||||
STATS_AVGSIZE=228
 | 
					KW_RELY=228
 | 
				
			||||||
STATS_MAXSIZE=229
 | 
					STATS_NUMDVS=229
 | 
				
			||||||
EQ=230
 | 
					STATS_NUMNULLS=230
 | 
				
			||||||
NEQ=231
 | 
					STATS_AVGSIZE=231
 | 
				
			||||||
LT=232
 | 
					STATS_MAXSIZE=232
 | 
				
			||||||
LTE=233
 | 
					EQ=233
 | 
				
			||||||
GT=234
 | 
					NEQ=234
 | 
				
			||||||
GTE=235
 | 
					LT=235
 | 
				
			||||||
PLUS=236
 | 
					LTE=236
 | 
				
			||||||
MINUS=237
 | 
					GT=237
 | 
				
			||||||
ASTERISK=238
 | 
					GTE=238
 | 
				
			||||||
SLASH=239
 | 
					PLUS=239
 | 
				
			||||||
PERCENT=240
 | 
					MINUS=240
 | 
				
			||||||
CONCAT=241
 | 
					ASTERISK=241
 | 
				
			||||||
DOT=242
 | 
					SLASH=242
 | 
				
			||||||
SEMICOLON=243
 | 
					PERCENT=243
 | 
				
			||||||
COMMA=244
 | 
					CONCAT=244
 | 
				
			||||||
COLON=245
 | 
					DOT=245
 | 
				
			||||||
LPAREN=246
 | 
					SEMICOLON=246
 | 
				
			||||||
RPAREN=247
 | 
					COMMA=247
 | 
				
			||||||
LSQUARE=248
 | 
					COLON=248
 | 
				
			||||||
RSQUARE=249
 | 
					LPAREN=249
 | 
				
			||||||
LCURLY=250
 | 
					RPAREN=250
 | 
				
			||||||
RCURLY=251
 | 
					LSQUARE=251
 | 
				
			||||||
BITWISEOR=252
 | 
					RSQUARE=252
 | 
				
			||||||
QUESTION=253
 | 
					LCURLY=253
 | 
				
			||||||
RIGHT_ARROW=254
 | 
					RCURLY=254
 | 
				
			||||||
STRING=255
 | 
					BITWISEOR=255
 | 
				
			||||||
UNICODE_STRING=256
 | 
					QUESTION=256
 | 
				
			||||||
BINARY_LITERAL=257
 | 
					RIGHT_ARROW=257
 | 
				
			||||||
INTEGER_VALUE=258
 | 
					STRING=258
 | 
				
			||||||
DECIMAL_VALUE=259
 | 
					UNICODE_STRING=259
 | 
				
			||||||
DOUBLE_VALUE=260
 | 
					BINARY_LITERAL=260
 | 
				
			||||||
IDENTIFIER=261
 | 
					INTEGER_VALUE=261
 | 
				
			||||||
DIGIT_IDENTIFIER=262
 | 
					DECIMAL_VALUE=262
 | 
				
			||||||
QUOTED_IDENTIFIER=263
 | 
					DOUBLE_VALUE=263
 | 
				
			||||||
BACKQUOTED_IDENTIFIER=264
 | 
					IDENTIFIER=264
 | 
				
			||||||
TIME_WITH_TIME_ZONE=265
 | 
					DIGIT_IDENTIFIER=265
 | 
				
			||||||
TIMESTAMP_WITH_TIME_ZONE=266
 | 
					QUOTED_IDENTIFIER=266
 | 
				
			||||||
DOUBLE_PRECISION=267
 | 
					BACKQUOTED_IDENTIFIER=267
 | 
				
			||||||
SIMPLE_COMMENT=268
 | 
					TIME_WITH_TIME_ZONE=268
 | 
				
			||||||
BRACKETED_COMMENT=269
 | 
					TIMESTAMP_WITH_TIME_ZONE=269
 | 
				
			||||||
WS=270
 | 
					DOUBLE_PRECISION=270
 | 
				
			||||||
 | 
					SIMPLE_COMMENT=271
 | 
				
			||||||
 | 
					BRACKETED_COMMENT=272
 | 
				
			||||||
 | 
					WS=273
 | 
				
			||||||
'ADD'=1
 | 
					'ADD'=1
 | 
				
			||||||
'ALL'=2
 | 
					'ALL'=2
 | 
				
			||||||
'ANALYTIC'=3
 | 
					'ANALYTIC'=3
 | 
				
			||||||
@ -372,152 +375,155 @@ WS=270
 | 
				
			|||||||
'INTERMEDIATE'=102
 | 
					'INTERMEDIATE'=102
 | 
				
			||||||
'INTO'=103
 | 
					'INTO'=103
 | 
				
			||||||
'INIT_FN'=104
 | 
					'INIT_FN'=104
 | 
				
			||||||
'INVALIDATE'=105
 | 
					'IREGEXP'=105
 | 
				
			||||||
'IS'=106
 | 
					'ILIKE'=106
 | 
				
			||||||
'JOIN'=107
 | 
					'INVALIDATE'=107
 | 
				
			||||||
'KEY'=108
 | 
					'IS'=108
 | 
				
			||||||
'KUDU'=109
 | 
					'JOIN'=109
 | 
				
			||||||
'LAST'=110
 | 
					'KEY'=110
 | 
				
			||||||
'LATERAL'=111
 | 
					'KUDU'=111
 | 
				
			||||||
'LEFT'=112
 | 
					'LAST'=112
 | 
				
			||||||
'LIKE'=113
 | 
					'LATERAL'=113
 | 
				
			||||||
'LIMIT'=114
 | 
					'LEFT'=114
 | 
				
			||||||
'LINES'=115
 | 
					'LIKE'=115
 | 
				
			||||||
'LOAD'=116
 | 
					'LIMIT'=116
 | 
				
			||||||
'LOCALTIME'=117
 | 
					'LINES'=117
 | 
				
			||||||
'LOCALTIMESTAMP'=118
 | 
					'LOAD'=118
 | 
				
			||||||
'METADATA'=119
 | 
					'LOCALTIME'=119
 | 
				
			||||||
'MAP'=120
 | 
					'LOCALTIMESTAMP'=120
 | 
				
			||||||
'MINUTE'=121
 | 
					'METADATA'=121
 | 
				
			||||||
'MINUTES'=122
 | 
					'MAP'=122
 | 
				
			||||||
'MONTH'=123
 | 
					'MINUTE'=123
 | 
				
			||||||
'MONTHS'=124
 | 
					'MINUTES'=124
 | 
				
			||||||
'MERGE_FN'=125
 | 
					'MONTH'=125
 | 
				
			||||||
'NFC'=126
 | 
					'MONTHS'=126
 | 
				
			||||||
'NFD'=127
 | 
					'MERGE_FN'=127
 | 
				
			||||||
'NFKC'=128
 | 
					'NFC'=128
 | 
				
			||||||
'NFKD'=129
 | 
					'NFD'=129
 | 
				
			||||||
'NORMALIZE'=130
 | 
					'NFKC'=130
 | 
				
			||||||
'NOT'=131
 | 
					'NFKD'=131
 | 
				
			||||||
'NULL'=132
 | 
					'NORMALIZE'=132
 | 
				
			||||||
'NULLS'=133
 | 
					'NOT'=133
 | 
				
			||||||
'OFFSET'=134
 | 
					'NULL'=134
 | 
				
			||||||
'ON'=135
 | 
					'NULLS'=135
 | 
				
			||||||
'OPTION'=136
 | 
					'OFFSET'=136
 | 
				
			||||||
'OR'=137
 | 
					'ON'=137
 | 
				
			||||||
'ORDER'=138
 | 
					'OPTION'=138
 | 
				
			||||||
'ORDINALITY'=139
 | 
					'OR'=139
 | 
				
			||||||
'OUTER'=140
 | 
					'ORDER'=140
 | 
				
			||||||
'OWNER'=141
 | 
					'ORDINALITY'=141
 | 
				
			||||||
'OVER'=142
 | 
					'OUTER'=142
 | 
				
			||||||
'OVERWRITE'=143
 | 
					'OWNER'=143
 | 
				
			||||||
'PARTITION'=144
 | 
					'OVER'=144
 | 
				
			||||||
'PARTITIONS'=145
 | 
					'OVERWRITE'=145
 | 
				
			||||||
'PARQUET'=146
 | 
					'PARTITION'=146
 | 
				
			||||||
'POSITION'=147
 | 
					'PARTITIONS'=147
 | 
				
			||||||
'PRECEDING'=148
 | 
					'PARQUET'=148
 | 
				
			||||||
'PRIMARY'=149
 | 
					'POSITION'=149
 | 
				
			||||||
'REPLICATION'=150
 | 
					'PRECEDING'=150
 | 
				
			||||||
'PRIVILEGES'=151
 | 
					'PRIMARY'=151
 | 
				
			||||||
'PROPERTIES'=152
 | 
					'REPLICATION'=152
 | 
				
			||||||
'RANGE'=153
 | 
					'PRIVILEGES'=153
 | 
				
			||||||
'RECOVER'=154
 | 
					'PROPERTIES'=154
 | 
				
			||||||
'RENAME'=155
 | 
					'RANGE'=155
 | 
				
			||||||
'REPEATABLE'=156
 | 
					'RECOVER'=156
 | 
				
			||||||
'REPLACE'=157
 | 
					'RENAME'=157
 | 
				
			||||||
'RESTRICT'=158
 | 
					'REPEATABLE'=158
 | 
				
			||||||
'RETURNS'=159
 | 
					'REPLACE'=159
 | 
				
			||||||
'REVOKE'=160
 | 
					'RESTRICT'=160
 | 
				
			||||||
'REFRESH'=161
 | 
					'RETURNS'=161
 | 
				
			||||||
'REGEXP'=162
 | 
					'REVOKE'=162
 | 
				
			||||||
'RLIKE'=163
 | 
					'REFRESH'=163
 | 
				
			||||||
'RIGHT'=164
 | 
					'REGEXP'=164
 | 
				
			||||||
'ROLE'=165
 | 
					'RLIKE'=165
 | 
				
			||||||
'ROLES'=166
 | 
					'RIGHT'=166
 | 
				
			||||||
'ROW'=167
 | 
					'ROLE'=167
 | 
				
			||||||
'ROWS'=168
 | 
					'ROLES'=168
 | 
				
			||||||
'SCHEMA'=169
 | 
					'ROW'=169
 | 
				
			||||||
'SCHEMAS'=170
 | 
					'ROWS'=170
 | 
				
			||||||
'SECOND'=171
 | 
					'SCHEMA'=171
 | 
				
			||||||
'SECONDS'=172
 | 
					'SCHEMAS'=172
 | 
				
			||||||
'SELECT'=173
 | 
					'SECOND'=173
 | 
				
			||||||
'SERDEPROPERTIES'=174
 | 
					'SECONDS'=174
 | 
				
			||||||
'SET'=175
 | 
					'SELECT'=175
 | 
				
			||||||
'SEMI'=176
 | 
					'SERDEPROPERTIES'=176
 | 
				
			||||||
'SERVER'=177
 | 
					'SET'=177
 | 
				
			||||||
'SHOW'=178
 | 
					'SEMI'=178
 | 
				
			||||||
'SHUTDOWN'=179
 | 
					'SERVER'=179
 | 
				
			||||||
'SOME'=180
 | 
					'SHOW'=180
 | 
				
			||||||
'STATS'=181
 | 
					'SHUTDOWN'=181
 | 
				
			||||||
'STRUCT'=182
 | 
					'SOME'=182
 | 
				
			||||||
'STRAIGHT_JOIN'=183
 | 
					'STATS'=183
 | 
				
			||||||
'SUBSTRING'=184
 | 
					'STRUCT'=184
 | 
				
			||||||
'SYSTEM'=185
 | 
					'STRAIGHT_JOIN'=185
 | 
				
			||||||
'SYMBOL'=186
 | 
					'SUBSTRING'=186
 | 
				
			||||||
'SERIALIZE_FN'=187
 | 
					'SYSTEM'=187
 | 
				
			||||||
'TABLE'=188
 | 
					'SYMBOL'=188
 | 
				
			||||||
'TABLES'=189
 | 
					'SERIALIZE_FN'=189
 | 
				
			||||||
'TABLESAMPLE'=190
 | 
					'TABLE'=190
 | 
				
			||||||
'TERMINATED '=191
 | 
					'TABLES'=191
 | 
				
			||||||
'THEN'=192
 | 
					'TABLESAMPLE'=192
 | 
				
			||||||
'TO'=193
 | 
					'TERMINATED '=193
 | 
				
			||||||
'TRUE'=194
 | 
					'THEN'=194
 | 
				
			||||||
'TRY_CAST'=195
 | 
					'TO'=195
 | 
				
			||||||
'TRUNCATE'=196
 | 
					'TRUE'=196
 | 
				
			||||||
'UNCACHED'=197
 | 
					'TRY_CAST'=197
 | 
				
			||||||
'UESCAPE'=198
 | 
					'TRUNCATE'=198
 | 
				
			||||||
'UNBOUNDED'=199
 | 
					'UNCACHED'=199
 | 
				
			||||||
'UNION'=200
 | 
					'UESCAPE'=200
 | 
				
			||||||
'UNNEST'=201
 | 
					'UNBOUNDED'=201
 | 
				
			||||||
'UNSET'=202
 | 
					'UNION'=202
 | 
				
			||||||
'USE'=203
 | 
					'UNNEST'=203
 | 
				
			||||||
'USER'=204
 | 
					'UNSET'=204
 | 
				
			||||||
'USING'=205
 | 
					'USE'=205
 | 
				
			||||||
'UPDATE_FN'=206
 | 
					'USER'=206
 | 
				
			||||||
'UPSERT'=207
 | 
					'USING'=207
 | 
				
			||||||
'URI'=208
 | 
					'UPDATE_FN'=208
 | 
				
			||||||
'VALUE'=209
 | 
					'UPSERT'=209
 | 
				
			||||||
'VALUES'=210
 | 
					'UNKNOWN'=210
 | 
				
			||||||
'VIEW'=211
 | 
					'URI'=211
 | 
				
			||||||
'VIEWS'=212
 | 
					'VALUE'=212
 | 
				
			||||||
'WHEN'=213
 | 
					'VALUES'=213
 | 
				
			||||||
'WHERE'=214
 | 
					'VIEW'=214
 | 
				
			||||||
'WITH'=215
 | 
					'VIEWS'=215
 | 
				
			||||||
'YEAR'=216
 | 
					'WHEN'=216
 | 
				
			||||||
'YEARS'=217
 | 
					'WHERE'=217
 | 
				
			||||||
'TEXTFILE'=218
 | 
					'WITH'=218
 | 
				
			||||||
'ORC'=219
 | 
					'YEAR'=219
 | 
				
			||||||
'AVRO'=220
 | 
					'YEARS'=220
 | 
				
			||||||
'SEQUENCEFILE'=221
 | 
					'TEXTFILE'=221
 | 
				
			||||||
'RCFILE'=222
 | 
					'ORC'=222
 | 
				
			||||||
'REFERENCES'=223
 | 
					'AVRO'=223
 | 
				
			||||||
'NOVALIDATE'=224
 | 
					'SEQUENCEFILE'=224
 | 
				
			||||||
'RELY'=225
 | 
					'RCFILE'=225
 | 
				
			||||||
'\'NUMDVS\''=226
 | 
					'REFERENCES'=226
 | 
				
			||||||
'\'NUMNULLS\''=227
 | 
					'NOVALIDATE'=227
 | 
				
			||||||
'\'AVGSIZE\''=228
 | 
					'RELY'=228
 | 
				
			||||||
'\'MAXSIZE\''=229
 | 
					'\'NUMDVS\''=229
 | 
				
			||||||
'='=230
 | 
					'\'NUMNULLS\''=230
 | 
				
			||||||
'<'=232
 | 
					'\'AVGSIZE\''=231
 | 
				
			||||||
'<='=233
 | 
					'\'MAXSIZE\''=232
 | 
				
			||||||
'>'=234
 | 
					'='=233
 | 
				
			||||||
'>='=235
 | 
					'<'=235
 | 
				
			||||||
'+'=236
 | 
					'<='=236
 | 
				
			||||||
'-'=237
 | 
					'>'=237
 | 
				
			||||||
'*'=238
 | 
					'>='=238
 | 
				
			||||||
'/'=239
 | 
					'+'=239
 | 
				
			||||||
'%'=240
 | 
					'-'=240
 | 
				
			||||||
'||'=241
 | 
					'*'=241
 | 
				
			||||||
'.'=242
 | 
					'/'=242
 | 
				
			||||||
';'=243
 | 
					'%'=243
 | 
				
			||||||
','=244
 | 
					'||'=244
 | 
				
			||||||
':'=245
 | 
					'.'=245
 | 
				
			||||||
'('=246
 | 
					';'=246
 | 
				
			||||||
')'=247
 | 
					','=247
 | 
				
			||||||
'['=248
 | 
					':'=248
 | 
				
			||||||
']'=249
 | 
					'('=249
 | 
				
			||||||
'{'=250
 | 
					')'=250
 | 
				
			||||||
'}'=251
 | 
					'['=251
 | 
				
			||||||
'|'=252
 | 
					']'=252
 | 
				
			||||||
'?'=253
 | 
					'{'=253
 | 
				
			||||||
'->'=254
 | 
					'}'=254
 | 
				
			||||||
 | 
					'|'=255
 | 
				
			||||||
 | 
					'?'=256
 | 
				
			||||||
 | 
					'->'=257
 | 
				
			||||||
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -12,7 +12,7 @@ import { InListContext } from "./ImpalaSqlParser";
 | 
				
			|||||||
import { InSubqueryContext } from "./ImpalaSqlParser";
 | 
					import { InSubqueryContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { LikeContext } from "./ImpalaSqlParser";
 | 
					import { LikeContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { REGEXPContext } from "./ImpalaSqlParser";
 | 
					import { REGEXPContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { NullPredicateContext } from "./ImpalaSqlParser";
 | 
					import { NullOrUnKnownOrBooleanPredicateContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DistinctFromContext } from "./ImpalaSqlParser";
 | 
					import { DistinctFromContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DecimalLiteralContext } from "./ImpalaSqlParser";
 | 
					import { DecimalLiteralContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DoubleLiteralContext } from "./ImpalaSqlParser";
 | 
					import { DoubleLiteralContext } from "./ImpalaSqlParser";
 | 
				
			||||||
@ -78,6 +78,9 @@ import { LogicalNotContext } from "./ImpalaSqlParser";
 | 
				
			|||||||
import { LogicalBinaryContext } from "./ImpalaSqlParser";
 | 
					import { LogicalBinaryContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { ProgramContext } from "./ImpalaSqlParser";
 | 
					import { ProgramContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { StatementContext } from "./ImpalaSqlParser";
 | 
					import { StatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { SqlStatementsContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { EmptyStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { SqlStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { UseStatementContext } from "./ImpalaSqlParser";
 | 
					import { UseStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { CreateStatementContext } from "./ImpalaSqlParser";
 | 
					import { CreateStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { CreateTableSelectContext } from "./ImpalaSqlParser";
 | 
					import { CreateTableSelectContext } from "./ImpalaSqlParser";
 | 
				
			||||||
@ -381,17 +384,17 @@ export interface ImpalaSqlParserListener extends ParseTreeListener {
 | 
				
			|||||||
	exitREGEXP?: (ctx: REGEXPContext) => void;
 | 
						exitREGEXP?: (ctx: REGEXPContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enter a parse tree produced by the `nullPredicate`
 | 
						 * Enter a parse tree produced by the `nullOrUnKnownOrBooleanPredicate`
 | 
				
			||||||
	 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
						 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
				
			||||||
	 * @param ctx the parse tree
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	enterNullPredicate?: (ctx: NullPredicateContext) => void;
 | 
						enterNullOrUnKnownOrBooleanPredicate?: (ctx: NullOrUnKnownOrBooleanPredicateContext) => void;
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Exit a parse tree produced by the `nullPredicate`
 | 
						 * Exit a parse tree produced by the `nullOrUnKnownOrBooleanPredicate`
 | 
				
			||||||
	 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
						 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
				
			||||||
	 * @param ctx the parse tree
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	exitNullPredicate?: (ctx: NullPredicateContext) => void;
 | 
						exitNullOrUnKnownOrBooleanPredicate?: (ctx: NullOrUnKnownOrBooleanPredicateContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enter a parse tree produced by the `distinctFrom`
 | 
						 * Enter a parse tree produced by the `distinctFrom`
 | 
				
			||||||
@ -1234,6 +1237,39 @@ export interface ImpalaSqlParserListener extends ParseTreeListener {
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	exitStatement?: (ctx: StatementContext) => void;
 | 
						exitStatement?: (ctx: StatementContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enter a parse tree produced by `ImpalaSqlParser.sqlStatements`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						enterSqlStatements?: (ctx: SqlStatementsContext) => void;
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Exit a parse tree produced by `ImpalaSqlParser.sqlStatements`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						exitSqlStatements?: (ctx: SqlStatementsContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enter a parse tree produced by `ImpalaSqlParser.emptyStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						enterEmptyStatement?: (ctx: EmptyStatementContext) => void;
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Exit a parse tree produced by `ImpalaSqlParser.emptyStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						exitEmptyStatement?: (ctx: EmptyStatementContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Enter a parse tree produced by `ImpalaSqlParser.sqlStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						enterSqlStatement?: (ctx: SqlStatementContext) => void;
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Exit a parse tree produced by `ImpalaSqlParser.sqlStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						exitSqlStatement?: (ctx: SqlStatementContext) => void;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Enter a parse tree produced by `ImpalaSqlParser.useStatement`.
 | 
						 * Enter a parse tree produced by `ImpalaSqlParser.useStatement`.
 | 
				
			||||||
	 * @param ctx the parse tree
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,7 @@ import { InListContext } from "./ImpalaSqlParser";
 | 
				
			|||||||
import { InSubqueryContext } from "./ImpalaSqlParser";
 | 
					import { InSubqueryContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { LikeContext } from "./ImpalaSqlParser";
 | 
					import { LikeContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { REGEXPContext } from "./ImpalaSqlParser";
 | 
					import { REGEXPContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { NullPredicateContext } from "./ImpalaSqlParser";
 | 
					import { NullOrUnKnownOrBooleanPredicateContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DistinctFromContext } from "./ImpalaSqlParser";
 | 
					import { DistinctFromContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DecimalLiteralContext } from "./ImpalaSqlParser";
 | 
					import { DecimalLiteralContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { DoubleLiteralContext } from "./ImpalaSqlParser";
 | 
					import { DoubleLiteralContext } from "./ImpalaSqlParser";
 | 
				
			||||||
@ -78,6 +78,9 @@ import { LogicalNotContext } from "./ImpalaSqlParser";
 | 
				
			|||||||
import { LogicalBinaryContext } from "./ImpalaSqlParser";
 | 
					import { LogicalBinaryContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { ProgramContext } from "./ImpalaSqlParser";
 | 
					import { ProgramContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { StatementContext } from "./ImpalaSqlParser";
 | 
					import { StatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { SqlStatementsContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { EmptyStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
 | 
					import { SqlStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { UseStatementContext } from "./ImpalaSqlParser";
 | 
					import { UseStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { CreateStatementContext } from "./ImpalaSqlParser";
 | 
					import { CreateStatementContext } from "./ImpalaSqlParser";
 | 
				
			||||||
import { CreateTableSelectContext } from "./ImpalaSqlParser";
 | 
					import { CreateTableSelectContext } from "./ImpalaSqlParser";
 | 
				
			||||||
@ -339,12 +342,12 @@ export interface ImpalaSqlParserVisitor<Result> extends ParseTreeVisitor<Result>
 | 
				
			|||||||
	visitREGEXP?: (ctx: REGEXPContext) => Result;
 | 
						visitREGEXP?: (ctx: REGEXPContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Visit a parse tree produced by the `nullPredicate`
 | 
						 * Visit a parse tree produced by the `nullOrUnKnownOrBooleanPredicate`
 | 
				
			||||||
	 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
						 * labeled alternative in `ImpalaSqlParser.predicate`.
 | 
				
			||||||
	 * @param ctx the parse tree
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
	 * @return the visitor result
 | 
						 * @return the visitor result
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	visitNullPredicate?: (ctx: NullPredicateContext) => Result;
 | 
						visitNullOrUnKnownOrBooleanPredicate?: (ctx: NullOrUnKnownOrBooleanPredicateContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Visit a parse tree produced by the `distinctFrom`
 | 
						 * Visit a parse tree produced by the `distinctFrom`
 | 
				
			||||||
@ -864,6 +867,27 @@ export interface ImpalaSqlParserVisitor<Result> extends ParseTreeVisitor<Result>
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	visitStatement?: (ctx: StatementContext) => Result;
 | 
						visitStatement?: (ctx: StatementContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Visit a parse tree produced by `ImpalaSqlParser.sqlStatements`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 * @return the visitor result
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						visitSqlStatements?: (ctx: SqlStatementsContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Visit a parse tree produced by `ImpalaSqlParser.emptyStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 * @return the visitor result
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						visitEmptyStatement?: (ctx: EmptyStatementContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * Visit a parse tree produced by `ImpalaSqlParser.sqlStatement`.
 | 
				
			||||||
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
						 * @return the visitor result
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						visitSqlStatement?: (ctx: SqlStatementContext) => Result;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * Visit a parse tree produced by `ImpalaSqlParser.useStatement`.
 | 
						 * Visit a parse tree produced by `ImpalaSqlParser.useStatement`.
 | 
				
			||||||
	 * @param ctx the parse tree
 | 
						 * @param ctx the parse tree
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +1,11 @@
 | 
				
			|||||||
import { Token } from 'antlr4ts';
 | 
					import { Token } from 'antlr4ts';
 | 
				
			||||||
import { CandidatesCollection } from 'antlr4-c3';
 | 
					import { CandidatesCollection } from 'antlr4-c3';
 | 
				
			||||||
import { ImpalaSqlLexer } from '../lib/impala/ImpalaSqlLexer';
 | 
					import { ImpalaSqlLexer } from '../lib/impala/ImpalaSqlLexer';
 | 
				
			||||||
import { ImpalaSqlParser, ProgramContext, StatementContext } from '../lib/impala/ImpalaSqlParser';
 | 
					import {
 | 
				
			||||||
 | 
					    ImpalaSqlParser,
 | 
				
			||||||
 | 
					    ProgramContext,
 | 
				
			||||||
 | 
					    SqlStatementContext,
 | 
				
			||||||
 | 
					} from '../lib/impala/ImpalaSqlParser';
 | 
				
			||||||
import BasicParser from './common/basicParser';
 | 
					import BasicParser from './common/basicParser';
 | 
				
			||||||
import { ImpalaSqlParserListener } from '../lib/impala/ImpalaSqlParserListener';
 | 
					import { ImpalaSqlParserListener } from '../lib/impala/ImpalaSqlParserListener';
 | 
				
			||||||
import { SyntaxContextType, Suggestions, SyntaxSuggestion } from './common/basic-parser-types';
 | 
					import { SyntaxContextType, Suggestions, SyntaxSuggestion } from './common/basic-parser-types';
 | 
				
			||||||
@ -125,13 +129,13 @@ export default class ImpalaSQL extends BasicParser<
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class ImpalaSqlSplitListener implements ImpalaSqlParserListener {
 | 
					export class ImpalaSqlSplitListener implements ImpalaSqlParserListener {
 | 
				
			||||||
    private _statementContext: StatementContext[] = [];
 | 
					    private _statementContext: SqlStatementContext[] = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    exitStatement = (ctx: StatementContext) => {
 | 
					    exitSqlStatement = (ctx: SqlStatementContext) => {
 | 
				
			||||||
        this._statementContext.push(ctx);
 | 
					        this._statementContext.push(ctx);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    enterStatement = (ctx: StatementContext) => {};
 | 
					    enterSqlStatement = (ctx: SqlStatementContext) => {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    get statementsContext() {
 | 
					    get statementsContext() {
 | 
				
			||||||
        return this._statementContext;
 | 
					        return this._statementContext;
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,7 @@ describe('impala SQL Listener Tests', () => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const parseTree = parser.parse(sql);
 | 
					    const parseTree = parser.parse(sql);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test('Listener enterTableName', async () => {
 | 
					    test('Listener enterTableNamePath', async () => {
 | 
				
			||||||
        let result = '';
 | 
					        let result = '';
 | 
				
			||||||
        class MyListener implements ImpalaSqlParserListener {
 | 
					        class MyListener implements ImpalaSqlParserListener {
 | 
				
			||||||
            enterTableNamePath = (ctx): void => {
 | 
					            enterTableNamePath = (ctx): void => {
 | 
				
			||||||
@ -21,4 +21,24 @@ describe('impala SQL Listener Tests', () => {
 | 
				
			|||||||
        await parser.listen(listenTableName as ParseTreeListener, parseTree);
 | 
					        await parser.listen(listenTableName as ParseTreeListener, parseTree);
 | 
				
			||||||
        expect(result).toBe(expectTableName);
 | 
					        expect(result).toBe(expectTableName);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    test('Listener sql', async () => {
 | 
				
			||||||
 | 
					        const sql = `SELECT id FROM games ORDER BY score DESC;\nSHOW SCHEMAS LIKE 'xxx';`;
 | 
				
			||||||
 | 
					        const sqlSlices = parser.splitSQLByStatement(sql);
 | 
				
			||||||
 | 
					        expect(sqlSlices.length).toBe(2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(sqlSlices[0].text).toBe('SELECT id FROM games ORDER BY score DESC;');
 | 
				
			||||||
 | 
					        expect(sql.slice(sqlSlices[0].startIndex, sqlSlices[0].endIndex + 1)).toBe(
 | 
				
			||||||
 | 
					            sqlSlices[0].text
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        expect(sqlSlices[0].startLine).toBe(1);
 | 
				
			||||||
 | 
					        expect(sqlSlices[0].endLine).toBe(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        expect(sqlSlices[1].text).toBe(`SHOW SCHEMAS LIKE 'xxx';`);
 | 
				
			||||||
 | 
					        expect(sql.slice(sqlSlices[1].startIndex, sqlSlices[1].endIndex + 1)).toBe(
 | 
				
			||||||
 | 
					            sqlSlices[1].text
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					        expect(sqlSlices[1].startLine).toBe(2);
 | 
				
			||||||
 | 
					        expect(sqlSlices[1].endLine).toBe(2);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
				
			|||||||
@ -189,3 +189,28 @@ select appx_median(x) from million_numbers;
 | 
				
			|||||||
select count(x) as higher from million_numbers where x > (select appx_median(x) from million_numbers);
 | 
					select count(x) as higher from million_numbers where x > (select appx_median(x) from million_numbers);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
select avg(length(s)) from t1;
 | 
					select avg(length(s)) from t1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select 'fooBar' ilike 'FOOBAR';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select 'ABCXYZ' not ilike 'ab_xyz';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select 1 not in (1,null,2,3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SELECT c1 AS "starts with vowel" FROM t2 WHERE upper(substr(c1,1,1)) IN ('A','E','I','O','U');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select 'abcABCaabbcc' iregexp '^[a-c]+$';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select null is distinct from null, null != null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select
 | 
				
			||||||
 | 
					  'x' is distinct from 'x ' as string_with_trailing_spaces,
 | 
				
			||||||
 | 
					  cast('x' as char(5)) is distinct from cast('x ' as char(5)) as char_with_trailing_spaces;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select assertion, b, b is true, b is false, b is unknown
 | 
				
			||||||
 | 
					  from boolean_test;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select true and null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select c_first_name, c_last_name from customer where lower(trim(c_last_name)) regexp '^de.*';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					select c_first_name, c_last_name from customer where lower(trim(c_last_name)) rlike '^de.*';
 | 
				
			||||||
@ -11,7 +11,7 @@ describe('impala SQL Visitor Tests', () => {
 | 
				
			|||||||
        console.log('Parse error:', error);
 | 
					        console.log('Parse error:', error);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    test('Visitor visitTableName', () => {
 | 
					    test('Visitor visitTableNamePath', () => {
 | 
				
			||||||
        let result = '';
 | 
					        let result = '';
 | 
				
			||||||
        class MyVisitor
 | 
					        class MyVisitor
 | 
				
			||||||
            extends AbstractParseTreeVisitor<any>
 | 
					            extends AbstractParseTreeVisitor<any>
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user