Class AggregateSortObserver
- java.lang.Object
-
- org.apache.derby.impl.sql.execute.BasicSortObserver
-
- org.apache.derby.impl.sql.execute.AggregateSortObserver
-
- All Implemented Interfaces:
SortObserver
class AggregateSortObserver extends BasicSortObserver
This sort observer performs aggregation.
-
-
Field Summary
Fields Modifier and Type Field Description private GenericAggregator[]
aggsToInitialize
private GenericAggregator[]
aggsToProcess
private int
firstAggregatorColumn
-
Fields inherited from class org.apache.derby.impl.sql.execute.BasicSortObserver
distinct, doClone
-
-
Constructor Summary
Constructors Constructor Description AggregateSortObserver(boolean doClone, GenericAggregator[] aggsToProcess, GenericAggregator[] aggsToInitialize, ExecRow execRow)
Simple constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description DataValueDescriptor[]
insertDuplicateKey(DataValueDescriptor[] insertRow, DataValueDescriptor[] existingRow)
Called prior to inserting a duplicate sort key.DataValueDescriptor[]
insertNonDuplicateKey(DataValueDescriptor[] insertRow)
Called prior to inserting a distinct sort key.-
Methods inherited from class org.apache.derby.impl.sql.execute.BasicSortObserver
addToFreeList, deferrable, deferred, getArrayClone, rememberDuplicate
-
-
-
-
Field Detail
-
aggsToProcess
private final GenericAggregator[] aggsToProcess
-
aggsToInitialize
private final GenericAggregator[] aggsToInitialize
-
firstAggregatorColumn
private int firstAggregatorColumn
-
-
Constructor Detail
-
AggregateSortObserver
public AggregateSortObserver(boolean doClone, GenericAggregator[] aggsToProcess, GenericAggregator[] aggsToInitialize, ExecRow execRow)
Simple constructor- Parameters:
doClone
- If true, then rows that are retained by the sorter will be cloned. This is needed if language is reusing row wrappers.aggsToProcess
- the array of aggregates that need to be accumulated/merged in the sorter.aggsToInitialize
- the array of aggregates that need to be iniitialized as they are inserted into the sorter. This may be different than aggsToProcess in the case where some distinct aggregates are dropped in the initial pass of a two phase aggregation for scalar or vector distinct aggregation. The initialization process consists of replacing an empty UserValue with a new, initialized aggregate of the appropriate type. Note that for each row, only the first aggregate in this list is checked to see whether initialization is needed. If so, ALL aggregates are initialized; otherwise, NO aggregates are initialized.execRow
- ExecRow to use as source of clone for store.
-
-
Method Detail
-
insertNonDuplicateKey
public DataValueDescriptor[] insertNonDuplicateKey(DataValueDescriptor[] insertRow) throws StandardException
Called prior to inserting a distinct sort key.- Specified by:
insertNonDuplicateKey
in interfaceSortObserver
- Overrides:
insertNonDuplicateKey
in classBasicSortObserver
- Parameters:
insertRow
- the current row that the sorter is on the verge of retaining- Returns:
- the row to be inserted by the sorter. If null, then nothing is inserted by the sorter. Distinct sorts will want to return null.
- Throws:
StandardException
- never thrown
-
insertDuplicateKey
public DataValueDescriptor[] insertDuplicateKey(DataValueDescriptor[] insertRow, DataValueDescriptor[] existingRow) throws StandardException
Called prior to inserting a duplicate sort key. We do aggregation here.- Specified by:
insertDuplicateKey
in interfaceSortObserver
- Overrides:
insertDuplicateKey
in classBasicSortObserver
- Parameters:
insertRow
- the current row that the sorter is on the verge of retaining. It is a duplicate of existingRow.existingRow
- the row that is already in the the sorter which is a duplicate of insertRow- Returns:
- the row to be inserted by the sorter. If null, then nothing is inserted by the sorter. Distinct sorts will want to return null.
- Throws:
StandardException
- never thrown
-
-