Interface SqlValidatorNamespace

All Known Implementing Classes:
AliasNamespace, CollectNamespace, DelegatingNamespace, IdentifierNamespace, LambdaNamespace, MatchRecognizeNamespace, PivotNamespace, ProcedureNamespace, SelectNamespace, SetopNamespace, SqlValidatorImpl.DmlNamespace, TableConstructorNamespace, UnpivotNamespace, WithNamespace

public interface SqlValidatorNamespace
A namespace describes the relation returned by a section of a SQL query.

For example, in the query SELECT emp.deptno, age FROM emp, dept, the FROM clause forms a namespace consisting of two tables EMP and DEPT, and a row type consisting of the combined columns of those tables.

Other examples of namespaces include a table in the from list (the namespace contains the constituent columns) and a sub-query (the namespace contains the columns in the SELECT clause of the sub-query).

These various kinds of namespace are implemented by classes IdentifierNamespace for table names, SelectNamespace for SELECT queries, SetopNamespace for UNION, EXCEPT and INTERSECT, and so forth. But if you are looking at a SELECT query and call SqlValidator.getNamespace(org.apache.calcite.sql.SqlNode), you may not get a SelectNamespace. Why? Because the validator is allowed to wrap namespaces in other objects which implement SqlValidatorNamespace. Your SelectNamespace will be there somewhere, but might be one or two levels deep. Don't try to cast the namespace or use instanceof; use unwrap(Class) and isWrapperFor(Class) instead.

See Also:
  • Method Details

    • getValidator

      SqlValidator getValidator()
      Returns the validator.
      Returns:
      validator
    • getTable

      @Nullable SqlValidatorTable getTable()
      Returns the underlying table, or null if there is none.
    • getRowType

      RelDataType getRowType()
      Returns the row type of this namespace, which comprises a list of names and types of the output columns. If the scope's type has not yet been derived, derives it.
      Returns:
      Row type of this namespace, never null, always a struct
    • getType

      RelDataType getType()
      Returns the type of this namespace.
      Returns:
      Row type converted to struct
    • setType

      void setType(RelDataType type)
      Sets the type of this namespace.

      Allows the type for the namespace to be explicitly set, but usually is called during validate(RelDataType).

      Implicitly also sets the row type. If the type is not a struct, then the row type is the type wrapped as a struct with a single column, otherwise the type and row type are the same.

    • getRowTypeSansSystemColumns

      RelDataType getRowTypeSansSystemColumns()
      Returns the row type of this namespace, sans any system columns.
      Returns:
      Row type sans system columns
    • validate

      void validate(RelDataType targetRowType)
      Validates this namespace.

      If the scope has already been validated, does nothing.

      Please call SqlValidatorImpl.validateNamespace(org.apache.calcite.sql.validate.SqlValidatorNamespace, org.apache.calcite.rel.type.RelDataType) rather than calling this method directly.

      Parameters:
      targetRowType - Desired row type, must not be null, may be the data type 'unknown'.
    • getNode

      @Nullable SqlNode getNode()
      Returns the parse tree node at the root of this namespace.
      Returns:
      parse tree node; null for TableNamespace
    • getEnclosingNode

      @Pure @Nullable SqlNode getEnclosingNode()
      Returns the parse tree node that at is at the root of this namespace and includes all decorations. If there are no decorations, returns the same as getNode().
    • lookupChild

      @Nullable SqlValidatorNamespace lookupChild(String name)
      Looks up a child namespace of a given name.

      For example, in the query select e.name from emps as e, e is an IdentifierNamespace which has a child name which is a FieldNamespace.

      Parameters:
      name - Name of namespace
      Returns:
      Namespace
    • fieldExists

      default boolean fieldExists(String name)
      Returns whether this namespace has a field of a given name.
      Parameters:
      name - Field name
      Returns:
      Whether field exists
    • field

      @Nullable RelDataTypeField field(String name)
      Returns a field of a given name, or null.
      Parameters:
      name - Field name
      Returns:
      Field, or null
    • getMonotonicExprs

      List<Pair<SqlNode,SqlMonotonicity>> getMonotonicExprs()
      Returns a list of expressions which are monotonic in this namespace. For example, if the namespace represents a relation ordered by a column called "TIMESTAMP", then the list would contain a SqlIdentifier called "TIMESTAMP".
    • getMonotonicity

      SqlMonotonicity getMonotonicity(String columnName)
      Returns whether and how a given column is sorted.
    • makeNullable

      @Deprecated void makeNullable()
      Deprecated.
    • unwrap

      <T> T unwrap(Class<T> clazz)
      Returns this namespace, or a wrapped namespace, cast to a particular class.
      Parameters:
      clazz - Desired type
      Returns:
      This namespace cast to desired type
      Throws:
      ClassCastException - if no such interface is available
    • isWrapperFor

      boolean isWrapperFor(Class<?> clazz)
      Returns whether this namespace implements a given interface, or wraps a class which does.
      Parameters:
      clazz - Interface
      Returns:
      Whether namespace implements given interface
    • resolve

      If this namespace resolves to another namespace, returns that namespace, following links to the end of the chain.

      A WITH) clause defines table names that resolve to queries (the body of the with-item). An IdentifierNamespace typically resolves to a TableNamespace.

      You must not call this method before validate(RelDataType) has completed.

    • supportsModality

      boolean supportsModality(SqlModality modality)
      Returns whether this namespace is capable of giving results of the desired modality. true means streaming, false means relational.
      Parameters:
      modality - Modality
    • getMustFilterFields

      default ImmutableBitSet getMustFilterFields()
      Returns the ordinals (in the row type) of the "must-filter" fields, fields that that must be filtered in a query.