From 0909f45df69206af26d87d3d2b92eb1e3866743f Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 6 Mar 2018 13:18:08 -0500 Subject: [PATCH 1/3] Tidy up calls to add_paths_to_partial_grouping_rel. - Move Assert() from callers into add_paths_to_partial_grouping_rel. - Don't bother to Assert() anything about agg_final_costs; it's not passed anyway. - Add some comments. --- src/backend/optimizer/plan/planner.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index e9b60584bb..a3c4e106ef 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -3839,25 +3839,30 @@ create_grouping_paths(PlannerInfo *root, agg_partial_costs, agg_final_costs, gd, can_sort, can_hash, havingQual, isPartialAgg); + /* + * Try parallel aggregation, if possible. This produces only partially + * grouped paths, since the same group could be produced by more than one + * worker. + */ if (try_parallel_aggregation) - { - Assert(agg_partial_costs && agg_final_costs); add_paths_to_partial_grouping_rel(root, input_rel, partially_grouped_rel, agg_partial_costs, gd, can_sort, can_hash, true, isPartialAgg); - } + /* + * Now generate non-partial paths. When isPartialAgg = true, we're + * generating paths for a child rel whose partition keys are not contained + * in the grouping keys, so we can only generate partially grouped paths. + * Otherwise, we can do complete grouping. + */ if (isPartialAgg) - { - Assert(agg_partial_costs && agg_final_costs); add_paths_to_partial_grouping_rel(root, input_rel, partially_grouped_rel, agg_partial_costs, gd, can_sort, can_hash, false, true); - } else { double dNumGroups; @@ -6320,6 +6325,8 @@ add_paths_to_partial_grouping_rel(PlannerInfo *root, double dNumPartialGroups = 0; ListCell *lc; + Assert(agg_partial_costs != NULL); + /* Get either total or partial cheapest path */ cheapest_path = use_partial_pathlist ? linitial(input_rel->partial_pathlist) : input_rel->cheapest_total_path; -- 2.14.3 (Apple Git-98)