Skip to content

Commit 0ce792d

Browse files
committed
[PostgreSql] Support jsonb "exists" operator
1 parent 98ba609 commit 0ce792d

File tree

5 files changed

+15537
-14632
lines changed

5 files changed

+15537
-14632
lines changed

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,18 @@ TYPECAST: '::';
127127
PERCENT: '%';
128128

129129
PARAM: '$' ([0-9])+;
130+
131+
// JSON/JSONB operators
132+
JSON_EXTRACT: '->';
133+
JSON_EXTRACT_TEXT: '->>';
134+
JSON_PATH_EXTRACT: '#>';
135+
JSON_PATH_EXTRACT_TEXT: '#>>';
136+
JSONB_CONTAINS: '@>';
137+
JSONB_CONTAINED: '<@';
138+
JSONB_DELETE_PATH: '#-';
139+
JSONB_EXISTS_ANY: '?|';
140+
JSONB_EXISTS_ALL: '?&';
141+
130142
//
131143

132144
// OPERATORS (4.1.3)
@@ -144,7 +156,7 @@ Operator:
144156
)+
145157
| // special handling for the single-character operators + and -
146158
[+-]
147-
| ('?#' | '?-' | '?-|' | '?|' | '?||' | '<?>')
159+
| ('?#' | '?-' | '?-|' | '?||' | '<?>')
148160
)
149161
//TODO somehow rewrite this part without using Actions
150162
{

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2115,6 +2115,16 @@ oper_argtypes
21152115

21162116
any_operator
21172117
: (colid DOT)* all_op
2118+
| JSON_EXTRACT
2119+
| JSON_EXTRACT_TEXT
2120+
| JSON_PATH_EXTRACT
2121+
| JSON_PATH_EXTRACT_TEXT
2122+
| JSONB_CONTAINS
2123+
| JSONB_CONTAINED
2124+
| JSONB_DELETE_PATH
2125+
| JSONB_EXISTS_ANY
2126+
| JSONB_EXISTS_ALL
2127+
| QUESTION
21182128
;
21192129

21202130
operator_with_argtypes_list
@@ -3953,6 +3963,16 @@ mathop
39533963
qual_op
39543964
: Operator
39553965
| OPERATOR OPEN_PAREN any_operator CLOSE_PAREN
3966+
| JSON_EXTRACT
3967+
| JSON_EXTRACT_TEXT
3968+
| JSON_PATH_EXTRACT
3969+
| JSON_PATH_EXTRACT_TEXT
3970+
| JSONB_CONTAINS
3971+
| JSONB_CONTAINED
3972+
| JSONB_DELETE_PATH
3973+
| JSONB_EXISTS_ANY
3974+
| JSONB_EXISTS_ALL
3975+
| QUESTION
39563976
;
39573977

39583978
qual_all_op

0 commit comments

Comments
 (0)