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? -- Thanks, Amit Langote
v2-0001-WIP-Fix-JSON_QUERY-WITH-CONDITIONAL-WRAPPER.patch
Description: Binary data