mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
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
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user