@@ -122,7 +122,7 @@ statement
122
122
(KW_PARTITION LPAREN expression(COMMA expression)*RPAREN )?
123
123
hintClause? query #insertInto
124
124
| KW_DELETE KW_FROM ? qualifiedName (KW_WHERE booleanExpression)? #delete
125
- | KW_DELETE expression (KW_AS ? identifier)? KW_FROM ? relation (( COMMA relation)*) ? (KW_WHERE booleanExpression)? #deleteTableRef
125
+ | KW_DELETE expression (KW_AS ? identifier)? KW_FROM relation (COMMA relation)*? (KW_WHERE booleanExpression)? #deleteTableRef
126
126
| KW_UPDATE qualifiedName KW_SET assignmentList (KW_FROM relation (COMMA relation)*)? (KW_WHERE booleanExpression)? #updateTable
127
127
| KW_UPSERT hintClause? KW_INTO KW_TABLE ? qualifiedName
128
128
columnAliases?
@@ -248,14 +248,7 @@ rangeClause
248
248
: KW_RANGE columnAliases? LPAREN (KW_PARTITION kuduPartitionSpec (COMMA KW_PARTITION kuduPartitionSpec)*?) RPAREN
249
249
;
250
250
kuduPartitionSpec
251
- : KW_VALUE partitionCol constants | constants rangeOperator KW_VALUES rangeOperator constants
252
- ;
253
- constants
254
- : INTEGER_VALUE
255
- | DECIMAL_VALUE
256
- | DOUBLE_VALUE
257
- | string
258
- | booleanValue
251
+ : KW_VALUE partitionCol expression | expression rangeOperator KW_VALUES rangeOperator expression
259
252
;
260
253
261
254
cacheSpec
@@ -313,7 +306,7 @@ property
313
306
queryNoWith :
314
307
queryTerm
315
308
(KW_ORDER KW_BY sortItem (COMMA sortItem)*)?
316
- (KW_LIMIT rows=INTEGER_VALUE (KW_OFFSET offset=INTEGER_VALUE )?)?
309
+ (KW_LIMIT rows=expression (KW_OFFSET offset=INTEGER_VALUE )?)?
317
310
;
318
311
319
312
queryTerm
@@ -326,7 +319,7 @@ queryPrimary
326
319
: querySpecification #queryPrimaryDefault
327
320
| KW_TABLE qualifiedName #table
328
321
| KW_VALUES expression (COMMA expression)* #inlineTable
329
- | LPAREN queryNoWith RPAREN #subquery
322
+ | LPAREN queryNoWith RPAREN #subquery
330
323
;
331
324
332
325
sortItem
@@ -397,7 +390,7 @@ joinCriteria
397
390
398
391
sampledRelation
399
392
: aliasedRelation (
400
- KW_TABLESAMPLE sampleType LPAREN percentage=expression RPAREN
393
+ KW_TABLESAMPLE sampleType LPAREN percentage=expression RPAREN ( KW_REPEATABLE LPAREN seed=expression RPAREN )?
401
394
)?
402
395
;
403
396
@@ -433,14 +426,14 @@ booleanExpression
433
426
| left=booleanExpression operator=KW_OR right=booleanExpression #logicalBinary
434
427
;
435
428
436
- // workaround for https://github.com/antlr/antlr4/issues/780
437
429
predicate [ParserRuleContext value]
438
430
: comparisonOperator right=valueExpression #comparison
439
431
| comparisonOperator comparisonQuantifier LPAREN query RPAREN #quantifiedComparison
440
432
| KW_NOT ? KW_BETWEEN lower=valueExpression KW_AND upper=valueExpression #between
441
433
| KW_NOT ? KW_IN LPAREN expression (COMMA expression)* RPAREN #inList
442
434
| KW_NOT ? KW_IN LPAREN query RPAREN #inSubquery
443
435
| KW_NOT ? KW_LIKE pattern=valueExpression (KW_ESCAPE escape=valueExpression)? #like
436
+ | KW_REGEXP pattern=valueExpression #REGEXP
444
437
| KW_IS KW_NOT ? KW_NULL #nullPredicate
445
438
| KW_IS KW_NOT ? KW_DISTINCT KW_FROM right=valueExpression #distinctFrom
446
439
;
@@ -616,31 +609,135 @@ number
616
609
| MINUS ? INTEGER_VALUE #integerLiteral
617
610
;
618
611
612
+
619
613
nonReserved
620
- // IMPORTANT: this rule must only contain tokens. Nested rules are not supported. See SqlParser.exitNonReserved
621
- : KW_ADD | KW_ADMIN | KW_ALL | KW_ANALYZE | KW_ANY | KW_ARRAY | KW_ASC | KW_AT
622
- | KW_BERNOULLI
623
- | KW_CALL | KW_CASCADE | KW_CATALOGS | KW_COLUMN | KW_COLUMNS | KW_COMMENT | KW_COMMIT | KW_COMMITTED | KW_CURRENT
624
- | KW_DATA | KW_DATABASE | KW_DATABASES | KW_DATE | KW_DAY | KW_DAYS | KW_DEFINER | KW_DESC
625
- | KW_EXCLUDING | KW_EXPLAIN
626
- | KW_FETCH | KW_FILTER | KW_FIRST | KW_FOLLOWING | KW_FORMAT | KW_FUNCTIONS
627
- | KW_GRANT | KW_GRANTED | KW_GRANTS | KW_GRAPHVIZ
628
- | KW_HOUR
629
- | KW_IF | KW_INCLUDING | KW_INPUT | KW_INTERVAL | KW_INVOKER | KW_IO | KW_ISOLATION
630
- | KW_JSON
631
- | KW_LAST | KW_LATERAL | KW_LEVEL | KW_LIMIT | KW_LOGICAL
632
- | KW_MAP | KW_MINUTE | KW_MONTH
633
- | KW_NEXT | KW_NFC | KW_NFD | KW_NFKC | KW_NFKD | KW_NO | KW_NONE | KW_NULLIF | KW_NULLS
634
- | KW_OFFSET | KW_ONLY | KW_OPTION | KW_ORDINALITY | KW_OUTPUT | KW_OVER
635
- | KW_PARTITION | KW_PARTITIONS | KW_PARQUET | KW_PATH | KW_POSITION | KW_PRECEDING | KW_PRIVILEGES | KW_PROPERTIES
636
- | KW_RANGE | KW_READ | KW_RENAME | KW_REPEATABLE | KW_REPLACE | KW_RESET | KW_RESTRICT | KW_REVOKE | KW_ROLE | KW_ROLES | KW_ROLLBACK | KW_ROW | KW_ROWS
637
- | KW_SCHEMA | KW_SCHEMAS | KW_SECOND | KW_SECONDS | KW_SECURITY | KW_SERIALIZABLE | KW_SESSION | KW_SET | KW_SETS
638
- | KW_SHOW | KW_SOME | KW_START | KW_STATS | KW_SUBSTRING | KW_SYSTEM
639
- | KW_TABLES | KW_TABLESAMPLE | KW_TEXT | KW_TIES | KW_TIME | KW_TIMESTAMP | KW_TO | KW_TRANSACTION | KW_TRY_CAST | KW_TYPE
640
- | KW_UNBOUNDED | KW_UNCOMMITTED | KW_USE | KW_USER
641
- | KW_VALIDATE | KW_VERBOSE | KW_VIEW | KW_VIEWS
642
- | KW_WORK | KW_WRITE
643
- | KW_YEAR
644
- | KW_ZONE
645
- | KW_DEFAULT
646
- ;
614
+ // IMPORTANT: this rule must only contain tokens. Nested rules are not supported. See SqlParser.exitNonReserved
615
+ :KW_ADD
616
+ | KW_ADMIN
617
+ | KW_ALL
618
+ | KW_ANALYZE
619
+ | KW_ANY
620
+ | KW_ARRAY
621
+ | KW_ASC
622
+ | KW_AT
623
+ | KW_BERNOULLI
624
+ | KW_CALL
625
+ | KW_CASCADE
626
+ | KW_CATALOGS
627
+ | KW_COLUMN
628
+ | KW_COLUMNS
629
+ | KW_COMMENT
630
+ | KW_COMMIT
631
+ | KW_COMMITTED
632
+ | KW_CURRENT
633
+ | KW_DATA
634
+ | KW_DATABASE
635
+ | KW_DATABASES
636
+ | KW_DATE
637
+ | KW_DAY
638
+ | KW_DAYS
639
+ | KW_DEFINER
640
+ | KW_DESC
641
+ | KW_EXCLUDING
642
+ | KW_EXPLAIN
643
+ | KW_FETCH
644
+ | KW_FILTER
645
+ | KW_FIRST
646
+ | KW_FOLLOWING
647
+ | KW_FORMAT
648
+ | KW_FUNCTIONS
649
+ | KW_GRANT
650
+ | KW_GRANTED
651
+ | KW_GRANTS
652
+ | KW_GRAPHVIZ
653
+ | KW_HOUR
654
+ | KW_IF
655
+ | KW_INCLUDING
656
+ | KW_INPUT
657
+ | KW_INTERVAL
658
+ | KW_INVOKER
659
+ | KW_IO
660
+ | KW_ISOLATION
661
+ | KW_JSON
662
+ | KW_LAST
663
+ | KW_LATERAL
664
+ | KW_LEVEL
665
+ | KW_LIMIT
666
+ | KW_LOGICAL
667
+ | KW_MAP
668
+ | KW_MINUTE
669
+ | KW_MONTH
670
+ | KW_NEXT
671
+ | KW_NFC
672
+ | KW_NFD
673
+ | KW_NFKC
674
+ | KW_NFKD
675
+ | KW_NO
676
+ | KW_NONE
677
+ | KW_NULLIF
678
+ | KW_NULLS
679
+ | KW_OFFSET
680
+ | KW_ONLY
681
+ | KW_OPTION
682
+ | KW_ORDINALITY
683
+ | KW_OUTPUT
684
+ | KW_OVER
685
+ | KW_PARTITION
686
+ | KW_PARTITIONS
687
+ | KW_PARQUET
688
+ | KW_PATH
689
+ | KW_POSITION
690
+ | KW_PRECEDING
691
+ | KW_PRIVILEGES
692
+ | KW_PROPERTIES
693
+ | KW_RANGE
694
+ | KW_READ
695
+ | KW_RENAME
696
+ | KW_REPEATABLE
697
+ | KW_REPLACE
698
+ | KW_RESET
699
+ | KW_RESTRICT
700
+ | KW_REVOKE
701
+ | KW_ROLE
702
+ | KW_ROLES
703
+ | KW_ROLLBACK
704
+ | KW_ROW
705
+ | KW_ROWS
706
+ | KW_SCHEMA
707
+ | KW_SCHEMAS
708
+ | KW_SECOND
709
+ | KW_SECONDS
710
+ | KW_SECURITY
711
+ | KW_SERIALIZABLE
712
+ | KW_SESSION
713
+ | KW_SET
714
+ | KW_SETS
715
+ | KW_SHOW
716
+ | KW_SOME
717
+ | KW_START
718
+ | KW_STATS
719
+ | KW_SUBSTRING
720
+ | KW_SYSTEM
721
+ | KW_TABLES
722
+ | KW_TABLESAMPLE
723
+ | KW_TEXT
724
+ | KW_TIES
725
+ | KW_TIME
726
+ | KW_TIMESTAMP
727
+ | KW_TO
728
+ | KW_TRANSACTION
729
+ | KW_TRY_CAST
730
+ | KW_TYPE
731
+ | KW_UNBOUNDED
732
+ | KW_UNCOMMITTED
733
+ | KW_USE
734
+ | KW_USER
735
+ | KW_VALIDATE
736
+ | KW_VERBOSE
737
+ | KW_VIEW
738
+ | KW_VIEWS
739
+ | KW_WORK
740
+ | KW_WRITE
741
+ | KW_YEAR
742
+ | KW_ZONE
743
+ | KW_DEFAULT ;
0 commit comments