Symbol rightSymbol = rightPlanBuilder.translate(rightComparisonExpressions.get(i)); equiClauses.add(new JoinNode.EquiJoinClause(leftSymbol, rightSymbol));
private JoinGraph joinWith(JoinGraph other, List<JoinNode.EquiJoinClause> joinClauses, Context context, PlanNodeId newRoot) { for (PlanNode node : other.nodes) { checkState(!edges.containsKey(node.getId()), format("Node [%s] appeared in two JoinGraphs", node)); } List<PlanNode> nodes = ImmutableList.<PlanNode>builder() .addAll(this.nodes) .addAll(other.nodes) .build(); ImmutableMultimap.Builder<PlanNodeId, Edge> edges = ImmutableMultimap.<PlanNodeId, Edge>builder() .putAll(this.edges) .putAll(other.edges); List<Expression> joinedFilters = ImmutableList.<Expression>builder() .addAll(this.filters) .addAll(other.filters) .build(); for (JoinNode.EquiJoinClause edge : joinClauses) { Symbol leftSymbol = edge.getLeft(); Symbol rightSymbol = edge.getRight(); checkState(context.containsSymbol(leftSymbol)); checkState(context.containsSymbol(rightSymbol)); PlanNode left = context.getSymbolSource(leftSymbol); PlanNode right = context.getSymbolSource(rightSymbol); edges.put(left.getId(), new Edge(right, leftSymbol, rightSymbol)); edges.put(right.getId(), new Edge(left, rightSymbol, leftSymbol)); } return new JoinGraph(nodes, edges.build(), newRoot, joinedFilters, Optional.empty()); }
private static EquiJoinClause toEquiJoinClause(ComparisonExpression equality, Set<Symbol> leftSymbols) { Symbol leftSymbol = Symbol.from(equality.getLeft()); Symbol rightSymbol = Symbol.from(equality.getRight()); EquiJoinClause equiJoinClause = new EquiJoinClause(leftSymbol, rightSymbol); return leftSymbols.contains(leftSymbol) ? equiJoinClause : equiJoinClause.flip(); }
equiClauses.add(new JoinNode.EquiJoinClause(leftSymbol, rightSymbol));
rightProjections.put(rightSymbol, rightExpression); builder.add(new JoinNode.EquiJoinClause(leftSymbol, rightSymbol));
criteriaBuilder.add(new JoinNode.EquiJoinClause(A, D)); criteriaBuilder.add(new JoinNode.EquiJoinClause(B, E)); List<JoinNode.EquiJoinClause> criteria = criteriaBuilder.build();
criteriaBuilder.add(new JoinNode.EquiJoinClause(A, D)); criteriaBuilder.add(new JoinNode.EquiJoinClause(B, E)); List<JoinNode.EquiJoinClause> criteria = criteriaBuilder.build();
criteriaBuilder.add(new JoinNode.EquiJoinClause(A, D)); criteriaBuilder.add(new JoinNode.EquiJoinClause(B, E)); List<JoinNode.EquiJoinClause> criteria = criteriaBuilder.build();
throws Exception List<JoinNode.EquiJoinClause> criteria = ImmutableList.of(new JoinNode.EquiJoinClause(A, D));
throws Exception List<JoinNode.EquiJoinClause> criteria = ImmutableList.of(new JoinNode.EquiJoinClause(A, D));
@Override public Void visitJoin(JoinNode node, Void context) { List<Expression> joinExpressions = new ArrayList<>(); for (JoinNode.EquiJoinClause clause : node.getCriteria()) { joinExpressions.add(new ComparisonExpression(ComparisonExpression.Type.EQUAL, new QualifiedNameReference(clause.getLeft().toQualifiedName()), new QualifiedNameReference(clause.getRight().toQualifiedName()))); } String criteria = Joiner.on(" AND ").join(joinExpressions); printNode(node, node.getType().getJoinLabel(), criteria, NODE_COLORS.get(NodeType.JOIN)); node.getLeft().accept(this, context); node.getRight().accept(this, context); return null; }
@Override public Void visitJoin(JoinNode node, Void context) { node.getLeft().accept(this, context); node.getRight().accept(this, context); verifyUniqueId(node); Set<Symbol> leftInputs = ImmutableSet.copyOf(node.getLeft().getOutputSymbols()); Set<Symbol> rightInputs = ImmutableSet.copyOf(node.getRight().getOutputSymbols()); for (JoinNode.EquiJoinClause clause : node.getCriteria()) { checkArgument(leftInputs.contains(clause.getLeft()), "Symbol from join clause (%s) not in left source (%s)", clause.getLeft(), node.getLeft().getOutputSymbols()); checkArgument(rightInputs.contains(clause.getRight()), "Symbol from join clause (%s) not in right source (%s)", clause.getRight(), node.getRight().getOutputSymbols()); } return null; }
@Override public Void visitJoin(JoinNode node, Integer indent) { List<Expression> joinExpressions = new ArrayList<>(); for (JoinNode.EquiJoinClause clause : node.getCriteria()) { joinExpressions.add(new ComparisonExpression(ComparisonExpression.Type.EQUAL, new QualifiedNameReference(clause.getLeft().toQualifiedName()), new QualifiedNameReference(clause.getRight().toQualifiedName()))); } print(indent, "- %s[%s] => [%s]", node.getType().getJoinLabel(), Joiner.on(" AND ").join(joinExpressions), formatOutputs(node.getOutputSymbols())); node.getLeft().accept(this, indent + 1); node.getRight().accept(this, indent + 1); return null; }
private List<JoinNode.EquiJoinClause> canonicalizeJoinCriteria(List<JoinNode.EquiJoinClause> criteria) { ImmutableList.Builder<JoinNode.EquiJoinClause> builder = ImmutableList.builder(); for (JoinNode.EquiJoinClause clause : criteria) { builder.add(new JoinNode.EquiJoinClause(canonicalize(clause.getLeft()), canonicalize(clause.getRight()))); } return builder.build(); }
private static Expression extractJoinPredicate(JoinNode joinNode) { ImmutableList.Builder<Expression> builder = ImmutableList.builder(); for (JoinNode.EquiJoinClause equiJoinClause : joinNode.getCriteria()) { builder.add(equalsExpression(equiJoinClause.getLeft(), equiJoinClause.getRight())); } return combineConjuncts(builder.build()); }
equiJoinClauses.add(new JoinNode.EquiJoinClause(leftSymbol, rightSymbol));
rightJoinColumns.put(identifier, rightOutput); clauses.add(new JoinNode.EquiJoinClause(leftOutput, rightOutput));
for (Symbol column : nodePartitioning.getColumns()) { for (JoinNode.EquiJoinClause equality : node.getCriteria()) { if (equality.getLeft().equals(column) || equality.getRight().equals(column)) { coalesceExpressions.add(new CoalesceExpression(ImmutableList.of(equality.getLeft().toSymbolReference(), equality.getRight().toSymbolReference())));
PlanNode targetNode = edge.getTargetNode(); if (alreadyJoinedNodes.contains(targetNode.getId())) { criteria.add(new JoinNode.EquiJoinClause( edge.getTargetSymbol(), edge.getSourceSymbol()));