@@ -91,7 +91,7 @@ statement
91
91
)* ' )' (KW_COMMENT comment=string)? (KW_WITH properties)? # createTable
92
92
| KW_DROP KW_TABLE (KW_IF KW_EXISTS )? tableRef # dropTable
93
93
| KW_INSERT KW_INTO tableRef columnList? rootQuery # insertInto
94
- | KW_DELETE KW_FROM tableRef (KW_WHERE booleanExpression)? # delete
94
+ | KW_DELETE KW_FROM tableRef (whereClause)? # delete
95
95
| KW_TRUNCATE KW_TABLE tableRef # truncateTable
96
96
| KW_COMMENT KW_ON KW_TABLE tableRef KW_IS (string | KW_NULL ) # commentTable
97
97
| KW_COMMENT KW_ON KW_VIEW viewRef KW_IS (string | KW_NULL ) # commentView
@@ -106,7 +106,7 @@ statement
106
106
| KW_ALTER KW_TABLE tableName=tableRef KW_SET KW_PROPERTIES propertyAssignments # setTableProperties
107
107
| KW_ALTER KW_TABLE tableName=tableRef KW_EXECUTE procedureName=functionName (
108
108
' (' (callArgument (' ,' callArgument)*)? ' )'
109
- )? (KW_WHERE where=booleanExpression)? # tableExecute
109
+ )? (whereClause)? # tableExecute
110
110
| KW_ANALYZE tableRef (KW_WITH properties)? # analyze
111
111
| KW_CREATE (KW_OR KW_REPLACE )? KW_MATERIALIZED KW_VIEW (KW_IF KW_NOT KW_EXISTS )? viewNameCreate (
112
112
KW_GRACE KW_PERIOD interval
@@ -167,26 +167,24 @@ statement
167
167
| KW_DESC tableOrViewName # showColumns
168
168
| KW_SHOW KW_FUNCTIONS ((KW_FROM | KW_IN ) schemaRef)? (
169
169
KW_LIKE pattern=string (KW_ESCAPE escape=string)?
170
- )? # showFunctions
171
- | KW_SHOW KW_SESSION (KW_LIKE pattern=string (KW_ESCAPE escape=string)?)? # showSession
172
- | KW_SET KW_SESSION KW_AUTHORIZATION authorizationUser # setSessionAuthorization
173
- | KW_RESET KW_SESSION KW_AUTHORIZATION # resetSessionAuthorization
174
- | KW_SET KW_SESSION qualifiedName EQ expression # setSession
175
- | KW_RESET KW_SESSION qualifiedName # resetSession
176
- | KW_START KW_TRANSACTION (transactionMode (' ,' transactionMode)*)? # startTransaction
177
- | KW_COMMIT KW_WORK ? # commit
178
- | KW_ROLLBACK KW_WORK ? # rollback
179
- | KW_PREPARE identifier KW_FROM statement # prepare
180
- | KW_DEALLOCATE KW_PREPARE identifier # deallocate
181
- | KW_EXECUTE identifier (KW_USING expression (' ,' expression)*)? # execute
182
- | KW_EXECUTE KW_IMMEDIATE string (KW_USING expression (' ,' expression)*)? # executeImmediate
183
- | KW_DESCRIBE KW_INPUT identifier # describeInput
184
- | KW_DESCRIBE KW_OUTPUT identifier # describeOutput
185
- | KW_SET KW_PATH pathSpecification # setPath
186
- | KW_SET KW_TIME KW_ZONE ( KW_LOCAL | expression) # setTimeZone
187
- | KW_UPDATE tableRef KW_SET updateAssignment (' ,' updateAssignment)* (
188
- KW_WHERE where=booleanExpression
189
- )? # update
170
+ )? # showFunctions
171
+ | KW_SHOW KW_SESSION (KW_LIKE pattern=string (KW_ESCAPE escape=string)?)? # showSession
172
+ | KW_SET KW_SESSION KW_AUTHORIZATION authorizationUser # setSessionAuthorization
173
+ | KW_RESET KW_SESSION KW_AUTHORIZATION # resetSessionAuthorization
174
+ | KW_SET KW_SESSION qualifiedName EQ expression # setSession
175
+ | KW_RESET KW_SESSION qualifiedName # resetSession
176
+ | KW_START KW_TRANSACTION (transactionMode (' ,' transactionMode)*)? # startTransaction
177
+ | KW_COMMIT KW_WORK ? # commit
178
+ | KW_ROLLBACK KW_WORK ? # rollback
179
+ | KW_PREPARE identifier KW_FROM statement # prepare
180
+ | KW_DEALLOCATE KW_PREPARE identifier # deallocate
181
+ | KW_EXECUTE identifier (KW_USING expression (' ,' expression)*)? # execute
182
+ | KW_EXECUTE KW_IMMEDIATE string (KW_USING expression (' ,' expression)*)? # executeImmediate
183
+ | KW_DESCRIBE KW_INPUT identifier # describeInput
184
+ | KW_DESCRIBE KW_OUTPUT identifier # describeOutput
185
+ | KW_SET KW_PATH pathSpecification # setPath
186
+ | KW_SET KW_TIME KW_ZONE ( KW_LOCAL | expression) # setTimeZone
187
+ | KW_UPDATE tableRef KW_SET updateAssignment (' ,' updateAssignment)* (whereClause)? # update
190
188
| KW_MERGE KW_INTO tableRef (KW_AS ? identifier)? KW_USING relation KW_ON expression mergeCase+ # merge
191
189
| KW_SHOW KW_COMMENT KW_ON KW_TABLE tableRef # showTableComment // dtstack
192
190
| KW_SHOW KW_COMMENT KW_ON KW_COLUMN columnRef # showColumnComment // dtstack
@@ -283,16 +281,26 @@ sortItem
283
281
284
282
querySpecification
285
283
: KW_SELECT setQuantifier? selectItem (' ,' selectItem)* (KW_FROM relation (' ,' relation)*)? (
286
- KW_WHERE where=booleanExpression
287
- )? (KW_GROUP KW_BY groupBy)? (KW_HAVING having=booleanExpression)? (
288
- KW_WINDOW windowDefinition (' ,' windowDefinition)*
289
- )?
284
+ whereClause
285
+ )? (KW_GROUP KW_BY groupBy)? (havingClause)? (KW_WINDOW windowDefinition (' ,' windowDefinition)*)?
286
+ ;
287
+
288
+ whereClause
289
+ : KW_WHERE where=booleanExpression
290
+ ;
291
+
292
+ havingClause
293
+ : KW_HAVING having=booleanExpression
290
294
;
291
295
292
296
groupBy
293
297
: setQuantifier? groupingElement (' ,' groupingElement)*
294
298
;
295
299
300
+ partitionBy
301
+ : expression (' ,' expression)*
302
+ ;
303
+
296
304
groupingElement
297
305
: groupingSet # singleGroupingSet
298
306
| KW_ROLLUP ' (' (groupingSet (' ,' groupingSet)*)? ' )' # rollup
@@ -315,9 +323,9 @@ windowDefinition
315
323
;
316
324
317
325
windowSpecification
318
- : (existingWindowName=identifier)? (
319
- KW_PARTITION KW_BY partition+=expression (' ,' partition+=expression )*
320
- )? ( KW_ORDER KW_BY sortItem ( ' , ' sortItem)*)? windowFrame?
326
+ : (existingWindowName=identifier)? (KW_PARTITION KW_BY partitionBy)? (
327
+ KW_ORDER KW_BY sortItem (' ,' sortItem )*
328
+ )? windowFrame?
321
329
;
322
330
323
331
namedQuery
@@ -383,11 +391,11 @@ listaggCountIndication
383
391
384
392
patternRecognition
385
393
: aliasedRelation (
386
- KW_MATCH_RECOGNIZE ' (' (
387
- KW_PARTITION KW_BY partition+=expression (' ,' partition+=expression )*
388
- )? (KW_ORDER KW_BY sortItem (' ,' sortItem )*)? (
389
- KW_MEASURES measureDefinition ( ' , ' measureDefinition)*
390
- )? rowsPerMatch? ( KW_AFTER KW_MATCH skipTo)? (KW_INITIAL | KW_SEEK )? KW_PATTERN ' (' rowPattern ' )' (
394
+ KW_MATCH_RECOGNIZE ' (' (KW_PARTITION KW_BY partitionBy)? (
395
+ KW_ORDER KW_BY sortItem (' ,' sortItem )*
396
+ )? (KW_MEASURES measureDefinition (' ,' measureDefinition )*)? rowsPerMatch ? (
397
+ KW_AFTER KW_MATCH skipTo
398
+ )? (KW_INITIAL | KW_SEEK )? KW_PATTERN ' (' rowPattern ' )' (
391
399
KW_SUBSET subsetDefinition (' ,' subsetDefinition)*
392
400
)? KW_DEFINE variableDefinition (' ,' variableDefinition)* ' )' (KW_AS ? identifier columnAliases?)?
393
401
)?
@@ -502,7 +510,7 @@ tableFunctionArgument
502
510
;
503
511
504
512
tableArgument
505
- : tableArgumentRelation (KW_PARTITION KW_BY (' (' (expression ( ' , ' expression)*) ? ' )' | expression))? (
513
+ : tableArgumentRelation (KW_PARTITION KW_BY (' (' partitionBy ? ' )' | expression))? (
506
514
KW_PRUNE KW_WHEN KW_EMPTY
507
515
| KW_KEEP KW_WHEN KW_EMPTY
508
516
)? (KW_ORDER KW_BY (' (' sortItem (' ,' sortItem)* ' )' | sortItem))?
@@ -590,7 +598,7 @@ primaryExpression
590
598
| KW_TRY_CAST ' (' expression KW_AS type ' )' # cast
591
599
| KW_ARRAY ' [' (expression (' ,' expression)*)? ' ]' # arrayConstructor
592
600
| value=primaryExpression ' [' index=valueExpression ' ]' # subscript
593
- | identifier # columnReference
601
+ | columnName # columnReference
594
602
| base=primaryExpression ' .' fieldName=identifier # dereference
595
603
| name=KW_CURRENT_DATE # currentDate
596
604
| name=KW_CURRENT_TIME (' (' precision=INTEGER_VALUE ' )' )? # currentTime
@@ -765,7 +773,7 @@ whenClause
765
773
;
766
774
767
775
filter
768
- : KW_FILTER ' (' KW_WHERE booleanExpression ' )'
776
+ : KW_FILTER ' (' whereClause ' )'
769
777
;
770
778
771
779
mergeCase
@@ -1008,6 +1016,10 @@ columnRef
1008
1016
| {this.shouldMatchEmpty()} ?
1009
1017
;
1010
1018
1019
+ columnName
1020
+ : qualifiedName
1021
+ ;
1022
+
1011
1023
columnNameCreate
1012
1024
: identifier
1013
1025
;
0 commit comments