diff options
-rw-r--r-- | src/backend/executor/nodeMergejoin.c | 13 | ||||
-rw-r--r-- | src/backend/optimizer/plan/createplan.c | 14 | ||||
-rw-r--r-- | src/include/nodes/plannodes.h | 2 |
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)); |