Re: BUG #17660: JSONPATH issue using like_regex followed by the && operator

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: shahar(at)cybear(dot)co
Cc: pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #17660: JSONPATH issue using like_regex followed by the && operator
Date: 2022-10-22 13:48:46
Message-ID: 3367660.1666446526@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> I've found an issue with the like_regex statement when using it together
> with another && condition.
> In the following example I'm expecting the result will end as:
> [{"id":9,"value":"a"}] but instead, it ends with an empty array:

> WITH a(attributes) AS (
> SELECT '[{"id":9,"value":"a"},{"id":9,"value":"a$"}]'::jsonb
> )
> SELECT jsonb_path_query_array(attributes,'$[*] ? (!(@.id==9 && @.value
> like_regex "\$$"))') FROM a

I think you're short a backslash:

=# WITH a(attributes) AS (
SELECT '[{"id":9,"value":"a"},{"id":9,"value":"a$"}]'::jsonb
)
SELECT jsonb_path_query_array(attributes,'$[*] ? (!(@.id==9 && @.value
like_regex "\\$$"))') FROM a
;
jsonb_path_query_array
---------------------------
[{"id": 9, "value": "a"}]
(1 row)

I believe one level of backslashing gets eaten by the jsonpath parser
while parsing the literal, so your version ends as LIKE "$$" which
is not different from LIKE "$" and will match every string.

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message PG Bug reporting form 2022-10-22 14:31:07 BUG #17661: Nothing provides 'libselinux.so.1(LIBSELINUX_1.0)(64bit)
Previous Message PG Bug reporting form 2022-10-22 11:55:24 BUG #17660: JSONPATH issue using like_regex followed by the && operator