aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Haas <rhaas@postgresql.org>2016-06-03 14:27:33 -0400
committerRobert Haas <rhaas@postgresql.org>2016-06-03 14:27:33 -0400
commit04ae11f62e643e07c411c4935ea6af46cb112aa9 (patch)
tree7c51c3bf58eb6f04c49c1e59c5c44ac1a81b7976
parentcac8321970e9fd18730b2ca4e15f2c61dd326053 (diff)
downloadpostgresql-04ae11f62e643e07c411c4935ea6af46cb112aa9.tar.gz
postgresql-04ae11f62e643e07c411c4935ea6af46cb112aa9.zip
Remove bogus code to apply PathTargets to partial paths.
The partial paths that get modified may already have been used as part of a GatherPath which appears in the path list, so modifying them is not a good idea at this stage - especially because this code has no check that the PathTarget is in fact parallel-safe. When partial aggregation is being performed, this is actually harmless because we'll end up replacing the pathtargets here with the correct ones within create_grouping_paths(). But if we've got a query tree containing only scan/join operations then this can result in incorrectly pushing down parallel-restricted target list entries. If those are, for example, references to subqueries, that can crash the server; but it's wrong in any event. Amit Kapila
-rw-r--r--src/backend/optimizer/plan/planner.c13
1 files changed, 0 insertions, 13 deletions
diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
index 75d93c08db2..b1554cb8390 100644
--- a/src/backend/optimizer/plan/planner.c
+++ b/src/backend/optimizer/plan/planner.c
@@ -1759,19 +1759,6 @@ grouping_planner(PlannerInfo *root, bool inheritance_update,
}
/*
- * Likewise for any partial paths, although this case is simpler, since
- * we don't track the cheapest path.
- */
- foreach(lc, current_rel->partial_pathlist)
- {
- Path *subpath = (Path *) lfirst(lc);
-
- Assert(subpath->param_info == NULL);
- lfirst(lc) = apply_projection_to_path(root, current_rel,
- subpath, scanjoin_target);
- }
-
- /*
* Save the various upper-rel PathTargets we just computed into
* root->upper_targets[]. The core code doesn't use this, but it
* provides a convenient place for extensions to get at the info. For