From bc20920252726dda9a70cabfaf480747ea700931 Mon Sep 17 00:00:00 2001 From: Sait Talha Nisanci Date: Fri, 29 May 2020 22:22:17 +0300 Subject: [PATCH] introduce SetJoinRelatedColumnsCompat PG13 uses joinmergedcols, joinleftcols and joinrightcols for finding join order now. There relevant fields are set on citus side. Postgres side commit: 9ce77d75c5ab094637cc4a446296dc3be6e3c221 --- .../planner/multi_physical_planner.c | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index 38fd3ed61..c82239db8 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -130,6 +130,8 @@ static List * QuerySelectClauseList(MultiNode *multiNode); static List * QueryFromList(List *rangeTableList); static Node * QueryJoinTree(MultiNode *multiNode, List *dependentJobList, List **rangeTableList); +static void SetJoinRelatedColumnsCompat(RangeTblEntry *rangeTableEntry, int joinMergedCols, + List *leftColumnVars, List *rightColumnVars); static RangeTblEntry * JoinRangeTableEntry(JoinExpr *joinExpr, List *dependentJobList, List *rangeTableList); static int ExtractRangeTableId(Node *node); @@ -1260,9 +1262,33 @@ JoinRangeTableEntry(JoinExpr *joinExpr, List *dependentJobList, List *rangeTable rangeTableEntry->eref->colnames = joinedColumnNames; rangeTableEntry->joinaliasvars = joinedColumnVars; + SetJoinRelatedColumnsCompat(rangeTableEntry, list_length(joinExpr->usingClause), + leftColumnVars, rightColumnVars); + return rangeTableEntry; } +static void SetJoinRelatedColumnsCompat(RangeTblEntry *rangeTableEntry, int joinMergedCols, + List *leftColumnVars, List *rightColumnVars) { + #if PG_VERSION_NUM >= PG_VERSION_13 + + rangeTableEntry->joinmergedcols = joinMergedCols; + + Var* var = NULL; + List* joinleftcols = NIL; + foreach_ptr(var, leftColumnVars) { + joinleftcols = lappend_int(joinleftcols, var->varno); + } + + List* joinrightcols = NIL; + foreach_ptr(var, rightColumnVars) { + joinrightcols = lappend_int(joinrightcols, var->varno); + } + + rangeTableEntry->joinleftcols = joinleftcols; + rangeTableEntry->joinrightcols = joinrightcols; + #endif +} /* * ExtractRangeTableId gets the range table id from a node that could