Package org.h2.expression.aggregate
Class AbstractAggregate
java.lang.Object
org.h2.expression.Expression
org.h2.expression.analysis.DataAnalysisOperation
org.h2.expression.aggregate.AbstractAggregate
- Direct Known Subclasses:
Aggregate
,JavaAggregate
A base class for aggregate functions.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Expression[]
The arguments.protected final boolean
is this a DISTINCT aggregateprotected Expression
FILTER condition for aggregateprotected TypeInfo
The type of the result.Fields inherited from class org.h2.expression.analysis.DataAnalysisOperation
over, overOrderBySort, select, STAGE_GROUP, STAGE_RESET, STAGE_WINDOW
Fields inherited from class org.h2.expression.Expression
AUTO_PARENTHESES, MAP_IN_AGGREGATE, MAP_IN_WINDOW, MAP_INITIAL, WITH_PARENTHESES, WITHOUT_PARENTHESES
Fields inherited from interface org.h2.util.HasSQL
ADD_PLAN_INFORMATION, DEFAULT_SQL_FLAGS, NO_CASTS, QUOTE_ONLY_WHEN_REQUIRED, REPLACE_LOBS_FOR_TRACE, TRACE_SQL_FLAGS
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate void
aggregateFastPartition
(SessionLocal session, HashMap<Integer, Value> result, ArrayList<Value[]> ordered, int rowIdColumn, boolean grouped) private void
aggregateFastPartitionInReverse
(SessionLocal session, HashMap<Integer, Value> result, ArrayList<Value[]> ordered, int rowIdColumn, boolean grouped) private void
aggregateWholePartition
(SessionLocal session, HashMap<Integer, Value> result, ArrayList<Value[]> ordered, int rowIdColumn) protected StringBuilder
appendTailConditions
(StringBuilder builder, int sqlFlags, boolean forceOrderBy) Used to create SQL for the OVER and FILTER clauses.private static boolean
checkVariableBounds
(WindowFrame frame, ArrayList<Value[]> ordered) protected void
getOrderedResultLoop
(SessionLocal session, HashMap<Integer, Value> result, ArrayList<Value[]> ordered, int rowIdColumn) Returns result of this window function or window aggregate.getSubexpression
(int index) Returns subexpression with specified index.int
Returns count of subexpressions.getType()
Returns the data type.final boolean
Checks whether this expression is an aggregate function.void
mapColumnsAnalysis
(ColumnResolver resolver, int level, int innerState) Map the columns of the resolver to expression columns.optimize
(SessionLocal session) Try to optimize the expression.private int
processGroup
(HashMap<Integer, Value> result, Value r, ArrayList<Value[]> ordered, int rowIdColumn, int i, int size, boolean grouped) void
setEvaluatable
(TableFilter tableFilter, boolean b) Tell the expression columns whether the table filter can return values now.void
setFilterCondition
(Expression filterCondition) Sets the FILTER condition.protected abstract void
updateAggregate
(SessionLocal session, Object aggregateData) Updates an aggregate value.protected void
updateAggregate
(SessionLocal session, SelectGroups groupData, int groupRowId) Update a row of an aggregate.protected abstract void
updateFromExpressions
(SessionLocal session, Object aggregateData, Value[] array) Updates the provided aggregate data from the remembered expressions.protected void
updateGroupAggregates
(SessionLocal session, int stage) Invoked when processing group stage of grouped window queries to update arguments of this aggregate.Methods inherited from class org.h2.expression.analysis.DataAnalysisOperation
createAggregateData, createOrder, getAggregatedValue, getGroupData, getNumExpressions, getOverOrderBySort, getValue, getWindowData, isEverything, mapColumns, rememberExpressions, setOverCondition, updateAggregate, updateOrderedAggregate
Methods inherited from class org.h2.expression.Expression
addFilterConditions, createIndexConditions, getAlias, getBooleanValue, getColumnName, getColumnNameForView, getCost, getEnclosedSQL, getNonAliasExpression, getNotIfPossible, getNullable, getSchemaName, getSQL, getSQL, getSQL, getSQL, getTableAlias, getTableName, getUnenclosedSQL, getWhenSQL, getWhenValue, isConstant, isIdentity, isNullConstant, isValueSet, isWhenConditionOperand, needParentheses, optimizeCondition, toString, writeExpressions, writeExpressions
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.h2.util.HasSQL
getTraceSQL
-
Field Details
-
distinct
protected final boolean distinctis this a DISTINCT aggregate -
args
The arguments. -
filterCondition
FILTER condition for aggregate -
type
The type of the result.
-
-
Constructor Details
-
AbstractAggregate
AbstractAggregate(Select select, Expression[] args, boolean distinct)
-
-
Method Details
-
isAggregate
public final boolean isAggregate()Description copied from class:DataAnalysisOperation
Checks whether this expression is an aggregate function.- Specified by:
isAggregate
in classDataAnalysisOperation
- Returns:
- true if this is an aggregate function (including aggregates with OVER clause), false if this is a window function
-
setFilterCondition
Sets the FILTER condition.- Parameters:
filterCondition
- FILTER condition
-
getType
Description copied from class:Expression
Returns the data type. The data type may be unknown before the optimization phase.- Specified by:
getType
in interfaceTyped
- Specified by:
getType
in classExpression
- Returns:
- the data type
-
mapColumnsAnalysis
Description copied from class:DataAnalysisOperation
Map the columns of the resolver to expression columns.- Overrides:
mapColumnsAnalysis
in classDataAnalysisOperation
- Parameters:
resolver
- the column resolverlevel
- the subquery nesting levelinnerState
- one of the Expression MAP_IN_* values
-
optimize
Description copied from class:Expression
Try to optimize the expression.- Overrides:
optimize
in classDataAnalysisOperation
- Parameters:
session
- the session- Returns:
- the optimized expression
-
setEvaluatable
Description copied from class:Expression
Tell the expression columns whether the table filter can return values now. This is used when optimizing the query.- Overrides:
setEvaluatable
in classDataAnalysisOperation
- Parameters:
tableFilter
- the table filterb
- true if the table filter can return value
-
getOrderedResultLoop
protected void getOrderedResultLoop(SessionLocal session, HashMap<Integer, Value> result, ArrayList<Value[]> ordered, int rowIdColumn) Description copied from class:DataAnalysisOperation
Returns result of this window function or window aggregate. This method may not be called on window aggregate without window order clause.- Specified by:
getOrderedResultLoop
in classDataAnalysisOperation
- Parameters:
session
- the sessionresult
- the map to append result toordered
- ordered datarowIdColumn
- the index of row id value
-
checkVariableBounds
-
aggregateFastPartition
-
aggregateFastPartitionInReverse
-
processGroup
-
aggregateWholePartition
-
updateFromExpressions
protected abstract void updateFromExpressions(SessionLocal session, Object aggregateData, Value[] array) Updates the provided aggregate data from the remembered expressions.- Parameters:
session
- the sessionaggregateData
- aggregate dataarray
- values of expressions
-
updateAggregate
Description copied from class:DataAnalysisOperation
Update a row of an aggregate.- Specified by:
updateAggregate
in classDataAnalysisOperation
- Parameters:
session
- the database sessiongroupData
- data for the aggregate groupgroupRowId
- row id of group
-
updateAggregate
Updates an aggregate value.- Parameters:
session
- the sessionaggregateData
- aggregate data
-
updateGroupAggregates
Description copied from class:DataAnalysisOperation
Invoked when processing group stage of grouped window queries to update arguments of this aggregate.- Overrides:
updateGroupAggregates
in classDataAnalysisOperation
- Parameters:
session
- the sessionstage
- select stage
-
appendTailConditions
protected StringBuilder appendTailConditions(StringBuilder builder, int sqlFlags, boolean forceOrderBy) Description copied from class:DataAnalysisOperation
Used to create SQL for the OVER and FILTER clauses.- Overrides:
appendTailConditions
in classDataAnalysisOperation
- Parameters:
builder
- string buildersqlFlags
- formatting flagsforceOrderBy
- whether synthetic ORDER BY clause should be generated when it is missing- Returns:
- the builder object
-
getSubexpressionCount
public int getSubexpressionCount()Description copied from class:Expression
Returns count of subexpressions.- Overrides:
getSubexpressionCount
in classExpression
- Returns:
- count of subexpressions
-
getSubexpression
Description copied from class:Expression
Returns subexpression with specified index.- Overrides:
getSubexpression
in classExpression
- Parameters:
index
- 0-based index- Returns:
- subexpression with specified index, may be null
-