예제 #1
0
  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());
  }