mirror of
https://github.com/postgres/postgres.git
synced 2025-11-19 13:42:17 +03:00
Rename find_em_expr_usable_for_sorting_rel.
I didn't particularly like this function name, as it fails to express what's going on. Also, returning the sort expression alone isn't too helpful --- typically, a caller would also need some other fields of the EquivalenceMember. But the sole caller really only needs a bool result, so let's make it "bool relation_can_be_sorted_early()". Discussion: https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com
This commit is contained in:
@@ -961,18 +961,21 @@ find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel)
|
||||
}
|
||||
|
||||
/*
|
||||
* Find an equivalence class member expression that can be used to build
|
||||
* a sort node using the provided relation; return NULL if no candidate.
|
||||
* relation_can_be_sorted_early
|
||||
* Can this relation be sorted on this EC before the final output step?
|
||||
*
|
||||
* To succeed, we must find an EC member that prepare_sort_from_pathkeys knows
|
||||
* how to sort on, given the rel's reltarget as input. There are also a few
|
||||
* additional constraints based on the fact that the desired sort will be done
|
||||
* within the scan/join part of the plan. Also, non-parallel-safe expressions
|
||||
* are ignored if 'require_parallel_safe'.
|
||||
* "early", within the scan/join part of the plan. Also, non-parallel-safe
|
||||
* expressions are ignored if 'require_parallel_safe'.
|
||||
*
|
||||
* At some point we might want to return the identified EquivalenceMember,
|
||||
* but for now, callers only want to know if there is one.
|
||||
*/
|
||||
Expr *
|
||||
find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
|
||||
RelOptInfo *rel, bool require_parallel_safe)
|
||||
bool
|
||||
relation_can_be_sorted_early(PlannerInfo *root, RelOptInfo *rel,
|
||||
EquivalenceClass *ec, bool require_parallel_safe)
|
||||
{
|
||||
PathTarget *target = rel->reltarget;
|
||||
EquivalenceMember *em;
|
||||
@@ -982,7 +985,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
|
||||
* Reject volatile ECs immediately; such sorts must always be postponed.
|
||||
*/
|
||||
if (ec->ec_has_volatile)
|
||||
return NULL;
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Try to find an EM directly matching some reltarget member.
|
||||
@@ -1012,7 +1015,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
|
||||
!is_parallel_safe(root, (Node *) em->em_expr))
|
||||
continue;
|
||||
|
||||
return em->em_expr;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1021,7 +1024,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
|
||||
em = find_computable_ec_member(root, ec, target->exprs, rel->relids,
|
||||
require_parallel_safe);
|
||||
if (!em)
|
||||
return NULL;
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Reject expressions involving set-returning functions, as those can't be
|
||||
@@ -1030,9 +1033,9 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
|
||||
* belong to multi-member ECs.)
|
||||
*/
|
||||
if (IS_SRF_CALL((Node *) em->em_expr))
|
||||
return NULL;
|
||||
return false;
|
||||
|
||||
return em->em_expr;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user