aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/setrefs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/plan/setrefs.c')
-rw-r--r--src/backend/optimizer/plan/setrefs.c88
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);