Skip to content

Commit c442953

Browse files
committed
add tests for any/each jsonb
1 parent 5cb65e2 commit c442953

File tree

2 files changed

+88
-20
lines changed

2 files changed

+88
-20
lines changed

src/test/regress/expected/jsonb.out

Lines changed: 76 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ CONTEXT: JSON data, line 1: ...
7575
-- use octet_length here so we don't get an odd unicode char in the
7676
-- output
7777
SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK
78-
octet_length
79-
--------------
80-
5
81-
(1 row)
82-
78+
ERROR: unsupported Unicode escape sequence
79+
LINE 1: SELECT octet_length('"\uaBcD"'::jsonb::text);
80+
^
81+
DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8.
82+
CONTEXT: JSON data, line 1: ...
8383
-- Numbers.
8484
SELECT '1'::jsonb; -- OK
8585
jsonb
@@ -1957,11 +1957,11 @@ SELECT * FROM jsonb_populate_recordset(row('def',99,NULL)::jbpop,'[{"a":[100,200
19571957

19581958
-- handling of unicode surrogate pairs
19591959
SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8;
1960-
correct_in_utf8
1961-
-----------------
1962-
10
1963-
(1 row)
1964-
1960+
ERROR: unsupported Unicode escape sequence
1961+
LINE 1: SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc3...
1962+
^
1963+
DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8.
1964+
CONTEXT: JSON data, line 1: { "a":...
19651965
SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row
19661966
ERROR: invalid input syntax for type json
19671967
LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a';
@@ -1988,11 +1988,11 @@ DETAIL: Unicode low surrogate must follow a high surrogate.
19881988
CONTEXT: JSON data, line 1: { "a":...
19891989
-- handling of simple unicode escapes
19901990
SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8;
1991-
correct_in_utf8
1992-
-------------------------------
1993-
{"a": "the Copyright © sign"}
1994-
(1 row)
1995-
1991+
ERROR: unsupported Unicode escape sequence
1992+
LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as corr...
1993+
^
1994+
DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8.
1995+
CONTEXT: JSON data, line 1: { "a":...
19961996
SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere;
19971997
correct_everywhere
19981998
-----------------------------
@@ -2018,11 +2018,11 @@ SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape;
20182018
(1 row)
20192019

20202020
SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8;
2021-
correct_in_utf8
2022-
----------------------
2023-
the Copyright © sign
2024-
(1 row)
2025-
2021+
ERROR: unsupported Unicode escape sequence
2022+
LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a'...
2023+
^
2024+
DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8.
2025+
CONTEXT: JSON data, line 1: { "a":...
20262026
SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere;
20272027
correct_everywhere
20282028
--------------------
@@ -2118,6 +2118,62 @@ SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled'];
21182118
42
21192119
(1 row)
21202120

2121+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"pos"'::jsonb );
2122+
count
2123+
-------
2124+
203
2125+
(1 row)
2126+
2127+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2128+
count
2129+
-------
2130+
2
2131+
(1 row)
2132+
2133+
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
2134+
count
2135+
-------
2136+
120
2137+
(1 row)
2138+
2139+
SELECT count(*) FROM testjsonb WHERE ANY VALUE OF j AS v SATISFIES ( v = '"CAB"'::jsonb );
2140+
count
2141+
-------
2142+
30
2143+
(1 row)
2144+
2145+
SELECT count(*) FROM testjsonb WHERE ANY VALUE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
2146+
count
2147+
-------
2148+
0
2149+
(1 row)
2150+
2151+
SELECT count(*) FROM testjsonb WHERE ANY VALUE ANYWHERE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
2152+
count
2153+
-------
2154+
3
2155+
(1 row)
2156+
2157+
SELECT count(*) FROM testjsonb WHERE ANY ELEMENT ANYWHERE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
2158+
count
2159+
-------
2160+
4
2161+
(1 row)
2162+
2163+
SELECT count(*) FROM testjsonb WHERE ANY ELEMENT OF j->'array' AS e SATISFIES ( e = '"baz"'::jsonb );
2164+
count
2165+
-------
2166+
4
2167+
(1 row)
2168+
2169+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES (
2170+
k->>0 = 'array' AND ANY ELEMENT OF j->(k->>0) AS e SATISFIES ( e = '"baz"'::jsonb )
2171+
);
2172+
count
2173+
-------
2174+
4
2175+
(1 row)
2176+
21212177
CREATE INDEX jidx ON testjsonb USING gin (j);
21222178
SET enable_seqscan = off;
21232179
SELECT count(*) FROM testjsonb WHERE j @> '{"wait":null}';

src/test/regress/sql/jsonb.sql

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,18 @@ SELECT count(*) FROM testjsonb WHERE j ? 'bar';
519519
SELECT count(*) FROM testjsonb WHERE j ?| ARRAY['public','disabled'];
520520
SELECT count(*) FROM testjsonb WHERE j ?& ARRAY['public','disabled'];
521521

522+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"pos"'::jsonb );
523+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
524+
SELECT count(*) FROM testjsonb WHERE EACH KEY OF j AS k SATISFIES ( k = '"age"'::jsonb );
525+
SELECT count(*) FROM testjsonb WHERE ANY VALUE OF j AS v SATISFIES ( v = '"CAB"'::jsonb );
526+
SELECT count(*) FROM testjsonb WHERE ANY VALUE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
527+
SELECT count(*) FROM testjsonb WHERE ANY VALUE ANYWHERE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
528+
SELECT count(*) FROM testjsonb WHERE ANY ELEMENT ANYWHERE OF j AS v SATISFIES ( v = '"baz"'::jsonb );
529+
SELECT count(*) FROM testjsonb WHERE ANY ELEMENT OF j->'array' AS e SATISFIES ( e = '"baz"'::jsonb );
530+
SELECT count(*) FROM testjsonb WHERE ANY KEY OF j AS k SATISFIES (
531+
k->>0 = 'array' AND ANY ELEMENT OF j->(k->>0) AS e SATISFIES ( e = '"baz"'::jsonb )
532+
);
533+
522534
CREATE INDEX jidx ON testjsonb USING gin (j);
523535
SET enable_seqscan = off;
524536

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy