Class ScalarAggregateResultSet

All Implemented Interfaces:
CursorResultSet, NoPutResultSet, ResultSet, RowLocationRetRowSource, RowSource
Direct Known Subclasses:
DistinctScalarAggregateResultSet

class ScalarAggregateResultSet extends GenericAggregateResultSet implements CursorResultSet
This ResultSet evaluates scalar, non distinct aggregates. It will scan the entire source result set and calculate the scalar aggregates when scanning the source during the first call to next().
  • Field Details

    • rowsInput

      public int rowsInput
    • singleInputRow

      public boolean singleInputRow
    • isInSortedOrder

      protected boolean isInSortedOrder
    • sourceExecIndexRow

      protected ExecIndexRow sourceExecIndexRow
    • nextSatisfied

      private boolean nextSatisfied
    • countOfRows

      protected int countOfRows
  • Constructor Details

    • ScalarAggregateResultSet

      ScalarAggregateResultSet(NoPutResultSet s, boolean isInSortedOrder, int aggregateItem, Activation a, int ra, int resultSetNumber, boolean singleInputRow, double optimizerEstimatedRowCount, double optimizerEstimatedCost) throws StandardException
      Constructor
      Parameters:
      s - input result set
      isInSortedOrder - true if the source results are in sorted order
      aggregateItem - indicates the number of the SavedObject off of the PreparedStatement that holds the AggregatorInfoList used by this routine.
      a - activation
      ra - saved object that builds an empty output row
      resultSetNumber - The resultSetNumber for this result set
      Throws:
      StandardException - Thrown on error
  • Method Details

    • openCore

      public void openCore() throws StandardException
      Open the scan. Load the sorter and prepare to get rows from it.
      Specified by:
      openCore in interface NoPutResultSet
      Throws:
      StandardException - thrown if cursor finished.
    • getNextRowCore

      public ExecRow getNextRowCore() throws StandardException
      Return the next row. If it is a scalar aggregate scan
      Specified by:
      getNextRowCore in interface NoPutResultSet
      Specified by:
      getNextRowCore in class BasicNoPutResultSetImpl
      Returns:
      the next row in the result
      Throws:
      StandardException - thrown on failure.
      StandardException - ResultSetNotOpen thrown if not yet open.
      See Also:
    • close

      public void close() throws StandardException
      If the result set has been opened, close the open scan.
      Specified by:
      close in interface ResultSet
      Overrides:
      close in class NoPutResultSetImpl
      Throws:
      StandardException - thrown on error
    • getTimeSpent

      public long getTimeSpent(int type)
      Return the total amount of time spent in this ResultSet
      Specified by:
      getTimeSpent in interface ResultSet
      Parameters:
      type - CURRENT_RESULTSET_ONLY - time spent only in this ResultSet ENTIRE_RESULTSET_TREE - time spent in this ResultSet and below.
      Returns:
      long The total amount of time spent (in milliseconds).
    • getRowLocation

      public RowLocation getRowLocation() throws StandardException
      This result set has its row location from the last fetch done. Always returns null.
      Specified by:
      getRowLocation in interface CursorResultSet
      Returns:
      the row location of the current cursor row.
      Throws:
      StandardException - thrown on failure to get row location
      See Also:
    • getCurrentRow

      public ExecRow getCurrentRow() throws StandardException
      This result set has its row from the last fetch done. If the cursor is closed, a null is returned.
      Specified by:
      getCurrentRow in interface CursorResultSet
      Returns:
      the last row returned;
      Throws:
      StandardException - thrown on failure.
      See Also:
    • getRowFromResultSet

      public ExecIndexRow getRowFromResultSet(boolean doClone) throws StandardException
      Get a row from the input result set.
      Parameters:
      doClone - - true of the row should be cloned
      Throws:
      StandardException - Thrown on error
    • reopenCore

      public void reopenCore() throws StandardException
      reopen a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values...
      Specified by:
      reopenCore in interface NoPutResultSet
      Overrides:
      reopenCore in class BasicNoPutResultSetImpl
      Throws:
      StandardException - thrown if cursor finished.
      See Also:
    • accumulateScalarAggregation

      protected void accumulateScalarAggregation(ExecRow inputRow, ExecRow accumulateRow, boolean hasDistinctAggregates) throws StandardException
      Run accumulation on every aggregate in this row. This method is useful when draining the source or sorter, depending on whether or not there were any distinct aggregates. Remember, if there are distinct aggregates, then the non-distinct aggregates were calculated on the way into the sorter and only the distinct aggregates will be accumulated here. Otherwise, all aggregates will be accumulated here.
      Parameters:
      inputRow - the input row
      accumulateRow - the row with the accumulator (may be the same as the input row.
      hasDistinctAggregates - does this scan have distinct aggregates. Used to figure out whether to merge or accumulate nondistinct aggregates.
      Throws:
      StandardException - Thrown on error
    • initializeScalarAggregation

      private void initializeScalarAggregation(ExecRow row) throws StandardException
      Throws:
      StandardException