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

    public class Aggregate
    extends AbstractAggregate
    implements ExpressionWithFlags

Implements the integrated aggregate functions, such as COUNT, MAX, SUM.

### Field Summary

### Fields inherited from class org.h2.expression.aggregate.AbstractAggregate

`args, distinct, filterCondition, type`

### 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
Constructor and Description
`Aggregate(AggregateType aggregateType, Expression[] args, Select select, boolean distinct)` Create a new aggregate object.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`protected java.lang.Object` `createAggregateData()` Create aggregate data object specific to the subclass.
`Value` `getAggregatedValue(SessionLocal session, java.lang.Object aggregateData)` Returns aggregated value.
`AggregateType` `getAggregateType()` Returns the type of this aggregate.
`static AggregateType` `getAggregateType(java.lang.String name)` Get the aggregate type for this name, or -1 if no aggregate has been found.
`int` `getCost()` Estimate the cost to process the expression.
`java.lang.Object` `getExtraArguments()` Returns the additional arguments.
`int` `getFlags()` Returns the flags.
`protected int` `getNumExpressions()` Returns the number of expressions, excluding OVER clause.
`Select` `getSelect()` Returns the select statement.
`java.lang.StringBuilder` `getUnenclosedSQL(java.lang.StringBuilder builder, int sqlFlags)` Get the SQL statement of this expression.
`Value` `getValue(SessionLocal session)` Return the resulting value for the current row.
`boolean` `isDistinct()` Returns if distinct is used.
`boolean` `isEverything(ExpressionVisitor visitor)` Check if this expression and all sub-expressions can fulfill a criteria.
`void` `mapColumnsAnalysis(ColumnResolver resolver, int level, int innerState)` Map the columns of the resolver to expression columns.
`Expression` `optimize(SessionLocal session)` Try to optimize the expression.
`protected void` `rememberExpressions(SessionLocal session, Value[] array)` Stores current values of expressions into the specified array.
`void` `setEvaluatable(TableFilter tableFilter, boolean b)` Tell the expression columns whether the table filter can return values now.
`void` `setExtraArguments(java.lang.Object extraArguments)` Sets the additional arguments.
`void` `setFlags(int flags)` Set the flags for this expression.
`void` `setOrderByList(java.util.ArrayList<QueryOrderBy> orderByList)` Set the order for ARRAY_AGG() or GROUP_CONCAT() aggregate.
`protected void` `updateAggregate(SessionLocal session, java.lang.Object aggregateData)` Updates an aggregate value.
`protected void` `updateFromExpressions(SessionLocal session, java.lang.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.aggregate.AbstractAggregate

`appendTailConditions, getFilterCondition, getOrderedResultLoop, getSubexpression, getSubexpressionCount, getType, isAggregate, setFilterCondition, updateAggregate`

### Methods inherited from class org.h2.expression.analysis.DataAnalysisOperation

`createOrder, getGroupData, getOverCondition, getOverOrderBySort, getWindowData, mapColumns, setOverCondition, updateAggregate, updateOrderedAggregate`

### Methods 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, 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`

### Constructor Detail

#### Aggregate

    public Aggregate(AggregateType aggregateType,
                     Expression[] args,
                     Select select,
                     boolean distinct)

Create a new aggregate object.

Parameters:
  `aggregateType` - the aggregate type
  `args` - the aggregated expressions
  `select` - the select statement
  `distinct` - if distinct is used

### Method Detail

#### getAggregateType

    public static AggregateType getAggregateType(java.lang.String name)

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

    public void setOrderByList(java.util.ArrayList<QueryOrderBy> orderByList)

Set the order for ARRAY_AGG() or GROUP_CONCAT() aggregate.

Parameters:
  `orderByList` - the order by list

#### getAggregateType

    public AggregateType getAggregateType()

Returns the type of this aggregate.

Returns:
  the type of this aggregate

#### setExtraArguments

    public void setExtraArguments(java.lang.Object extraArguments)

Sets the additional arguments.

Parameters:
  `extraArguments` - the additional arguments

#### getExtraArguments

    public java.lang.Object getExtraArguments()

Returns the additional arguments.

Returns:
  the additional arguments

#### setFlags

    public void setFlags(int flags)

Description copied from interface: `ExpressionWithFlags`
Set the flags for this expression.

Specified by:
  `setFlags` in interface `ExpressionWithFlags`
Parameters:
  `flags` - the flags to set

#### getFlags

    public int getFlags()

Description copied from interface: `ExpressionWithFlags`
Returns the flags.

Specified by:
  `getFlags` in interface `ExpressionWithFlags`
Returns:
  the flags

#### updateAggregate

    protected void updateAggregate(SessionLocal session,
                                   java.lang.Object aggregateData)

Description copied from class: `AbstractAggregate`
Updates an aggregate value.

Specified by:
  `updateAggregate` in class `AbstractAggregate`
Parameters:
  `session` - the session
  `aggregateData` - aggregate data

#### updateGroupAggregates

    protected void updateGroupAggregates(SessionLocal session,
                                         int stage)

Description copied from class: `DataAnalysisOperation`
Invoked when processing group stage of grouped window queries to update arguments of this aggregate.

Overrides:
  `updateGroupAggregates` in class `AbstractAggregate`
Parameters:
  `session` - the session
  `stage` - select stage

#### getNumExpressions

    protected int getNumExpressions()

Description copied from class: `DataAnalysisOperation`
Returns the number of expressions, excluding OVER clause.

Specified by:
  `getNumExpressions` in class `DataAnalysisOperation`
Returns:
  the number of expressions

#### rememberExpressions

    protected void rememberExpressions(SessionLocal session,
                                       Value[] array)

Description copied from class: `DataAnalysisOperation`
Stores current values of expressions into the specified array.

Specified by:
  `rememberExpressions` in class `DataAnalysisOperation`
Parameters:
  `session` - the session
  `array` - array to store values of expressions

#### updateFromExpressions

    protected void updateFromExpressions(SessionLocal session,
                                         java.lang.Object aggregateData,
                                         Value[] array)

Description copied from class: `AbstractAggregate`
Updates the provided aggregate data from the remembered expressions.

Specified by:
  `updateFromExpressions` in class `AbstractAggregate`
Parameters:
  `session` - the session
  `aggregateData` - aggregate data
  `array` - values of expressions

#### createAggregateData

    protected java.lang.Object createAggregateData()

Description copied from class: `DataAnalysisOperation`
Create aggregate data object specific to the subclass.

Specified by:
  `createAggregateData` in class `DataAnalysisOperation`
Returns:
  aggregate-specific data object.

#### getValue

    public Value getValue(SessionLocal session)

Description copied from class: `Expression`
Return the resulting value for the current row.

Overrides:
  `getValue` in class `DataAnalysisOperation`
Parameters:
  `session` - the session
Returns:
  the result

#### getAggregatedValue

    public Value getAggregatedValue(SessionLocal session,
                                    java.lang.Object aggregateData)

Description copied from class: `DataAnalysisOperation`
Returns aggregated value.

Specified by:
  `getAggregatedValue` in class `DataAnalysisOperation`
Parameters:
  `session` - the session
  `aggregateData` - the aggregate data
Returns:
  aggregated value.

#### mapColumnsAnalysis

    public void mapColumnsAnalysis(ColumnResolver resolver,
                                   int level,
                                   int innerState)

Description copied from class: `DataAnalysisOperation`
Map the columns of the resolver to expression columns.

Overrides:
  `mapColumnsAnalysis` in class `AbstractAggregate`
Parameters:
  `resolver` - the column resolver
  `level` - the subquery nesting level
  `innerState` - one of the Expression MAP_IN_* values

#### optimize

    public Expression optimize(SessionLocal session)

Description copied from class: `Expression`
Try to optimize the expression.

Overrides:
  `optimize` in class `AbstractAggregate`
Parameters:
  `session` - the session
Returns:
  the optimized expression

#### setEvaluatable

    public void setEvaluatable(TableFilter tableFilter,
                               boolean b)

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 class `AbstractAggregate`
Parameters:
  `tableFilter` - the table filter
  `b` - true if the table filter can return value

#### getUnenclosedSQL

    public java.lang.StringBuilder getUnenclosedSQL(java.lang.StringBuilder builder,
                                                    int sqlFlags)

Description copied from class: `Expression`
Get 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:
  `getUnenclosedSQL` in class `Expression`
Parameters:
  `builder` - string builder
  `sqlFlags` - formatting flags
Returns:
  the specified string builder

#### isEverything

    public boolean isEverything(ExpressionVisitor visitor)

Description copied from class: `Expression`
Check if this expression and all sub-expressions can fulfill a criteria. If any part returns false, the result is false.

Overrides:
  `isEverything` in class `DataAnalysisOperation`
Parameters:
  `visitor` - the visitor
Returns:
  if the criteria can be fulfilled

#### getCost

    public int getCost()

Description copied from class: `Expression`
Estimate the cost to process the expression. Used when optimizing the query, to calculate the query plan with the lowest estimated cost.

Specified by:
  `getCost` in class `Expression`
Returns:
  the estimated cost

#### getSelect

    public Select getSelect()

Returns the select statement.

Returns:
  the select statement

#### isDistinct

    public boolean isDistinct()

Returns if distinct is used.

Returns:
  if distinct is used