diff options
Diffstat (limited to 'src/backend/optimizer/plan/planagg.c')
-rw-r--r-- | src/backend/optimizer/plan/planagg.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/backend/optimizer/plan/planagg.c b/src/backend/optimizer/plan/planagg.c index afb5445b77b..dbcd3b9a0a0 100644 --- a/src/backend/optimizer/plan/planagg.c +++ b/src/backend/optimizer/plan/planagg.c @@ -48,7 +48,8 @@ static bool can_minmax_aggs(PlannerInfo *root, List **context); static bool build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, - Oid eqop, Oid sortop, bool nulls_first); + Oid eqop, Oid sortop, bool reverse_sort, + bool nulls_first); static void minmax_qp_callback(PlannerInfo *root, void *extra); static Oid fetch_agg_sort_op(Oid aggfnoid); @@ -172,9 +173,9 @@ preprocess_minmax_aggregates(PlannerInfo *root) * FIRST is more likely to be available if the operator is a * reverse-sort operator, so try that first if reverse. */ - if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse)) + if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse, reverse)) continue; - if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, !reverse)) + if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse, !reverse)) continue; /* No indexable path for this aggregate, so fail */ @@ -314,7 +315,7 @@ can_minmax_aggs(PlannerInfo *root, List **context) */ static bool build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, - Oid eqop, Oid sortop, bool nulls_first) + Oid eqop, Oid sortop, bool reverse_sort, bool nulls_first) { PlannerInfo *subroot; Query *parse; @@ -399,6 +400,7 @@ build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, sortcl->tleSortGroupRef = assignSortGroupRef(tle, subroot->processed_tlist); sortcl->eqop = eqop; sortcl->sortop = sortop; + sortcl->reverse_sort = reverse_sort; sortcl->nulls_first = nulls_first; sortcl->hashable = false; /* no need to make this accurate */ parse->sortClause = list_make1(sortcl); |