Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7645376

Browse files
committed
Rename find_em_expr_usable_for_sorting_rel.
I didn't particularly like this function name, as it fails toexpress what's going on. Also, returning the sort expressionalone isn't too helpful --- typically, a caller would alsoneed some other fields of the EquivalenceMember. But thesole caller really only needs a bool result, so let's makeit "bool relation_can_be_sorted_early()".Discussion:https://postgr.es/m/91f3ec99-85a4-fa55-ea74-33f85a5c651f@swarm64.com
1 parent3753982 commit7645376

File tree

3 files changed

+28
-27
lines changed

3 files changed

+28
-27
lines changed

‎src/backend/optimizer/path/allpaths.c

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2697,20 +2697,19 @@ get_useful_pathkeys_for_relation(PlannerInfo *root, RelOptInfo *rel,
26972697
EquivalenceClass*pathkey_ec=pathkey->pk_eclass;
26982698

26992699
/*
2700-
* We can only build a sort for pathkeyswhich containan EC
2701-
*member in the current relation's target, so ignore any suffix
2702-
*of the list as soon as we find a pathkey without an EC member
2703-
*in the relation.
2700+
* We can only build a sort for pathkeysthat containa
2701+
*safe-to-compute-early EC member computable from the current
2702+
*relation's reltarget, so ignore the remainder of the list as
2703+
*soon as we find a pathkey without such a member.
27042704
*
2705-
* By still returning the prefix of the pathkeys list that does
2706-
* meet criteria of EC membership in the current relation, we
2707-
* enable not just an incremental sort on the entirety of
2708-
* query_pathkeys but also incremental sort below a JOIN.
2705+
* It's still worthwhile to return any prefix of the pathkeys list
2706+
* that meets this requirement, as we may be able to do an
2707+
* incremental sort.
27092708
*
2710-
* If requested, ensure the expression is parallelsafe too.
2709+
* If requested, ensure thesortexpression is parallel-safe too.
27112710
*/
2712-
if (!find_em_expr_usable_for_sorting_rel(root,pathkey_ec,rel,
2713-
require_parallel_safe))
2711+
if (!relation_can_be_sorted_early(root,rel,pathkey_ec,
2712+
require_parallel_safe))
27142713
break;
27152714

27162715
npathkeys++;

‎src/backend/optimizer/path/equivclass.c

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -961,18 +961,21 @@ find_em_expr_for_rel(EquivalenceClass *ec, RelOptInfo *rel)
961961
}
962962

963963
/*
964-
*Find an equivalence class member expression that can be used to build
965-
* a sort node using the provided relation; return NULL if no candidate.
964+
*relation_can_be_sorted_early
965+
*Can this relation be sorted on this EC before the final output step?
966966
*
967967
* To succeed, we must find an EC member that prepare_sort_from_pathkeys knows
968968
* how to sort on, given the rel's reltarget as input. There are also a few
969969
* additional constraints based on the fact that the desired sort will be done
970-
* within the scan/join part of the plan. Also, non-parallel-safe expressions
971-
* are ignored if 'require_parallel_safe'.
970+
* "early", within the scan/join part of the plan. Also, non-parallel-safe
971+
* expressions are ignored if 'require_parallel_safe'.
972+
*
973+
* At some point we might want to return the identified EquivalenceMember,
974+
* but for now, callers only want to know if there is one.
972975
*/
973-
Expr*
974-
find_em_expr_usable_for_sorting_rel(PlannerInfo*root,EquivalenceClass*ec,
975-
RelOptInfo*rel,boolrequire_parallel_safe)
976+
bool
977+
relation_can_be_sorted_early(PlannerInfo*root,RelOptInfo*rel,
978+
EquivalenceClass*ec,boolrequire_parallel_safe)
976979
{
977980
PathTarget*target=rel->reltarget;
978981
EquivalenceMember*em;
@@ -982,7 +985,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
982985
* Reject volatile ECs immediately; such sorts must always be postponed.
983986
*/
984987
if (ec->ec_has_volatile)
985-
returnNULL;
988+
returnfalse;
986989

987990
/*
988991
* 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,
10121015
!is_parallel_safe(root, (Node*)em->em_expr))
10131016
continue;
10141017

1015-
returnem->em_expr;
1018+
returntrue;
10161019
}
10171020

10181021
/*
@@ -1021,7 +1024,7 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
10211024
em=find_computable_ec_member(root,ec,target->exprs,rel->relids,
10221025
require_parallel_safe);
10231026
if (!em)
1024-
returnNULL;
1027+
returnfalse;
10251028

10261029
/*
10271030
* 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,
10301033
* belong to multi-member ECs.)
10311034
*/
10321035
if (IS_SRF_CALL((Node*)em->em_expr))
1033-
returnNULL;
1036+
returnfalse;
10341037

1035-
returnem->em_expr;
1038+
returntrue;
10361039
}
10371040

10381041
/*

‎src/include/optimizer/paths.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,9 @@ extern EquivalenceMember *find_computable_ec_member(PlannerInfo *root,
144144
Relidsrelids,
145145
boolrequire_parallel_safe);
146146
externExpr*find_em_expr_for_rel(EquivalenceClass*ec,RelOptInfo*rel);
147-
externExpr*find_em_expr_usable_for_sorting_rel(PlannerInfo*root,
148-
EquivalenceClass*ec,
149-
RelOptInfo*rel,
150-
boolrequire_parallel_safe);
147+
externboolrelation_can_be_sorted_early(PlannerInfo*root,RelOptInfo*rel,
148+
EquivalenceClass*ec,
149+
boolrequire_parallel_safe);
151150
externvoidgenerate_base_implied_equalities(PlannerInfo*root);
152151
externList*generate_join_implied_equalities(PlannerInfo*root,
153152
Relidsjoin_relids,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp