Re: json_query conditional wrapper bug

From: Peter Eisentraut <peter(at)eisentraut(dot)org>
To: Amit Langote <amitlangote09(at)gmail(dot)com>
Cc: pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: json_query conditional wrapper bug
Date: 2024-09-10 20:15:55
Message-ID: 749b08c1-a28d-4b40-82ab-e7219cff623f@eisentraut.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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 <peter(at)eisentraut(dot)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?

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2024-09-10 20:16:12 Re: Document DateStyle effect on jsonpath string()
Previous Message Peter Eisentraut 2024-09-10 20:10:47 Re: Document DateStyle effect on jsonpath string()