Class HashTableResultSet

All Implemented Interfaces:
CursorResultSet, NoPutResultSet, ResultSet, RowLocationRetRowSource, RowSource

class HashTableResultSet extends NoPutResultSetImpl implements CursorResultSet
Builds a hash table on the underlying result set tree.
  • Field Details

    • restrictionTime

      public long restrictionTime
    • projectionTime

      public long projectionTime
    • hashtableSize

      public int hashtableSize
    • scanProperties

      public Properties scanProperties
    • source

      public NoPutResultSet source
    • singleTableRestriction

      public GeneratedMethod singleTableRestriction
    • nextQualifiers

      public Qualifier[][] nextQualifiers
    • projection

      private GeneratedMethod projection
    • projectMapping

      private int[] projectMapping
    • runTimeStatsOn

      private boolean runTimeStatsOn
    • mappedResultRow

      private ExecRow mappedResultRow
    • reuseResult

      public boolean reuseResult
    • keyColumns

      public int[] keyColumns
    • removeDuplicates

      private boolean removeDuplicates
    • maxInMemoryRowCount

      private long maxInMemoryRowCount
    • initialCapacity

      private int initialCapacity
    • loadFactor

      private float loadFactor
    • skipNullKeyColumns

      private boolean skipNullKeyColumns
    • firstNext

      private boolean firstNext
    • numFetchedOnNext

      private int numFetchedOnNext
    • entryVectorSize

      private int entryVectorSize
    • entryVector

      private List entryVector
    • hashTableBuilt

      private boolean hashTableBuilt
    • firstIntoHashtable

      private boolean firstIntoHashtable
    • nextCandidate

      private ExecRow nextCandidate
    • projRow

      private ExecRow projRow
    • ht

  • Constructor Details

  • Method Details

    • openCore

      public void openCore() throws StandardException
      open a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values...
      Specified by:
      openCore in interface NoPutResultSet
      Throws:
      StandardException - thrown if cursor finished.
    • 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:
    • resetProbeVariables

      private void resetProbeVariables() throws StandardException
      Throws:
      StandardException
    • getNextRowCore

      public ExecRow getNextRowCore() throws StandardException
      Return the requested values computed from the next row (if any) for which the restriction evaluates to true.

      restriction and projection parameters are evaluated for each row.

      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:
    • 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).
    • 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
    • getRowLocation

      public RowLocation getRowLocation() throws StandardException
      Gets information from its source. We might want to have this take a CursorResultSet in its constructor some day, instead of doing a cast here?
      Specified by:
      getRowLocation in interface CursorResultSet
      Returns:
      the row location of the current cursor row.
      Throws:
      StandardException - thrown on failure.
      See Also:
    • getCurrentRow

      public ExecRow getCurrentRow() throws StandardException
      Gets last row returned.
      Specified by:
      getCurrentRow in interface CursorResultSet
      Returns:
      the last row returned.
      Throws:
      StandardException - thrown on failure.
      See Also:
    • doProjection

      private ExecRow doProjection(ExecRow sourceRow) throws StandardException
      Do the projection against the source row. Use reflection where necessary, otherwise get the source column into our result row.
      Parameters:
      sourceRow - The source row.
      Returns:
      The result of the projection
      Throws:
      StandardException - thrown on failure.
    • getNextRowFromRowSource

      public DataValueDescriptor[] getNextRowFromRowSource() throws StandardException
      Description copied from interface: RowSource
      Get the next row as an array of column objects. The column objects can be a JBMS Storable or any Serializable/Externalizable/Formattable/Streaming type.
      A return of null indicates that the complete set of rows has been read.

      A null column can be specified by leaving the object null, or indicated by returning a non-null getValidColumns. On streaming columns, it can be indicated by returning a non-null get FieldStates.

      If RowSource.needToClone() is true then the returned row (the DataValueDescriptor[]) is guaranteed not to be modified by drainer of the RowSource (except that the input stream will be read, of course) and drainer will keep no reference to it before making the subsequent nextRow call. So it is safe to return the same DataValueDescriptor[] in subsequent nextRow calls if that is desirable for performance reasons.

      If RowSource.needToClone() is false then the returned row (the DataValueDescriptor[]) may be be modified by drainer of the RowSource, and the drainer may keep a reference to it after making the subsequent nextRow call. In this case the client should severe all references to the row after returning it from getNextRowFromRowSource().

      Specified by:
      getNextRowFromRowSource in interface RowSource
      Overrides:
      getNextRowFromRowSource in class NoPutResultSetImpl
      Throws:
      StandardException - on error
      See Also:
    • isForUpdate

      public boolean isForUpdate()
      Is this ResultSet or it's source result set for update
      Specified by:
      isForUpdate in interface NoPutResultSet
      Overrides:
      isForUpdate in class NoPutResultSetImpl
      Returns:
      Whether or not the result set is for update.