1212 *
1313 *
1414 * IDENTIFICATION
15- * $PostgreSQL: pgsql/src/backend/executor/execProcnode.c,v 1.52 2005/12/07 15:27:42 tgl Exp $
15+ * $PostgreSQL: pgsql/src/backend/executor/execProcnode.c,v 1.53 2006/02/28 04:10:27 tgl Exp $
1616 *
1717 *-------------------------------------------------------------------------
1818 */
4545 * DEPT EMP
4646 * (name = "shoe")
4747 *
48- * ExecStart () is called first.
48+ * ExecutorStart () is called first.
4949 * It calls InitPlan() which calls ExecInitNode() on
5050 * the root of the plan -- the nest loop node.
5151 *
108108/* ------------------------------------------------------------------------
109109 * ExecInitNode
110110 *
111- * Recursively initializes all the nodes in the plan rooted
111+ * Recursively initializes all the nodes in the plan tree rooted
112112 * at 'node'.
113113 *
114- * Initial States:
115- * 'node' is the plan produced by the query planner
116- * 'estate' is the shared execution state for the query tree
114+ * Inputs:
115+ * 'node' is the current node of the plan produced by the query planner
116+ * 'estate' is the shared execution state for the plan tree
117+ * 'eflags' is a bitwise OR of flag bits described in executor.h
117118 *
118119 * Returns a PlanState node corresponding to the given Plan node.
119120 * ------------------------------------------------------------------------
120121 */
121122PlanState *
122- ExecInitNode (Plan * node , EState * estate )
123+ ExecInitNode (Plan * node , EState * estate , int eflags )
123124{
124125 PlanState * result ;
125126 List * subps ;
@@ -137,100 +138,122 @@ ExecInitNode(Plan *node, EState *estate)
137138 * control nodes
138139 */
139140 case T_Result :
140- result = (PlanState * ) ExecInitResult ((Result * ) node , estate );
141+ result = (PlanState * ) ExecInitResult ((Result * ) node ,
142+ estate , eflags );
141143 break ;
142144
143145 case T_Append :
144- result = (PlanState * ) ExecInitAppend ((Append * ) node , estate );
146+ result = (PlanState * ) ExecInitAppend ((Append * ) node ,
147+ estate , eflags );
145148 break ;
146149
147150 case T_BitmapAnd :
148- result = (PlanState * ) ExecInitBitmapAnd ((BitmapAnd * ) node , estate );
151+ result = (PlanState * ) ExecInitBitmapAnd ((BitmapAnd * ) node ,
152+ estate , eflags );
149153 break ;
150154
151155 case T_BitmapOr :
152- result = (PlanState * ) ExecInitBitmapOr ((BitmapOr * ) node , estate );
156+ result = (PlanState * ) ExecInitBitmapOr ((BitmapOr * ) node ,
157+ estate , eflags );
153158 break ;
154159
155160 /*
156161 * scan nodes
157162 */
158163 case T_SeqScan :
159- result = (PlanState * ) ExecInitSeqScan ((SeqScan * ) node , estate );
164+ result = (PlanState * ) ExecInitSeqScan ((SeqScan * ) node ,
165+ estate , eflags );
160166 break ;
161167
162168 case T_IndexScan :
163- result = (PlanState * ) ExecInitIndexScan ((IndexScan * ) node , estate );
169+ result = (PlanState * ) ExecInitIndexScan ((IndexScan * ) node ,
170+ estate , eflags );
164171 break ;
165172
166173 case T_BitmapIndexScan :
167- result = (PlanState * ) ExecInitBitmapIndexScan ((BitmapIndexScan * ) node , estate );
174+ result = (PlanState * ) ExecInitBitmapIndexScan ((BitmapIndexScan * ) node ,
175+ estate , eflags );
168176 break ;
169177
170178 case T_BitmapHeapScan :
171- result = (PlanState * ) ExecInitBitmapHeapScan ((BitmapHeapScan * ) node , estate );
179+ result = (PlanState * ) ExecInitBitmapHeapScan ((BitmapHeapScan * ) node ,
180+ estate , eflags );
172181 break ;
173182
174183 case T_TidScan :
175- result = (PlanState * ) ExecInitTidScan ((TidScan * ) node , estate );
184+ result = (PlanState * ) ExecInitTidScan ((TidScan * ) node ,
185+ estate , eflags );
176186 break ;
177187
178188 case T_SubqueryScan :
179- result = (PlanState * ) ExecInitSubqueryScan ((SubqueryScan * ) node , estate );
189+ result = (PlanState * ) ExecInitSubqueryScan ((SubqueryScan * ) node ,
190+ estate , eflags );
180191 break ;
181192
182193 case T_FunctionScan :
183- result = (PlanState * ) ExecInitFunctionScan ((FunctionScan * ) node , estate );
194+ result = (PlanState * ) ExecInitFunctionScan ((FunctionScan * ) node ,
195+ estate , eflags );
184196 break ;
185197
186198 /*
187199 * join nodes
188200 */
189201 case T_NestLoop :
190- result = (PlanState * ) ExecInitNestLoop ((NestLoop * ) node , estate );
202+ result = (PlanState * ) ExecInitNestLoop ((NestLoop * ) node ,
203+ estate , eflags );
191204 break ;
192205
193206 case T_MergeJoin :
194- result = (PlanState * ) ExecInitMergeJoin ((MergeJoin * ) node , estate );
207+ result = (PlanState * ) ExecInitMergeJoin ((MergeJoin * ) node ,
208+ estate , eflags );
195209 break ;
196210
197211 case T_HashJoin :
198- result = (PlanState * ) ExecInitHashJoin ((HashJoin * ) node , estate );
212+ result = (PlanState * ) ExecInitHashJoin ((HashJoin * ) node ,
213+ estate , eflags );
199214 break ;
200215
201216 /*
202217 * materialization nodes
203218 */
204219 case T_Material :
205- result = (PlanState * ) ExecInitMaterial ((Material * ) node , estate );
220+ result = (PlanState * ) ExecInitMaterial ((Material * ) node ,
221+ estate , eflags );
206222 break ;
207223
208224 case T_Sort :
209- result = (PlanState * ) ExecInitSort ((Sort * ) node , estate );
225+ result = (PlanState * ) ExecInitSort ((Sort * ) node ,
226+ estate , eflags );
210227 break ;
211228
212229 case T_Group :
213- result = (PlanState * ) ExecInitGroup ((Group * ) node , estate );
230+ result = (PlanState * ) ExecInitGroup ((Group * ) node ,
231+ estate , eflags );
214232 break ;
215233
216234 case T_Agg :
217- result = (PlanState * ) ExecInitAgg ((Agg * ) node , estate );
235+ result = (PlanState * ) ExecInitAgg ((Agg * ) node ,
236+ estate , eflags );
218237 break ;
219238
220239 case T_Unique :
221- result = (PlanState * ) ExecInitUnique ((Unique * ) node , estate );
240+ result = (PlanState * ) ExecInitUnique ((Unique * ) node ,
241+ estate , eflags );
222242 break ;
223243
224244 case T_Hash :
225- result = (PlanState * ) ExecInitHash ((Hash * ) node , estate );
245+ result = (PlanState * ) ExecInitHash ((Hash * ) node ,
246+ estate , eflags );
226247 break ;
227248
228249 case T_SetOp :
229- result = (PlanState * ) ExecInitSetOp ((SetOp * ) node , estate );
250+ result = (PlanState * ) ExecInitSetOp ((SetOp * ) node ,
251+ estate , eflags );
230252 break ;
231253
232254 case T_Limit :
233- result = (PlanState * ) ExecInitLimit ((Limit * ) node , estate );
255+ result = (PlanState * ) ExecInitLimit ((Limit * ) node ,
256+ estate , eflags );
234257 break ;
235258
236259 default :
@@ -251,7 +274,7 @@ ExecInitNode(Plan *node, EState *estate)
251274
252275 Assert (IsA (subplan , SubPlan ));
253276 sstate = ExecInitExprInitPlan (subplan , result );
254- ExecInitSubPlan (sstate , estate );
277+ ExecInitSubPlan (sstate , estate , eflags );
255278 subps = lappend (subps , sstate );
256279 }
257280 result -> initPlan = subps ;
@@ -267,7 +290,7 @@ ExecInitNode(Plan *node, EState *estate)
267290 SubPlanState * sstate = (SubPlanState * ) lfirst (l );
268291
269292 Assert (IsA (sstate , SubPlanState ));
270- ExecInitSubPlan (sstate , estate );
293+ ExecInitSubPlan (sstate , estate , eflags );
271294 }
272295
273296 /* Set up instrumentation for this node if requested */
0 commit comments