Package org.h2.command.query
Class SelectGroups
java.lang.Object
org.h2.command.query.SelectGroups
- Direct Known Subclasses:
SelectGroups.Grouped
,SelectGroups.Plain
Grouped data for aggregates.
Call sequence:
reset()
.- For each source row
nextSource()
should be invoked. done()
.next()
is invoked inside a loop until it returns null.
Call sequence for lazy group sorted result:
resetLazy()
(not required before the first execution).- For each source group
nextLazyGroup()
should be invoked. - For each source row
nextLazyRow()
should be invoked. Each group can have one or more rows.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) Object[]
The array of current group-by expression data e.g.(package private) int
The id of the current group.(package private) final ArrayList
<Expression> The query's column list, including invisible expressions such as order by expressions.private final HashMap
<Expression, Integer> Maps an expression object to an index, to use in accessing the Object[] pointed to by groupByData.(package private) final SessionLocal
The database session.private final HashMap
<DataAnalysisOperation, PartitionData> Maps an window expression object to its data.private final HashMap
<DataAnalysisOperation, TreeMap<Value, PartitionData>> Maps an partitioned window expression object to its data. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription(package private) final Object[]
Creates new object arrays to holds group-by data.void
done()
Invoked after all source rows are evaluated.final Object
Get the group-by data for the current group and the passed in expression.int
Returns identity of the current row.static SelectGroups
getInstance
(SessionLocal session, ArrayList<Expression> expressions, boolean isGroupQuery, int[] groupIndex) Creates new instance of grouped data.final PartitionData
getWindowExprData
(DataAnalysisOperation expr, Value partitionKey) Get the window data for the specified expression.boolean
Is there currently a group-by active.abstract ValueRow
next()
Returns the key of the next group.void
Moves group data to the next group in lazy mode.void
Moves group data to the next row in lazy mode.abstract void
Invoked for each source row to evaluate group key and setup all necessary data for aggregates.void
remove()
Removes the data for the current key.void
reset()
Resets this group data for reuse.void
Resets this group data for reuse in lazy mode.final void
setCurrentGroupExprData
(Expression expr, Object obj) Set the group-by data for the current group and the passed in expression.final void
setWindowExprData
(DataAnalysisOperation expr, Value partitionKey, PartitionData obj) Set the window data for the specified expression.(package private) abstract void
Update group-by data specified by implementation.
-
Field Details
-
session
The database session. -
expressions
The query's column list, including invisible expressions such as order by expressions. -
currentGroupByExprData
Object[] currentGroupByExprDataThe array of current group-by expression data e.g. AggregateData. -
exprToIndexInGroupByData
Maps an expression object to an index, to use in accessing the Object[] pointed to by groupByData. -
windowData
Maps an window expression object to its data. -
windowPartitionData
Maps an partitioned window expression object to its data. -
currentGroupRowId
int currentGroupRowIdThe id of the current group.
-
-
Constructor Details
-
SelectGroups
SelectGroups(SessionLocal session, ArrayList<Expression> expressions)
-
-
Method Details
-
getInstance
public static SelectGroups getInstance(SessionLocal session, ArrayList<Expression> expressions, boolean isGroupQuery, int[] groupIndex) Creates new instance of grouped data.- Parameters:
session
- the sessionexpressions
- the expressionsisGroupQuery
- is this query is a group querygroupIndex
- the indexes of group expressions, or null- Returns:
- new instance of the grouped data.
-
isCurrentGroup
public boolean isCurrentGroup()Is there currently a group-by active.- Returns:
true
if there is currently a group-by active, otherwise returnsfalse
.
-
getCurrentGroupExprData
Get the group-by data for the current group and the passed in expression.- Parameters:
expr
- expression- Returns:
- expression data or null
-
setCurrentGroupExprData
Set the group-by data for the current group and the passed in expression.- Parameters:
expr
- expressionobj
- expression data to set
-
createRow
Creates new object arrays to holds group-by data.- Returns:
- new object array to holds group-by data.
-
getWindowExprData
Get the window data for the specified expression.- Parameters:
expr
- expressionpartitionKey
- a key of partition- Returns:
- expression data or null
-
setWindowExprData
public final void setWindowExprData(DataAnalysisOperation expr, Value partitionKey, PartitionData obj) Set the window data for the specified expression.- Parameters:
expr
- expressionpartitionKey
- a key of partitionobj
- window expression data to set
-
updateCurrentGroupExprData
abstract void updateCurrentGroupExprData()Update group-by data specified by implementation. -
getCurrentGroupRowId
public int getCurrentGroupRowId()Returns identity of the current row. Used by aggregates to check whether they already processed this row or not.- Returns:
- identity of the current row
-
reset
public void reset()Resets this group data for reuse. -
nextSource
public abstract void nextSource()Invoked for each source row to evaluate group key and setup all necessary data for aggregates. -
done
public void done()Invoked after all source rows are evaluated. -
next
Returns the key of the next group.- Returns:
- the key of the next group, or null
-
remove
public void remove()Removes the data for the current key.- See Also:
-
resetLazy
public void resetLazy()Resets this group data for reuse in lazy mode. -
nextLazyGroup
public void nextLazyGroup()Moves group data to the next group in lazy mode. -
nextLazyRow
public void nextLazyRow()Moves group data to the next row in lazy mode.
-