diff options
Diffstat (limited to 'src/backend/parser/parse_expr.c')
-rw-r--r-- | src/backend/parser/parse_expr.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/backend/parser/parse_expr.c b/src/backend/parser/parse_expr.c index 4c95986c312..00cd7358ebb 100644 --- a/src/backend/parser/parse_expr.c +++ b/src/backend/parser/parse_expr.c @@ -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); |