Re: remaining sql/json patches
От | Amit Langote |
---|---|
Тема | Re: remaining sql/json patches |
Дата | |
Msg-id | CA+HiwqE6kVsjDXg95+cEaErbUjecgrS_qTgcfV7MNT3k+58swA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: remaining sql/json patches (Himanshu Upadhyaya <upadhyaya.himanshu@gmail.com>) |
Ответы |
Re: remaining sql/json patches
|
Список | pgsql-hackers |
Hi Himanshu, On Tue, Mar 12, 2024 at 6:42 PM Himanshu Upadhyaya <upadhyaya.himanshu@gmail.com> wrote: > > Hi, > > wanted to share the below case: > > ‘postgres[146443]=#’SELECT JSON_EXISTS(jsonb '{"customer_name": "test", "salary":1000, "department_id":1}', '$.* ? (@==$dept_id && @ == $sal)' PASSING 1000 AS sal, 1 as dept_id); > json_exists > ------------- > f > (1 row) > > isn't it supposed to return "true" as json in input is matching with both the condition dept_id and salary? I think you meant to use || in your condition, not &&, because 1000 != 1. See: SELECT JSON_EXISTS(jsonb '{"customer_name": "test", "salary":1000, "department_id":1}', '$.* ? (@ == $dept_id || @ == $sal)' PASSING 1000 AS sal, 1 as dept_id); json_exists ------------- t (1 row) Or you could've written the query as: SELECT JSON_EXISTS(jsonb '{"customer_name": "test", "salary":1000, "department_id":1}', '$ ? (@.department_id == $dept_id && @.salary == $sal)' PASSING 1000 AS sal, 1 as dept_id); json_exists ------------- t (1 row) Does that make sense? In any case, JSON_EXISTS() added by the patch here returns whatever the jsonpath executor returns. The latter is not touched by this patch. PASSING args, which this patch adds, seem to be working correctly too. -- Thanks, Amit Langote
В списке pgsql-hackers по дате отправления: