diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 06ad856eac..a0f2390334 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -3900,7 +3900,8 @@ consider_groupingsets_paths(PlannerInfo *root, (List *) parse->havingQual, strat, new_rollups, - agg_costs)); + agg_costs, + dNumGroups)); return; } @@ -4058,7 +4059,8 @@ consider_groupingsets_paths(PlannerInfo *root, (List *) parse->havingQual, AGG_MIXED, rollups, - agg_costs)); + agg_costs, + dNumGroups)); } } @@ -4073,7 +4075,8 @@ consider_groupingsets_paths(PlannerInfo *root, (List *) parse->havingQual, AGG_SORTED, gd->rollups, - agg_costs)); + agg_costs, + dNumGroups)); } /* diff --git a/src/backend/optimizer/util/pathnode.c b/src/backend/optimizer/util/pathnode.c index 483c4f4137..e2a3c110ce 100644 --- a/src/backend/optimizer/util/pathnode.c +++ b/src/backend/optimizer/util/pathnode.c @@ -3158,6 +3158,7 @@ create_agg_path(PlannerInfo *root, * 'having_qual' is the HAVING quals if any * 'rollups' is a list of RollupData nodes * 'agg_costs' contains cost info about the aggregate functions to be computed + * 'numGroups' is the estimated total number of groups */ GroupingSetsPath * create_groupingsets_path(PlannerInfo *root, @@ -3166,7 +3167,8 @@ create_groupingsets_path(PlannerInfo *root, List *having_qual, AggStrategy aggstrategy, List *rollups, - const AggClauseCosts *agg_costs) + const AggClauseCosts *agg_costs, + double numGroups) { GroupingSetsPath *pathnode = makeNode(GroupingSetsPath); PathTarget *target = rel->reltarget; diff --git a/src/include/optimizer/pathnode.h b/src/include/optimizer/pathnode.h index 635cc0a0a6..d2d46b15df 100644 --- a/src/include/optimizer/pathnode.h +++ b/src/include/optimizer/pathnode.h @@ -233,7 +233,8 @@ extern GroupingSetsPath *create_groupingsets_path(PlannerInfo *root, List *having_qual, AggStrategy aggstrategy, List *rollups, - const AggClauseCosts *agg_costs); + const AggClauseCosts *agg_costs, + double numGroups); extern MinMaxAggPath *create_minmaxagg_path(PlannerInfo *root, RelOptInfo *rel, PathTarget *target,