Source:
public static ColumnValueSelector<ExprEval> makeExprEvalSelector( ColumnSelectorFactory columnSelectorFactory, Expr expression ) { final Expr.BindingDetails exprDetails = expression.analyzeInputs(); Parser.validateExpr(expression, exprDetails); final List<String> columns = exprDetails.getRequiredColumnsList(); if (columns.size() == 1) { final String column = Iterables.getOnlyElement(columns); final ColumnCapabilities capabilities = columnSelectorFactory.getColumnCapabilities(column); if (capabilities != null && capabilities.getType() == ValueType.LONG) { return new SingleLongInputCachingExpressionColumnValueSelector( columnSelectorFactory.makeColumnValueSelector(column), expression, !ColumnHolder.TIME_COLUMN_NAME.equals(column) ); } else if (capabilities != null && capabilities.getType() == ValueType.STRING && capabilities.isDictionaryEncoded() && capabilities.isComplete() && !capabilities.hasMultipleValues() && exprDetails.getArrayColumns().size() == 0) { return new SingleStringInputCachingExpressionColumnValueSelector( columnSelectorFactory.makeDimensionSelector(new DefaultDimensionSpec(column, column, ValueType.STRING)), expression ); } } final Pair<Set<String>, Set<String>> arrayUsage = examineColumnSelectorFactoryArrays(columnSelectorFactory, exprDetails, columns); final Set<String> actualArrays = arrayUsage.lhs; final Set<String> unknownIfArrays = arrayUsage.rhs; final List<String> needsApplied = columns.stream() .filter(c -> actualArrays.contains(c) && !exprDetails.getArrayColumns().contains(c)) .collect(Collectors.toList()); final Expr finalExpr; if (needsApplied.size() > 0) { finalExpr = Parser.applyUnappliedIdentifiers(expression, exprDetails, needsApplied); } else { finalExpr = expression; } final Expr.ObjectBinding bindings = createBindings(exprDetails, columnSelectorFactory); if (bindings.equals(ExprUtils.nilBindings())) { return new ConstantExprEvalSelector(expression.eval(bindings)); } if (unknownIfArrays.size() > 0) { return new RowBasedExpressionColumnValueSelector( finalExpr, exprDetails, bindings, unknownIfArrays ); } return new ExpressionColumnValueSelector(finalExpr, bindings); }

Target:
public static ColumnValueSelector<ExprEval> makeExprEvalSelector( ColumnSelectorFactory columnSelectorFactory, Expr expression ) { final Expr.BindingDetails exprDetails = expression.analyzeInputs(); Parser.validateExpr(expression, exprDetails); final List<String> columns = exprDetails.getRequiredBindingsList(); if (columns.size() == 1) { final String column = Iterables.getOnlyElement(columns); final ColumnCapabilities capabilities = columnSelectorFactory.getColumnCapabilities(column); if (capabilities != null && capabilities.getType() == ValueType.LONG) { return new SingleLongInputCachingExpressionColumnValueSelector( columnSelectorFactory.makeColumnValueSelector(column), expression, !ColumnHolder.TIME_COLUMN_NAME.equals(column) ); } else if (capabilities != null && capabilities.getType() == ValueType.STRING && capabilities.isDictionaryEncoded() && capabilities.isComplete() && !capabilities.hasMultipleValues() && exprDetails.getArrayBindings().isEmpty()) { return new SingleStringInputCachingExpressionColumnValueSelector( columnSelectorFactory.makeDimensionSelector(new DefaultDimensionSpec(column, column, ValueType.STRING)), expression ); } } final Pair<Set<String>, Set<String>> arrayUsage = examineColumnSelectorFactoryArrays(columnSelectorFactory, exprDetails, columns); final Set<String> actualArrays = arrayUsage.lhs; final Set<String> unknownIfArrays = arrayUsage.rhs; final List<String> needsApplied = columns.stream() .filter(c -> actualArrays.contains(c) && !exprDetails.getArrayBindings().contains(c)) .collect(Collectors.toList()); final Expr finalExpr; if (needsApplied.size() > 0) { finalExpr = Parser.applyUnappliedBindings(expression, exprDetails, needsApplied); } else { finalExpr = expression; } final Expr.ObjectBinding bindings = createBindings(exprDetails, columnSelectorFactory); if (bindings.equals(ExprUtils.nilBindings())) { return new ConstantExprEvalSelector(expression.eval(bindings)); } if (unknownIfArrays.size() > 0) { return new RowBasedExpressionColumnValueSelector( finalExpr, exprDetails, bindings, unknownIfArrays ); } return new ExpressionColumnValueSelector(finalExpr, bindings); }