diff options
author | Peter Eisentraut <peter@eisentraut.org> | 2024-10-14 15:36:18 +0200 |
---|---|---|
committer | Peter Eisentraut <peter@eisentraut.org> | 2024-10-14 15:36:18 +0200 |
commit | c594f1ad2ba7cbe66e8ae98da4ffed06491d1082 (patch) | |
tree | 12d7f1656a8c301219a0ec36a88d483e2f2879ca /src/backend/optimizer/plan/createplan.c | |
parent | 0d2aa4d4937bb0500823edfc7d620f4e5fa45b9c (diff) | |
download | postgresql-c594f1ad2ba7cbe66e8ae98da4ffed06491d1082.tar.gz postgresql-c594f1ad2ba7cbe66e8ae98da4ffed06491d1082.zip |
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 <mark.dilger@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/E72EAA49-354D-4C2E-8EB9-255197F55330@enterprisedb.com
Diffstat (limited to 'src/backend/optimizer/plan/createplan.c')
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 14 |
1 files changed, 7 insertions, 7 deletions
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; |