This logic was missing from ExplainPreScanNode, from which I derived
planstate_tree_walker. But it shouldn't be missing, especially not
from a generic walker function, so add it.
KaiGai Kohei
planstate_tree_walker(PlanState *planstate, bool (*walker) (), void *context)
{
Plan *plan = planstate->plan;
+ ListCell *lc;
/* initPlan-s */
if (planstate_walk_subplans(planstate->initPlan, walker, context))
if (walker(((SubqueryScanState *) planstate)->subplan, context))
return true;
break;
+ case T_CustomScan:
+ foreach (lc, ((CustomScanState *) planstate)->custom_ps)
+ {
+ if (walker((PlanState *) lfirst(lc), context))
+ return true;
+ }
+ break;
default:
break;
}