pgsql: SQL/JSON: Fix issues with DEFAULT .. ON ERROR / EMPTY

Started by Amit Langoteabout 2 years ago2 messagescomitters
Jump to latest
#1Amit Langote
Langote_Amit_f8@lab.ntt.co.jp

SQL/JSON: Fix issues with DEFAULT .. ON ERROR / EMPTY

SQL/JSON query functions allow specifying an expression to return
when either of ON ERROR or ON EMPTY condition occurs when evaluating
the JSON path expression. The parser (transformJsonBehavior()) checks
that the specified expression is one of the supported expressions, but
there are two issues with how the check is done that are fixed in this
commit:

* No check for some expressions related to coercion, such as
CoerceViaIO, that may appear in the transformed user-specified
expressions that include cast(s)

* An unsupported expression may be masked by a coercion-related
expression, which must be flagged by checking the latter's
argument expression recursively

Author: Jian He <jian.universality@gmail.com>
Author: Amit Langote <amitlangote09@gmail.com>
Reported-by: Jian He <jian.universality@gmail.com>
Discussion: /messages/by-id/CACJufxEqhqsfrg_p7EMyo5zak3d767iFDL8vz_4=ZBHpOtrghw@mail.gmail.com
Discussion: /messages/by-id/CACJufxGOerH1QJknm1noh-Kz5FqU4p7QfeZSeVT2tN_4SLXYNg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c0fc0751862d4e9b7ca9d51f2cd79344690ec873

Modified Files
--------------
src/backend/parser/parse_expr.c | 37 ++++++++++++++-
src/test/regress/expected/sqljson_jsontable.out | 32 +++++++++++++
src/test/regress/expected/sqljson_queryfuncs.out | 57 ++++++++++++++++++++++++
src/test/regress/sql/sqljson_jsontable.sql | 16 +++++++
src/test/regress/sql/sqljson_queryfuncs.sql | 27 +++++++++++
5 files changed, 167 insertions(+), 2 deletions(-)

#2Amit Langote
Langote_Amit_f8@lab.ntt.co.jp
In reply to: Amit Langote (#1)
Re: pgsql: SQL/JSON: Fix issues with DEFAULT .. ON ERROR / EMPTY

On Thu, Apr 18, 2024 at 3:51 PM Amit Langote <amitlan@postgresql.org> wrote:

SQL/JSON: Fix issues with DEFAULT .. ON ERROR / EMPTY

SQL/JSON query functions allow specifying an expression to return
when either of ON ERROR or ON EMPTY condition occurs when evaluating
the JSON path expression. The parser (transformJsonBehavior()) checks
that the specified expression is one of the supported expressions, but
there are two issues with how the check is done that are fixed in this
commit:

* No check for some expressions related to coercion, such as
CoerceViaIO, that may appear in the transformed user-specified
expressions that include cast(s)

* An unsupported expression may be masked by a coercion-related
expression, which must be flagged by checking the latter's
argument expression recursively

Author: Jian He <jian.universality@gmail.com>
Author: Amit Langote <amitlangote09@gmail.com>
Reported-by: Jian He <jian.universality@gmail.com>
Discussion: /messages/by-id/CACJufxEqhqsfrg_p7EMyo5zak3d767iFDL8vz_4=ZBHpOtrghw@mail.gmail.com
Discussion: /messages/by-id/CACJufxGOerH1QJknm1noh-Kz5FqU4p7QfeZSeVT2tN_4SLXYNg@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/c0fc0751862d4e9b7ca9d51f2cd79344690ec873

Modified Files
--------------
src/backend/parser/parse_expr.c | 37 ++++++++++++++-
src/test/regress/expected/sqljson_jsontable.out | 32 +++++++++++++
src/test/regress/expected/sqljson_queryfuncs.out | 57 ++++++++++++++++++++++++
src/test/regress/sql/sqljson_jsontable.sql | 16 +++++++
src/test/regress/sql/sqljson_queryfuncs.sql | 27 +++++++++++
5 files changed, 167 insertions(+), 2 deletions(-)

Noticed failures on canebrake and urutu that seem to have to do with
using the same DOMAIN name in nearby test files causing a clash.

Will push a fix shortly.

--
Thanks, Amit Langote