From 2e68203b6b3360ab4da0484a6461004e59b3109b Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Wed, 6 Apr 2016 06:00:39 -0700 Subject: [PATCH] CoPartitionedTables works with hash partitioning as well --- .../distributed/planner/multi_logical_optimizer.c | 15 ++++++++++++--- .../distributed/planner/multi_physical_planner.c | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/backend/distributed/planner/multi_logical_optimizer.c b/src/backend/distributed/planner/multi_logical_optimizer.c index 916c0500b..b947b1fc2 100644 --- a/src/backend/distributed/planner/multi_logical_optimizer.c +++ b/src/backend/distributed/planner/multi_logical_optimizer.c @@ -139,8 +139,10 @@ static bool JoinOnPartitionColumn(Query *query); static void ErrorIfUnsupportedShardDistribution(Query *query); static List * RelationIdList(Query *query); static bool CoPartitionedTables(Oid firstRelationId, Oid secondRelationId); -static bool ShardIntervalsEqual(FmgrInfo *comparisonFunction, ShardInterval *firstInterval, +static bool ShardIntervalsEqual(FmgrInfo *comparisonFunction, + ShardInterval *firstInterval, ShardInterval *secondInterval); + static void ErrorIfUnsupportedFilters(Query *subquery); static bool EqualOpExpressionLists(List *firstOpExpressionList, List *secondOpExpressionList); @@ -3473,7 +3475,6 @@ RelationIdList(Query *query) return relationIdList; } - /* * CoPartitionedTables checks if given two distributed tables have 1-to-1 shard * partitioning. It uses shard interval array that are sorted on interval minimum @@ -3506,7 +3507,15 @@ CoPartitionedTables(Oid firstRelationId, Oid secondRelationId) return true; } - typeId = sortedFirstIntervalArray[0].valueTypeId; + if (firstTableCache->partitionMethod == DISTRIBUTE_BY_HASH) + { + typeId = INT4OID; + } + else + { + typeId = sortedFirstIntervalArray[0].valueTypeId; + } + comparisonFunction = GetFunctionInfo(typeId, BTREE_AM_OID, BTORDER_PROC); for (intervalIndex = 0; intervalIndex < firstListShardCount; intervalIndex++) diff --git a/src/backend/distributed/planner/multi_physical_planner.c b/src/backend/distributed/planner/multi_physical_planner.c index 41689c466..94a70448c 100644 --- a/src/backend/distributed/planner/multi_physical_planner.c +++ b/src/backend/distributed/planner/multi_physical_planner.c @@ -2102,7 +2102,7 @@ SubquerySqlTaskList(Job *job) * traffic. */ if (anchorRangeTableId == 0 || prunedTableSize > maxPrunedTableSize){ - maxTableSize = prunedTableSize; + maxPrunedTableSize = prunedTableSize; anchorRangeTableId = tableId; }