Re: Re: SQL/JSON: functions - Mailing list pgsql-hackers

From Andrew Alsup
Subject Re: Re: SQL/JSON: functions
Date
Msg-id bf877956-997d-9392-74ac-539f17ed72e0@gmail.com
Whole thread Raw
In response to Re: SQL/JSON: functions  (Nikita Glukhov <n.gluhov@postgrespro.ru>)
Responses Re: Re: SQL/JSON: functions  (Alexander Korotkov <a.korotkov@postgrespro.ru>)
Re: Re: SQL/JSON: functions  (Thomas Munro <thomas.munro@gmail.com>)
List pgsql-hackers
On 3/5/19 5:35 PM, Nikita Glukhov wrote:
> Attached 36th version of the patches rebased onto jsonpath v36.
While testing this patch a found a few issues:

[1] I was not able to apply the patch to the current HEAD. However, it 
applies cleanly to commit: e988878f85 (NOTE: I did not investigate which 
commit between e988878f85 and HEAD caused problems).

[2] JsonPath array slicing does not work. I'm not aware of a 
comprehensive list of JsonPath features/syntax that is targeted for 
support; however, I did try various forms of array slicing, which don't 
currently work.

Here are a few examples:

The input document is the same in each example.

{
   "a1": 123,
   "b1": "xxx",
   "c1": {
     "a2": 456,
     "b2": "yyy",
     "c2": [
       {"a3": 777, "b3": "7z"},
       {"a3": 888, "b3": "8z"}
     ]
   }
}

array wildcard selector [*] works: $.c1.c2[*].b3

# select json_path_query('{"a1": 123, "b1": "xxx", "c1": {"a2": 456, 
"b2": "yyy", "c2": [{"a3": 777, "b3": "7z"},{"a3": 888, "b3": 
"8z"}]}}'::json, '$.c1.c2[*].b3'::jsonpath);
  json_path_query
-----------------
  "7z"
  "8z"
(2 rows)

array index selector [0] works: $.c1.c2[0].b3

jsonpatch=# select json_path_query('{"a1": 123, "b1": "xxx", "c1": 
{"a2": 456, "b2": "yyy", "c2": [{"a3": 777, "b3": "7z"},{"a3": 888, 
"b3": "8z"}]}}'::json, '$.c1.c2[0].b3'::jsonpath);
  json_path_query
-----------------
  "7z"
(1 row)

array slicing [0:], [:1], and [0:1] do not work:$.c1.c2[0:].b3

# select json_path_query('{"a1": 123, "b1": "xxx", "c1": {"a2": 456, 
"b2": "yyy", "c2": [{"a3": 777, "b3": "7z"},{"a3": 888, "b3": 
"8z"}]}}'::json, '$.c1.c2[0:].b3'::jsonpath);
2019-05-13 20:47:48.740 EDT [21856] ERROR:  bad jsonpath representation 
at character 147
2019-05-13 20:47:48.740 EDT [21856] DETAIL:  syntax error, unexpected 
':', expecting ',' or ']' at or near ":"
2019-05-13 20:47:48.740 EDT [21856] STATEMENT:  select 
json_path_query('{"a1": 123, "b1": "xxx", "c1": {"a2": 456, "b2": "yyy", 
"c2": [{"a3": 777, "b3": "7z"},{"a3": 888, "b3": "8z"}]}}'::json, 
'$.c1.c2[0:].b3'::jsonpath);
ERROR:  bad jsonpath representation
LINE 1: ...7, "b3": "7z"},{"a3": 888, "b3": "8z"}]}}'::json, '$.c1.c2[0...
                                                              ^
DETAIL:  syntax error, unexpected ':', expecting ',' or ']' at or near ":"



pgsql-hackers by date:

Previous
From: Michael Paquier
Date:
Subject: Re: Quitting the thes
Next
From: Michael Paquier
Date:
Subject: Re: Passing CopyMultiInsertInfo structure toCopyMultiInsertInfoNextFreeSlot()