Skip to content

Commit 2b7ac1a

Browse files
committed
[PostgreSQL] Support more spots for parameters with the ANTLR parser
1 parent df9fbcd commit 2b7ac1a

File tree

6 files changed

+9753
-8245
lines changed

6 files changed

+9753
-8245
lines changed

headless-services/commons/jpql/grammars/PostgreSqlParser.g4

+34-18
Original file line numberDiff line numberDiff line change
@@ -593,8 +593,8 @@ create_database_stmt
593593
(LC_CTYPE EQUAL name_)?
594594
(TABLESPACE EQUAL name_)?
595595
(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)?
598598
)
599599
;
600600

@@ -728,7 +728,7 @@ create_role_stmt
728728
(SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB |
729729
CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN |
730730
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) |
732732
VALID UNTIL SINGLEQ_STRING_LITERAL | IN ROLE name_list | IN GROUP name_list | ROLE name_list |
733733
ADMIN name_list | USER name_list | SYSID INTEGER_LITERAL)+)?
734734
;
@@ -752,10 +752,10 @@ create_schema_stmt
752752
;
753753

754754
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)?
759759
(OWNED BY ((table_name=identifier DOT column_name_=identifier) | NONE))?
760760
;
761761

@@ -1106,8 +1106,8 @@ lock_stmt
11061106
;
11071107

11081108
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_
11111111
;
11121112

11131113
notify_stmt
@@ -1366,9 +1366,9 @@ explain_parameter
13661366

13671367
frame
13681368
: UNBOUNDED PRECEDING
1369-
| INTEGER_LITERAL PRECEDING
1369+
| parameterOrIntegerLiteral PRECEDING
13701370
| CURRENT ROW
1371-
| INTEGER_LITERAL FOLLOWING
1371+
| parameterOrIntegerLiteral FOLLOWING
13721372
| UNBOUNDED FOLLOWING
13731373
;
13741374

@@ -1408,15 +1408,15 @@ order_by_item
14081408
;
14091409

14101410
limit_clause
1411-
: LIMIT (INTEGER_LITERAL | ALL | func_call)
1411+
: LIMIT (parameterOrIntegerLiteral | ALL | func_call)
14121412
;
14131413

14141414
offset_clause
1415-
: OFFSET INTEGER_LITERAL (ROW | ROWS)?
1415+
: OFFSET parameterOrIntegerLiteral (ROW | ROWS)?
14161416
;
14171417

14181418
fetch_clause
1419-
: FETCH (FIRST | NEXT) INTEGER_LITERAL? (ROW | ROWS) ONLY
1419+
: FETCH (FIRST | NEXT) parameterOrIntegerLiteral? (ROW | ROWS) ONLY
14201420
;
14211421

14221422
for_clause
@@ -1502,11 +1502,23 @@ expr
15021502
;
15031503

15041504
parameter
1505-
: prefix=':' SPEL
1506-
| prefix=':' identifier
1505+
: COLON SPEL
1506+
| COLON identifier
1507+
| COLON reserved_keyword
1508+
| COLON INTEGER_LITERAL
15071509
| prefix='?' SPEL
15081510
| prefix='?' INTEGER_LITERAL?
15091511
;
1512+
1513+
parameterOrIntegerLiteral
1514+
: parameter
1515+
| INTEGER_LITERAL
1516+
;
1517+
1518+
parameterOrNumericLiteral
1519+
: parameter
1520+
| NUMERIC_LITERAL
1521+
;
15101522

15111523
// TODO: is this necessary. can we just encapsulate within expr's operator precedence?
15121524
bool_expr
@@ -1777,11 +1789,15 @@ role_name_list
17771789
param_value
17781790
: ON | OFF | TRUE | FALSE | YES | NO | NONE
17791791
| SINGLEQ_STRING_LITERAL
1780-
| NUMERIC_LITERAL
1781-
| INTEGER_LITERAL
1792+
| parameterOrNumericLiteral
1793+
| parameterOrIntegerLiteral
17821794
| identifier
17831795
;
17841796

1797+
reserved_keyword
1798+
: CREATE | DROP | FROM | GROUP | LIMIT | ORDER | SELECT | UNION
1799+
;
1800+
17851801
// allow non-reserved keywords as identifiers
17861802
// TODO: is this necessary?
17871803
// easier to whitelist than blacklist

0 commit comments

Comments
 (0)