mirror of https://github.com/postgres/postgres
Add more test coverage for jsonpath "$.*" with arrays
There was no coverage for the code path to unwrap an array before applying ".*" to it, so add tests to provide more coverage for both objects and arrays. This shows, for example, that no results are returned for an array of scalars, and what results are returned when the array contains an object. A few more scenarios are covered with the strict/lax modes and the operator "@?". Author: David Wheeler Reported-by: David G. Johnston, Stepan Neretin Discussion: https://postgr.es/m/A95346F9-6147-46E0-809E-532A485D71D6@justatheory.com
This commit is contained in:
parent
5c571a34d0
commit
3a137ab7e5
|
@ -1135,6 +1135,56 @@ select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3', silent => true);
|
|||
------------------
|
||||
(0 rows)
|
||||
|
||||
-- any key on arrays with and without unwrapping.
|
||||
select jsonb_path_query('{"a": [1,2,3], "b": [3,4,5]}', '$.*');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
[1, 2, 3]
|
||||
[3, 4, 5]
|
||||
(2 rows)
|
||||
|
||||
select jsonb_path_query('[1,2,3]', '$.*');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
(0 rows)
|
||||
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'lax $.*');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
[3, 4, 5]
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*');
|
||||
ERROR: jsonpath wildcard member accessor can only be applied to an object
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*', NULL, true);
|
||||
jsonb_path_query
|
||||
------------------
|
||||
(0 rows)
|
||||
|
||||
select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$.*';
|
||||
?column?
|
||||
----------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
select jsonb '[1,2,3]' @? '$.*';
|
||||
?column?
|
||||
----------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'lax $.*';
|
||||
?column?
|
||||
----------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'strict $.*';
|
||||
?column?
|
||||
----------
|
||||
|
||||
(1 row)
|
||||
|
||||
-- extension: boolean expressions
|
||||
select jsonb_path_query('2', '$ > 1');
|
||||
jsonb_path_query
|
||||
|
|
|
@ -241,6 +241,17 @@ select jsonb_path_query('{"a": [2, 3, 4]}', 'lax -$.a');
|
|||
select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3');
|
||||
select jsonb_path_query('{"a": [1, 2]}', 'lax $.a * 3', silent => true);
|
||||
|
||||
-- any key on arrays with and without unwrapping.
|
||||
select jsonb_path_query('{"a": [1,2,3], "b": [3,4,5]}', '$.*');
|
||||
select jsonb_path_query('[1,2,3]', '$.*');
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'lax $.*');
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*');
|
||||
select jsonb_path_query('[1,2,3,{"b": [3,4,5]}]', 'strict $.*', NULL, true);
|
||||
select jsonb '{"a": [1,2,3], "b": [3,4,5]}' @? '$.*';
|
||||
select jsonb '[1,2,3]' @? '$.*';
|
||||
select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'lax $.*';
|
||||
select jsonb '[1,2,3,{"b": [3,4,5]}]' @? 'strict $.*';
|
||||
|
||||
-- extension: boolean expressions
|
||||
select jsonb_path_query('2', '$ > 1');
|
||||
select jsonb_path_query('2', '$ <= 1');
|
||||
|
|
Loading…
Reference in New Issue