Class UserDefinedAggregator
- java.lang.Object
-
- org.apache.derby.impl.sql.execute.UserDefinedAggregator
-
- All Implemented Interfaces:
java.io.Externalizable
,java.io.Serializable
,Formatable
,TypedFormat
,ExecAggregator
public final class UserDefinedAggregator extends java.lang.Object implements ExecAggregator
Aggregator for user-defined aggregates. Wraps the application-supplied implementation of org.apache.derby.agg.Aggregator.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description private Aggregator
_aggregator
private boolean
_eliminatedNulls
private DataTypeDescriptor
_resultType
private static int
FIRST_VERSION
-
Constructor Summary
Constructors Constructor Description UserDefinedAggregator()
0-arg constructor for Formatable interface
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
accumulate(DataValueDescriptor addend, java.lang.Object ga)
Iteratively accumulates the addend into the aggregator.boolean
didEliminateNulls()
Return true if the aggregation eliminated at least one null from the input data set.DataValueDescriptor
getResult()
Return the result of the aggregation. .int
getTypeFormatId()
Get the formatID which corresponds to this class.private void
logAggregatorInstantiationError(java.lang.String aggregateName, java.lang.Throwable t)
Record an instantiation error trying to load the aggregator class.void
merge(ExecAggregator addend)
Merges one aggregator into a another aggregator.ExecAggregator
newAggregator()
Return a new initialized copy of this aggregator, any state set by the setup() method of the original Aggregator must be copied into the new aggregator.void
readExternal(java.io.ObjectInput in)
private void
setup(java.lang.Class<?> udaClass, DataTypeDescriptor resultType)
Initialization logic shared by setup() and newAggregator()void
setup(ClassFactory classFactory, java.lang.String aggregateName, DataTypeDescriptor resultType)
Set's up the aggregate for processing.void
writeExternal(java.io.ObjectOutput out)
-
-
-
Field Detail
-
FIRST_VERSION
private static final int FIRST_VERSION
- See Also:
- Constant Field Values
-
_aggregator
private Aggregator _aggregator
-
_resultType
private DataTypeDescriptor _resultType
-
_eliminatedNulls
private boolean _eliminatedNulls
-
-
Method Detail
-
setup
public void setup(ClassFactory classFactory, java.lang.String aggregateName, DataTypeDescriptor resultType)
Description copied from interface:ExecAggregator
Set's up the aggregate for processing.- Specified by:
setup
in interfaceExecAggregator
- Parameters:
classFactory
- Database-specific class factory.aggregateName
- For builtin aggregates, this is a SQL aggregate name like MAX. For user-defined aggregates, this is the name of the user-written class which implements org.apache.derby.agg.Aggregator.resultType
- The type returned by the getResult() method.
-
setup
private void setup(java.lang.Class<?> udaClass, DataTypeDescriptor resultType)
Initialization logic shared by setup() and newAggregator()
-
didEliminateNulls
public boolean didEliminateNulls()
Description copied from interface:ExecAggregator
Return true if the aggregation eliminated at least one null from the input data set.- Specified by:
didEliminateNulls
in interfaceExecAggregator
-
accumulate
public void accumulate(DataValueDescriptor addend, java.lang.Object ga) throws StandardException
Description copied from interface:ExecAggregator
Iteratively accumulates the addend into the aggregator. Called on each member of the set of values that is being aggregated.- Specified by:
accumulate
in interfaceExecAggregator
- Parameters:
addend
- the DataValueDescriptor addend (current input to the aggregation)ga
- a result set getter- Throws:
StandardException
- on error
-
merge
public void merge(ExecAggregator addend) throws StandardException
Description copied from interface:ExecAggregator
Merges one aggregator into a another aggregator. Merges two partial aggregates results into a single result. Needed for:- parallel aggregation
- vector aggregation (GROUP BY)
- distinct aggregates (e.g. MAX(DISTINCT Col))
An example of a merge would be: given two COUNT() aggregators, C1 and C2, a merge of C1 into C2 would set C1.count += C2.count. So, given a CountAggregator with a getCount() method that returns its counts, its merge method might look like this:
public void merge(ExecAggregator inputAggregator) throws StandardException { count += ((CountAccgregator)inputAggregator).getCount(); }
- Specified by:
merge
in interfaceExecAggregator
- Parameters:
addend
- the other Aggregator (input partial aggregate)- Throws:
StandardException
- on error
-
getResult
public DataValueDescriptor getResult() throws StandardException
Return the result of the aggregation. .- Specified by:
getResult
in interfaceExecAggregator
- Returns:
- the aggregated result (could be a Java null).
- Throws:
StandardException
- on error
-
newAggregator
public ExecAggregator newAggregator()
Description copied from interface:ExecAggregator
Return a new initialized copy of this aggregator, any state set by the setup() method of the original Aggregator must be copied into the new aggregator.- Specified by:
newAggregator
in interfaceExecAggregator
- Returns:
- ExecAggregator the new aggregator
-
writeExternal
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException
- Specified by:
writeExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
- on error
-
readExternal
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException
- Specified by:
readExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
- on errorjava.lang.ClassNotFoundException
- See Also:
Externalizable.readExternal(java.io.ObjectInput)
-
getTypeFormatId
public int getTypeFormatId()
Get the formatID which corresponds to this class.- Specified by:
getTypeFormatId
in interfaceTypedFormat
- Returns:
- the formatID of this class
-
logAggregatorInstantiationError
private void logAggregatorInstantiationError(java.lang.String aggregateName, java.lang.Throwable t)
Record an instantiation error trying to load the aggregator class.
-
-