public InterpretedPageProjection(
Expression expression,
TypeProvider symbolTypes,
Map<Symbol, Integer> symbolToInputMappings,
Metadata metadata,
SqlParser sqlParser,
Session session)
{
SymbolToInputParameterRewriter rewriter = new SymbolToInputParameterRewriter(symbolTypes, symbolToInputMappings);
Expression rewritten = rewriter.rewrite(expression);
this.inputChannels = new InputChannels(rewriter.getInputChannels());
this.deterministic = DeterminismEvaluator.isDeterministic(expression);
List<Type> inputTypes = rewriter.getInputTypes();
ImmutableMap.Builder<Integer, Type> parameterTypes = ImmutableMap.builder();
for (int parameter = 0; parameter < inputTypes.size(); parameter++) {
Type type = inputTypes.get(parameter);
parameterTypes.put(parameter, type);
}
Map<NodeRef<Expression>, Type> expressionTypes = getExpressionTypesFromInput(session, metadata, sqlParser, parameterTypes.build(), rewritten, emptyList(), WarningCollector.NOOP);
this.evaluator = ExpressionInterpreter.expressionInterpreter(rewritten, metadata, session, expressionTypes);
blockBuilder = evaluator.getType().createBlockBuilder(null, 1);
}