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

Commitaa97890

Browse files
committed
Don't search for volatile expr in find_em_expr_usable_for_sorting_rel
While prepare_sort_from_pathkeys has to be concerned about matching upa volatile expression to the proper tlist entry, we don't need to dothat in find_em_expr_usable_for_sorting_rel becausee such a sort willhave to be postponed anyway.Author: James ColemanReviewed-by: Tomas VondraBackpatch-through: 13Discussion:https://postgr.es/m/CAAaqYe8cK3g5CfLC4w7bs%3DhC0mSksZC%3DH5M8LSchj5e5OxpTAg%40mail.gmail.com
1 parentd016763 commitaa97890

File tree

1 file changed

+5
-23
lines changed

1 file changed

+5
-23
lines changed

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

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -813,8 +813,6 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
813813
{
814814
EquivalenceMember*em=lfirst(lc_em);
815815
Expr*em_expr=em->em_expr;
816-
PathTarget*target=rel->reltarget;
817-
ListCell*lc_target_expr;
818816

819817
/*
820818
* We shouldn't be trying to sort by an equivalence class that
@@ -848,30 +846,14 @@ find_em_expr_usable_for_sorting_rel(PlannerInfo *root, EquivalenceClass *ec,
848846
* As long as the expression isn't volatile then
849847
* prepare_sort_from_pathkeys is able to generate a new target entry,
850848
* so there's no need to verify that one already exists.
849+
*
850+
* While prepare_sort_from_pathkeys has to be concerned about matching
851+
* up a volatile expression to the proper tlist entry, it doesn't seem
852+
* valuable here to expend the work trying to find a match in the
853+
* target's exprs since such a sort will have to be postponed anyway.
851854
*/
852855
if (!ec->ec_has_volatile)
853856
returnem->em_expr;
854-
855-
/*
856-
* If, however, it's volatile, we have to verify that the
857-
* equivalence member's expr is already generated in the
858-
* relation's target (we do strip relabels first from both
859-
* expressions, which is cheap and might allow us to match
860-
* more expressions).
861-
*/
862-
while (em_expr&&IsA(em_expr,RelabelType))
863-
em_expr= ((RelabelType*)em_expr)->arg;
864-
865-
foreach(lc_target_expr,target->exprs)
866-
{
867-
Expr*target_expr=lfirst(lc_target_expr);
868-
869-
while (target_expr&&IsA(target_expr,RelabelType))
870-
target_expr= ((RelabelType*)target_expr)->arg;
871-
872-
if (equal(target_expr,em_expr))
873-
returnem->em_expr;
874-
}
875857
}
876858

877859
/* We didn't find any suitable equivalence class expression */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp