@Override
public Expression visitProject(ProjectNode node, Void context)
{
// TODO: add simple algebraic solver for projection translation (right now only considers identity projections)
Expression underlyingPredicate = node.getSource().accept(this, context);
Iterable<Expression> projectionEqualities = transform(filter(node.getOutputMap().entrySet(), not(symbolMatchesExpression())),
new Function<Map.Entry<Symbol, Expression>, Expression>()
{
@Override
public Expression apply(Map.Entry<Symbol, Expression> entry)
{
QualifiedNameReference reference = new QualifiedNameReference(entry.getKey().toQualifiedName());
Expression expression = entry.getValue();
return new ComparisonExpression(ComparisonExpression.Type.EQUAL, reference, expression);
}
});
return pullExpressionThroughSymbols(combineConjuncts(