mirror of
https://github.com/postgres/postgres.git
synced 2025-05-31 03:21:24 +03:00
SQL/JSON: Fix default ON ERROR behavior for JSON_TABLE
Use EMPTY ARRAY instead of EMPTY. This change does not affect the runtime behavior of JSON_TABLE(), which continues to return an empty relation ON ERROR. It only alters whether the default ON ERROR behavior is shown in the deparsed output. Reported-by: Jian He <jian.universality@gmail.com> Discussion: https://postgr.es/m/CACJufxEo4sUjKCYtda0_qt9tazqqKPmF1cqhW9KBOUeJFqQd2g@mail.gmail.com Backpatch-through: 17
This commit is contained in:
parent
cd680b3921
commit
446d5ad7ae
@ -4603,13 +4603,13 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assume EMPTY ON ERROR when ON ERROR is not specified.
|
* Assume EMPTY ARRAY ON ERROR when ON ERROR is not specified.
|
||||||
*
|
*
|
||||||
* ON EMPTY cannot be specified at the top level but it can be for
|
* ON EMPTY cannot be specified at the top level but it can be for
|
||||||
* the individual columns.
|
* the individual columns.
|
||||||
*/
|
*/
|
||||||
jsexpr->on_error = transformJsonBehavior(pstate, func->on_error,
|
jsexpr->on_error = transformJsonBehavior(pstate, func->on_error,
|
||||||
JSON_BEHAVIOR_EMPTY,
|
JSON_BEHAVIOR_EMPTY_ARRAY,
|
||||||
jsexpr->returning);
|
jsexpr->returning);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -11875,7 +11875,7 @@ get_json_table(TableFunc *tf, deparse_context *context, bool showimplicit)
|
|||||||
get_json_table_columns(tf, castNode(JsonTablePathScan, tf->plan), context,
|
get_json_table_columns(tf, castNode(JsonTablePathScan, tf->plan), context,
|
||||||
showimplicit);
|
showimplicit);
|
||||||
|
|
||||||
if (jexpr->on_error->btype != JSON_BEHAVIOR_EMPTY)
|
if (jexpr->on_error->btype != JSON_BEHAVIOR_EMPTY_ARRAY)
|
||||||
get_json_behavior(jexpr->on_error, context, "ERROR");
|
get_json_behavior(jexpr->on_error, context, "ERROR");
|
||||||
|
|
||||||
if (PRETTY_INDENT(context))
|
if (PRETTY_INDENT(context))
|
||||||
|
@ -1155,3 +1155,25 @@ CREATE OR REPLACE VIEW public.json_table_view9 AS
|
|||||||
) ERROR ON ERROR
|
) ERROR ON ERROR
|
||||||
)
|
)
|
||||||
DROP VIEW json_table_view8, json_table_view9;
|
DROP VIEW json_table_view8, json_table_view9;
|
||||||
|
-- Test JSON_TABLE() deparsing -- don't emit default ON ERROR behavior
|
||||||
|
CREATE VIEW json_table_view8 AS SELECT * from JSON_TABLE('"a"', '$' COLUMNS (a text PATH '$') EMPTY ON ERROR);
|
||||||
|
\sv json_table_view8;
|
||||||
|
CREATE OR REPLACE VIEW public.json_table_view8 AS
|
||||||
|
SELECT a
|
||||||
|
FROM JSON_TABLE(
|
||||||
|
'"a"'::text, '$' AS json_table_path_0
|
||||||
|
COLUMNS (
|
||||||
|
a text PATH '$'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
CREATE VIEW json_table_view9 AS SELECT * from JSON_TABLE('"a"', '$' COLUMNS (a text PATH '$') EMPTY ARRAY ON ERROR);
|
||||||
|
\sv json_table_view9;
|
||||||
|
CREATE OR REPLACE VIEW public.json_table_view9 AS
|
||||||
|
SELECT a
|
||||||
|
FROM JSON_TABLE(
|
||||||
|
'"a"'::text, '$' AS json_table_path_0
|
||||||
|
COLUMNS (
|
||||||
|
a text PATH '$'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
DROP VIEW json_table_view8, json_table_view9;
|
||||||
|
@ -552,3 +552,12 @@ CREATE VIEW json_table_view9 AS SELECT * from JSON_TABLE('"a"', '$' COLUMNS (a t
|
|||||||
\sv json_table_view9;
|
\sv json_table_view9;
|
||||||
|
|
||||||
DROP VIEW json_table_view8, json_table_view9;
|
DROP VIEW json_table_view8, json_table_view9;
|
||||||
|
|
||||||
|
-- Test JSON_TABLE() deparsing -- don't emit default ON ERROR behavior
|
||||||
|
CREATE VIEW json_table_view8 AS SELECT * from JSON_TABLE('"a"', '$' COLUMNS (a text PATH '$') EMPTY ON ERROR);
|
||||||
|
\sv json_table_view8;
|
||||||
|
|
||||||
|
CREATE VIEW json_table_view9 AS SELECT * from JSON_TABLE('"a"', '$' COLUMNS (a text PATH '$') EMPTY ARRAY ON ERROR);
|
||||||
|
\sv json_table_view9;
|
||||||
|
|
||||||
|
DROP VIEW json_table_view8, json_table_view9;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user