aboutsummaryrefslogtreecommitdiff
path: root/src/backend/executor/execExprInterp.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/executor/execExprInterp.c')
-rw-r--r--src/backend/executor/execExprInterp.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
index a6c47f61e0d..9fd988cc992 100644
--- a/src/backend/executor/execExprInterp.c
+++ b/src/backend/executor/execExprInterp.c
@@ -4550,8 +4550,8 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
/* Set up to catch coercion errors of the ON EMPTY value. */
jsestate->escontext.error_occurred = false;
jsestate->escontext.details_wanted = true;
- Assert(jsestate->jump_empty >= 0);
- return jsestate->jump_empty;
+ /* Jump to end if the ON EMPTY behavior is to return NULL */
+ return jsestate->jump_empty >= 0 ? jsestate->jump_empty : jsestate->jump_end;
}
}
else if (jsexpr->on_error->btype != JSON_BEHAVIOR_ERROR)
@@ -4560,8 +4560,9 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
/* Set up to catch coercion errors of the ON ERROR value. */
jsestate->escontext.error_occurred = false;
jsestate->escontext.details_wanted = true;
- Assert(!throw_error && jsestate->jump_error >= 0);
- return jsestate->jump_error;
+ Assert(!throw_error);
+ /* Jump to end if the ON ERROR behavior is to return NULL */
+ return jsestate->jump_error >= 0 ? jsestate->jump_error : jsestate->jump_end;
}
if (jsexpr->column_name)
@@ -4581,14 +4582,15 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
*/
if (error)
{
- Assert(!throw_error && jsestate->jump_error >= 0);
+ Assert(!throw_error);
*op->resvalue = (Datum) 0;
*op->resnull = true;
jsestate->error.value = BoolGetDatum(true);
/* Set up to catch coercion errors of the ON ERROR value. */
jsestate->escontext.error_occurred = false;
jsestate->escontext.details_wanted = true;
- return jsestate->jump_error;
+ /* Jump to end if the ON ERROR behavior is to return NULL */
+ return jsestate->jump_error >= 0 ? jsestate->jump_error : jsestate->jump_end;
}
return jump_eval_coercion >= 0 ? jump_eval_coercion : jsestate->jump_end;