Hi,all Regards, Zhang Mingli On Sep 6, 2022, 10:22 +0800, Richard Guo <guofengli...@gmail.com>, wrote: > > On Tue, Sep 6, 2022 at 1:18 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > > Zhang Mingli <zmlpostg...@gmail.com> writes: > > > Macro exec_subplan_get_plan is not used anymore. > > > Attach a patch to remove it. > > > > Hm, I wonder why it's not used anymore. Maybe we no longer need > > that list at all? If we do, should use of the macro be > > re-introduced in the accessors?
The PlannedStmt->subplans list is still used at several places. > Seems nowadays no one fetches the Plan from PlannedStmt->subplans with a > certain plan_id any more. Previously back in eab6b8b2 where this macro > was introduced, it was used in explain_outNode and ExecInitSubPlan. > > I find a similar macro, planner_subplan_get_plan, who fetches the Plan > from glob->subplans. We can use it in the codes where needed. For > example, in the new function SS_make_multiexprs_unique. > > /* Found one, get the associated subplan */ > - plan = (Plan *) list_nth(root->glob->subplans, splan->plan_id - 1); > + plan = planner_subplan_get_plan(root, splan); > > Thanks > Richard Yeah, searched on history and found: exec_subplan_get_plan was once used in ExecInitSubPlan() to create planstate. ``` Plan *plan = exec_subplan_get_plan(estate->es_plannedstmt, subplan); ... node->planstate = ExecInitNode(plan, sp_estate, eflags); ``` And now in ExecInitSubPlan(), planstate comes from es_subplanstates. ``` /* Link the SubPlanState to already-initialized subplan */ sstate->planstate = (PlanState *) list_nth(estate->es_subplanstates, subplan->plan_id - 1); ``` And estate->es_subplanstates is evaluated through a for-range of subplans list at some functions. ``` foreach(l, plannedstmt->subplans) { ... estate->es_subplanstates = lappend(estate->es_subplanstates, subplanstate); } ```