mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
SQL/JSON: Correctly enforce the default ON EMPTY behavior
Currently, when the ON EMPTY clause is not present, the ON ERROR
clause (implicit or explicit) dictates the behavior when jsonpath
evaluation in ExecEvalJsonExprPath() results in an empty sequence.
That is an oversight in the commit 6185c9737c
.
This commit fixes things so that a NULL is returned instead in that
case which is the default behavior when the ON EMPTY clause is not
present.
Reported-by: Markus Winand
Discussion: https://postgr.es/m/F7DD1442-265C-4220-A603-CB0DEB77E91D%40winand.at
This commit is contained in:
@ -4418,11 +4418,11 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func)
|
||||
|
||||
coerceJsonExprOutput(pstate, jsexpr);
|
||||
|
||||
if (func->on_empty)
|
||||
jsexpr->on_empty = transformJsonBehavior(pstate,
|
||||
func->on_empty,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
/* Assume NULL ON EMPTY when ON EMPTY is not specified. */
|
||||
jsexpr->on_empty = transformJsonBehavior(pstate, func->on_empty,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
/* Assume NULL ON ERROR when ON ERROR is not specified. */
|
||||
jsexpr->on_error = transformJsonBehavior(pstate, func->on_error,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
@ -4448,11 +4448,11 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func)
|
||||
|
||||
coerceJsonExprOutput(pstate, jsexpr);
|
||||
|
||||
if (func->on_empty)
|
||||
jsexpr->on_empty = transformJsonBehavior(pstate,
|
||||
func->on_empty,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
/* Assume NULL ON EMPTY when ON EMPTY is not specified. */
|
||||
jsexpr->on_empty = transformJsonBehavior(pstate, func->on_empty,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
/* Assume NULL ON ERROR when ON ERROR is not specified. */
|
||||
jsexpr->on_error = transformJsonBehavior(pstate, func->on_error,
|
||||
JSON_BEHAVIOR_NULL,
|
||||
jsexpr->returning);
|
||||
@ -4464,6 +4464,13 @@ transformJsonFuncExpr(ParseState *pstate, JsonFuncExpr *func)
|
||||
jsexpr->returning->typid = exprType(jsexpr->formatted_expr);
|
||||
jsexpr->returning->typmod = -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Assume EMPTY ON ERROR when ON ERROR is not specified.
|
||||
*
|
||||
* ON EMPTY cannot be specified at the top level but it can be for
|
||||
* the individual columns.
|
||||
*/
|
||||
jsexpr->on_error = transformJsonBehavior(pstate, func->on_error,
|
||||
JSON_BEHAVIOR_EMPTY,
|
||||
jsexpr->returning);
|
||||
|
Reference in New Issue
Block a user