From c594f1ad2ba7cbe66e8ae98da4ffed06491d1082 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 14 Oct 2024 15:36:18 +0200 Subject: Track scan reversals in MergeJoin The MergeJoin struct was tracking "mergeStrategies", which were an array of btree strategy numbers, purely for the purpose of comparing it later against btree strategies to determine if the scan direction was forward or reverse. Change that. Instead, track "mergeReversals", an array of bool, to indicate the same without an unfortunate assumption that a strategy number refers specifically to a btree strategy. Author: Mark Dilger Discussion: https://www.postgresql.org/message-id/flat/E72EAA49-354D-4C2E-8EB9-255197F55330@enterprisedb.com --- src/backend/optimizer/plan/createplan.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'src/backend/optimizer/plan/createplan.c') diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index bd54a0d032d..f2ed0d81f61 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -252,7 +252,7 @@ static MergeJoin *make_mergejoin(List *tlist, List *mergeclauses, Oid *mergefamilies, Oid *mergecollations, - int *mergestrategies, + bool *mergereversals, bool *mergenullsfirst, Plan *lefttree, Plan *righttree, JoinType jointype, bool inner_unique, @@ -4451,7 +4451,7 @@ create_mergejoin_plan(PlannerInfo *root, int nClauses; Oid *mergefamilies; Oid *mergecollations; - int *mergestrategies; + bool *mergereversals; bool *mergenullsfirst; PathKey *opathkey; EquivalenceClass *opeclass; @@ -4625,7 +4625,7 @@ create_mergejoin_plan(PlannerInfo *root, Assert(nClauses == list_length(best_path->path_mergeclauses)); mergefamilies = (Oid *) palloc(nClauses * sizeof(Oid)); mergecollations = (Oid *) palloc(nClauses * sizeof(Oid)); - mergestrategies = (int *) palloc(nClauses * sizeof(int)); + mergereversals = (bool *) palloc(nClauses * sizeof(bool)); mergenullsfirst = (bool *) palloc(nClauses * sizeof(bool)); opathkey = NULL; @@ -4752,7 +4752,7 @@ create_mergejoin_plan(PlannerInfo *root, /* OK, save info for executor */ mergefamilies[i] = opathkey->pk_opfamily; mergecollations[i] = opathkey->pk_eclass->ec_collation; - mergestrategies[i] = opathkey->pk_strategy; + mergereversals[i] = (opathkey->pk_strategy == BTGreaterStrategyNumber ? true : false); mergenullsfirst[i] = opathkey->pk_nulls_first; i++; } @@ -4772,7 +4772,7 @@ create_mergejoin_plan(PlannerInfo *root, mergeclauses, mergefamilies, mergecollations, - mergestrategies, + mergereversals, mergenullsfirst, outer_plan, inner_plan, @@ -6104,7 +6104,7 @@ make_mergejoin(List *tlist, List *mergeclauses, Oid *mergefamilies, Oid *mergecollations, - int *mergestrategies, + bool *mergereversals, bool *mergenullsfirst, Plan *lefttree, Plan *righttree, @@ -6123,7 +6123,7 @@ make_mergejoin(List *tlist, node->mergeclauses = mergeclauses; node->mergeFamilies = mergefamilies; node->mergeCollations = mergecollations; - node->mergeStrategies = mergestrategies; + node->mergeReversals = mergereversals; node->mergeNullsFirst = mergenullsfirst; node->join.jointype = jointype; node->join.inner_unique = inner_unique; -- cgit v1.2.3