diff options
Diffstat (limited to 'src/backend/executor/execExpr.c')
-rw-r--r-- | src/backend/executor/execExpr.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index bc5feb0115a..79087cc6d63 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -2436,7 +2436,16 @@ ExecInitExprRec(Expr *node, ExprState *state, { JsonExpr *jsexpr = castNode(JsonExpr, node); - ExecInitJsonExpr(jsexpr, state, resv, resnull, &scratch); + /* + * No need to initialize a full JsonExprState For + * JSON_TABLE(), because the upstream caller tfuncFetchRows() + * is only interested in the value of formatted_expr. + */ + if (jsexpr->op == JSON_TABLE_OP) + ExecInitExprRec((Expr *) jsexpr->formatted_expr, state, + resv, resnull); + else + ExecInitJsonExpr(jsexpr, state, resv, resnull, &scratch); break; } |