Teach planstate_tree_walker about custom scans.
authorRobert Haas <[email protected]>
Wed, 23 Sep 2015 01:42:00 +0000 (21:42 -0400)
committerRobert Haas <[email protected]>
Wed, 23 Sep 2015 01:42:00 +0000 (21:42 -0400)
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

src/backend/nodes/nodeFuncs.c

index 4a2447409a9e7c84678e14746c65fdf45eedd036..a11cb9ff4d10fe657800299711301f93b7c60bf9 100644 (file)
@@ -3428,6 +3428,7 @@ bool
 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))
@@ -3484,6 +3485,13 @@ planstate_tree_walker(PlanState *planstate, bool (*walker) (), void *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;
    }