On 10.09.24 10:00, Amit Langote wrote:
Sorry for missing this report and thanks Andrew for the offlist heads up.

On Wed, Sep 4, 2024 at 7:16 PM Peter Eisentraut <pe...@eisentraut.org> wrote:
On 28.08.24 11:21, Peter Eisentraut wrote:
These are ok:

select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' without wrapper);
   json_query
------------
   42

select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' with
unconditional wrapper);
   json_query
------------
   [42]

But this appears to be wrong:

select json_query('{"a": 1, "b": 42}'::jsonb, 'lax $.b' with conditional
wrapper);
   json_query
------------
   [42]

This should return an unwrapped 42.

If I make the code change illustrated in the attached patch, then I get
the correct result here.  And various regression test results change,
which, to me, all look more correct after this patch.  I don't know what
the code I removed was supposed to accomplish, but it seems to be wrong
somehow.  In the current implementation, the WITH CONDITIONAL WRAPPER
clause doesn't appear to work correctly in any case I could identify.

Agreed that this looks wrong.

I've wondered why the condition was like that but left it as-is,
because I thought at one point that that's needed to ensure that the
returned single scalar SQL/JSON item is valid jsonb.

I've updated your patch to include updated test outputs and a nearby
code comment expanded.  Do you intend to commit it or do you prefer
that I do?

This change looks unrelated:

-ERROR: new row for relation "test_jsonb_constraints" violates check constraint "test_jsonb_constraint4" +ERROR: new row for relation "test_jsonb_constraints" violates check constraint "test_jsonb_constraint5"

Is this some randomness in the way these constraints are evaluated?


Reply via email to