@@ -65,6 +65,16 @@ makeItemType(int type)
65
65
return v;
66
66
}
67
67
68
+ static JsQueryParseItem*
69
+ makeIndexArray (string *s)
70
+ {
71
+ JsQueryParseItem* v = makeItemType (jqiIndexArray);
72
+
73
+ v->arrayIndex = pg_atoi (s->val , 4 , 0 );
74
+
75
+ return v;
76
+ }
77
+
68
78
static JsQueryParseItem*
69
79
makeItemString (string *s)
70
80
{
@@ -213,13 +223,13 @@ makeItemList(List *list) {
213
223
ARRAY_T FALSE_P NUMERIC_T OBJECT_T
214
224
STRING_T BOOLEAN_T
215
225
216
- %token <str> STRING_P NUMERIC_P
226
+ %token <str> STRING_P NUMERIC_P INT_P
217
227
218
228
%type <value> result scalar_value
219
229
220
230
%type <elems> path value_list
221
231
222
- %type <value> key key_any right_expr expr array
232
+ %type <value> key key_any right_expr expr array numeric
223
233
224
234
%token <hint> HINT_P
225
235
@@ -257,22 +267,28 @@ scalar_value:
257
267
| STRING_T { $$ = makeItemString(&$1 ); }
258
268
| BOOLEAN_T { $$ = makeItemString(&$1 ); }
259
269
| NUMERIC_P { $$ = makeItemNumeric(&$1 ); }
270
+ | INT_P { $$ = makeItemNumeric(&$1 ); }
260
271
;
261
272
262
273
value_list :
263
274
scalar_value { $$ = lappend(NIL, $1 ); }
264
275
| value_list ' ,' scalar_value { $$ = lappend($1 , $3 ); }
265
276
;
266
277
278
+ numeric :
279
+ NUMERIC_P { $$ = makeItemNumeric(&$1 ); }
280
+ | INT_P { $$ = makeItemNumeric(&$1 ); }
281
+ ;
282
+
267
283
right_expr :
268
284
' =' scalar_value { $$ = makeItemUnary(jqiEqual, $2 ); }
269
285
| IN_P ' (' value_list ' )' { $$ = makeItemUnary(jqiIn, makeItemArray($3 )); }
270
286
| ' =' array { $$ = makeItemUnary(jqiEqual, $2 ); }
271
287
| ' =' ' *' { $$ = makeItemUnary(jqiEqual, makeItemType(jqiAny)); }
272
- | ' <' NUMERIC_P { $$ = makeItemUnary(jqiLess, makeItemNumeric(& $2 ) ); }
273
- | ' >' NUMERIC_P { $$ = makeItemUnary(jqiGreater, makeItemNumeric(& $2 ) ); }
274
- | ' <' ' =' NUMERIC_P { $$ = makeItemUnary(jqiLessOrEqual, makeItemNumeric(& $3 ) ); }
275
- | ' >' ' =' NUMERIC_P { $$ = makeItemUnary(jqiGreaterOrEqual, makeItemNumeric(& $3 ) ); }
288
+ | ' <' numeric { $$ = makeItemUnary(jqiLess, $2 ); }
289
+ | ' >' numeric { $$ = makeItemUnary(jqiGreater, $2 ); }
290
+ | ' <' ' =' numeric { $$ = makeItemUnary(jqiLessOrEqual, $3 ); }
291
+ | ' >' ' =' numeric { $$ = makeItemUnary(jqiGreaterOrEqual, $3 ); }
276
292
| ' @' ' >' array { $$ = makeItemUnary(jqiContains, $3 ); }
277
293
| ' <' ' @' array { $$ = makeItemUnary(jqiContained, $3 ); }
278
294
| ' &' ' &' array { $$ = makeItemUnary(jqiOverlap, $3 ); }
311
327
| ' %' ' :' { $$ = makeItemType(jqiAllKey); }
312
328
| ' $' { $$ = makeItemType(jqiCurrent); }
313
329
| ' @' ' #' { $$ = makeItemType(jqiLength); }
330
+ | ' #' INT_P { $$ = makeIndexArray(&$2 ); }
314
331
| STRING_P { $$ = makeItemKey(&$1 ); }
315
332
| IN_P { $$ = makeItemKey(&$1 ); }
316
333
| IS_P { $$ = makeItemKey(&$1 ); }
325
342
| STRING_T { $$ = makeItemKey(&$1 ); }
326
343
| BOOLEAN_T { $$ = makeItemKey(&$1 ); }
327
344
| NUMERIC_P { $$ = makeItemKey(&$1 ); }
345
+ | INT_P { $$ = makeItemKey(&$1 ); }
328
346
;
329
347
330
348
/*
0 commit comments