Re: jsonpath syntax extensions - Mailing list pgsql-hackers

From Erik Rijkers
Subject Re: jsonpath syntax extensions
Date
Msg-id 1ea50079-3184-9220-ed5c-7925e61c60de@xs4all.nl
Whole thread Raw
In response to Re: jsonpath syntax extensions  (Greg Stark <stark@mit.edu>)
List pgsql-hackers
Op 21-03-2022 om 21:13 schreef Greg Stark:
> Hm. Actually... These changes were split off from the JSON_TABLE
> patches? Are they still separate or have they been merged into those
> other patches since? I see the JSON_TABLE thread is getting more
> comments do those reviews include these patches?
> 

They are separate.

FWIW, I've done all my JSON_PATH testing both without and with these 
syntax extensions (but I've done no code review.)  I like these 
extensions but as you say -- there seems to be not much interest.


Erik

> On Mon, 21 Mar 2022 at 16:09, Greg Stark <stark@mit.edu> wrote:
>>
>> This patch seems to be getting ignored. Like David I'm a bit puzzled
>> because it doesn't seem like an especially obscure or difficult patch
>> to review. Yet it's been multiple years without even a superficial
>> "does it meet the coding requirements" review let alone a design
>> review.
>>
>> Can we get a volunteer to at least give it a quick once-over? I don't
>> think it's ideal to be doing this in the last CF but neither is it
>> very appetizing to just shift it to the next CF without a review after
>> two years...
>>
>> On Thu, 27 Feb 2020 at 10:58, Nikita Glukhov <n.gluhov@postgrespro.ru> wrote:
>>>
>>> Hi, hackers!
>>>
>>> Attached patches implement several useful jsonpath syntax extensions.
>>> I already published them two years ago in the original SQL/JSON thread,
>>> but then after creation of separate threads for SQL/JSON functions and
>>> JSON_TABLE I forgot about them.
>>>
>>> A brief description of the patches:
>>>
>>> 1. Introduced new jsonpath modifier 'pg' which is used for enabling
>>> PostgreSQL-specific extensions.  This feature was already proposed in the
>>> discussion of jsonpath's like_regex implementation.
>>>
>>> 2. Added support for raw jbvObject and jbvArray JsonbValues inside jsonpath
>>> engine.  Now, jsonpath can operate with JSON arrays and objects only in
>>> jbvBinary form.  But with introduction of array and object constructors in
>>> patches #4 and #5 raw in-memory jsonb containers can appear in jsonpath engine.
>>> In some places we can iterate through jbvArrays, in others we need to encode
>>> jbvArrays and jbvObjects into jbvBinay.
>>>
>>> 3. SQL/JSON sequence construction syntax. A simple comma-separated list can be
>>> used to concatenate single values or sequences into a single resulting sequence.
>>>
>>>   SELECT jsonb_path_query('[1, 2, 3]', 'pg $[*], 4, 2 + 3');
>>>    jsonb_path_query
>>>   ------------------
>>>    1
>>>    2
>>>    3
>>>    4
>>>    5
>>>
>>>   SELECT jsonb_path_query('{ "a": [1, 2, 3], "b": [4, 5] }',
>>>                          'pg ($.a[*], $.b[*]) ? (@ % 2 == 1)');
>>>     jsonb_path_query
>>>   ------------------
>>>    1
>>>    3
>>>    5
>>>
>>>
>>> Patches #4-#6 implement ECMAScript-like syntax constructors and accessors:
>>>
>>> 4. Array construction syntax.
>>> This can also be considered as enclosing a sequence constructor into brackets.
>>>
>>>   SELECT jsonb_path_query('[1, 2, 3]', 'pg [$[*], 4, 2 + 3]');
>>>    jsonb_path_query
>>>   ------------------
>>>    [1, 2, 3, 4, 5]
>>>
>>> Having this feature, jsonb_path_query_array() becomes somewhat redundant.
>>>
>>>
>>> 5. Object construction syntax.  It is useful for constructing derived objects
>>> from the interesting parts of the original object.  (But this is not sufficient
>>> to "project" each object in array, item method like '.map()' is needed here.)
>>>
>>>   SELECT jsonb_path_query('{"b": 2}', 'pg { a : 1, b : $.b, "x y" : $.b + 3 }');
>>>           jsonb_path_query
>>>   -------------------------------
>>>    { "a" : 1, "b": 3, "x y": 5 }
>>>
>>> Fields with empty values are simply skipped regardless of lax/strict mode:
>>>
>>>   SELECT jsonb_path_query('{"a": 1}', 'pg { b : $.b, a : $.a ? (@ > 1) }');
>>>    jsonb_path_query
>>>   ------------------
>>>    {}
>>>
>>>
>>> 6. Object subscription syntax.  This gives us ability to specify what key to
>>> extract on runtime.  The syntax is the same as ordinary array subscription
>>> syntax.
>>>
>>>   -- non-existent $.x is simply skipped in lax mode
>>>   SELECT jsonb_path_query('{"a": "b", "b": "c"}', 'pg $[$.a, "x", "a"]');
>>>    jsonb_path_query
>>>   ------------------
>>>    "c"
>>>    "b"
>>>
>>>   SELECT jsonb_path_query('{"a": "b", "b": "c"}', 'pg $[$fld]', '{"fld": "b"}');
>>>    jsonb_path_query
>>>   ------------------
>>>    "c"
>>>
>>> --
>>> Nikita Glukhov
>>> Postgres Professional: http://www.postgrespro.com
>>> The Russian Postgres Company
>>
>>
>>
>> --
>> greg
> 
> 
> 



pgsql-hackers by date:

Previous
From: Nathan Bossart
Date:
Subject: Re: add checkpoint stats of snapshot and mapping files of pg_logical dir
Next
From: Andrew Dunstan
Date:
Subject: Re: New Object Access Type hooks