Restrict some cases in parsing numerics in jsonpath

Jsonpath now accepts integers with leading zeroes and floats starting with
a dot.  However, SQL standard requires to follow JSON specification, which
doesn't allow none of these cases.  Our json[b] datatypes also restrict that.
So, restrict it in jsonpath altogether.

Author: Nikita Glukhov
This commit is contained in:
Alexander Korotkov 2019-04-01 18:09:09 +03:00
parent 0a02e2ae02
commit 2e643501e5
2 changed files with 55 additions and 68 deletions

View File

@ -80,9 +80,9 @@ any [^\?\%\$\.\[\]\{\}\(\)\|\&\!\=\<\>\@\#\,\*:\-\+\/\\\"\' \t\n\r\f]
blank [ \t\n\r\f]
digit [0-9]
integer {digit}+
decimal {digit}*\.{digit}+
decimalfail {digit}+\.
integer (0|[1-9]{digit}*)
decimal {integer}\.{digit}+
decimalfail {integer}\.
real ({integer}|{decimal})[Ee][-+]?{digit}+
realfail1 ({integer}|{decimal})[Ee]
realfail2 ({integer}|{decimal})[Ee][-+]

View File

@ -547,23 +547,20 @@ select '$ ? (@.a < +1)'::jsonpath;
(1 row)
select '$ ? (@.a < .1)'::jsonpath;
jsonpath
-----------------
$?(@."a" < 0.1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < .1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < -.1)'::jsonpath;
jsonpath
------------------
$?(@."a" < -0.1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < -.1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < +.1)'::jsonpath;
jsonpath
-----------------
$?(@."a" < 0.1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < +.1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < 0.1)'::jsonpath;
jsonpath
-----------------
@ -619,23 +616,20 @@ select '$ ? (@.a < +1e1)'::jsonpath;
(1 row)
select '$ ? (@.a < .1e1)'::jsonpath;
jsonpath
---------------
$?(@."a" < 1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < .1e1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < -.1e1)'::jsonpath;
jsonpath
----------------
$?(@."a" < -1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < -.1e1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < +.1e1)'::jsonpath;
jsonpath
---------------
$?(@."a" < 1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < +.1e1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < 0.1e1)'::jsonpath;
jsonpath
---------------
@ -691,23 +685,20 @@ select '$ ? (@.a < +1e-1)'::jsonpath;
(1 row)
select '$ ? (@.a < .1e-1)'::jsonpath;
jsonpath
------------------
$?(@."a" < 0.01)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < .1e-1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < -.1e-1)'::jsonpath;
jsonpath
-------------------
$?(@."a" < -0.01)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < -.1e-1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < +.1e-1)'::jsonpath;
jsonpath
------------------
$?(@."a" < 0.01)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < +.1e-1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < 0.1e-1)'::jsonpath;
jsonpath
------------------
@ -763,23 +754,20 @@ select '$ ? (@.a < +1e+1)'::jsonpath;
(1 row)
select '$ ? (@.a < .1e+1)'::jsonpath;
jsonpath
---------------
$?(@."a" < 1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < .1e+1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < -.1e+1)'::jsonpath;
jsonpath
----------------
$?(@."a" < -1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < -.1e+1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < +.1e+1)'::jsonpath;
jsonpath
---------------
$?(@."a" < 1)
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '$ ? (@.a < +.1e+1)'::jsonpath;
^
DETAIL: syntax error, unexpected '.' at or near "."
select '$ ? (@.a < 0.1e+1)'::jsonpath;
jsonpath
---------------
@ -823,11 +811,10 @@ select '0'::jsonpath;
(1 row)
select '00'::jsonpath;
jsonpath
----------
0
(1 row)
ERROR: bad jsonpath representation
LINE 1: select '00'::jsonpath;
^
DETAIL: syntax error, unexpected IDENT_P at end of input
select '0.0'::jsonpath;
jsonpath
----------