aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/executor/nodeMergejoin.c13
-rw-r--r--src/backend/optimizer/plan/createplan.c14
-rw-r--r--src/include/nodes/plannodes.h2
3 files changed, 12 insertions, 17 deletions
diff --git a/src/backend/executor/nodeMergejoin.c b/src/backend/executor/nodeMergejoin.c
index 29c54fcd753..b593905978b 100644
--- a/src/backend/executor/nodeMergejoin.c
+++ b/src/backend/executor/nodeMergejoin.c
@@ -175,7 +175,7 @@ static MergeJoinClause
MJExamineQuals(List *mergeclauses,
Oid *mergefamilies,
Oid *mergecollations,
- int *mergestrategies,
+ bool *mergereversals,
bool *mergenullsfirst,
PlanState *parent)
{
@@ -193,7 +193,7 @@ MJExamineQuals(List *mergeclauses,
MergeJoinClause clause = &clauses[iClause];
Oid opfamily = mergefamilies[iClause];
Oid collation = mergecollations[iClause];
- StrategyNumber opstrategy = mergestrategies[iClause];
+ bool reversed = mergereversals[iClause];
bool nulls_first = mergenullsfirst[iClause];
int op_strategy;
Oid op_lefttype;
@@ -212,12 +212,7 @@ MJExamineQuals(List *mergeclauses,
/* Set up sort support data */
clause->ssup.ssup_cxt = CurrentMemoryContext;
clause->ssup.ssup_collation = collation;
- if (opstrategy == BTLessStrategyNumber)
- clause->ssup.ssup_reverse = false;
- else if (opstrategy == BTGreaterStrategyNumber)
- clause->ssup.ssup_reverse = true;
- else /* planner screwed up */
- elog(ERROR, "unsupported mergejoin strategy %d", opstrategy);
+ clause->ssup.ssup_reverse = reversed;
clause->ssup.ssup_nulls_first = nulls_first;
/* Extract the operator's declared left/right datatypes */
@@ -1608,7 +1603,7 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate, int eflags)
mergestate->mj_Clauses = MJExamineQuals(node->mergeclauses,
node->mergeFamilies,
node->mergeCollations,
- node->mergeStrategies,
+ node->mergeReversals,
node->mergeNullsFirst,
(PlanState *) mergestate);
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;
diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
index 62cd6a6666e..52f29bcdb69 100644
--- a/src/include/nodes/plannodes.h
+++ b/src/include/nodes/plannodes.h
@@ -850,7 +850,7 @@ typedef struct MergeJoin
Oid *mergeCollations pg_node_attr(array_size(mergeclauses));
/* per-clause ordering (ASC or DESC) */
- int *mergeStrategies pg_node_attr(array_size(mergeclauses));
+ bool *mergeReversals pg_node_attr(array_size(mergeclauses));
/* per-clause nulls ordering */
bool *mergeNullsFirst pg_node_attr(array_size(mergeclauses));