From b45c5a8be0f5c0babfd6af86b9d06bdd76d15e00 Mon Sep 17 00:00:00 2001 From: Karol Sobczak Date: Thu, 11 Oct 2018 16:25:46 +0200 Subject: [PATCH] Extract addJoinsWithDifferentDistributions method --- .../rule/DetermineJoinDistributionType.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java index cf898b36e5b0..9059e7fcf248 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java @@ -92,23 +92,10 @@ public static boolean canReplicate(JoinNode joinNode, Context context) private PlanNode getCostBasedJoin(JoinNode joinNode, Context context) { - CostProvider costProvider = context.getCostProvider(); List possibleJoinNodes = new ArrayList<>(); - if (!mustPartition(joinNode) && canReplicate(joinNode, context)) { - possibleJoinNodes.add(getJoinNodeWithCost(costProvider, joinNode.withDistributionType(REPLICATED))); - } - if (!mustReplicate(joinNode, context)) { - possibleJoinNodes.add(getJoinNodeWithCost(costProvider, joinNode.withDistributionType(PARTITIONED))); - } - - JoinNode flipped = joinNode.flipChildren(); - if (!mustPartition(flipped) && canReplicate(flipped, context)) { - possibleJoinNodes.add(getJoinNodeWithCost(costProvider, flipped.withDistributionType(REPLICATED))); - } - if (!mustReplicate(flipped, context)) { - possibleJoinNodes.add(getJoinNodeWithCost(costProvider, flipped.withDistributionType(PARTITIONED))); - } + addJoinsWithDifferentDistributions(joinNode, possibleJoinNodes, context); + addJoinsWithDifferentDistributions(joinNode.flipChildren(), possibleJoinNodes, context); if (possibleJoinNodes.stream().anyMatch(result -> result.getCost().hasUnknownComponents()) || possibleJoinNodes.isEmpty()) { return getSyntacticOrderJoin(joinNode, context, AUTOMATIC); @@ -119,6 +106,16 @@ private PlanNode getCostBasedJoin(JoinNode joinNode, Context context) return planNodeOrderings.min(possibleJoinNodes).getPlanNode(); } + private void addJoinsWithDifferentDistributions(JoinNode joinNode, List possibleJoinNodes, Context context) + { + if (!mustPartition(joinNode) && canReplicate(joinNode, context)) { + possibleJoinNodes.add(getJoinNodeWithCost(context.getCostProvider(), joinNode.withDistributionType(REPLICATED))); + } + if (!mustReplicate(joinNode, context)) { + possibleJoinNodes.add(getJoinNodeWithCost(context.getCostProvider(), joinNode.withDistributionType(PARTITIONED))); + } + } + private PlanNode getSyntacticOrderJoin(JoinNode joinNode, Context context, JoinDistributionType joinDistributionType) { if (mustPartition(joinNode)) {