private Multimap<Symbol, Symbol> extractCorrelatedSymbolsMapping(List<Expression> correlatedConjuncts) { // TODO: handle coercions and non-direct column references ImmutableMultimap.Builder<Symbol, Symbol> mapping = ImmutableMultimap.builder(); for (Expression conjunct : correlatedConjuncts) { if (!(conjunct instanceof ComparisonExpression)) { continue; } ComparisonExpression comparison = (ComparisonExpression) conjunct; if (!(comparison.getLeft() instanceof SymbolReference && comparison.getRight() instanceof SymbolReference && comparison.getOperator().equals(EQUAL))) { continue; } Symbol left = Symbol.from(comparison.getLeft()); Symbol right = Symbol.from(comparison.getRight()); if (correlation.contains(left) && !correlation.contains(right)) { mapping.put(left, right); } if (correlation.contains(right) && !correlation.contains(left)) { mapping.put(right, left); } } return mapping.build(); }
private Multimap<Symbol, Symbol> extractCorrelatedSymbolsMapping(List<Expression> correlatedConjuncts) { // TODO: handle coercions and non-direct column references ImmutableMultimap.Builder<Symbol, Symbol> mapping = ImmutableMultimap.builder(); for (Expression conjunct : correlatedConjuncts) { if (!(conjunct instanceof ComparisonExpression)) { continue; } ComparisonExpression comparison = (ComparisonExpression) conjunct; if (!(comparison.getLeft() instanceof SymbolReference && comparison.getRight() instanceof SymbolReference && comparison.getOperator().equals(EQUAL))) { continue; } Symbol left = Symbol.from(comparison.getLeft()); Symbol right = Symbol.from(comparison.getRight()); if (correlation.contains(left) && !correlation.contains(right)) { mapping.put(left, right); } if (correlation.contains(right) && !correlation.contains(left)) { mapping.put(right, left); } } return mapping.build(); }