Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc594f1a

Browse files
committed
Track scan reversals in MergeJoin
The MergeJoin struct was tracking "mergeStrategies", which were anarray of btree strategy numbers, purely for the purpose of comparingit later against btree strategies to determine if the scan directionwas forward or reverse. Change that. Instead, track"mergeReversals", an array of bool, to indicate the same without anunfortunate assumption that a strategy number refers specifically to abtree strategy.Author: Mark Dilger <mark.dilger@enterprisedb.com>Discussion:https://www.postgresql.org/message-id/flat/E72EAA49-354D-4C2E-8EB9-255197F55330@enterprisedb.com
1 parent0d2aa4d commitc594f1a

File tree

3 files changed

+12
-17
lines changed

3 files changed

+12
-17
lines changed

‎src/backend/executor/nodeMergejoin.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ static MergeJoinClause
175175
MJExamineQuals(List*mergeclauses,
176176
Oid*mergefamilies,
177177
Oid*mergecollations,
178-
int*mergestrategies,
178+
bool*mergereversals,
179179
bool*mergenullsfirst,
180180
PlanState*parent)
181181
{
@@ -193,7 +193,7 @@ MJExamineQuals(List *mergeclauses,
193193
MergeJoinClauseclause=&clauses[iClause];
194194
Oidopfamily=mergefamilies[iClause];
195195
Oidcollation=mergecollations[iClause];
196-
StrategyNumberopstrategy=mergestrategies[iClause];
196+
boolreversed=mergereversals[iClause];
197197
boolnulls_first=mergenullsfirst[iClause];
198198
intop_strategy;
199199
Oidop_lefttype;
@@ -212,12 +212,7 @@ MJExamineQuals(List *mergeclauses,
212212
/* Set up sort support data */
213213
clause->ssup.ssup_cxt=CurrentMemoryContext;
214214
clause->ssup.ssup_collation=collation;
215-
if (opstrategy==BTLessStrategyNumber)
216-
clause->ssup.ssup_reverse= false;
217-
elseif (opstrategy==BTGreaterStrategyNumber)
218-
clause->ssup.ssup_reverse= true;
219-
else/* planner screwed up */
220-
elog(ERROR,"unsupported mergejoin strategy %d",opstrategy);
215+
clause->ssup.ssup_reverse=reversed;
221216
clause->ssup.ssup_nulls_first=nulls_first;
222217

223218
/* Extract the operator's declared left/right datatypes */
@@ -1608,7 +1603,7 @@ ExecInitMergeJoin(MergeJoin *node, EState *estate, int eflags)
16081603
mergestate->mj_Clauses=MJExamineQuals(node->mergeclauses,
16091604
node->mergeFamilies,
16101605
node->mergeCollations,
1611-
node->mergeStrategies,
1606+
node->mergeReversals,
16121607
node->mergeNullsFirst,
16131608
(PlanState*)mergestate);
16141609

‎src/backend/optimizer/plan/createplan.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ static MergeJoin *make_mergejoin(List *tlist,
252252
List*mergeclauses,
253253
Oid*mergefamilies,
254254
Oid*mergecollations,
255-
int*mergestrategies,
255+
bool*mergereversals,
256256
bool*mergenullsfirst,
257257
Plan*lefttree,Plan*righttree,
258258
JoinTypejointype,boolinner_unique,
@@ -4451,7 +4451,7 @@ create_mergejoin_plan(PlannerInfo *root,
44514451
intnClauses;
44524452
Oid*mergefamilies;
44534453
Oid*mergecollations;
4454-
int*mergestrategies;
4454+
bool*mergereversals;
44554455
bool*mergenullsfirst;
44564456
PathKey*opathkey;
44574457
EquivalenceClass*opeclass;
@@ -4625,7 +4625,7 @@ create_mergejoin_plan(PlannerInfo *root,
46254625
Assert(nClauses==list_length(best_path->path_mergeclauses));
46264626
mergefamilies= (Oid*)palloc(nClauses*sizeof(Oid));
46274627
mergecollations= (Oid*)palloc(nClauses*sizeof(Oid));
4628-
mergestrategies= (int*)palloc(nClauses*sizeof(int));
4628+
mergereversals= (bool*)palloc(nClauses*sizeof(bool));
46294629
mergenullsfirst= (bool*)palloc(nClauses*sizeof(bool));
46304630

46314631
opathkey=NULL;
@@ -4752,7 +4752,7 @@ create_mergejoin_plan(PlannerInfo *root,
47524752
/* OK, save info for executor */
47534753
mergefamilies[i]=opathkey->pk_opfamily;
47544754
mergecollations[i]=opathkey->pk_eclass->ec_collation;
4755-
mergestrategies[i]=opathkey->pk_strategy;
4755+
mergereversals[i]=(opathkey->pk_strategy==BTGreaterStrategyNumber ? true : false);
47564756
mergenullsfirst[i]=opathkey->pk_nulls_first;
47574757
i++;
47584758
}
@@ -4772,7 +4772,7 @@ create_mergejoin_plan(PlannerInfo *root,
47724772
mergeclauses,
47734773
mergefamilies,
47744774
mergecollations,
4775-
mergestrategies,
4775+
mergereversals,
47764776
mergenullsfirst,
47774777
outer_plan,
47784778
inner_plan,
@@ -6104,7 +6104,7 @@ make_mergejoin(List *tlist,
61046104
List*mergeclauses,
61056105
Oid*mergefamilies,
61066106
Oid*mergecollations,
6107-
int*mergestrategies,
6107+
bool*mergereversals,
61086108
bool*mergenullsfirst,
61096109
Plan*lefttree,
61106110
Plan*righttree,
@@ -6123,7 +6123,7 @@ make_mergejoin(List *tlist,
61236123
node->mergeclauses=mergeclauses;
61246124
node->mergeFamilies=mergefamilies;
61256125
node->mergeCollations=mergecollations;
6126-
node->mergeStrategies=mergestrategies;
6126+
node->mergeReversals=mergereversals;
61276127
node->mergeNullsFirst=mergenullsfirst;
61286128
node->join.jointype=jointype;
61296129
node->join.inner_unique=inner_unique;

‎src/include/nodes/plannodes.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ typedef struct MergeJoin
850850
Oid*mergeCollationspg_node_attr(array_size(mergeclauses));
851851

852852
/* per-clause ordering (ASC or DESC) */
853-
int*mergeStrategiespg_node_attr(array_size(mergeclauses));
853+
bool*mergeReversalspg_node_attr(array_size(mergeclauses));
854854

855855
/* per-clause nulls ordering */
856856
bool*mergeNullsFirstpg_node_attr(array_size(mergeclauses));

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp