From 262e56bcae4f529c47ce4fbb8306fd6e26762975 Mon Sep 17 00:00:00 2001
From: Robert Haas <rhaas@postgresql.org>
Date: Tue, 22 Sep 2015 21:42:00 -0400
Subject: [PATCH] Teach planstate_tree_walker about custom scans.

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 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c
index 4a2447409a9..a11cb9ff4d1 100644
--- a/src/backend/nodes/nodeFuncs.c
+++ b/src/backend/nodes/nodeFuncs.c
@@ -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;
 	}
-- 
GitLab