@@ -65,6 +65,16 @@ makeItemType(int type)
6565 return v;
6666}
6767
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+
6878static JsQueryParseItem*
6979makeItemString (string *s)
7080{
@@ -213,13 +223,13 @@ makeItemList(List *list) {
213223 ARRAY_T FALSE_P NUMERIC_T OBJECT_T
214224 STRING_T BOOLEAN_T
215225
216- %token <str> STRING_P NUMERIC_P
226+ %token <str> STRING_P NUMERIC_P INT_P
217227
218228%type <value> result scalar_value
219229
220230%type <elems> path value_list
221231
222- %type <value> key key_any right_expr expr array
232+ %type <value> key key_any right_expr expr array numeric
223233
224234%token <hint> HINT_P
225235
@@ -257,22 +267,28 @@ scalar_value:
257267 | STRING_T { $$ = makeItemString(&$1 ); }
258268 | BOOLEAN_T { $$ = makeItemString(&$1 ); }
259269 | NUMERIC_P { $$ = makeItemNumeric(&$1 ); }
270+ | INT_P { $$ = makeItemNumeric(&$1 ); }
260271 ;
261272
262273value_list :
263274 scalar_value { $$ = lappend(NIL, $1 ); }
264275 | value_list ' ,' scalar_value { $$ = lappend($1 , $3 ); }
265276 ;
266277
278+ numeric :
279+ NUMERIC_P { $$ = makeItemNumeric(&$1 ); }
280+ | INT_P { $$ = makeItemNumeric(&$1 ); }
281+ ;
282+
267283right_expr :
268284 ' =' scalar_value { $$ = makeItemUnary(jqiEqual, $2 ); }
269285 | IN_P ' (' value_list ' )' { $$ = makeItemUnary(jqiIn, makeItemArray($3 )); }
270286 | ' =' array { $$ = makeItemUnary(jqiEqual, $2 ); }
271287 | ' =' ' *' { $$ = 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 ); }
276292 | ' @' ' >' array { $$ = makeItemUnary(jqiContains, $3 ); }
277293 | ' <' ' @' array { $$ = makeItemUnary(jqiContained, $3 ); }
278294 | ' &' ' &' array { $$ = makeItemUnary(jqiOverlap, $3 ); }
311327 | ' %' ' :' { $$ = makeItemType(jqiAllKey); }
312328 | ' $' { $$ = makeItemType(jqiCurrent); }
313329 | ' @' ' #' { $$ = makeItemType(jqiLength); }
330+ | ' #' INT_P { $$ = makeIndexArray(&$2 ); }
314331 | STRING_P { $$ = makeItemKey(&$1 ); }
315332 | IN_P { $$ = makeItemKey(&$1 ); }
316333 | IS_P { $$ = makeItemKey(&$1 ); }
325342 | STRING_T { $$ = makeItemKey(&$1 ); }
326343 | BOOLEAN_T { $$ = makeItemKey(&$1 ); }
327344 | NUMERIC_P { $$ = makeItemKey(&$1 ); }
345+ | INT_P { $$ = makeItemKey(&$1 ); }
328346 ;
329347
330348/*
0 commit comments