diff options
Diffstat (limited to 'src/backend/executor/nodeMaterial.c')
-rw-r--r-- | src/backend/executor/nodeMaterial.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/backend/executor/nodeMaterial.c b/src/backend/executor/nodeMaterial.c index 11588258694..8ff4352a66a 100644 --- a/src/backend/executor/nodeMaterial.c +++ b/src/backend/executor/nodeMaterial.c @@ -317,6 +317,8 @@ ExecMaterialRestrPos(MaterialState *node) void ExecReScanMaterial(MaterialState *node) { + PlanState *outerPlan = outerPlanState(node); + ExecClearTuple(node->ss.ps.ps_ResultTupleSlot); if (node->eflags != 0) @@ -339,13 +341,13 @@ ExecReScanMaterial(MaterialState *node) * Otherwise we can just rewind and rescan the stored output. The * state of the subnode does not change. */ - if (node->ss.ps.lefttree->chgParam != NULL || + if (outerPlan->chgParam != NULL || (node->eflags & EXEC_FLAG_REWIND) == 0) { tuplestore_end(node->tuplestorestate); node->tuplestorestate = NULL; - if (node->ss.ps.lefttree->chgParam == NULL) - ExecReScan(node->ss.ps.lefttree); + if (outerPlan->chgParam == NULL) + ExecReScan(outerPlan); node->eof_underlying = false; } else @@ -359,8 +361,8 @@ ExecReScanMaterial(MaterialState *node) * if chgParam of subnode is not null then plan will be re-scanned by * first ExecProcNode. */ - if (node->ss.ps.lefttree->chgParam == NULL) - ExecReScan(node->ss.ps.lefttree); + if (outerPlan->chgParam == NULL) + ExecReScan(outerPlan); node->eof_underlying = false; } } |