--jsonpath io select ''::jsonpath; ERROR: invalid input syntax for type jsonpath: "" LINE 1: select ''::jsonpath; ^ select '$'::jsonpath; jsonpath ---------- $ (1 row) select 'strict $'::jsonpath; jsonpath ---------- strict $ (1 row) select 'lax $'::jsonpath; jsonpath ---------- $ (1 row) select '$.a'::jsonpath; jsonpath ---------- $."a" (1 row) select '$.a.v'::jsonpath; jsonpath ----------- $."a"."v" (1 row) select '$.a.*'::jsonpath; jsonpath ---------- $."a".* (1 row) select '$.*[*]'::jsonpath; jsonpath ---------- $.*[*] (1 row) select '$.a[*]'::jsonpath; jsonpath ---------- $."a"[*] (1 row) select '$.a[*][*]'::jsonpath; jsonpath ------------- $."a"[*][*] (1 row) select '$[*]'::jsonpath; jsonpath ---------- $[*] (1 row) select '$[0]'::jsonpath; jsonpath ---------- $[0] (1 row) select '$[*][0]'::jsonpath; jsonpath ---------- $[*][0] (1 row) select '$[*].a'::jsonpath; jsonpath ---------- $[*]."a" (1 row) select '$[*][0].a.b'::jsonpath; jsonpath ----------------- $[*][0]."a"."b" (1 row) select '$.a.**.b'::jsonpath; jsonpath -------------- $."a".**."b" (1 row) select '$.a.**{2}.b'::jsonpath; jsonpath ----------------- $."a".**{2}."b" (1 row) select '$.a.**{2 to 2}.b'::jsonpath; jsonpath ----------------- $."a".**{2}."b" (1 row) select '$.a.**{2 to 5}.b'::jsonpath; jsonpath ---------------------- $."a".**{2 to 5}."b" (1 row) select '$.a.**{0 to 5}.b'::jsonpath; jsonpath ---------------------- $."a".**{0 to 5}."b" (1 row) select '$.a.**{5 to last}.b'::jsonpath; jsonpath ------------------------- $."a".**{5 to last}."b" (1 row) select '$.a.**{last}.b'::jsonpath; jsonpath -------------------- $."a".**{last}."b" (1 row) select '$.a.**{last to 5}.b'::jsonpath; jsonpath ------------------------- $."a".**{last to 5}."b" (1 row) select '$+1'::jsonpath; jsonpath ---------- ($ + 1) (1 row) select '$-1'::jsonpath; jsonpath ---------- ($ - 1) (1 row) select '$--+1'::jsonpath; jsonpath ---------- ($ - -1) (1 row) select '$.a/+-1'::jsonpath; jsonpath -------------- ($."a" / -1) (1 row) select '1 * 2 + 4 % -3 != false'::jsonpath; jsonpath --------------------------- (1 * 2 + 4 % -3 != false) (1 row) select '"\b\f\r\n\t\v\"\''\\"'::jsonpath; jsonpath ------------------------- "\b\f\r\n\t\u000b\"'\\" (1 row) select '"\x50\u0067\u{53}\u{051}\u{00004C}"'::jsonpath; jsonpath ---------- "PgSQL" (1 row) select '$.foo\x50\u0067\u{53}\u{051}\u{00004C}\t\"bar'::jsonpath; jsonpath --------------------- $."fooPgSQL\t\"bar" (1 row) select '"\z"'::jsonpath; -- unrecognized escape is just the literal char jsonpath ---------- "z" (1 row) select '$.g ? ($.a == 1)'::jsonpath; jsonpath -------------------- $."g"?($."a" == 1) (1 row) select '$.g ? (@ == 1)'::jsonpath; jsonpath ---------------- $."g"?(@ == 1) (1 row) select '$.g ? (@.a == 1)'::jsonpath; jsonpath -------------------- $."g"?(@."a" == 1) (1 row) select '$.g ? (@.a == 1 || @.a == 4)'::jsonpath; jsonpath ---------------------------------- $."g"?(@."a" == 1 || @."a" == 4) (1 row) select '$.g ? (@.a == 1 && @.a == 4)'::jsonpath; jsonpath ---------------------------------- $."g"?(@."a" == 1 && @."a" == 4) (1 row) select '$.g ? (@.a == 1 || @.a == 4 && @.b == 7)'::jsonpath; jsonpath ------------------------------------------------ $."g"?(@."a" == 1 || @."a" == 4 && @."b" == 7) (1 row) select '$.g ? (@.a == 1 || !(@.a == 4) && @.b == 7)'::jsonpath; jsonpath --------------------------------------------------- $."g"?(@."a" == 1 || !(@."a" == 4) && @."b" == 7) (1 row) select '$.g ? (@.a == 1 || !(@.x >= 123 || @.a == 4) && @.b == 7)'::jsonpath; jsonpath ------------------------------------------------------------------- $."g"?(@."a" == 1 || !(@."x" >= 123 || @."a" == 4) && @."b" == 7) (1 row) select '$.g ? (@.x >= @[*]?(@.a > "abc"))'::jsonpath; jsonpath --------------------------------------- $."g"?(@."x" >= @[*]?(@."a" > "abc")) (1 row) select '$.g ? ((@.x >= 123 || @.a == 4) is unknown)'::jsonpath; jsonpath ------------------------------------------------- $."g"?((@."x" >= 123 || @."a" == 4) is unknown) (1 row) select '$.g ? (exists (@.x))'::jsonpath; jsonpath ------------------------ $."g"?(exists (@."x")) (1 row) select '$.g ? (exists (@.x ? (@ == 14)))'::jsonpath; jsonpath ---------------------------------- $."g"?(exists (@."x"?(@ == 14))) (1 row) select '$.g ? ((@.x >= 123 || @.a == 4) && exists (@.x ? (@ == 14)))'::jsonpath; jsonpath ------------------------------------------------------------------ $."g"?((@."x" >= 123 || @."a" == 4) && exists (@."x"?(@ == 14))) (1 row) select '$.g ? (+@.x >= +-(+@.a + 2))'::jsonpath; jsonpath ------------------------------------ $."g"?(+@."x" >= +(-(+@."a" + 2))) (1 row) select '$a'::jsonpath; jsonpath ---------- $"a" (1 row) select '$a.b'::jsonpath; jsonpath ---------- $"a"."b" (1 row) select '$a[*]'::jsonpath; jsonpath ---------- $"a"[*] (1 row) select '$.g ? (@.zip == $zip)'::jsonpath; jsonpath --------------------------- $."g"?(@."zip" == $"zip") (1 row) select '$.a[1,2, 3 to 16]'::jsonpath; jsonpath -------------------- $."a"[1,2,3 to 16] (1 row) select '$.a[$a + 1, ($b[*]) to -($[0] * 2)]'::jsonpath; jsonpath ---------------------------------------- $."a"[$"a" + 1,$"b"[*] to -($[0] * 2)] (1 row) select '$.a[$.a.size() - 3]'::jsonpath; jsonpath ------------------------- $."a"[$."a".size() - 3] (1 row) select 'last'::jsonpath; ERROR: LAST is allowed only in array subscripts LINE 1: select 'last'::jsonpath; ^ select '"last"'::jsonpath; jsonpath ---------- "last" (1 row) select '$.last'::jsonpath; jsonpath ---------- $."last" (1 row) select '$ ? (last > 0)'::jsonpath; ERROR: LAST is allowed only in array subscripts LINE 1: select '$ ? (last > 0)'::jsonpath; ^ select '$[last]'::jsonpath; jsonpath ---------- $[last] (1 row) select '$[$[0] ? (last > 0)]'::jsonpath; jsonpath -------------------- $[$[0]?(last > 0)] (1 row) select 'null.type()'::jsonpath; jsonpath ------------- null.type() (1 row) select '1.type()'::jsonpath; ERROR: trailing junk after numeric literal at or near "1.t" of jsonpath input LINE 1: select '1.type()'::jsonpath; ^ select '(1).type()'::jsonpath; jsonpath ------------ (1).type() (1 row) select '1.2.type()'::jsonpath; jsonpath -------------- (1.2).type() (1 row) select '"aaa".type()'::jsonpath; jsonpath -------------- "aaa".type() (1 row) select 'true.type()'::jsonpath; jsonpath ------------- true.type() (1 row) select '$.double().floor().ceiling().abs()'::jsonpath; jsonpath ------------------------------------ $.double().floor().ceiling().abs() (1 row) select '$.keyvalue().key'::jsonpath; jsonpath -------------------- $.keyvalue()."key" (1 row) select '$.datetime()'::jsonpath; jsonpath -------------- $.datetime() (1 row) select '$.datetime("datetime template")'::jsonpath; jsonpath --------------------------------- $.datetime("datetime template") (1 row) select '$.bigint().integer().number().decimal()'::jsonpath; jsonpath ----------------------------------------- $.bigint().integer().number().decimal() (1 row) select '$.boolean()'::jsonpath; jsonpath ------------- $.boolean() (1 row) select '$.date()'::jsonpath; jsonpath ---------- $.date() (1 row) select '$.decimal(4,2)'::jsonpath; jsonpath ---------------- $.decimal(4,2) (1 row) select '$.string()'::jsonpath; jsonpath ------------ $.string() (1 row) select '$.time()'::jsonpath; jsonpath ---------- $.time() (1 row) select '$.time(6)'::jsonpath; jsonpath ----------- $.time(6) (1 row) select '$.time_tz()'::jsonpath; jsonpath ------------- $.time_tz() (1 row) select '$.time_tz(4)'::jsonpath; jsonpath -------------- $.time_tz(4) (1 row) select '$.timestamp()'::jsonpath; jsonpath --------------- $.timestamp() (1 row) select '$.timestamp(2)'::jsonpath; jsonpath ---------------- $.timestamp(2) (1 row) select '$.timestamp_tz()'::jsonpath; jsonpath ------------------ $.timestamp_tz() (1 row) select '$.timestamp_tz(0)'::jsonpath; jsonpath ------------------- $.timestamp_tz(0) (1 row) select '$ ? (@ starts with "abc")'::jsonpath; jsonpath ------------------------- $?(@ starts with "abc") (1 row) select '$ ? (@ starts with $var)'::jsonpath; jsonpath -------------------------- $?(@ starts with $"var") (1 row) select '$ ? (@ like_regex "(invalid pattern")'::jsonpath; ERROR: invalid regular expression: parentheses () not balanced LINE 1: select '$ ? (@ like_regex "(invalid pattern")'::jsonpath; ^ select '$ ? (@ like_regex "pattern")'::jsonpath; jsonpath ---------------------------- $?(@ like_regex "pattern") (1 row) select '$ ? (@ like_regex "pattern" flag "")'::jsonpath; jsonpath ---------------------------- $?(@ like_regex "pattern") (1 row) select '$ ? (@ like_regex "pattern" flag "i")'::jsonpath; jsonpath ------------------------------------- $?(@ like_regex "pattern" flag "i") (1 row) select '$ ? (@ like_regex "pattern" flag "is")'::jsonpath; jsonpath -------------------------------------- $?(@ like_regex "pattern" flag "is") (1 row) select '$ ? (@ like_regex "pattern" flag "isim")'::jsonpath; jsonpath --------------------------------------- $?(@ like_regex "pattern" flag "ism") (1 row) select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath; ERROR: XQuery "x" flag (expanded regular expressions) is not implemented LINE 1: select '$ ? (@ like_regex "pattern" flag "xsms")'::jsonpath; ^ select '$ ? (@ like_regex "pattern" flag "q")'::jsonpath; jsonpath ------------------------------------- $?(@ like_regex "pattern" flag "q") (1 row) select '$ ? (@ like_regex "pattern" flag "iq")'::jsonpath; jsonpath -------------------------------------- $?(@ like_regex "pattern" flag "iq") (1 row) select '$ ? (@ like_regex "pattern" flag "smixq")'::jsonpath; jsonpath ----------------------------------------- $?(@ like_regex "pattern" flag "ismxq") (1 row) select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath; ERROR: invalid input syntax for type jsonpath LINE 1: select '$ ? (@ like_regex "pattern" flag "a")'::jsonpath; ^ DETAIL: Unrecognized flag character "a" in LIKE_REGEX predicate. select '$ < 1'::jsonpath; jsonpath ---------- ($ < 1) (1 row) select '($ < 1) || $.a.b <= $x'::jsonpath; jsonpath ------------------------------ ($ < 1 || $."a"."b" <= $"x") (1 row) select '@ + 1'::jsonpath; ERROR: @ is not allowed in root expressions LINE 1: select '@ + 1'::jsonpath; ^ select '($).a.b'::jsonpath; jsonpath ----------- $."a"."b" (1 row) select '($.a.b).c.d'::jsonpath; jsonpath ------------------- $."a"."b"."c"."d" (1 row) select '($.a.b + -$.x.y).c.d'::jsonpath; jsonpath ---------------------------------- ($."a"."b" + -$."x"."y")."c"."d" (1 row) select '(-+$.a.b).c.d'::jsonpath; jsonpath ------------------------- (-(+$."a"."b"))."c"."d" (1 row) select '1 + ($.a.b + 2).c.d'::jsonpath; jsonpath ------------------------------- (1 + ($."a"."b" + 2)."c"."d") (1 row) select '1 + ($.a.b > 2).c.d'::jsonpath; jsonpath ------------------------------- (1 + ($."a"."b" > 2)."c"."d") (1 row) select '($)'::jsonpath; jsonpath ---------- $ (1 row) select '(($))'::jsonpath; jsonpath ---------- $ (1 row) select '((($ + 1)).a + ((2)).b ? ((((@ > 1)) || (exists(@.c)))))'::jsonpath; jsonpath --------------------------------------------------- (($ + 1)."a" + (2)."b"?(@ > 1 || exists (@."c"))) (1 row) select '$ ? (@.a < 1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < -1)'::jsonpath; jsonpath ---------------- $?(@."a" < -1) (1 row) select '$ ? (@.a < +1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < .1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < -.1)'::jsonpath; jsonpath ------------------ $?(@."a" < -0.1) (1 row) select '$ ? (@.a < +.1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < 0.1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < -0.1)'::jsonpath; jsonpath ------------------ $?(@."a" < -0.1) (1 row) select '$ ? (@.a < +0.1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < 10.1)'::jsonpath; jsonpath ------------------ $?(@."a" < 10.1) (1 row) select '$ ? (@.a < -10.1)'::jsonpath; jsonpath ------------------- $?(@."a" < -10.1) (1 row) select '$ ? (@.a < +10.1)'::jsonpath; jsonpath ------------------ $?(@."a" < 10.1) (1 row) select '$ ? (@.a < 1e1)'::jsonpath; jsonpath ---------------- $?(@."a" < 10) (1 row) select '$ ? (@.a < -1e1)'::jsonpath; jsonpath ----------------- $?(@."a" < -10) (1 row) select '$ ? (@.a < +1e1)'::jsonpath; jsonpath ---------------- $?(@."a" < 10) (1 row) select '$ ? (@.a < .1e1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < -.1e1)'::jsonpath; jsonpath ---------------- $?(@."a" < -1) (1 row) select '$ ? (@.a < +.1e1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < 0.1e1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < -0.1e1)'::jsonpath; jsonpath ---------------- $?(@."a" < -1) (1 row) select '$ ? (@.a < +0.1e1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < 10.1e1)'::jsonpath; jsonpath ----------------- $?(@."a" < 101) (1 row) select '$ ? (@.a < -10.1e1)'::jsonpath; jsonpath ------------------ $?(@."a" < -101) (1 row) select '$ ? (@.a < +10.1e1)'::jsonpath; jsonpath ----------------- $?(@."a" < 101) (1 row) select '$ ? (@.a < 1e-1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < -1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < -0.1) (1 row) select '$ ? (@.a < +1e-1)'::jsonpath; jsonpath ----------------- $?(@."a" < 0.1) (1 row) select '$ ? (@.a < .1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 0.01) (1 row) select '$ ? (@.a < -.1e-1)'::jsonpath; jsonpath ------------------- $?(@."a" < -0.01) (1 row) select '$ ? (@.a < +.1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 0.01) (1 row) select '$ ? (@.a < 0.1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 0.01) (1 row) select '$ ? (@.a < -0.1e-1)'::jsonpath; jsonpath ------------------- $?(@."a" < -0.01) (1 row) select '$ ? (@.a < +0.1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 0.01) (1 row) select '$ ? (@.a < 10.1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 1.01) (1 row) select '$ ? (@.a < -10.1e-1)'::jsonpath; jsonpath ------------------- $?(@."a" < -1.01) (1 row) select '$ ? (@.a < +10.1e-1)'::jsonpath; jsonpath ------------------ $?(@."a" < 1.01) (1 row) select '$ ? (@.a < 1e+1)'::jsonpath; jsonpath ---------------- $?(@."a" < 10) (1 row) select '$ ? (@.a < -1e+1)'::jsonpath; jsonpath ----------------- $?(@."a" < -10) (1 row) select '$ ? (@.a < +1e+1)'::jsonpath; jsonpath ---------------- $?(@."a" < 10) (1 row) select '$ ? (@.a < .1e+1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < -.1e+1)'::jsonpath; jsonpath ---------------- $?(@."a" < -1) (1 row) select '$ ? (@.a < +.1e+1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < 0.1e+1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < -0.1e+1)'::jsonpath; jsonpath ---------------- $?(@."a" < -1) (1 row) select '$ ? (@.a < +0.1e+1)'::jsonpath; jsonpath --------------- $?(@."a" < 1) (1 row) select '$ ? (@.a < 10.1e+1)'::jsonpath; jsonpath ----------------- $?(@."a" < 101) (1 row) select '$ ? (@.a < -10.1e+1)'::jsonpath; jsonpath ------------------ $?(@."a" < -101) (1 row) select '$ ? (@.a < +10.1e+1)'::jsonpath; jsonpath ----------------- $?(@."a" < 101) (1 row) -- numeric literals select '0'::jsonpath; jsonpath ---------- 0 (1 row) select '00'::jsonpath; ERROR: trailing junk after numeric literal at or near "00" of jsonpath input LINE 1: select '00'::jsonpath; ^ select '0755'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0755'::jsonpath; ^ select '0.0'::jsonpath; jsonpath ---------- 0.0 (1 row) select '0.000'::jsonpath; jsonpath ---------- 0.000 (1 row) select '0.000e1'::jsonpath; jsonpath ---------- 0.00 (1 row) select '0.000e2'::jsonpath; jsonpath ---------- 0.0 (1 row) select '0.000e3'::jsonpath; jsonpath ---------- 0 (1 row) select '0.0010'::jsonpath; jsonpath ---------- 0.0010 (1 row) select '0.0010e-1'::jsonpath; jsonpath ---------- 0.00010 (1 row) select '0.0010e+1'::jsonpath; jsonpath ---------- 0.010 (1 row) select '0.0010e+2'::jsonpath; jsonpath ---------- 0.10 (1 row) select '.001'::jsonpath; jsonpath ---------- 0.001 (1 row) select '.001e1'::jsonpath; jsonpath ---------- 0.01 (1 row) select '1.'::jsonpath; jsonpath ---------- 1 (1 row) select '1.e1'::jsonpath; jsonpath ---------- 10 (1 row) select '1a'::jsonpath; ERROR: trailing junk after numeric literal at or near "1a" of jsonpath input LINE 1: select '1a'::jsonpath; ^ select '1e'::jsonpath; ERROR: trailing junk after numeric literal at or near "1e" of jsonpath input LINE 1: select '1e'::jsonpath; ^ select '1.e'::jsonpath; ERROR: trailing junk after numeric literal at or near "1.e" of jsonpath input LINE 1: select '1.e'::jsonpath; ^ select '1.2a'::jsonpath; ERROR: trailing junk after numeric literal at or near "1.2a" of jsonpath input LINE 1: select '1.2a'::jsonpath; ^ select '1.2e'::jsonpath; ERROR: trailing junk after numeric literal at or near "1.2e" of jsonpath input LINE 1: select '1.2e'::jsonpath; ^ select '1.2.e'::jsonpath; jsonpath ----------- (1.2)."e" (1 row) select '(1.2).e'::jsonpath; jsonpath ----------- (1.2)."e" (1 row) select '1e3'::jsonpath; jsonpath ---------- 1000 (1 row) select '1.e3'::jsonpath; jsonpath ---------- 1000 (1 row) select '1.e3.e'::jsonpath; jsonpath ------------ (1000)."e" (1 row) select '1.e3.e4'::jsonpath; jsonpath ------------- (1000)."e4" (1 row) select '1.2e3'::jsonpath; jsonpath ---------- 1200 (1 row) select '1.2e3a'::jsonpath; ERROR: trailing junk after numeric literal at or near "1.2e3a" of jsonpath input LINE 1: select '1.2e3a'::jsonpath; ^ select '1.2.e3'::jsonpath; jsonpath ------------ (1.2)."e3" (1 row) select '(1.2).e3'::jsonpath; jsonpath ------------ (1.2)."e3" (1 row) select '1..e'::jsonpath; jsonpath ---------- (1)."e" (1 row) select '1..e3'::jsonpath; jsonpath ---------- (1)."e3" (1 row) select '(1.).e'::jsonpath; jsonpath ---------- (1)."e" (1 row) select '(1.).e3'::jsonpath; jsonpath ---------- (1)."e3" (1 row) select '1?(2>3)'::jsonpath; jsonpath ------------- (1)?(2 > 3) (1 row) -- nondecimal select '0b100101'::jsonpath; jsonpath ---------- 37 (1 row) select '0o273'::jsonpath; jsonpath ---------- 187 (1 row) select '0x42F'::jsonpath; jsonpath ---------- 1071 (1 row) -- error cases select '0b'::jsonpath; ERROR: trailing junk after numeric literal at or near "0b" of jsonpath input LINE 1: select '0b'::jsonpath; ^ select '1b'::jsonpath; ERROR: trailing junk after numeric literal at or near "1b" of jsonpath input LINE 1: select '1b'::jsonpath; ^ select '0b0x'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0b0x'::jsonpath; ^ select '0o'::jsonpath; ERROR: trailing junk after numeric literal at or near "0o" of jsonpath input LINE 1: select '0o'::jsonpath; ^ select '1o'::jsonpath; ERROR: trailing junk after numeric literal at or near "1o" of jsonpath input LINE 1: select '1o'::jsonpath; ^ select '0o0x'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0o0x'::jsonpath; ^ select '0x'::jsonpath; ERROR: trailing junk after numeric literal at or near "0x" of jsonpath input LINE 1: select '0x'::jsonpath; ^ select '1x'::jsonpath; ERROR: trailing junk after numeric literal at or near "1x" of jsonpath input LINE 1: select '1x'::jsonpath; ^ select '0x0y'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0x0y'::jsonpath; ^ -- underscores select '1_000_000'::jsonpath; jsonpath ---------- 1000000 (1 row) select '1_2_3'::jsonpath; jsonpath ---------- 123 (1 row) select '0x1EEE_FFFF'::jsonpath; jsonpath ----------- 518979583 (1 row) select '0o2_73'::jsonpath; jsonpath ---------- 187 (1 row) select '0b10_0101'::jsonpath; jsonpath ---------- 37 (1 row) select '1_000.000_005'::jsonpath; jsonpath ------------- 1000.000005 (1 row) select '1_000.'::jsonpath; jsonpath ---------- 1000 (1 row) select '.000_005'::jsonpath; jsonpath ---------- 0.000005 (1 row) select '1_000.5e0_1'::jsonpath; jsonpath ---------- 10005 (1 row) -- error cases select '_100'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '_100'::jsonpath; ^ select '100_'::jsonpath; ERROR: trailing junk after numeric literal at or near "100_" of jsonpath input LINE 1: select '100_'::jsonpath; ^ select '100__000'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '100__000'::jsonpath; ^ select '_1_000.5'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '_1_000.5'::jsonpath; ^ select '1_000_.5'::jsonpath; ERROR: trailing junk after numeric literal at or near "1_000_" of jsonpath input LINE 1: select '1_000_.5'::jsonpath; ^ select '1_000._5'::jsonpath; ERROR: trailing junk after numeric literal at or near "1_000._" of jsonpath input LINE 1: select '1_000._5'::jsonpath; ^ select '1_000.5_'::jsonpath; ERROR: trailing junk after numeric literal at or near "1_000.5_" of jsonpath input LINE 1: select '1_000.5_'::jsonpath; ^ select '1_000.5e_1'::jsonpath; ERROR: trailing junk after numeric literal at or near "1_000.5e" of jsonpath input LINE 1: select '1_000.5e_1'::jsonpath; ^ -- underscore after prefix not allowed in JavaScript (but allowed in SQL) select '0b_10_0101'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0b_10_0101'::jsonpath; ^ select '0o_273'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0o_273'::jsonpath; ^ select '0x_42F'::jsonpath; ERROR: syntax error at end of jsonpath input LINE 1: select '0x_42F'::jsonpath; ^ -- test non-error-throwing API SELECT str as jsonpath, pg_input_is_valid(str,'jsonpath') as ok, errinfo.sql_error_code, errinfo.message, errinfo.detail, errinfo.hint FROM unnest(ARRAY['$ ? (@ like_regex "pattern" flag "smixq")'::text, '$ ? (@ like_regex "pattern" flag "a")', '@ + 1', '00', '1a']) str, LATERAL pg_input_error_info(str, 'jsonpath') as errinfo; jsonpath | ok | sql_error_code | message | detail | hint -------------------------------------------+----+----------------+-----------------------------------------------------------------------+----------------------------------------------------------+------ $ ? (@ like_regex "pattern" flag "smixq") | t | | | | $ ? (@ like_regex "pattern" flag "a") | f | 42601 | invalid input syntax for type jsonpath | Unrecognized flag character "a" in LIKE_REGEX predicate. | @ + 1 | f | 42601 | @ is not allowed in root expressions | | 00 | f | 42601 | trailing junk after numeric literal at or near "00" of jsonpath input | | 1a | f | 42601 | trailing junk after numeric literal at or near "1a" of jsonpath input | | (5 rows)