diff options
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r-- | src/backend/optimizer/plan/setrefs.c | 88 |
1 files changed, 30 insertions, 58 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c index 1812db7f2fd..f6f8a79354c 100644 --- a/src/backend/optimizer/plan/setrefs.c +++ b/src/backend/optimizer/plan/setrefs.c @@ -350,29 +350,6 @@ set_plan_references(PlannerInfo *root, Plan *plan) palloc0(list_length(glob->subplans) * sizeof(bool)); } - /* Also fix up the information in PartitionPruneInfos. */ - foreach(lc, root->partPruneInfos) - { - PartitionPruneInfo *pruneinfo = lfirst(lc); - ListCell *l; - - pruneinfo->root_parent_relids = - offset_relid_set(pruneinfo->root_parent_relids, rtoffset); - foreach(l, pruneinfo->prune_infos) - { - List *prune_infos = lfirst(l); - ListCell *l2; - - foreach(l2, prune_infos) - { - PartitionedRelPruneInfo *pinfo = lfirst(l2); - - /* RT index of the table to which the pinfo belongs. */ - pinfo->rtindex += rtoffset; - } - } - } - /* Now fix the Plan tree */ result = set_plan_refs(root, plan, rtoffset); @@ -1729,29 +1706,6 @@ set_customscan_references(PlannerInfo *root, } /* - * register_partpruneinfo - * Subroutine for set_append_references and set_mergeappend_references - * - * Add the PartitionPruneInfo from root->partPruneInfos at the given index - * into PlannerGlobal->partPruneInfos and return its index there. - */ -static int -register_partpruneinfo(PlannerInfo *root, int part_prune_index) -{ - PlannerGlobal *glob = root->glob; - PartitionPruneInfo *pruneinfo; - - Assert(part_prune_index >= 0 && - part_prune_index < list_length(root->partPruneInfos)); - pruneinfo = list_nth_node(PartitionPruneInfo, root->partPruneInfos, - part_prune_index); - - glob->partPruneInfos = lappend(glob->partPruneInfos, pruneinfo); - - return list_length(glob->partPruneInfos) - 1; -} - -/* * set_append_references * Do set_plan_references processing on an Append * @@ -1803,12 +1757,21 @@ set_append_references(PlannerInfo *root, aplan->apprelids = offset_relid_set(aplan->apprelids, rtoffset); - /* - * Add PartitionPruneInfo, if any, to PlannerGlobal and update the index. - */ - if (aplan->part_prune_index >= 0) - aplan->part_prune_index = - register_partpruneinfo(root, aplan->part_prune_index); + if (aplan->part_prune_info) + { + foreach(l, aplan->part_prune_info->prune_infos) + { + List *prune_infos = lfirst(l); + ListCell *l2; + + foreach(l2, prune_infos) + { + PartitionedRelPruneInfo *pinfo = lfirst(l2); + + pinfo->rtindex += rtoffset; + } + } + } /* We don't need to recurse to lefttree or righttree ... */ Assert(aplan->plan.lefttree == NULL); @@ -1870,12 +1833,21 @@ set_mergeappend_references(PlannerInfo *root, mplan->apprelids = offset_relid_set(mplan->apprelids, rtoffset); - /* - * Add PartitionPruneInfo, if any, to PlannerGlobal and update the index. - */ - if (mplan->part_prune_index >= 0) - mplan->part_prune_index = - register_partpruneinfo(root, mplan->part_prune_index); + if (mplan->part_prune_info) + { + foreach(l, mplan->part_prune_info->prune_infos) + { + List *prune_infos = lfirst(l); + ListCell *l2; + + foreach(l2, prune_infos) + { + PartitionedRelPruneInfo *pinfo = lfirst(l2); + + pinfo->rtindex += rtoffset; + } + } + } /* We don't need to recurse to lefttree or righttree ... */ Assert(mplan->plan.lefttree == NULL); |