@ -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 ;
}
}