mirror of
https://github.com/postgres/postgres.git
synced 2025-05-02 11:44:50 +03:00
Improve error reporting for jsonpath .double() method
When jsonpath .double() method detects that numeric or string can't be converted to double precision, it throws an error. This commit makes these errors explicitly express the reason of failure. Discussion: https://postgr.es/m/CAPpHfdtqJtiSXkP7tOXez18NxhLUH_-75bL8%3DOce4Ki%2Bbv7V6Q%40mail.gmail.com Author: Alexander Korotkov Reviewed-by: Tom Lane Backpatch-through: 12
This commit is contained in:
parent
a5f18e8c21
commit
3ec5f6b53d
@ -986,7 +986,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
|
||||
if (have_error)
|
||||
RETURN_ERROR(ereport(ERROR,
|
||||
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
|
||||
errmsg("jsonpath item method .%s() can only be applied to a numeric value",
|
||||
errmsg("numeric argument of jsonpath item method .%s() is out of range for type double precision",
|
||||
jspOperationName(jsp->type)))));
|
||||
res = jperOk;
|
||||
}
|
||||
@ -1007,7 +1007,7 @@ executeItemOptUnwrapTarget(JsonPathExecContext *cxt, JsonPathItem *jsp,
|
||||
if (have_error || isinf(val))
|
||||
RETURN_ERROR(ereport(ERROR,
|
||||
(errcode(ERRCODE_NON_NUMERIC_SQL_JSON_ITEM),
|
||||
errmsg("jsonpath item method .%s() can only be applied to a numeric value",
|
||||
errmsg("string argument of jsonpath item method .%s() is not a valid representation of a double precision number",
|
||||
jspOperationName(jsp->type)))));
|
||||
|
||||
jb = &jbv;
|
||||
|
@ -1496,7 +1496,9 @@ select jsonb_path_query('"1.23"', '$.double()');
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('"1.23aaa"', '$.double()');
|
||||
ERROR: jsonpath item method .double() can only be applied to a numeric value
|
||||
ERROR: string argument of jsonpath item method .double() is not a valid representation of a double precision number
|
||||
select jsonb_path_query('1e1000', '$.double()');
|
||||
ERROR: numeric argument of jsonpath item method .double() is out of range for type double precision
|
||||
select jsonb_path_query('"nan"', '$.double()');
|
||||
jsonb_path_query
|
||||
------------------
|
||||
@ -1510,9 +1512,9 @@ select jsonb_path_query('"NaN"', '$.double()');
|
||||
(1 row)
|
||||
|
||||
select jsonb_path_query('"inf"', '$.double()');
|
||||
ERROR: jsonpath item method .double() can only be applied to a numeric value
|
||||
ERROR: string argument of jsonpath item method .double() is not a valid representation of a double precision number
|
||||
select jsonb_path_query('"-inf"', '$.double()');
|
||||
ERROR: jsonpath item method .double() can only be applied to a numeric value
|
||||
ERROR: string argument of jsonpath item method .double() is not a valid representation of a double precision number
|
||||
select jsonb_path_query('"inf"', '$.double()', silent => true);
|
||||
jsonb_path_query
|
||||
------------------
|
||||
|
@ -312,6 +312,7 @@ select jsonb_path_query('{}', '$.double()', silent => true);
|
||||
select jsonb_path_query('1.23', '$.double()');
|
||||
select jsonb_path_query('"1.23"', '$.double()');
|
||||
select jsonb_path_query('"1.23aaa"', '$.double()');
|
||||
select jsonb_path_query('1e1000', '$.double()');
|
||||
select jsonb_path_query('"nan"', '$.double()');
|
||||
select jsonb_path_query('"NaN"', '$.double()');
|
||||
select jsonb_path_query('"inf"', '$.double()');
|
||||
|
Loading…
x
Reference in New Issue
Block a user