@@ -593,8 +593,8 @@ create_database_stmt
593
593
(LC_CTYPE EQUAL name_)?
594
594
(TABLESPACE EQUAL name_)?
595
595
(ALLOW_CONNECTIONS EQUAL name_)?
596
- (CONNECTION LIMIT EQUAL INTEGER_LITERAL )?
597
- (IS_TEMPLATE EQUAL INTEGER_LITERAL )?
596
+ (CONNECTION LIMIT EQUAL parameterOrIntegerLiteral )?
597
+ (IS_TEMPLATE EQUAL parameterOrIntegerLiteral )?
598
598
)
599
599
;
600
600
@@ -728,7 +728,7 @@ create_role_stmt
728
728
(SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB |
729
729
CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN |
730
730
REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS |
731
- CONNECTION LIMIT INTEGER_LITERAL | ENCRYPTED? PASSWORD (SINGLEQ_STRING_LITERAL | NULL) |
731
+ CONNECTION LIMIT parameterOrIntegerLiteral | ENCRYPTED? PASSWORD (SINGLEQ_STRING_LITERAL | NULL) |
732
732
VALID UNTIL SINGLEQ_STRING_LITERAL | IN ROLE name_list | IN GROUP name_list | ROLE name_list |
733
733
ADMIN name_list | USER name_list | SYSID INTEGER_LITERAL)+)?
734
734
;
@@ -752,10 +752,10 @@ create_schema_stmt
752
752
;
753
753
754
754
create_sequence_stmt
755
- : CREATE (TEMPORARY | TEMP)? SEQUENCE (IF NOT EXISTS)? name=identifier (INCREMENT BY? increment=INTEGER_LITERAL )?
756
- (MINVALUE minvalue=INTEGER_LITERAL | NO MINVALUE)?
757
- (MAXVALUE maxvalue=INTEGER_LITERAL | NO MAXVALUE)?
758
- (START WITH? start=INTEGER_LITERAL )? (CACHE cache=INTEGER_LITERAL )? (NO? CYCLE)?
755
+ : CREATE (TEMPORARY | TEMP)? SEQUENCE (IF NOT EXISTS)? name=identifier (INCREMENT BY? increment=parameterOrIntegerLiteral )?
756
+ (MINVALUE minvalue=parameterOrIntegerLiteral | NO MINVALUE)?
757
+ (MAXVALUE maxvalue=parameterOrIntegerLiteral | NO MAXVALUE)?
758
+ (START WITH? start=parameterOrIntegerLiteral )? (CACHE cache=parameterOrIntegerLiteral )? (NO? CYCLE)?
759
759
(OWNED BY ((table_name=identifier DOT column_name_=identifier) | NONE))?
760
760
;
761
761
@@ -1106,8 +1106,8 @@ lock_stmt
1106
1106
;
1107
1107
1108
1108
move_stmt
1109
- : MOVE ((NEXT | PRIOR | FIRST | LAST | ABSOLUTE INTEGER | RELATIVE INTEGER_LITERAL | INTEGER_LITERAL |
1110
- ALL | FORWARD (INTEGER_LITERAL |ALL)? | BACKWARD (INTEGER_LITERAL |ALL)?) (FROM|IN)?)? cursor_name=name_
1109
+ : MOVE ((NEXT | PRIOR | FIRST | LAST | ABSOLUTE INTEGER | RELATIVE parameterOrIntegerLiteral | parameterOrIntegerLiteral |
1110
+ ALL | FORWARD (parameterOrIntegerLiteral |ALL)? | BACKWARD (parameterOrIntegerLiteral |ALL)?) (FROM|IN)?)? cursor_name=name_
1111
1111
;
1112
1112
1113
1113
notify_stmt
@@ -1366,9 +1366,9 @@ explain_parameter
1366
1366
1367
1367
frame
1368
1368
: UNBOUNDED PRECEDING
1369
- | INTEGER_LITERAL PRECEDING
1369
+ | parameterOrIntegerLiteral PRECEDING
1370
1370
| CURRENT ROW
1371
- | INTEGER_LITERAL FOLLOWING
1371
+ | parameterOrIntegerLiteral FOLLOWING
1372
1372
| UNBOUNDED FOLLOWING
1373
1373
;
1374
1374
@@ -1408,15 +1408,15 @@ order_by_item
1408
1408
;
1409
1409
1410
1410
limit_clause
1411
- : LIMIT (INTEGER_LITERAL | ALL | func_call)
1411
+ : LIMIT (parameterOrIntegerLiteral | ALL | func_call)
1412
1412
;
1413
1413
1414
1414
offset_clause
1415
- : OFFSET INTEGER_LITERAL (ROW | ROWS)?
1415
+ : OFFSET parameterOrIntegerLiteral (ROW | ROWS)?
1416
1416
;
1417
1417
1418
1418
fetch_clause
1419
- : FETCH (FIRST | NEXT) INTEGER_LITERAL ? (ROW | ROWS) ONLY
1419
+ : FETCH (FIRST | NEXT) parameterOrIntegerLiteral ? (ROW | ROWS) ONLY
1420
1420
;
1421
1421
1422
1422
for_clause
@@ -1502,11 +1502,23 @@ expr
1502
1502
;
1503
1503
1504
1504
parameter
1505
- : prefix=':' SPEL
1506
- | prefix=':' identifier
1505
+ : COLON SPEL
1506
+ | COLON identifier
1507
+ | COLON reserved_keyword
1508
+ | COLON INTEGER_LITERAL
1507
1509
| prefix='?' SPEL
1508
1510
| prefix='?' INTEGER_LITERAL?
1509
1511
;
1512
+
1513
+ parameterOrIntegerLiteral
1514
+ : parameter
1515
+ | INTEGER_LITERAL
1516
+ ;
1517
+
1518
+ parameterOrNumericLiteral
1519
+ : parameter
1520
+ | NUMERIC_LITERAL
1521
+ ;
1510
1522
1511
1523
// TODO: is this necessary. can we just encapsulate within expr's operator precedence?
1512
1524
bool_expr
@@ -1777,11 +1789,15 @@ role_name_list
1777
1789
param_value
1778
1790
: ON | OFF | TRUE | FALSE | YES | NO | NONE
1779
1791
| SINGLEQ_STRING_LITERAL
1780
- | NUMERIC_LITERAL
1781
- | INTEGER_LITERAL
1792
+ | parameterOrNumericLiteral
1793
+ | parameterOrIntegerLiteral
1782
1794
| identifier
1783
1795
;
1784
1796
1797
+ reserved_keyword
1798
+ : CREATE | DROP | FROM | GROUP | LIMIT | ORDER | SELECT | UNION
1799
+ ;
1800
+
1785
1801
// allow non-reserved keywords as identifiers
1786
1802
// TODO: is this necessary?
1787
1803
// easier to whitelist than blacklist
0 commit comments