@@ -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
/*