diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/regress/expected/json_encoding.out | 15 | ||||
-rw-r--r-- | src/test/regress/expected/json_encoding_1.out | 39 | ||||
-rw-r--r-- | src/test/regress/expected/json_encoding_2.out | 9 | ||||
-rw-r--r-- | src/test/regress/expected/jsonpath_encoding.out | 15 | ||||
-rw-r--r-- | src/test/regress/expected/jsonpath_encoding_1.out | 33 | ||||
-rw-r--r-- | src/test/regress/expected/jsonpath_encoding_2.out | 9 | ||||
-rw-r--r-- | src/test/regress/expected/strings.out | 83 | ||||
-rw-r--r-- | src/test/regress/sql/json_encoding.sql | 13 | ||||
-rw-r--r-- | src/test/regress/sql/jsonpath_encoding.sql | 13 | ||||
-rw-r--r-- | src/test/regress/sql/strings.sql | 20 |
10 files changed, 215 insertions, 34 deletions
diff --git a/src/test/regress/expected/json_encoding.out b/src/test/regress/expected/json_encoding.out index d8d34f4ff6a..f343f74fe18 100644 --- a/src/test/regress/expected/json_encoding.out +++ b/src/test/regress/expected/json_encoding.out @@ -1,4 +1,19 @@ +-- -- encoding-sensitive tests for json and jsonb +-- +-- We provide expected-results files for UTF8 (json_encoding.out) +-- and for SQL_ASCII (json_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif +SELECT getdatabaseencoding(); -- just to label the results files + getdatabaseencoding +--------------------- + UTF8 +(1 row) + -- first json -- basic unicode input SELECT '"\u"'::json; -- ERROR, incomplete escape diff --git a/src/test/regress/expected/json_encoding_1.out b/src/test/regress/expected/json_encoding_1.out index 79ed78e1c5f..e2fc131b0fa 100644 --- a/src/test/regress/expected/json_encoding_1.out +++ b/src/test/regress/expected/json_encoding_1.out @@ -1,4 +1,19 @@ +-- -- encoding-sensitive tests for json and jsonb +-- +-- We provide expected-results files for UTF8 (json_encoding.out) +-- and for SQL_ASCII (json_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif +SELECT getdatabaseencoding(); -- just to label the results files + getdatabaseencoding +--------------------- + SQL_ASCII +(1 row) + -- first json -- basic unicode input SELECT '"\u"'::json; -- ERROR, incomplete escape @@ -33,9 +48,7 @@ SELECT '"\uaBcD"'::json; -- OK, uppercase and lower case both OK -- handling of unicode surrogate pairs select json '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... +ERROR: conversion between UTF8 and SQL_ASCII is not supported select json '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row ERROR: invalid input syntax for type json DETAIL: Unicode high surrogate must not follow a high surrogate. @@ -84,9 +97,7 @@ select json '{ "a": "null \\u0000 escape" }' as not_an_escape; (1 row) select json '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... +ERROR: conversion between UTF8 and SQL_ASCII is not supported select json '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; correct_everywhere -------------------- @@ -144,18 +155,14 @@ CONTEXT: JSON data, line 1: ... -- use octet_length here so we don't get an odd unicode char in the -- output SELECT octet_length('"\uaBcD"'::jsonb::text); -- OK, uppercase and lower case both OK -ERROR: unsupported Unicode escape sequence +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT octet_length('"\uaBcD"'::jsonb::text); ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: ... -- handling of unicode surrogate pairs SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc36" }' -> 'a')::text) AS correct_in_utf8; -ERROR: unsupported Unicode escape sequence +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT octet_length((jsonb '{ "a": "\ud83d\ude04\ud83d\udc3... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; -- 2 high surrogates in a row ERROR: invalid input syntax for type json LINE 1: SELECT jsonb '{ "a": "\ud83d\ud83d" }' -> 'a'; @@ -182,11 +189,9 @@ DETAIL: Unicode low surrogate must follow a high surrogate. CONTEXT: JSON data, line 1: { "a":... -- handling of simple unicode escapes SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' as corr... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... SELECT jsonb '{ "a": "dollar \u0024 character" }' as correct_everywhere; correct_everywhere ----------------------------- @@ -212,11 +217,9 @@ SELECT jsonb '{ "a": "null \\u0000 escape" }' as not_an_escape; (1 row) SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a' as correct_in_utf8; -ERROR: unsupported Unicode escape sequence +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT jsonb '{ "a": "the Copyright \u00a9 sign" }' ->> 'a'... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -CONTEXT: JSON data, line 1: { "a":... SELECT jsonb '{ "a": "dollar \u0024 character" }' ->> 'a' as correct_everywhere; correct_everywhere -------------------- diff --git a/src/test/regress/expected/json_encoding_2.out b/src/test/regress/expected/json_encoding_2.out new file mode 100644 index 00000000000..4fc8f0241ab --- /dev/null +++ b/src/test/regress/expected/json_encoding_2.out @@ -0,0 +1,9 @@ +-- +-- encoding-sensitive tests for json and jsonb +-- +-- We provide expected-results files for UTF8 (json_encoding.out) +-- and for SQL_ASCII (json_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit diff --git a/src/test/regress/expected/jsonpath_encoding.out b/src/test/regress/expected/jsonpath_encoding.out index ecffe095b59..7cbfb6abcf3 100644 --- a/src/test/regress/expected/jsonpath_encoding.out +++ b/src/test/regress/expected/jsonpath_encoding.out @@ -1,4 +1,19 @@ +-- -- encoding-sensitive tests for jsonpath +-- +-- We provide expected-results files for UTF8 (jsonpath_encoding.out) +-- and for SQL_ASCII (jsonpath_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif +SELECT getdatabaseencoding(); -- just to label the results files + getdatabaseencoding +--------------------- + UTF8 +(1 row) + -- checks for double-quoted values -- basic unicode input SELECT '"\u"'::jsonpath; -- ERROR, incomplete escape diff --git a/src/test/regress/expected/jsonpath_encoding_1.out b/src/test/regress/expected/jsonpath_encoding_1.out index c8cc2173a8c..005136c9657 100644 --- a/src/test/regress/expected/jsonpath_encoding_1.out +++ b/src/test/regress/expected/jsonpath_encoding_1.out @@ -1,4 +1,19 @@ +-- -- encoding-sensitive tests for jsonpath +-- +-- We provide expected-results files for UTF8 (jsonpath_encoding.out) +-- and for SQL_ASCII (jsonpath_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif +SELECT getdatabaseencoding(); -- just to label the results files + getdatabaseencoding +--------------------- + SQL_ASCII +(1 row) + -- checks for double-quoted values -- basic unicode input SELECT '"\u"'::jsonpath; -- ERROR, incomplete escape @@ -19,16 +34,14 @@ LINE 1: SELECT '"\u0000"'::jsonpath; ^ DETAIL: \u0000 cannot be converted to text. SELECT '"\uaBcD"'::jsonpath; -- OK, uppercase and lower case both OK -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT '"\uaBcD"'::jsonpath; ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -- handling of unicode surrogate pairs select '"\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8; -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: select '"\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. select '"\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row ERROR: invalid input syntax for type jsonpath LINE 1: select '"\ud83d\ud83d"'::jsonpath; @@ -51,10 +64,9 @@ LINE 1: select '"\ude04X"'::jsonpath; DETAIL: Unicode low surrogate must follow a high surrogate. --handling of simple unicode escapes select '"the Copyright \u00a9 sign"'::jsonpath as correct_in_utf8; -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: select '"the Copyright \u00a9 sign"'::jsonpath as correct_in... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. select '"dollar \u0024 character"'::jsonpath as correct_everywhere; correct_everywhere ---------------------- @@ -98,16 +110,14 @@ LINE 1: SELECT '$."\u0000"'::jsonpath; ^ DETAIL: \u0000 cannot be converted to text. SELECT '$."\uaBcD"'::jsonpath; -- OK, uppercase and lower case both OK -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: SELECT '$."\uaBcD"'::jsonpath; ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. -- handling of unicode surrogate pairs select '$."\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8; -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: select '$."\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_i... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. select '$."\ud83d\ud83d"'::jsonpath; -- 2 high surrogates in a row ERROR: invalid input syntax for type jsonpath LINE 1: select '$."\ud83d\ud83d"'::jsonpath; @@ -130,10 +140,9 @@ LINE 1: select '$."\ude04X"'::jsonpath; DETAIL: Unicode low surrogate must follow a high surrogate. --handling of simple unicode escapes select '$."the Copyright \u00a9 sign"'::jsonpath as correct_in_utf8; -ERROR: invalid input syntax for type jsonpath +ERROR: conversion between UTF8 and SQL_ASCII is not supported LINE 1: select '$."the Copyright \u00a9 sign"'::jsonpath as correct_... ^ -DETAIL: Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8. select '$."dollar \u0024 character"'::jsonpath as correct_everywhere; correct_everywhere ------------------------ diff --git a/src/test/regress/expected/jsonpath_encoding_2.out b/src/test/regress/expected/jsonpath_encoding_2.out new file mode 100644 index 00000000000..bb71bfe72c4 --- /dev/null +++ b/src/test/regress/expected/jsonpath_encoding_2.out @@ -0,0 +1,9 @@ +-- +-- encoding-sensitive tests for jsonpath +-- +-- We provide expected-results files for UTF8 (jsonpath_encoding.out) +-- and for SQL_ASCII (jsonpath_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit diff --git a/src/test/regress/expected/strings.out b/src/test/regress/expected/strings.out index 60cb86193c7..6c4443afcf1 100644 --- a/src/test/regress/expected/strings.out +++ b/src/test/regress/expected/strings.out @@ -35,6 +35,12 @@ SELECT U&'d!0061t\+000061' UESCAPE '!' AS U&"d*0061t\+000061" UESCAPE '*'; dat\+000061 (1 row) +SELECT U&'a\\b' AS "a\b"; + a\b +----- + a\b +(1 row) + SELECT U&' \' UESCAPE '!' AS "tricky"; tricky -------- @@ -48,13 +54,15 @@ SELECT 'tricky' AS U&"\" UESCAPE '!'; (1 row) SELECT U&'wrong: \061'; -ERROR: invalid Unicode escape value +ERROR: invalid Unicode escape LINE 1: SELECT U&'wrong: \061'; ^ +HINT: Unicode escapes must be \XXXX or \+XXXXXX. SELECT U&'wrong: \+0061'; -ERROR: invalid Unicode escape value +ERROR: invalid Unicode escape LINE 1: SELECT U&'wrong: \+0061'; ^ +HINT: Unicode escapes must be \XXXX or \+XXXXXX. SELECT U&'wrong: +0061' UESCAPE +; ERROR: UESCAPE must be followed by a simple string literal at or near "+" LINE 1: SELECT U&'wrong: +0061' UESCAPE +; @@ -63,6 +71,77 @@ SELECT U&'wrong: +0061' UESCAPE '+'; ERROR: invalid Unicode escape character at or near "'+'" LINE 1: SELECT U&'wrong: +0061' UESCAPE '+'; ^ +SELECT U&'wrong: \db99'; +ERROR: invalid Unicode surrogate pair +LINE 1: SELECT U&'wrong: \db99'; + ^ +SELECT U&'wrong: \db99xy'; +ERROR: invalid Unicode surrogate pair +LINE 1: SELECT U&'wrong: \db99xy'; + ^ +SELECT U&'wrong: \db99\\'; +ERROR: invalid Unicode surrogate pair +LINE 1: SELECT U&'wrong: \db99\\'; + ^ +SELECT U&'wrong: \db99\0061'; +ERROR: invalid Unicode surrogate pair +LINE 1: SELECT U&'wrong: \db99\0061'; + ^ +SELECT U&'wrong: \+00db99\+000061'; +ERROR: invalid Unicode surrogate pair +LINE 1: SELECT U&'wrong: \+00db99\+000061'; + ^ +SELECT U&'wrong: \+2FFFFF'; +ERROR: invalid Unicode escape value +LINE 1: SELECT U&'wrong: \+2FFFFF'; + ^ +-- while we're here, check the same cases in E-style literals +SELECT E'd\u0061t\U00000061' AS "data"; + data +------ + data +(1 row) + +SELECT E'a\\b' AS "a\b"; + a\b +----- + a\b +(1 row) + +SELECT E'wrong: \u061'; +ERROR: invalid Unicode escape +LINE 1: SELECT E'wrong: \u061'; + ^ +HINT: Unicode escapes must be \uXXXX or \UXXXXXXXX. +SELECT E'wrong: \U0061'; +ERROR: invalid Unicode escape +LINE 1: SELECT E'wrong: \U0061'; + ^ +HINT: Unicode escapes must be \uXXXX or \UXXXXXXXX. +SELECT E'wrong: \udb99'; +ERROR: invalid Unicode surrogate pair at or near "'" +LINE 1: SELECT E'wrong: \udb99'; + ^ +SELECT E'wrong: \udb99xy'; +ERROR: invalid Unicode surrogate pair at or near "x" +LINE 1: SELECT E'wrong: \udb99xy'; + ^ +SELECT E'wrong: \udb99\\'; +ERROR: invalid Unicode surrogate pair at or near "\" +LINE 1: SELECT E'wrong: \udb99\\'; + ^ +SELECT E'wrong: \udb99\u0061'; +ERROR: invalid Unicode surrogate pair at or near "\u0061" +LINE 1: SELECT E'wrong: \udb99\u0061'; + ^ +SELECT E'wrong: \U0000db99\U00000061'; +ERROR: invalid Unicode surrogate pair at or near "\U00000061" +LINE 1: SELECT E'wrong: \U0000db99\U00000061'; + ^ +SELECT E'wrong: \U002FFFFF'; +ERROR: invalid Unicode escape value at or near "\U002FFFFF" +LINE 1: SELECT E'wrong: \U002FFFFF'; + ^ SET standard_conforming_strings TO off; SELECT U&'d\0061t\+000061' AS U&"d\0061t\+000061"; ERROR: unsafe use of string constant with Unicode escapes diff --git a/src/test/regress/sql/json_encoding.sql b/src/test/regress/sql/json_encoding.sql index 87a2d564ff3..d7fac69733d 100644 --- a/src/test/regress/sql/json_encoding.sql +++ b/src/test/regress/sql/json_encoding.sql @@ -1,5 +1,16 @@ - +-- -- encoding-sensitive tests for json and jsonb +-- + +-- We provide expected-results files for UTF8 (json_encoding.out) +-- and for SQL_ASCII (json_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif + +SELECT getdatabaseencoding(); -- just to label the results files -- first json diff --git a/src/test/regress/sql/jsonpath_encoding.sql b/src/test/regress/sql/jsonpath_encoding.sql index 3a23b728182..55d9e30b95c 100644 --- a/src/test/regress/sql/jsonpath_encoding.sql +++ b/src/test/regress/sql/jsonpath_encoding.sql @@ -1,5 +1,16 @@ - +-- -- encoding-sensitive tests for jsonpath +-- + +-- We provide expected-results files for UTF8 (jsonpath_encoding.out) +-- and for SQL_ASCII (jsonpath_encoding_1.out). Skip otherwise. +SELECT getdatabaseencoding() NOT IN ('UTF8', 'SQL_ASCII') + AS skip_test \gset +\if :skip_test +\quit +\endif + +SELECT getdatabaseencoding(); -- just to label the results files -- checks for double-quoted values diff --git a/src/test/regress/sql/strings.sql b/src/test/regress/sql/strings.sql index c5cd15142a5..3e28cd198f4 100644 --- a/src/test/regress/sql/strings.sql +++ b/src/test/regress/sql/strings.sql @@ -21,6 +21,7 @@ SET standard_conforming_strings TO on; SELECT U&'d\0061t\+000061' AS U&"d\0061t\+000061"; SELECT U&'d!0061t\+000061' UESCAPE '!' AS U&"d*0061t\+000061" UESCAPE '*'; +SELECT U&'a\\b' AS "a\b"; SELECT U&' \' UESCAPE '!' AS "tricky"; SELECT 'tricky' AS U&"\" UESCAPE '!'; @@ -30,6 +31,25 @@ SELECT U&'wrong: \+0061'; SELECT U&'wrong: +0061' UESCAPE +; SELECT U&'wrong: +0061' UESCAPE '+'; +SELECT U&'wrong: \db99'; +SELECT U&'wrong: \db99xy'; +SELECT U&'wrong: \db99\\'; +SELECT U&'wrong: \db99\0061'; +SELECT U&'wrong: \+00db99\+000061'; +SELECT U&'wrong: \+2FFFFF'; + +-- while we're here, check the same cases in E-style literals +SELECT E'd\u0061t\U00000061' AS "data"; +SELECT E'a\\b' AS "a\b"; +SELECT E'wrong: \u061'; +SELECT E'wrong: \U0061'; +SELECT E'wrong: \udb99'; +SELECT E'wrong: \udb99xy'; +SELECT E'wrong: \udb99\\'; +SELECT E'wrong: \udb99\u0061'; +SELECT E'wrong: \U0000db99\U00000061'; +SELECT E'wrong: \U002FFFFF'; + SET standard_conforming_strings TO off; SELECT U&'d\0061t\+000061' AS U&"d\0061t\+000061"; |