From 7fb1906bab90e539697e6d66d3f2754eb3031603 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 21 Nov 2023 05:43:10 +0100 Subject: [PATCH 3/6] Move some code from gram.y to parse analysis --- src/backend/parser/gram.y | 5 ----- src/backend/parser/parse_expr.c | 6 ++++++ src/test/regress/expected/jsonb_sqljson.out | 12 ++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index a8cce5b00e..a2d482ab70 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -15778,11 +15778,6 @@ func_expr_common_subexpr: n->common = (JsonCommon *) $3; n->output = (JsonOutput *) $4; n->wrapper = $5; - if (n->wrapper != JSW_NONE && $6 != JS_QUOTES_UNSPEC) - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used"), - parser_errposition(@6))); n->quotes = $6; n->behavior = $7; n->location = @1; diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 64571562c5..1c1f38a808 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -4302,6 +4302,12 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func) case JSON_QUERY_OP: func_name = "JSON_QUERY"; + if (func->wrapper != JSW_NONE && func->quotes != JS_QUOTES_UNSPEC) + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used"), + parser_errposition(pstate, func->location))); + jsexpr = transformJsonExprCommon(pstate, func, func_name); jsexpr->wrapper = func->wrapper; jsexpr->omit_quotes = (func->quotes == JS_QUOTES_OMIT); diff --git a/src/test/regress/expected/jsonb_sqljson.out b/src/test/regress/expected/jsonb_sqljson.out index b467971ed9..9bf3fb21db 100644 --- a/src/test/regress/expected/jsonb_sqljson.out +++ b/src/test/regress/expected/jsonb_sqljson.out @@ -658,19 +658,19 @@ SELECT JSON_QUERY(jsonb '"aaa"', '$' RETURNING bytea FORMAT JSON OMIT QUOTES ERR SELECT JSON_QUERY(jsonb '[1]', '$' WITH WRAPPER OMIT QUOTES); ERROR: SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used LINE 1: SELECT JSON_QUERY(jsonb '[1]', '$' WITH WRAPPER OMIT QUOTES)... - ^ + ^ SELECT JSON_QUERY(jsonb '[1]', '$' WITH WRAPPER KEEP QUOTES); ERROR: SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used LINE 1: SELECT JSON_QUERY(jsonb '[1]', '$' WITH WRAPPER KEEP QUOTES)... - ^ + ^ SELECT JSON_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER KEEP QUOTES); ERROR: SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used -LINE 1: ...N_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER KEEP QUOTE... - ^ +LINE 1: SELECT JSON_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER ... + ^ SELECT JSON_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER OMIT QUOTES); ERROR: SQL/JSON QUOTES behavior must not be specified when WITH WRAPPER is used -LINE 1: ...N_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER OMIT QUOTE... - ^ +LINE 1: SELECT JSON_QUERY(jsonb '[1]', '$' WITH CONDITIONAL WRAPPER ... + ^ -- Should succeed SELECT JSON_QUERY(jsonb '[1]', '$' WITHOUT WRAPPER OMIT QUOTES); json_query -- 2.42.1