From f98efe6c2cd5bf4e3e9c5ae6acabc3901c046bd5 Mon Sep 17 00:00:00 2001 From: Sait Talha Nisanci Date: Mon, 5 Jul 2021 14:45:54 +0300 Subject: [PATCH] wip --- .../relation_restriction_equivalence.c | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/planner/relation_restriction_equivalence.c b/src/backend/distributed/planner/relation_restriction_equivalence.c index 648b5957c..42642e257 100644 --- a/src/backend/distributed/planner/relation_restriction_equivalence.c +++ b/src/backend/distributed/planner/relation_restriction_equivalence.c @@ -1793,13 +1793,35 @@ RelationRestrictionPartitionKeyIndex(Query* originalQuery, RelationRestriction * partitionKeyTargetAttrIndex++; if (!targetEntry->resjunk && - IsA(targetExpression, Var) && - IsPartitionColumn(targetExpression, relationPlannerParseQuery)) + IsA(targetExpression, Var)) { Var *targetColumn = (Var *) targetExpression; + + // elog(WARNING, "%d %d", targetColumn->varno, targetColumn->varattno); + + if (!IsPartitionColumn(targetExpression, relationPlannerParseQuery)) { + continue; + } + + Oid relationId = InvalidOid; + Var *column = NULL; + RangeTblEntry* res = (RangeTblEntry*) list_nth(relationPlannerParseQuery->rtable, targetColumn->varno - 1); + if (res->rtekind == RTE_JOIN) { + Var* cur = NULL; + int index = 1; + foreach_ptr(cur, res->joinaliasvars) { + if (index == targetColumn->varattno) { + res = (RangeTblEntry*) list_nth(relationPlannerParseQuery->rtable, cur->varno - 1); + break; + } + index++; + } + } if (res->rtekind == RTE_RELATION && GetRTEIdentity(res) == findRteIdentityContext->rteIdentity) { + FindReferencedTableColumn(targetExpression, NIL, relationPlannerParseQuery, &relationId, &column); + targetColumn = column; *partitionKeyIndex = partitionKeyTargetAttrIndex; return (Var*)copyObject(targetColumn); }