mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Revert "Move PartitionPruneInfo out of plan nodes into PlannedStmt"
This reverts commitec38694894and its fixup589bb81649. This change was intended to support query planning avoiding acquisition of locks on partitions that were going to be pruned; however, the overall project took a different direction at [1] and this bit is no longer needed. Put things back the way they were as agreed in [2], to avoid unnecessary complexity. Discussion: [1] https://postgr.es/m/4191508.1674157166@sss.pgh.pa.us Discussion: [2] https://postgr.es/m/20230502175409.kcoirxczpdha26wt@alvherre.pgsql
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -1728,29 +1705,6 @@ set_customscan_references(PlannerInfo *root,
|
||||
cscan->custom_relids = offset_relid_set(cscan->custom_relids, rtoffset);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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);
|
||||
|
||||
Reference in New Issue
Block a user