org.apache.derby.impl.sql.execute
Class OrderableAggregator
java.lang.Object
org.apache.derby.impl.sql.execute.SystemAggregator
org.apache.derby.impl.sql.execute.OrderableAggregator
- All Implemented Interfaces:
- java.io.Externalizable, java.io.Serializable, Formatable, TypedFormat, ExecAggregator
- Direct Known Subclasses:
- MaxMinAggregator, SumAggregator
abstract class OrderableAggregator
- extends SystemAggregator
Abstract aggregator for Orderable aggregates (max/min).
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
value
protected DataValueDescriptor value
OrderableAggregator
OrderableAggregator()
setup
public void setup(ClassFactory cf,
java.lang.String aggregateName,
DataTypeDescriptor returnDataType)
- Description copied from interface:
ExecAggregator
- Set's up the aggregate for processing.
- Parameters:
cf - 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.returnDataType - The type returned by the getResult() method.
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();
}
- Parameters:
addend - the other Aggregator
(input partial aggregate)
- Throws:
StandardException - on error- See Also:
ExecAggregator.merge(org.apache.derby.iapi.sql.execute.ExecAggregator)
getResult
public DataValueDescriptor getResult()
throws StandardException
- Return the result of the operations that we
have been performing. Returns a DataValueDescriptor.
- Returns:
- the result as a DataValueDescriptor
- Throws:
StandardException - on error
toString
public java.lang.String toString()
- Overrides:
toString in class SystemAggregator
writeExternal
public void writeExternal(java.io.ObjectOutput out)
throws java.io.IOException
- Although we are not expected to be persistent per se,
we may be written out by the sorter temporarily. So
we need to be able to write ourselves out and read
ourselves back in. We rely on formatable to handle
situations where value is null.
Why would we be called to write ourselves out if we
are null? For scalar aggregates, we don't bother
setting up the aggregator since we only need a single
row. So for a scalar aggregate that needs to go to
disk, the aggregator might be null.
- Specified by:
writeExternal in interface java.io.Externalizable- Overrides:
writeExternal in class SystemAggregator
- Throws:
java.io.IOException - on error- See Also:
Externalizable.writeExternal(java.io.ObjectOutput)
readExternal
public void readExternal(java.io.ObjectInput in)
throws java.io.IOException,
java.lang.ClassNotFoundException
- Specified by:
readExternal in interface java.io.Externalizable- Overrides:
readExternal in class SystemAggregator
- Throws:
java.io.IOException - on error
java.lang.ClassNotFoundException - on error- See Also:
Externalizable.readExternal(java.io.ObjectInput)
Apache Derby V10.10 Internals - Copyright © 2004,2013 The Apache Software Foundation. All Rights Reserved.