|
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