-- encoding-sensitive tests for jsonpath -- checks for double-quoted values -- basic unicode input SELECT '"\u"'::jsonpath; -- ERROR, incomplete escape ERROR: bad jsonpath representation LINE 1: SELECT '"\u"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u" SELECT '"\u00"'::jsonpath; -- ERROR, incomplete escape ERROR: bad jsonpath representation LINE 1: SELECT '"\u00"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u00" SELECT '"\u000g"'::jsonpath; -- ERROR, g is not a hex digit ERROR: bad jsonpath representation LINE 1: SELECT '"\u000g"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u000" 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 jsonpath ---------- "ꯍ" (1 row) -- handling of unicode surrogate pairs select '"\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8; correct_in_utf8 ----------------- "😄🐶" (1 row) 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; correct_in_utf8 ------------------------ "the Copyright © sign" (1 row) 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 jsonpath ---------- "ꯍ" (1 row) -- handling of unicode surrogate pairs select E'\'\ud83d\ude04\ud83d\udc36\''::jsonpath as correct_in_utf8; correct_in_utf8 ----------------- "😄🐶" (1 row) 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; correct_in_utf8 ------------------------ "the Copyright © sign" (1 row) 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: bad jsonpath representation LINE 1: SELECT '$."\u"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u" SELECT '$."\u00"'::jsonpath; -- ERROR, incomplete escape ERROR: bad jsonpath representation LINE 1: SELECT '$."\u00"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u00" SELECT '$."\u000g"'::jsonpath; -- ERROR, g is not a hex digit ERROR: bad jsonpath representation LINE 1: SELECT '$."\u000g"'::jsonpath; ^ DETAIL: Unicode sequence is invalid at or near "\u000" 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 jsonpath ---------- $."ꯍ" (1 row) -- handling of unicode surrogate pairs select '$."\ud83d\ude04\ud83d\udc36"'::jsonpath as correct_in_utf8; correct_in_utf8 ----------------- $."😄🐶" (1 row) 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; correct_in_utf8 -------------------------- $."the Copyright © sign" (1 row) 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)