Package org.h2.expression.aggregate
Class Aggregate
java.lang.Object
org.h2.expression.Expression
org.h2.expression.analysis.DataAnalysisOperation
org.h2.expression.aggregate.AbstractAggregate
org.h2.expression.aggregate.Aggregate
- All Implemented Interfaces:
ExpressionWithFlags,HasSQL,Typed
Implements the integrated aggregate functions, such as COUNT, MAX, SUM.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intThe additional precision and scale in decimal digits for an AVG aggregate function.private static final intThe additional result precision in decimal digits for a SUM aggregate function.private static final HashMap<String, AggregateType> private final AggregateTypeprivate Objectprivate intprivate ArrayList<QueryOrderBy> private SortOrderFields inherited from class org.h2.expression.aggregate.AbstractAggregate
args, distinct, filterCondition, typeFields inherited from class org.h2.expression.analysis.DataAnalysisOperation
over, overOrderBySort, select, STAGE_GROUP, STAGE_RESET, STAGE_WINDOWFields inherited from class org.h2.expression.Expression
AUTO_PARENTHESES, MAP_IN_AGGREGATE, MAP_IN_WINDOW, MAP_INITIAL, WITH_PARENTHESES, WITHOUT_PARENTHESESFields 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
ConstructorsConstructorDescriptionAggregate(AggregateType aggregateType, Expression[] args, Select select, boolean distinct) Create a new aggregate object. -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidaddAggregate(String name, AggregateType type) private static Valuecollect(SessionLocal session, AggregateDataCollecting c, AggregateData d) protected ObjectCreate aggregate data object specific to the subclass.getAggregatedValue(SessionLocal session, Object aggregateData) Returns aggregated value.Returns the type of this aggregate.static AggregateTypegetAggregateType(String name) Get the aggregate type for this name, or -1 if no aggregate has been found.private static TypeInfogetAvgType(TypeInfo type) intgetCost()Estimate the cost to process the expression.private static ValuegetCumeDist(Value[] ordered, Value arg, Comparator<Value> sort) Returns the additional arguments.intgetFlags()Returns the flags.private ValuegetHistogram(SessionLocal session, AggregateData data) private ValuegetHypotheticalSet(SessionLocal session, AggregateData data) private ValuegetListagg(SessionLocal session, AggregateData data) private StringBuildergetListaggError(Value[] array, String separator) private Stringprivate StringBuildergetListaggTruncate(Value[] array, String separator, String filter, boolean withoutCount) private Indexprivate ValuegetMode(SessionLocal session, AggregateData data) protected intReturns the number of expressions, excluding OVER clause.private ValuegetRank(Value[] ordered, Value arg, Comparator<Value> sort) private ValuegetSecondValue(SessionLocal session, Value[] remembered) Returns the select statement.private StringBuildergetSQLArrayAggregate(StringBuilder builder, int sqlFlags) private StringBuildergetSQLJsonArrayAggregate(StringBuilder builder, int sqlFlags) private StringBuildergetSQLJsonObjectAggregate(StringBuilder builder, int sqlFlags) private StringBuildergetSQLListagg(StringBuilder builder, int sqlFlags) private static TypeInfogetSumType(TypeInfo type) getUnenclosedSQL(StringBuilder builder, int sqlFlags) Get the SQL statement of this expression.getValue(SessionLocal session) Return the resulting value for the current row.private ValuegetValueQuick(SessionLocal session) booleanReturns if distinct is used.booleanisEverything(ExpressionVisitor visitor) Check if this expression and all sub-expressions can fulfill a criteria.voidmapColumnsAnalysis(ColumnResolver resolver, int level, int innerState) Map the columns of the resolver to expression columns.optimize(SessionLocal session) Try to optimize the expression.protected voidrememberExpressions(SessionLocal session, Value[] array) Stores current values of expressions into the specified array.voidsetEvaluatable(TableFilter tableFilter, boolean b) Tell the expression columns whether the table filter can return values now.voidsetExtraArguments(Object extraArguments) Sets the additional arguments.voidsetFlags(int flags) Set the flags for this expression.voidsetOrderByList(ArrayList<QueryOrderBy> orderByList) Set the order for ARRAY_AGG() or GROUP_CONCAT() aggregate.private voidsortWithOrderBy(Value[] array) protected voidupdateAggregate(SessionLocal session, Object aggregateData) Updates an aggregate value.private ValueupdateCollecting(SessionLocal session, Value v, Value[] remembered) private voidupdateData(SessionLocal session, AggregateData data, Value v, Value[] remembered) protected voidupdateFromExpressions(SessionLocal session, Object aggregateData, Value[] array) Updates the provided aggregate data from the remembered expressions.protected voidupdateGroupAggregates(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.aggregate.AbstractAggregate
appendTailConditions, getOrderedResultLoop, getSubexpression, getSubexpressionCount, getType, isAggregate, setFilterCondition, updateAggregateMethods inherited from class org.h2.expression.analysis.DataAnalysisOperation
createOrder, getGroupData, getOverOrderBySort, getWindowData, mapColumns, setOverCondition, updateAggregate, updateOrderedAggregateMethods inherited from class org.h2.expression.Expression
addFilterConditions, createIndexConditions, getAlias, getBooleanValue, getColumnName, getColumnNameForView, getEnclosedSQL, getNonAliasExpression, getNotIfPossible, getNullable, getSchemaName, getSQL, getSQL, getSQL, getSQL, getTableAlias, getTableName, getWhenSQL, getWhenValue, isConstant, isIdentity, isNullConstant, isValueSet, isWhenConditionOperand, needParentheses, optimizeCondition, toString, writeExpressions, writeExpressionsMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.h2.util.HasSQL
getTraceSQL
-
Field Details
-
ADDITIONAL_SUM_PRECISION
private static final int ADDITIONAL_SUM_PRECISIONThe additional result precision in decimal digits for a SUM aggregate function.- See Also:
-
ADDITIONAL_AVG_SCALE
private static final int ADDITIONAL_AVG_SCALEThe additional precision and scale in decimal digits for an AVG aggregate function.- See Also:
-
AGGREGATES
-
aggregateType
-
orderByList
-
orderBySort
-
extraArguments
-
flags
private int flags
-
-
Constructor Details
-
Aggregate
Create a new aggregate object.- Parameters:
aggregateType- the aggregate typeargs- the aggregated expressionsselect- the select statementdistinct- if distinct is used
-
-
Method Details
-
addAggregate
-
getAggregateType
Get the aggregate type for this name, or -1 if no aggregate has been found.- Parameters:
name- the aggregate function name- Returns:
- null if no aggregate function has been found, or the aggregate type
-
setOrderByList
Set the order for ARRAY_AGG() or GROUP_CONCAT() aggregate.- Parameters:
orderByList- the order by list
-
getAggregateType
Returns the type of this aggregate.- Returns:
- the type of this aggregate
-
setExtraArguments
Sets the additional arguments.- Parameters:
extraArguments- the additional arguments
-
getExtraArguments
Returns the additional arguments.- Returns:
- the additional arguments
-
setFlags
public void setFlags(int flags) Description copied from interface:ExpressionWithFlagsSet the flags for this expression.- Specified by:
setFlagsin interfaceExpressionWithFlags- Parameters:
flags- the flags to set
-
getFlags
public int getFlags()Description copied from interface:ExpressionWithFlagsReturns the flags.- Specified by:
getFlagsin interfaceExpressionWithFlags- Returns:
- the flags
-
sortWithOrderBy
-
updateAggregate
Description copied from class:AbstractAggregateUpdates an aggregate value.- Specified by:
updateAggregatein classAbstractAggregate- Parameters:
session- the sessionaggregateData- aggregate data
-
updateData
-
getSecondValue
-
updateGroupAggregates
Description copied from class:DataAnalysisOperationInvoked when processing group stage of grouped window queries to update arguments of this aggregate.- Overrides:
updateGroupAggregatesin classAbstractAggregate- Parameters:
session- the sessionstage- select stage
-
updateCollecting
-
getNumExpressions
protected int getNumExpressions()Description copied from class:DataAnalysisOperationReturns the number of expressions, excluding OVER clause.- Specified by:
getNumExpressionsin classDataAnalysisOperation- Returns:
- the number of expressions
-
rememberExpressions
Description copied from class:DataAnalysisOperationStores current values of expressions into the specified array.- Specified by:
rememberExpressionsin classDataAnalysisOperation- Parameters:
session- the sessionarray- array to store values of expressions
-
updateFromExpressions
Description copied from class:AbstractAggregateUpdates the provided aggregate data from the remembered expressions.- Specified by:
updateFromExpressionsin classAbstractAggregate- Parameters:
session- the sessionaggregateData- aggregate dataarray- values of expressions
-
createAggregateData
Description copied from class:DataAnalysisOperationCreate aggregate data object specific to the subclass.- Specified by:
createAggregateDatain classDataAnalysisOperation- Returns:
- aggregate-specific data object.
-
getValue
Description copied from class:ExpressionReturn the resulting value for the current row.- Overrides:
getValuein classDataAnalysisOperation- Parameters:
session- the session- Returns:
- the result
-
getValueQuick
-
getAggregatedValue
Description copied from class:DataAnalysisOperationReturns aggregated value.- Specified by:
getAggregatedValuein classDataAnalysisOperation- Parameters:
session- the sessionaggregateData- the aggregate data- Returns:
- aggregated value.
-
collect
-
getHypotheticalSet
-
getRank
-
getCumeDist
-
getListagg
-
getListaggError
-
getListaggTruncate
private StringBuilder getListaggTruncate(Value[] array, String separator, String filter, boolean withoutCount) -
getListaggItem
-
getHistogram
-
getMode
-
mapColumnsAnalysis
Description copied from class:DataAnalysisOperationMap the columns of the resolver to expression columns.- Overrides:
mapColumnsAnalysisin classAbstractAggregate- Parameters:
resolver- the column resolverlevel- the subquery nesting levelinnerState- one of the Expression MAP_IN_* values
-
optimize
Description copied from class:ExpressionTry to optimize the expression.- Overrides:
optimizein classAbstractAggregate- Parameters:
session- the session- Returns:
- the optimized expression
-
getSumType
-
getAvgType
-
setEvaluatable
Description copied from class:ExpressionTell the expression columns whether the table filter can return values now. This is used when optimizing the query.- Overrides:
setEvaluatablein classAbstractAggregate- Parameters:
tableFilter- the table filterb- true if the table filter can return value
-
getUnenclosedSQL
Description copied from class:ExpressionGet the SQL statement of this expression. This may not always be the original SQL statement, especially after optimization. Enclosing '(' and ')' are never appended.- Specified by:
getUnenclosedSQLin classExpression- Parameters:
builder- string buildersqlFlags- formatting flags- Returns:
- the specified string builder
-
getSQLArrayAggregate
-
getSQLListagg
-
getSQLJsonObjectAggregate
-
getSQLJsonArrayAggregate
-
getMinMaxColumnIndex
-
isEverything
Description copied from class:ExpressionCheck if this expression and all sub-expressions can fulfill a criteria. If any part returns false, the result is false.- Overrides:
isEverythingin classDataAnalysisOperation- Parameters:
visitor- the visitor- Returns:
- if the criteria can be fulfilled
-
getCost
public int getCost()Description copied from class:ExpressionEstimate the cost to process the expression. Used when optimizing the query, to calculate the query plan with the lowest estimated cost.- Specified by:
getCostin classExpression- Returns:
- the estimated cost
-
getSelect
Returns the select statement.- Returns:
- the select statement
-
isDistinct
public boolean isDistinct()Returns if distinct is used.- Returns:
- if distinct is used
-