Class OrderableAggregator

java.lang.Object
org.apache.derby.impl.sql.execute.SystemAggregator
org.apache.derby.impl.sql.execute.OrderableAggregator
All Implemented Interfaces:
Externalizable, Serializable, Formatable, TypedFormat, ExecAggregator
Direct Known Subclasses:
MaxMinAggregator, SumAggregator

abstract class OrderableAggregator extends SystemAggregator
Abstract aggregator for Orderable aggregates (max/min).
  • Field Details

  • Constructor Details

    • OrderableAggregator

      OrderableAggregator()
  • Method Details

    • setup

      public void setup(ClassFactory cf, 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:
    • 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 String toString()
      Overrides:
      toString in class SystemAggregator
    • writeExternal

      public void writeExternal(ObjectOutput out) throws 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 Externalizable
      Overrides:
      writeExternal in class SystemAggregator
      Throws:
      IOException - on error
      See Also:
    • readExternal

      public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
      Specified by:
      readExternal in interface Externalizable
      Overrides:
      readExternal in class SystemAggregator
      Throws:
      IOException - on error
      ClassNotFoundException - on error
      See Also: