@@ -65,6 +65,16 @@ makeItemType(int type)
6565return 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) {
213223ARRAY_T FALSE_P NUMERIC_T OBJECT_T
214224STRING_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 :
263274scalar_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/*