From 0f829fa3a3e7a0ea6b2c9155784d7976339ec963 Mon Sep 17 00:00:00 2001 From: test Date: Tue, 9 Jun 2026 00:06:00 +0200 Subject: [PATCH v2 1/6] Tom's patch --- src/backend/optimizer/path/equivclass.c | 3 ++- src/backend/optimizer/path/pathkeys.c | 15 ++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/backend/optimizer/path/equivclass.c b/src/backend/optimizer/path/equivclass.c index e3697df51a2..1ee6398087e 100644 --- a/src/backend/optimizer/path/equivclass.c +++ b/src/backend/optimizer/path/equivclass.c @@ -1602,7 +1602,7 @@ generate_join_implied_equalities(PlannerInfo *root, while ((i = bms_next_member(matching_ecs, i)) >= 0) { EquivalenceClass *ec = (EquivalenceClass *) list_nth(root->eq_classes, i); - List *sublist = NIL; + List *sublist; /* ECs containing consts do not need any further enforcement */ if (ec->ec_has_const) @@ -1632,6 +1632,7 @@ generate_join_implied_equalities(PlannerInfo *root, inner_rel); result = list_concat(result, sublist); + list_free(sublist); } return result; diff --git a/src/backend/optimizer/path/pathkeys.c b/src/backend/optimizer/path/pathkeys.c index 5eb71635d15..978ac1240d7 100644 --- a/src/backend/optimizer/path/pathkeys.c +++ b/src/backend/optimizer/path/pathkeys.c @@ -1560,7 +1560,7 @@ find_mergeclauses_for_outer_pathkeys(PlannerInfo *root, { PathKey *pathkey = (PathKey *) lfirst(i); EquivalenceClass *pathkey_ec = pathkey->pk_eclass; - List *matched_restrictinfos = NIL; + bool found_clauses = false; ListCell *j; /*---------- @@ -1608,7 +1608,10 @@ find_mergeclauses_for_outer_pathkeys(PlannerInfo *root, clause_ec = rinfo->outer_is_left ? rinfo->left_ec : rinfo->right_ec; if (clause_ec == pathkey_ec) - matched_restrictinfos = lappend(matched_restrictinfos, rinfo); + { + mergeclauses = lappend(mergeclauses, rinfo); + found_clauses = true; + } } /* @@ -1616,14 +1619,8 @@ find_mergeclauses_for_outer_pathkeys(PlannerInfo *root, * sort-key positions in the pathkeys are useless. (But we can still * mergejoin if we found at least one mergeclause.) */ - if (matched_restrictinfos == NIL) + if (!found_clauses) break; - - /* - * If we did find usable mergeclause(s) for this sort-key position, - * add them to result list. - */ - mergeclauses = list_concat(mergeclauses, matched_restrictinfos); } return mergeclauses; -- 2.54.0