List<ProjectionFunction> projectionFunctions = new ArrayList<>();
for (int i = 0; i < projectionExpressions.size(); i++) {
Symbol symbol = outputSymbols.get(i);
Expression expression = projectionExpressions.get(i);
ProjectionFunction function;
if (expression instanceof QualifiedNameReference) {
// fast path when we know it's a direct symbol reference
Symbol reference = Symbol.fromQualifiedName(((QualifiedNameReference) expression).getName());
function = ProjectionFunctions.singleColumn(context.getTypes().get(reference).getRawType(), sourceLayout.get(reference));
}