aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/planagg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/optimizer/plan/planagg.c')
-rw-r--r--src/backend/optimizer/plan/planagg.c10
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);