mirror of
https://github.com/postgres/postgres.git
synced 2025-11-25 12:03:53 +03:00
Fix planner failure in some cases of sorting by an aggregate.
An oversight introduced by the incremental-sort patches caused "could not find pathkey item to sort" errors in some situations where a sort key involves an aggregate or window function. The basic problem here is that find_em_expr_usable_for_sorting_rel isn't properly modeling what prepare_sort_from_pathkeys will do later. Rather than hoping we can keep those functions in sync, let's refactor so that they actually share the code for identifying a suitable sort expression. With this refactoring, tlist.c's tlist_member_ignore_relabel is unused. I removed it in HEAD but left it in place in v13, in case any extensions are using it. Per report from Luc Vlaming. Back-patch to v13 where the problem arose. James Coleman and Tom Lane Discussion: https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com
This commit is contained in:
@@ -135,6 +135,14 @@ extern EquivalenceClass *get_eclass_for_sort_expr(PlannerInfo *root,
|
||||
Index sortref,
|
||||
Relids rel,
|
||||
bool create_it);
|
||||
extern EquivalenceMember *find_ec_member_matching_expr(EquivalenceClass *ec,
|
||||
Expr *expr,
|
||||
Relids relids);
|
||||
extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root,
|
||||
EquivalenceClass *ec,
|
||||
List *exprs,
|
||||
Relids relids,
|
||||
bool require_parallel_safe);
|
||||
extern Expr *find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel);
|
||||
extern Expr *find_em_expr_usable_for_sorting_rel(PlannerInfo *root,
|
||||
EquivalenceClass *ec,
|
||||
|
||||
Reference in New Issue
Block a user