Re: json_query conditional wrapper bug
От | Andrew Dunstan |
---|---|
Тема | Re: json_query conditional wrapper bug |
Дата | |
Msg-id | f22384c9-feda-4e3a-ae3d-1ea5f403d6d9@dunslane.net обсуждение исходный текст |
Ответ на | json_query conditional wrapper bug (Peter Eisentraut <peter@eisentraut.org>) |
Ответы |
Re: json_query conditional wrapper bug
|
Список | pgsql-hackers |
On 2024-09-04 We 6:16 AM, Peter Eisentraut 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. Agree the code definitely looks wrong. If anything the test should probably be reversed: wrap = count > 1 || !( IsAJsonbScalar(singleton) || (singleton->type == jbvBinary && JsonContainerIsScalar(singleton->val.binary.data))); i.e. in the count = 1 case wrap unless it's a scalar or a binary wrapping a scalar. The code could do with a comment about the logic. I know we're very close to release but we should fix this as it's a new feature. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com
В списке pgsql-hackers по дате отправления: