Interface SqlValidatorScope
-
- All Known Subinterfaces:
AggregatingScope
- All Known Implementing Classes:
AggregatingSelectScope
,CatalogScope
,CollectScope
,DelegatingScope
,EmptyScope
,GroupByScope
,JoinScope
,ListScope
,MatchRecognizeScope
,OrderByScope
,OverScope
,ParameterScope
,SelectScope
,TableScope
,WithScope
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.util.List<java.lang.String>, org.apache.calcite.sql.validate.SqlNameMatcher, boolean, org.apache.calcite.sql.validate.SqlValidatorScope.Resolved)
method of the scope where the expression is defined to locate "foo". If successful, this returns anamespace
describing the type of the resulting object.
-
-
Nested Class Summary
Nested Classes Modifier and Type Interface Description static class
SqlValidatorScope.EmptyPath
A path that has no steps.static class
SqlValidatorScope.Path
A sequence of steps by which an identifier was resolved.static class
SqlValidatorScope.Resolve
A match found when looking up a name.static interface
SqlValidatorScope.Resolved
static class
SqlValidatorScope.ResolvedImpl
Default implementation ofSqlValidatorScope.Resolved
.static class
SqlValidatorScope.Step
A step in resolving an identifier.
-
Method Summary
All Methods Instance Methods Abstract Methods Default Methods Deprecated Methods Modifier and Type Method Description void
addChild(SqlValidatorNamespace ns, java.lang.String alias, boolean nullable)
Registers a relation in this scope.void
findAliases(java.util.Collection<SqlMoniker> result)
Collects theSqlMoniker
s of all table aliases (uses of tables in query FROM clauses) available in this scope.void
findAllColumnNames(java.util.List<SqlMoniker> result)
Collects theSqlMoniker
s of all possible columns in this scope.Pair<java.lang.String,SqlValidatorNamespace>
findQualifyingTableName(java.lang.String columnName, SqlNode ctx)
Deprecated.java.util.Map<java.lang.String,ScopeChild>
findQualifyingTableNames(java.lang.String columnName, SqlNode ctx, SqlNameMatcher nameMatcher)
Finds all table aliases which are implicitly qualifying an unqualified column name.SqlQualified
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.SqlValidatorNamespace
getTableNamespace(java.util.List<java.lang.String> names)
Deprecated.SqlValidator
getValidator()
Returns the validator which created this scope.default boolean
isWithin(SqlValidatorScope scope2)
Returns whether this scope is enclosed withinscope2
in such a way that it can see the contents ofscope2
.SqlWindow
lookupWindow(java.lang.String name)
Finds a window with a given name.RelDataType
nullifyType(SqlNode node, RelDataType type)
Converts the type of an expression to nullable, if the context warrants it.void
resolve(java.util.List<java.lang.String> names, SqlNameMatcher nameMatcher, boolean deep, SqlValidatorScope.Resolved resolved)
Looks up a node with a given name.RelDataType
resolveColumn(java.lang.String name, SqlNode ctx)
Resolves a single identifier to a column, and returns the datatype of that column.void
resolveTable(java.util.List<java.lang.String> names, SqlNameMatcher nameMatcher, SqlValidatorScope.Path path, SqlValidatorScope.Resolved resolved)
Looks up a table in this scope from its name.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. Never null.
-
resolve
void resolve(java.util.List<java.lang.String> names, SqlNameMatcher nameMatcher, boolean deep, SqlValidatorScope.Resolved resolved)
Looks up a node with a given name. Returns null if none is found.- Parameters:
names
- Name of node to find, maybe partially or fully qualifiednameMatcher
- Name matcherdeep
- Whether to look more than one level deepresolved
- Callback wherein to write the match(es) we find
-
findQualifyingTableName
@Deprecated Pair<java.lang.String,SqlValidatorNamespace> findQualifyingTableName(java.lang.String columnName, SqlNode ctx)
Deprecated.
-
findQualifyingTableNames
java.util.Map<java.lang.String,ScopeChild> findQualifyingTableNames(java.lang.String columnName, SqlNode ctx, SqlNameMatcher nameMatcher)
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 asIdentifierNamespace
, it throwsUnsupportedOperationException
.- Parameters:
columnName
- Column namectx
- Validation context, to appear in any error thrownnameMatcher
- Name matcher- Returns:
- Map of applicable table alias and namespaces, never null, empty if no aliases found
-
findAllColumnNames
void findAllColumnNames(java.util.List<SqlMoniker> result)
Collects theSqlMoniker
s of all possible columns in this scope.- Parameters:
result
- an array list of strings to add the result to
-
findAliases
void findAliases(java.util.Collection<SqlMoniker> result)
Collects theSqlMoniker
s 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
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".- Returns:
- A qualified identifier, never null
-
addChild
void addChild(SqlValidatorNamespace ns, java.lang.String alias, boolean nullable)
Registers a relation in this scope.- Parameters:
ns
- Namespace representing the result-columns of the relationalias
- Alias with which to reference the relation, must not be nullnullable
- Whether this is a null-generating side of a join
-
lookupWindow
SqlWindow lookupWindow(java.lang.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(java.lang.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 columnctx
- 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.
-
getTableNamespace
@Deprecated SqlValidatorNamespace getTableNamespace(java.util.List<java.lang.String> names)
Deprecated.
-
resolveTable
void resolveTable(java.util.List<java.lang.String> names, SqlNameMatcher nameMatcher, SqlValidatorScope.Path path, SqlValidatorScope.Resolved resolved)
Looks up a table in this scope from its name. If found, callsresolve(List, SqlNameMatcher, boolean, Resolved)
.TableNamespace
that wraps it. If the "table" is defined in aWITH
clause it may be a query, not a table after all.The name matcher is not null, and one typically uses
SqlValidatorCatalogReader.nameMatcher()
.- Parameters:
names
- Name of table, may be qualified or fully-qualifiednameMatcher
- Name matcherpath
- List of names that we have traversed through so far
-
nullifyType
RelDataType nullifyType(SqlNode node, RelDataType type)
Converts the type of an expression to nullable, if the context warrants it.
-
isWithin
default boolean isWithin(SqlValidatorScope scope2)
Returns whether this scope is enclosed withinscope2
in such a way that it can see the contents ofscope2
.
-
-