jsonpath_encoding_1.out 9.87 KB
-- encoding-sensitive tests for jsonpath
-- checks for double-quoted values
-- basic unicode input
SELECT '"\u"'::jsonpath;		-- ERROR, incomplete escape
ERROR:  invalid unicode sequence at or near "\u" of jsonpath input
LINE 1: SELECT '"\u"'::jsonpath;
               ^
SELECT '"\u00"'::jsonpath;		-- ERROR, incomplete escape
ERROR:  invalid unicode sequence at or near "\u00" of jsonpath input
LINE 1: SELECT '"\u00"'::jsonpath;
               ^
SELECT '"\u000g"'::jsonpath;	-- ERROR, g is not a hex digit
ERROR:  invalid unicode sequence at or near "\u000" of jsonpath input
LINE 1: SELECT '"\u000g"'::jsonpath;
               ^
SELECT '"\u0000"'::jsonpath;	-- OK, legal escape
ERROR:  unsupported Unicode escape sequence
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
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
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;
               ^
DETAIL:  Unicode high surrogate must not follow a high surrogate.
select '"\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
ERROR:  invalid input syntax for type jsonpath
LINE 1: select '"\ude04\ud83d"'::jsonpath;
               ^
DETAIL:  Unicode low surrogate must follow a high surrogate.
select '"\ud83dX"'::jsonpath; -- orphan high surrogate
ERROR:  invalid input syntax for type jsonpath
LINE 1: select '"\ud83dX"'::jsonpath;
               ^
DETAIL:  Unicode low surrogate must follow a high surrogate.
select '"\ude04X"'::jsonpath; -- orphan low surrogate
ERROR:  invalid input syntax for type jsonpath
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
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  
----------------------
 "dollar $ character"
(1 row)

select '"dollar \\u0024 character"'::jsonpath as not_an_escape;
       not_an_escape        
----------------------------
 "dollar \\u0024 character"
(1 row)

select '"null \u0000 escape"'::jsonpath as not_unescaped;
ERROR:  unsupported Unicode escape sequence
LINE 1: select '"null \u0000 escape"'::jsonpath as not_unescaped;
               ^
DETAIL:  \u0000 cannot be converted to text.
select '"null \\u0000 escape"'::jsonpath as not_an_escape;
     not_an_escape     
-----------------------
 "null \\u0000 escape"
(1 row)

-- checks for single-quoted values
-- basic unicode input
SELECT E'\'\u\''::jsonpath;		-- ERROR, incomplete escape
ERROR:  invalid Unicode escape
LINE 1: SELECT E'\'\u\''::jsonpath;
               ^
HINT:  Unicode escapes must be \uXXXX or \UXXXXXXXX.
SELECT E'\'\u00\''::jsonpath;	-- ERROR, incomplete escape
ERROR:  invalid Unicode escape
LINE 1: SELECT E'\'\u00\''::jsonpath;
               ^
HINT:  Unicode escapes must be \uXXXX or \UXXXXXXXX.
SELECT E'\'\u000g\''::jsonpath;	-- ERROR, g is not a hex digit
ERROR:  invalid Unicode escape
LINE 1: SELECT E'\'\u000g\''::jsonpath;
               ^
HINT:  Unicode escapes must be \uXXXX or \UXXXXXXXX.
SELECT E'\'\u0000\''::jsonpath;	-- OK, legal escape
ERROR:  invalid Unicode escape value at or near "E'\'\u0000"
LINE 1: SELECT E'\'\u0000\''::jsonpath;
               ^
SELECT E'\'\uaBcD\''::jsonpath;	-- OK, uppercase and lower case both OK
ERROR:  Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8 at or near "E'\'\uaBcD"
LINE 1: SELECT E'\'\uaBcD\''::jsonpath;
               ^
-- handling of unicode surrogate pairs
select E'\'\ud83d\ude04\ud83d\udc36\''::jsonpath as correct_in_utf8;
ERROR:  Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8 at or near "E'\'\ud83d\ude04"
LINE 1: select E'\'\ud83d\ude04\ud83d\udc36\''::jsonpath as correct_...
               ^
select E'\'\ud83d\ud83d\''::jsonpath; -- 2 high surrogates in a row
ERROR:  invalid Unicode surrogate pair at or near "E'\'\ud83d\ud83d"
LINE 1: select E'\'\ud83d\ud83d\''::jsonpath;
               ^
select E'\'\ude04\ud83d\''::jsonpath; -- surrogates in wrong order
ERROR:  invalid Unicode surrogate pair at or near "E'\'\ude04"
LINE 1: select E'\'\ude04\ud83d\''::jsonpath;
               ^
select E'\'\ud83dX\''::jsonpath; -- orphan high surrogate
ERROR:  invalid Unicode surrogate pair at or near "E'\'\ud83dX"
LINE 1: select E'\'\ud83dX\''::jsonpath;
               ^
select E'\'\ude04X\''::jsonpath; -- orphan low surrogate
ERROR:  invalid Unicode surrogate pair at or near "E'\'\ude04"
LINE 1: select E'\'\ude04X\''::jsonpath;
               ^
--handling of simple unicode escapes
select E'\'the Copyright \u00a9 sign\''::jsonpath as correct_in_utf8;
ERROR:  Unicode escape values cannot be used for code point values above 007F when the server encoding is not UTF8 at or near "E'\'the Copyright \u00a9"
LINE 1: select E'\'the Copyright \u00a9 sign\''::jsonpath as correct...
               ^
select E'\'dollar \u0024 character\''::jsonpath as correct_everywhere;
  correct_everywhere  
----------------------
 "dollar $ character"
(1 row)

select E'\'dollar \\u0024 character\''::jsonpath as not_an_escape;
    not_an_escape     
----------------------
 "dollar $ character"
(1 row)

select E'\'null \u0000 escape\''::jsonpath as not_unescaped;
ERROR:  invalid Unicode escape value at or near "E'\'null \u0000"
LINE 1: select E'\'null \u0000 escape\''::jsonpath as not_unescaped;
               ^
select E'\'null \\u0000 escape\''::jsonpath as not_an_escape;
ERROR:  unsupported Unicode escape sequence
LINE 1: select E'\'null \\u0000 escape\''::jsonpath as not_an_escape...
               ^
DETAIL:  \u0000 cannot be converted to text.
-- checks for quoted key names
-- basic unicode input
SELECT '$."\u"'::jsonpath;		-- ERROR, incomplete escape
ERROR:  invalid unicode sequence at or near "\u" of jsonpath input
LINE 1: SELECT '$."\u"'::jsonpath;
               ^
SELECT '$."\u00"'::jsonpath;	-- ERROR, incomplete escape
ERROR:  invalid unicode sequence at or near "\u00" of jsonpath input
LINE 1: SELECT '$."\u00"'::jsonpath;
               ^
SELECT '$."\u000g"'::jsonpath;	-- ERROR, g is not a hex digit
ERROR:  invalid unicode sequence at or near "\u000" of jsonpath input
LINE 1: SELECT '$."\u000g"'::jsonpath;
               ^
SELECT '$."\u0000"'::jsonpath;	-- OK, legal escape
ERROR:  unsupported Unicode escape sequence
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
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
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;
               ^
DETAIL:  Unicode high surrogate must not follow a high surrogate.
select '$."\ude04\ud83d"'::jsonpath; -- surrogates in wrong order
ERROR:  invalid input syntax for type jsonpath
LINE 1: select '$."\ude04\ud83d"'::jsonpath;
               ^
DETAIL:  Unicode low surrogate must follow a high surrogate.
select '$."\ud83dX"'::jsonpath; -- orphan high surrogate
ERROR:  invalid input syntax for type jsonpath
LINE 1: select '$."\ud83dX"'::jsonpath;
               ^
DETAIL:  Unicode low surrogate must follow a high surrogate.
select '$."\ude04X"'::jsonpath; -- orphan low surrogate
ERROR:  invalid input syntax for type jsonpath
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
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   
------------------------
 $."dollar $ character"
(1 row)

select '$."dollar \\u0024 character"'::jsonpath as not_an_escape;
        not_an_escape         
------------------------------
 $."dollar \\u0024 character"
(1 row)

select '$."null \u0000 escape"'::jsonpath as not_unescaped;
ERROR:  unsupported Unicode escape sequence
LINE 1: select '$."null \u0000 escape"'::jsonpath as not_unescaped;
               ^
DETAIL:  \u0000 cannot be converted to text.
select '$."null \\u0000 escape"'::jsonpath as not_an_escape;
      not_an_escape      
-------------------------
 $."null \\u0000 escape"
(1 row)