Package org.apache.calcite.sql.validate
Class AggregatingSelectScope
- java.lang.Object
-
- org.apache.calcite.sql.validate.DelegatingScope
-
- org.apache.calcite.sql.validate.AggregatingSelectScope
-
- All Implemented Interfaces:
AggregatingScope
,SqlValidatorScope
public class AggregatingSelectScope extends DelegatingScope implements AggregatingScope
Scope for resolving identifiers within a SELECT statement that has a GROUP BY clause.The same set of identifiers are in scope, but it won't allow access to identifiers or expressions which are not group-expressions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
AggregatingSelectScope.Resolved
Information about an aggregating scope that can only be determined after validation has occurred.-
Nested classes/interfaces inherited from interface org.apache.calcite.sql.validate.SqlValidatorScope
SqlValidatorScope.EmptyPath, SqlValidatorScope.Path, SqlValidatorScope.Resolve, SqlValidatorScope.ResolvedImpl, SqlValidatorScope.Step
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
distinct
java.util.function.Supplier<AggregatingSelectScope.Resolved>
resolved
private SqlSelect
select
private java.util.List<SqlNode>
temporaryGroupExprList
Use while under construction.-
Fields inherited from class org.apache.calcite.sql.validate.DelegatingScope
parent, validator
-
-
Constructor Summary
Constructors Constructor Description AggregatingSelectScope(SqlValidatorScope selectScope, SqlSelect select, boolean distinct)
Creates an AggregatingSelectScope
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static boolean
allContain(java.util.List<ImmutableBitSet> bitSets, int bit)
boolean
checkAggregateExpr(SqlNode expr, boolean deep)
Checks whether an expression is constant within the GROUP BY clause.private Pair<com.google.common.collect.ImmutableList<SqlNode>,com.google.common.collect.ImmutableList<SqlNode>>
getGroupExprs()
Returns the expressions that are in the GROUP BY clause (or the SELECT DISTINCT clause, if distinct) and that can therefore be referenced without being wrapped in aggregate functions.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.RelDataType
nullifyType(SqlNode node, RelDataType type)
Converts the type of an expression to nullable, if the context warrants it.private AggregatingSelectScope.Resolved
resolve()
void
validateExpr(SqlNode expr)
Performs any scope-specific validation of an expression.-
Methods inherited from class org.apache.calcite.sql.validate.DelegatingScope
addChild, addColumnNames, findAliases, findAllColumnNames, findQualifyingTableName, findQualifyingTableNames, fullyQualify, getMonotonicity, getOrderList, getParent, getTableNamespace, getValidator, lookupWindow, resolve, resolveColumn, resolveInNamespace, resolveTable
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.calcite.sql.validate.SqlValidatorScope
addChild, findAliases, findAllColumnNames, findQualifyingTableName, findQualifyingTableNames, fullyQualify, getMonotonicity, getOrderList, getTableNamespace, getValidator, isWithin, lookupWindow, resolve, resolveColumn, resolveTable
-
-
-
-
Field Detail
-
select
private final SqlSelect select
-
distinct
private final boolean distinct
-
temporaryGroupExprList
private java.util.List<SqlNode> temporaryGroupExprList
Use while under construction.
-
resolved
public final java.util.function.Supplier<AggregatingSelectScope.Resolved> resolved
-
-
Constructor Detail
-
AggregatingSelectScope
AggregatingSelectScope(SqlValidatorScope selectScope, SqlSelect select, boolean distinct)
Creates an AggregatingSelectScope- Parameters:
selectScope
- Parent scopeselect
- Enclosing SELECT nodedistinct
- Whether SELECT is DISTINCT
-
-
Method Detail
-
resolve
private AggregatingSelectScope.Resolved resolve()
-
getGroupExprs
private Pair<com.google.common.collect.ImmutableList<SqlNode>,com.google.common.collect.ImmutableList<SqlNode>> getGroupExprs()
Returns the expressions that are in the GROUP BY clause (or the SELECT DISTINCT clause, if distinct) and that can therefore be referenced without being wrapped in aggregate functions.The expressions are fully-qualified, and any "*" in select clauses are expanded.
- Returns:
- list of grouping expressions
-
getNode
public SqlNode getNode()
Description copied from interface:SqlValidatorScope
Returns the root node of this scope. Never null.- Specified by:
getNode
in interfaceSqlValidatorScope
-
allContain
private static boolean allContain(java.util.List<ImmutableBitSet> bitSets, int bit)
-
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 interfaceSqlValidatorScope
- Overrides:
nullifyType
in classDelegatingScope
-
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 interfaceSqlValidatorScope
- Overrides:
getOperandScope
in classDelegatingScope
- Parameters:
call
- Call- Returns:
- Scope within which to validate arguments to call.
-
checkAggregateExpr
public boolean checkAggregateExpr(SqlNode expr, boolean deep)
Description copied from interface:AggregatingScope
Checks whether an expression is constant within the GROUP BY clause. If the expression completely matches an expression in the GROUP BY clause, returns true. If the expression is constant within the group, but does not exactly match, returns false. If the expression is not constant, throws an exception. Examples:- If we are 'f(b, c)' in 'SELECT a + f(b, c) FROM t GROUP BY a', then the whole expression matches a group column. Return true.
- Just an ordinary expression in a GROUP BY query, such as 'f(SUM(a), 1, b)' in 'SELECT f(SUM(a), 1, b) FROM t GROUP BY b'. Returns false.
- Illegal expression, such as 'f(5, a, b)' in 'SELECT f(a, b) FROM t GROUP BY a'. Throws when it enounters the 'b' operand, because it is not in the group clause.
- Specified by:
checkAggregateExpr
in interfaceAggregatingScope
-
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 interfaceSqlValidatorScope
- Overrides:
validateExpr
in classDelegatingScope
-
-