Class CountAggregator

java.lang.Object
org.apache.derby.impl.sql.execute.SystemAggregator
org.apache.derby.impl.sql.execute.CountAggregator
All Implemented Interfaces:
Externalizable, Serializable, Formatable, TypedFormat, ExecAggregator

public final class CountAggregator extends SystemAggregator
Aggregator for COUNT()/COUNT(*).
See Also:
  • Field Details

    • value

      private long value
    • isCountStar

      private boolean isCountStar
  • Constructor Details

    • CountAggregator

      public CountAggregator()
  • Method Details

    • setup

      public void setup(ClassFactory cf, String aggregateName, DataTypeDescriptor returnType)
      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.
      returnType - 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()
      Return the result of the aggregation. Just spit out the running count.
      Returns:
      the value as a Long
    • accumulate

      public void accumulate(DataValueDescriptor addend, Object ga) throws StandardException
      Accumulate for count(). Toss out all nulls in this kind of count. Increment the count for count(*). Count even the null values.
      Specified by:
      accumulate in interface ExecAggregator
      Overrides:
      accumulate in class SystemAggregator
      Parameters:
      addend - value to be added in
      ga - the generic aggregator that is calling me
      Throws:
      StandardException - on error
      See Also:
    • accumulate

      protected final void accumulate(DataValueDescriptor addend)
      Specified by:
      accumulate in class SystemAggregator
    • 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.
      Returns:
      ExecAggregator the new aggregator
    • isCountStar

      public boolean isCountStar()
    • writeExternal

      public final 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.
      Specified by:
      writeExternal in interface Externalizable
      Overrides:
      writeExternal in class SystemAggregator
      Throws:
      IOException - thrown on error
    • readExternal

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

      public int getTypeFormatId()
      Get the formatID which corresponds to this class.
      Returns:
      the formatID of this class