|
48 | 48 |
|
49 | 49 | static bool can_minmax_aggs(PlannerInfo *root, List **context); |
50 | 50 | static bool build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, |
51 | | - Oid eqop, Oid sortop, bool nulls_first); |
| 51 | + Oid eqop, Oid sortop, bool reverse_sort, |
| 52 | + bool nulls_first); |
52 | 53 | static void minmax_qp_callback(PlannerInfo *root, void *extra); |
53 | 54 | static Oid fetch_agg_sort_op(Oid aggfnoid); |
54 | 55 |
|
@@ -172,9 +173,9 @@ preprocess_minmax_aggregates(PlannerInfo *root) |
172 | 173 | * FIRST is more likely to be available if the operator is a |
173 | 174 | * reverse-sort operator, so try that first if reverse. |
174 | 175 | */ |
175 | | - if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse)) |
| 176 | + if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse, reverse)) |
176 | 177 | continue; |
177 | | - if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, !reverse)) |
| 178 | + if (build_minmax_path(root, mminfo, eqop, mminfo->aggsortop, reverse, !reverse)) |
178 | 179 | continue; |
179 | 180 |
|
180 | 181 | /* No indexable path for this aggregate, so fail */ |
@@ -314,7 +315,7 @@ can_minmax_aggs(PlannerInfo *root, List **context) |
314 | 315 | */ |
315 | 316 | static bool |
316 | 317 | build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, |
317 | | - Oid eqop, Oid sortop, bool nulls_first) |
| 318 | + Oid eqop, Oid sortop, bool reverse_sort, bool nulls_first) |
318 | 319 | { |
319 | 320 | PlannerInfo *subroot; |
320 | 321 | Query *parse; |
@@ -399,6 +400,7 @@ build_minmax_path(PlannerInfo *root, MinMaxAggInfo *mminfo, |
399 | 400 | sortcl->tleSortGroupRef = assignSortGroupRef(tle, subroot->processed_tlist); |
400 | 401 | sortcl->eqop = eqop; |
401 | 402 | sortcl->sortop = sortop; |
| 403 | + sortcl->reverse_sort = reverse_sort; |
402 | 404 | sortcl->nulls_first = nulls_first; |
403 | 405 | sortcl->hashable = false; /* no need to make this accurate */ |
404 | 406 | parse->sortClause = list_make1(sortcl); |
|
0 commit comments