public JoinNode(Joinable left, Joinable right, JoinType joinType) { this.left = left; left.setOutput(this); this.right = right; right.setOutput(this); this.joinType = joinType; }
@Override protected void deepCopy(DuplicateMap map) { super.deepCopy(map); left = (Joinable) left.duplicate(map); right = (Joinable) right.duplicate(map); joinConditions = joinConditions.duplicate(map); }
public Set<MappableNodePattern> joinVars() { HashSet<MappableNodePattern> joinVars = new HashSet<MappableNodePattern>(); for (Joinable joinable : joined) { joinVars.addAll(joinable.joinVars()); } return joinVars; }
@Override public void replaceInput(PlanNode oldInput, PlanNode newInput) { if (left == oldInput) { left = (Joinable) newInput; left.setOutput(this); } if (right == oldInput) { right = (Joinable) newInput; right.setOutput(this); } }
public void addJoin( final String joinType, final Joinable j, final HashMap<String, String> variableBindings) { if (j == null) { LOG.info("Skipping join"); return; } JoinConditions conditions = new JoinConditions(); for (MappableNodePattern existingVar : this.joinVars()) { for (MappableNodePattern candidateVar : j.joinVars()) { String existingVarName = existingVar.getVarName(); String candidateVarName = candidateVar.getVarName(); String candidateBinding = variableBindings.get(candidateVar.getVarName()); String existingBinding = existingVar.mappedName(); if (existingVarName.equals(candidateVarName) && existingBinding.equals(candidateBinding)) { conditions.addCondition(existingBinding, " = ", candidateVar.mappedName()); } } } addJoin(joinType, j, conditions); }
public void addJoin(final String joinType, final Joinable j, final String joinConstraints) { if (j == null) { LOG.info("Skipping join"); return; } join.append(" " + joinType + " " + j.declaration()); joined.add(j); if (joinConstraints != null && joinConstraints != "") { join.append(" ON (" + joinConstraints + ")"); } joinCount++; }
public void setRight(Joinable right) { this.right = right; right.setOutput(this); }
public void setLeft(Joinable left) { this.left = left; left.setOutput(this); }
protected boolean acceptPlans(PlanVisitor v) { return (left.accept(v) && right.accept(v)); }
public JoinSequence(final Joinable start) { this.join = new StringBuilder(start.declaration()); joined.add(start); joinCount = 1; }