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.c43
1 files changed, 24 insertions, 19 deletions
diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c
index 41af28cb1eb..852186312c5 100644
--- a/src/backend/executor/execExprInterp.c
+++ b/src/backend/executor/execExprInterp.c
@@ -4312,7 +4312,8 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
case JSON_QUERY_OP:
*op->resvalue = JsonPathQuery(item, path, jsexpr->wrapper, &empty,
!throw_error ? &error : NULL,
- jsestate->args);
+ jsestate->args,
+ jsexpr->column_name);
*op->resnull = (DatumGetPointer(*op->resvalue) == NULL);
@@ -4337,7 +4338,8 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
{
JsonbValue *jbv = JsonPathValue(item, path, &empty,
!throw_error ? &error : NULL,
- jsestate->args);
+ jsestate->args,
+ jsexpr->column_name);
if (jbv == NULL)
{
@@ -4407,30 +4409,33 @@ ExecEvalJsonExprPath(ExprState *state, ExprEvalStep *op,
/* Handle ON EMPTY. */
if (empty)
{
+ *op->resvalue = (Datum) 0;
+ *op->resnull = true;
if (jsexpr->on_empty)
{
- if (jsexpr->on_empty->btype == JSON_BEHAVIOR_ERROR)
- ereport(ERROR,
- errcode(ERRCODE_NO_SQL_JSON_ITEM),
- errmsg("no SQL/JSON item"));
- else
+ if (jsexpr->on_empty->btype != JSON_BEHAVIOR_ERROR)
+ {
jsestate->empty.value = BoolGetDatum(true);
-
- Assert(jsestate->jump_empty >= 0);
- return jsestate->jump_empty;
+ Assert(jsestate->jump_empty >= 0);
+ return jsestate->jump_empty;
+ }
+ }
+ else if (jsexpr->on_error->btype != JSON_BEHAVIOR_ERROR)
+ {
+ jsestate->error.value = BoolGetDatum(true);
+ Assert(!throw_error && jsestate->jump_error >= 0);
+ return jsestate->jump_error;
}
- else if (jsexpr->on_error->btype == JSON_BEHAVIOR_ERROR)
+
+ if (jsexpr->column_name)
ereport(ERROR,
errcode(ERRCODE_NO_SQL_JSON_ITEM),
- errmsg("no SQL/JSON item"));
+ errmsg("no SQL/JSON item found for specified path of column \"%s\"",
+ jsexpr->column_name));
else
- jsestate->error.value = BoolGetDatum(true);
-
- *op->resvalue = (Datum) 0;
- *op->resnull = true;
-
- Assert(!throw_error && jsestate->jump_error >= 0);
- return jsestate->jump_error;
+ ereport(ERROR,
+ errcode(ERRCODE_NO_SQL_JSON_ITEM),
+ errmsg("no SQL/JSON item found for specified path"));
}
/*