Re: jsonpath syntax extensions

From: Greg Stark <stark(at)mit(dot)edu>
To: Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: jsonpath syntax extensions
Date: 2022-03-21 20:09:09
Message-ID: CAM-w4HP53goM0kw7bPg9oQ0SKSxgP7GM7yXkHzREH-tLy_v+VQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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(dot)gluhov(at)postgrespro(dot)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

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Greg Stark 2022-03-21 20:13:46 Re: jsonpath syntax extensions
Previous Message Mark Dilger 2022-03-21 19:58:32 Re: New Object Access Type hooks