org.eigenbase.sql.validate
Interface SqlValidatorScope

All Known Subinterfaces:
AggregatingScope
All Known Implementing Classes:
AggregatingSelectScope, CollectScope, DelegatingScope, EmptyScope, JoinScope, ListScope, OrderByScope, OverScope, ParameterScope, SelectScope

public interface SqlValidatorScope

Name-resolution scope. Represents any position in a parse tree than an expression can be, or anything in the parse tree which has columns.

When validating an expression, say "foo"."bar", you first use the resolve(java.lang.String, org.eigenbase.sql.validate.SqlValidatorScope[], int[]) method of the scope where the expression is defined to locate "foo". If successful, this returns a namespace describing the type of the resulting object.

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

Method Summary
 void addChild(SqlValidatorNamespace ns, String alias)
          Registers a relation in this scope.
 void findAliases(List<SqlMoniker> result)
          Collects the SqlMonikers of all table aliases (uses of tables in query FROM clauses) available in this scope.
 void findAllColumnNames(List<SqlMoniker> result)
          Collects the SqlMonikers of all possible columns in this scope.
 String findQualifyingTableName(String columnName, SqlNode ctx)
          Finds the table alias which is implicitly qualifying an unqualified column name.
 SqlIdentifier fullyQualify(SqlIdentifier identifier)
          Converts an identifier into a fully-qualified identifier.
 SqlMonotonicity getMonotonicity(SqlNode expr)
          Returns whether an expression is monotonic in this scope.
 SqlNode getNode()
          Returns the root node of this scope.
 SqlValidatorScope getOperandScope(SqlCall call)
          Returns the scope within which operands to a call are to be validated.
 SqlNodeList getOrderList()
          Returns the expressions by which the rows in this scope are sorted.
 SqlValidator getValidator()
          Returns the validator which created this scope.
 SqlWindow lookupWindow(String name)
          Finds a window with a given name.
 SqlValidatorNamespace resolve(String name, SqlValidatorScope[] ancestorOut, int[] offsetOut)
          Looks up a node with a given name.
 RelDataType resolveColumn(String name, SqlNode ctx)
          Resolves a single identifier to a column, and returns the datatype of that column.
 void validateExpr(SqlNode expr)
          Performs any scope-specific validation of an expression.
 

Method Detail

getValidator

SqlValidator getValidator()
Returns the validator which created this scope.


getNode

SqlNode getNode()
Returns the root node of this scope.

"Postcondition:"
return != null

resolve

SqlValidatorNamespace resolve(String name,
                              SqlValidatorScope[] ancestorOut,
                              int[] offsetOut)
Looks up a node with a given name. Returns null if none is found.

Parameters:
name - Name of node to find
ancestorOut - If not null, writes the ancestor scope here
offsetOut - If not null, writes the offset within the ancestor here

findQualifyingTableName

String findQualifyingTableName(String columnName,
                               SqlNode ctx)
Finds the table alias which is implicitly qualifying an unqualified column name. Throws an error if there is not exactly one table.

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.

Parameters:
columnName - Column name
ctx - Validation context, to appear in any error thrown
Returns:
Table alias

findAllColumnNames

void findAllColumnNames(List<SqlMoniker> result)
Collects the SqlMonikers of all possible columns in this scope.

Parameters:
result - an array list of strings to add the result to

findAliases

void findAliases(List<SqlMoniker> result)
Collects the SqlMonikers of all table aliases (uses of tables in query FROM clauses) available in this scope.

Parameters:
result - a list of monikers to add the result to

fullyQualify

SqlIdentifier 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".


addChild

void addChild(SqlValidatorNamespace ns,
              String alias)
Registers a relation in this scope.

Parameters:
ns - Namespace representing the result-columns of the relation
alias - Alias with which to reference the relation, must not be null

lookupWindow

SqlWindow lookupWindow(String name)
Finds a window with a given name. Returns null if not found.


getMonotonicity

SqlMonotonicity getMonotonicity(SqlNode expr)
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.


getOrderList

SqlNodeList getOrderList()
Returns the expressions by which the rows in this scope are sorted. If the rows are unsorted, returns null.


resolveColumn

RelDataType resolveColumn(String name,
                          SqlNode ctx)
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.

Parameters:
name - Name of column
ctx - Context for exception
Returns:
Type of column, if found and unambiguous; null if not found

getOperandScope

SqlValidatorScope getOperandScope(SqlCall call)
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.

Parameters:
call - Call
Returns:
Scope within which to validate arguments to call.

validateExpr

void validateExpr(SqlNode expr)
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.