org.eigenbase.sql.validate
Interface SqlValidatorNamespace

All Known Implementing Classes:
AbstractNamespace, AliasNamespace, CollectNamespace, DelegatingNamespace, FieldNamespace, IdentifierNamespace, JoinNamespace, ParameterNamespace, ProcedureNamespace, SelectNamespace, SetopNamespace, SqlValidatorImpl.DeleteNamespace, SqlValidatorImpl.DmlNamespace, SqlValidatorImpl.InsertNamespace, SqlValidatorImpl.MergeNamespace, SqlValidatorImpl.UpdateNamespace, TableConstructorNamespace, UnnestNamespace

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 subquery (the namespace contains the columns in the SELECT clause of the subquery).

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.eigenbase.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.

Since:
Mar 25, 2003
Version:
$Id: //open/dev/farrago/src/org/eigenbase/sql/validate/SqlValidatorNamespace.java#19 $
Author:
jhyde
See Also:
SqlValidator, SqlValidatorScope

Method Summary
 boolean fieldExists(String name)
          Returns whether this namespace has a field of a given name.
 SqlNode getEnclosingNode()
          Returns the parse tree node that at is at the root of this namespace and includes all decorations.
 List<Pair<SqlNode,SqlMonotonicity>> getMonotonicExprs()
          Returns a list of expressions which are monotonic in this namespace.
 SqlMonotonicity getMonotonicity(String columnName)
          Returns whether and how a given column is sorted.
 SqlNode getNode()
          Returns the parse tree node at the root of this namespace.
 RelDataType getRowType()
          Returns the row type of this namespace, which comprises a list of names and types of the output columns.
 RelDataType getRowTypeSansSystemColumns()
          Returns the row type of this namespace, sans any system columns.
 SqlValidatorTable getTable()
          Returns the underlying table, or null if there is none.
 SqlValidator getValidator()
          Returns the validator.
 boolean isWrapperFor(Class<?> clazz)
          Returns whether this namespace implements a given interface, or wraps a class which does.
 SqlValidatorNamespace lookupChild(String name)
          Looks up a child namespace of a given name.
 void makeNullable()
          Makes all fields in this namespace nullable (typically because it is on the outer side of an outer join.
 void setRowType(RelDataType rowType)
          Allows RowType for the namespace to be explicitly set.
 String translate(String name)
          Translates a field name to the name in the underlying namespace.
<T> T
unwrap(Class<T> clazz)
          Returns this namespace, or a wrapped namespace, cast to a particular class.
 void validate()
          Validates this namespace.
 

Method Detail

getValidator

SqlValidator getValidator()
Returns the validator.

Returns:
validator

getTable

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. Never returns null.

"Postcondition:"
return != null

setRowType

void setRowType(RelDataType rowType)
Allows RowType for the namespace to be explicitly set.


getRowTypeSansSystemColumns

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

Returns:
Row type sans system columns

validate

void validate()
Validates this namespace.

If the scope has already been validated, does nothing.

Please call SqlValidatorImpl.validateNamespace(org.eigenbase.sql.validate.SqlValidatorNamespace) rather than calling this method directly.


getNode

SqlNode getNode()
Returns the parse tree node at the root of this namespace.

Returns:
parse tree node

getEnclosingNode

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

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

boolean fieldExists(String name)
Returns whether this namespace has a field of a given name.

Parameters:
name - Field name
Returns:
Whether field exists

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

void makeNullable()
Makes all fields in this namespace nullable (typically because it is on the outer side of an outer join.


translate

String translate(String name)
Translates a field name to the name in the underlying namespace.


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