Class DelegatingScope

java.lang.Object
org.apache.calcite.sql.validate.DelegatingScope
All Implemented Interfaces:
SqlValidatorScope
Direct Known Subclasses:
AggregatingSelectScope, GroupByScope, ListScope, MeasureScope, OrderByScope

public abstract class DelegatingScope extends Object implements SqlValidatorScope
A scope which delegates all requests to its parent scope. Use this as a base class for defining nested scopes.
  • Field Details

    • parent

      protected final SqlValidatorScope parent
      Parent scope. This is where to look next to resolve an identifier; it is not always the parent object in the parse tree.

      This is never null: at the top of the tree, it is an EmptyScope.

    • validator

      protected final SqlValidatorImpl validator
    • resolved

      public final Supplier<AggregatingSelectScope.Resolved> resolved
      Computes and stores information that cannot be computed on construction, but only after sub-queries have been validated.
  • Method Details

    • addChild

      public void addChild(SqlValidatorNamespace ns, String alias, boolean nullable)
      Description copied from interface: SqlValidatorScope
      Registers a relation in this scope.
      Specified by:
      addChild in interface SqlValidatorScope
      Parameters:
      ns - Namespace representing the result-columns of the relation
      alias - Alias with which to reference the relation, must not be null
      nullable - Whether this is a null-generating side of a join
    • resolve

      public void resolve(List<String> names, SqlNameMatcher nameMatcher, boolean deep, SqlValidatorScope.Resolved resolved)
      Description copied from interface: SqlValidatorScope
      Looks up a node with a given name. Returns null if none is found.
      Specified by:
      resolve in interface SqlValidatorScope
      Parameters:
      names - Name of node to find, maybe partially or fully qualified
      nameMatcher - Name matcher
      deep - Whether to look more than one level deep
      resolved - Callback wherein to write the match(es) we find
    • addColumnNames

      protected void addColumnNames(SqlValidatorNamespace ns, List<SqlMoniker> colNames)
    • findAllColumnNames

      public void findAllColumnNames(List<SqlMoniker> result)
      Description copied from interface: SqlValidatorScope
      Collects the SqlMonikers of all possible columns in this scope.
      Specified by:
      findAllColumnNames in interface SqlValidatorScope
      Parameters:
      result - an array list of strings to add the result to
    • findAliases

      public void findAliases(Collection<SqlMoniker> result)
      Description copied from interface: SqlValidatorScope
      Collects the SqlMonikers of all table aliases (uses of tables in query FROM clauses) available in this scope.
      Specified by:
      findAliases in interface SqlValidatorScope
      Parameters:
      result - a list of monikers to add the result to
    • findQualifyingTableName

      public Pair<String,SqlValidatorNamespace> findQualifyingTableName(String columnName, SqlNode ctx)
      Specified by:
      findQualifyingTableName in interface SqlValidatorScope
    • findQualifyingTableNames

      public Map<String,org.apache.calcite.sql.validate.ScopeChild> findQualifyingTableNames(String columnName, SqlNode ctx, SqlNameMatcher nameMatcher)
      Description copied from interface: SqlValidatorScope
      Finds all table aliases which are implicitly qualifying an unqualified column name.

      This method is only implemented in scopes (such as SelectScope) which can be the context for name-resolution. In scopes such as IdentifierNamespace, it throws UnsupportedOperationException.

      Specified by:
      findQualifyingTableNames in interface SqlValidatorScope
      Parameters:
      columnName - Column name
      ctx - Validation context, to appear in any error thrown
      nameMatcher - Name matcher
      Returns:
      Map of applicable table alias and namespaces, never null, empty if no aliases found
    • resolveColumn

      public @Nullable RelDataType resolveColumn(String name, SqlNode ctx)
      Description copied from interface: SqlValidatorScope
      Resolves a single identifier to a column, and returns the datatype of that column.

      If it cannot find the column, returns null. If the column is ambiguous, throws an error with context ctx.

      Specified by:
      resolveColumn in interface SqlValidatorScope
      Parameters:
      name - Name of column
      ctx - Context for exception
      Returns:
      Type of column, if found and unambiguous; null if not found
    • nullifyType

      public RelDataType nullifyType(SqlNode node, RelDataType type)
      Description copied from interface: SqlValidatorScope
      Converts the type of an expression to nullable, if the context warrants it.
      Specified by:
      nullifyType in interface SqlValidatorScope
    • getTableNamespace

      public @Nullable SqlValidatorNamespace getTableNamespace(List<String> names)
      Specified by:
      getTableNamespace in interface SqlValidatorScope
    • resolveTable

      public void resolveTable(List<String> names, SqlNameMatcher nameMatcher, SqlValidatorScope.Path path, SqlValidatorScope.Resolved resolved)
      Description copied from interface: SqlValidatorScope
      Looks up a table in this scope from its name. If found, calls SqlValidatorScope.resolve(List, SqlNameMatcher, boolean, Resolved). TableNamespace that wraps it. If the "table" is defined in a WITH clause it may be a query, not a table after all.

      The name matcher is not null, and one typically uses SqlValidatorCatalogReader.nameMatcher().

      Specified by:
      resolveTable in interface SqlValidatorScope
      Parameters:
      names - Name of table, may be qualified or fully-qualified
      nameMatcher - Name matcher
      path - List of names that we have traversed through so far
    • getOperandScope

      public SqlValidatorScope getOperandScope(SqlCall call)
      Description copied from interface: SqlValidatorScope
      Returns the scope within which operands to a call are to be validated. Usually it is this scope, but when the call is to an aggregate function and this is an aggregating scope, it will be a a different scope.
      Specified by:
      getOperandScope in interface SqlValidatorScope
      Parameters:
      call - Call
      Returns:
      Scope within which to validate arguments to call.
    • getValidator

      public SqlValidator getValidator()
      Description copied from interface: SqlValidatorScope
      Returns the validator which created this scope.
      Specified by:
      getValidator in interface SqlValidatorScope
    • fullyQualify

      public SqlQualified fullyQualify(SqlIdentifier identifier)
      Converts an identifier into a fully-qualified identifier. For example, the "empno" in "select empno from emp natural join dept" becomes "emp.empno".

      If the identifier cannot be resolved, throws. Never returns null.

      Specified by:
      fullyQualify in interface SqlValidatorScope
      Returns:
      A qualified identifier, never null
    • validateExpr

      public void validateExpr(SqlNode expr)
      Description copied from interface: SqlValidatorScope
      Performs any scope-specific validation of an expression. For example, an aggregating scope requires that expressions are valid aggregations. The expression has already been validated.
      Specified by:
      validateExpr in interface SqlValidatorScope
    • lookupWindow

      public @Nullable SqlWindow lookupWindow(String name)
      Description copied from interface: SqlValidatorScope
      Finds a window with a given name. Returns null if not found.
      Specified by:
      lookupWindow in interface SqlValidatorScope
    • getMonotonicity

      public SqlMonotonicity getMonotonicity(SqlNode expr)
      Description copied from interface: SqlValidatorScope
      Returns whether an expression is monotonic in this scope. For example, if the scope has previously been sorted by columns X, Y, then X is monotonic in this scope, but Y is not.
      Specified by:
      getMonotonicity in interface SqlValidatorScope
    • getOrderList

      public @Nullable SqlNodeList getOrderList()
      Description copied from interface: SqlValidatorScope
      Returns the expressions by which the rows in this scope are sorted. If the rows are unsorted, returns null.
      Specified by:
      getOrderList in interface SqlValidatorScope
    • analyze

      protected void analyze(org.apache.calcite.sql.validate.SqlValidatorUtil.GroupAnalyzer analyzer)
      Analyzes expressions in this scope and populates a GroupAnalyzer.
    • getParent

      public SqlValidatorScope getParent()
      Returns the parent scope of this DelegatingScope.
    • qualifyUsingAlias

      protected @Nullable SqlQualified qualifyUsingAlias(SqlSelect select, SqlIdentifier identifier)
      Qualifies an identifier by looking for an alias in the current select-list.

      Used when resolving ORDER BY items (when the conformance allows order by alias, such as "SELECT x - y AS z FROM t ORDER BY z") and measures (when one measure refers to another, for example "SELECT SUM(x) AS MEASURE m1, SUM(y) - m1 AS MEASURE m2 FROM t").