mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Support 'q' flag in jsonpath 'like_regex' predicate
SQL/JSON standard defines that jsonpath 'like_regex' predicate should support the same set of flags as XQuery/XPath. It appears that implementation of 'q' flag was missed. This commit fixes that. Discussion: https://postgr.es/m/CAPpHfdtyfPsxLYiTjp5Ov8T5xGsB5t3CwE5%2B3PS%3DLLwA%2BxTJog%40mail.gmail.com Author: Nikita Glukhov, Alexander Korotkov
This commit is contained in:
@ -1622,6 +1622,42 @@ select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "adc\nabc", "
|
||||
"abdacb"
|
||||
(2 rows)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "q")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
"a\\b"
|
||||
"^a\\b$"
|
||||
(2 rows)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
"a\b"
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "q")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
"^a\\b$"
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "q")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
(0 rows)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "iq")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
"^a\\b$"
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "")');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
"a\b"
|
||||
(1 row)
|
||||
|
||||
-- jsonpath operators
|
||||
SELECT jsonb_path_query('[{"a": 1}, {"a": 2}]', '$[*]');
|
||||
jsonb_path_query
|
||||
|
@ -453,6 +453,24 @@ select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath;
|
||||
$?(@ like_regex "pattern" flag "sx")
|
||||
(1 row)
|
||||
|
||||
select '$ ? (@ like_regex "pattern" flag "q")'::jsonpath;
|
||||
jsonpath
|
||||
-------------------------------------
|
||||
$?(@ like_regex "pattern" flag "q")
|
||||
(1 row)
|
||||
|
||||
select '$ ? (@ like_regex "pattern" flag "iq")'::jsonpath;
|
||||
jsonpath
|
||||
--------------------------------------
|
||||
$?(@ like_regex "pattern" flag "iq")
|
||||
(1 row)
|
||||
|
||||
select '$ ? (@ like_regex "pattern" flag "smixq")'::jsonpath;
|
||||
jsonpath
|
||||
----------------------------------------
|
||||
$?(@ like_regex "pattern" flag "imxq")
|
||||
(1 row)
|
||||
|
||||
select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
|
||||
ERROR: invalid input syntax for type jsonpath
|
||||
LINE 1: select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
|
||||
|
@ -339,6 +339,12 @@ select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "adc\nabc", "
|
||||
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "adc\nabc", "babc"]', 'lax $[*] ? (@ like_regex "^a b.* c " flag "ix")');
|
||||
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "adc\nabc", "babc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "m")');
|
||||
select jsonb_path_query('[null, 1, "abc", "abd", "aBdC", "abdacb", "adc\nabc", "babc"]', 'lax $[*] ? (@ like_regex "^ab.*c" flag "s")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "q")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "a\\b" flag "")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "q")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "q")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\B$" flag "iq")');
|
||||
select jsonb_path_query('[null, 1, "a\b", "a\\b", "^a\\b$"]', 'lax $[*] ? (@ like_regex "^a\\b$" flag "")');
|
||||
|
||||
-- jsonpath operators
|
||||
|
||||
|
@ -83,6 +83,9 @@ select '$ ? (@ like_regex "pattern" flag "i")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "is")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "isim")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "q")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "iq")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "smixq")'::jsonpath;
|
||||
select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath;
|
||||
|
||||
select '$ < 1'::jsonpath;
|
||||
|
Reference in New Issue
Block a user