From: | "David E(dot) Wheeler" <david(at)justatheory(dot)com> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | Erik Wienhold <ewie(at)ewie(dot)name>, pgsql-hackers(at)lists(dot)postgresql(dot)org |
Subject: | Re: Patch: Improve Boolean Predicate JSON Path Docs |
Date: | 2024-01-21 19:24:12 |
Message-ID: | FB75F45B-7D0D-4CD1-AD7F-1AF6A1AD0311@justatheory.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Jan 20, 2024, at 12:34, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> It will take a predicate, but seems to always return true:
>
> regression=# select '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] < 5' ;
> ?column?
> ----------
> t
> (1 row)
>
> regression=# select '{"a":[1,2,3,4,5]}'::jsonb @? '$.a[*] > 5' ;
> ?column?
> ----------
> t
> (1 row)
Just for the sake of clarity, this return value is “correct,” because @? and other functions and operators that expect SQL standard statements evaluate the SET returned by the JSONPath statement, but predicate check expressions don’t return a set, but a always a single scalar value (true, false, or null). From the POV of the code expecting SQL standard JSONPath results, that’s a set of one. @? sees that the set is not empty so returns true.
Best,
David
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2024-01-21 19:34:19 | Re: Patch: Improve Boolean Predicate JSON Path Docs |
Previous Message | Jeff Davis | 2024-01-21 19:07:15 | Re: [17] CREATE COLLATION default provider |