Skip to content

Commit

Permalink
Extract addJoinsWithDifferentDistributions method
Browse files Browse the repository at this point in the history
  • Loading branch information
sopel39 committed Oct 11, 2018
1 parent a53ff3e commit b45c5a8
Showing 1 changed file with 12 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,23 +92,10 @@ public static boolean canReplicate(JoinNode joinNode, Context context)

private PlanNode getCostBasedJoin(JoinNode joinNode, Context context)
{
CostProvider costProvider = context.getCostProvider();
List<PlanNodeWithCost> 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);
Expand All @@ -119,6 +106,16 @@ private PlanNode getCostBasedJoin(JoinNode joinNode, Context context)
return planNodeOrderings.min(possibleJoinNodes).getPlanNode();
}

private void addJoinsWithDifferentDistributions(JoinNode joinNode, List<PlanNodeWithCost> 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)) {
Expand Down

0 comments on commit b45c5a8

Please sign in to comment.