From 63e6c5f4a2eeb22e0dd446a62c2b4b417d2b51f0 Mon Sep 17 00:00:00 2001 From: Amit Langote Date: Fri, 26 Jul 2024 15:59:27 +0900 Subject: SQL/JSON: Fix error-handling of some JsonBehavior expressions To ensure that the errors of executing a JsonBehavior expression that is coerced in the parser are caught instead of being thrown directly, pass ErrorSaveContext to ExecInitExprRec() when initializing it. Also, add a EEOP_JSONEXPR_COERCION_FINISH step to handle the errors that are caught that way. Discussion: https://postgr.es/m/CACJufxEo4sUjKCYtda0_qt9tazqqKPmF1cqhW9KBOUeJFqQd2g@mail.gmail.com Backpatch-through: 17 --- src/backend/executor/execExprInterp.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/backend/executor/execExprInterp.c') diff --git a/src/backend/executor/execExprInterp.c b/src/backend/executor/execExprInterp.c index d8735286c4d..4c9b2a8c178 100644 --- a/src/backend/executor/execExprInterp.c +++ b/src/backend/executor/execExprInterp.c @@ -4558,6 +4558,12 @@ ExecEvalJsonCoercionFinish(ExprState *state, ExprEvalStep *op) *op->resvalue = (Datum) 0; *op->resnull = true; jsestate->error.value = BoolGetDatum(true); + + /* + * Reset for next use such as for catching errors when coercing a + * JsonBehavior expression. + */ + jsestate->escontext.error_occurred = false; } } -- cgit v1.2.3