public static ExpressionAnalysis analyzeExpression( Session session, Metadata metadata, AccessControl accessControl, SqlParser sqlParser, TupleDescriptor tupleDescriptor, Analysis analysis, boolean approximateQueriesEnabled, AnalysisContext context, Expression expression) { ExpressionAnalyzer analyzer = create(analysis, session, metadata, sqlParser, accessControl, approximateQueriesEnabled); analyzer.analyze(expression, tupleDescriptor, context); IdentityHashMap<Expression, Type> expressionTypes = analyzer.getExpressionTypes(); IdentityHashMap<Expression, Type> expressionCoercions = analyzer.getExpressionCoercions(); IdentityHashMap<FunctionCall, Signature> resolvedFunctions = analyzer.getResolvedFunctions(); analysis.addTypes(expressionTypes); analysis.addCoercions(expressionCoercions); analysis.addFunctionSignatures(resolvedFunctions); analysis.addColumnReferences(analyzer.getColumnReferences()); for (Expression subExpression : expressionTypes.keySet()) { analysis.addResolvedNames(subExpression, analyzer.getResolvedNames()); } Set<InPredicate> subqueryInPredicates = analyzer.getSubqueryInPredicates(); return new ExpressionAnalysis( expressionTypes, expressionCoercions, subqueryInPredicates, analyzer.getColumnReferences()); }