Class NormalizeResultSet

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

class NormalizeResultSet extends NoPutResultSetImpl implements CursorResultSet
Cast the rows from the source result set to match the format of the result set for the entire statement.
  • Field Details

    • source

      public NoPutResultSet source
    • normalizedRow

      private ExecRow normalizedRow
    • numCols

      private int numCols
    • startCol

      private int startCol
    • cachedDestinations

      private final DataValueDescriptor[] cachedDestinations
      This array contains data value descriptors that can be used (and reused) by normalizeRow() to hold the normalized column values.
    • resultDescription

      private ResultDescription resultDescription
    • desiredTypes

      private DataTypeDescriptor[] desiredTypes
  • Constructor Details

    • NormalizeResultSet

      public NormalizeResultSet(NoPutResultSet source, Activation activation, int resultSetNumber, int erdNumber, double optimizerEstimatedRowCount, double optimizerEstimatedCost, boolean forUpdate) throws StandardException
      Constructor for a NormalizeResultSet
      Parameters:
      source - The NoPutResultSet from which to get rows to be normalized
      activation - The activation for this execution
      resultSetNumber - The resultSetNumber
      erdNumber - The integer for the ResultDescription
      Throws:
      StandardException - on error
  • Method Details

    • openCore

      public void openCore() throws StandardException
      open a scan on the source. 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 on failure
    • 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:
    • getNextRowCore

      public ExecRow getNextRowCore() throws StandardException
      Description copied from interface: NoPutResultSet
      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
      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
      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()
      Gets information from last getNextRow call.
      Specified by:
      getCurrentRow in interface CursorResultSet
      Returns:
      the last row returned.
      See Also:
    • computeStartColumn

      public static int computeStartColumn(boolean isUpdate, ResultDescription desc)

      Compute the start column for an update/insert.

      Parameters:
      isUpdate - True if we are executing an UPDATE statement
      desc - Metadata describing a result row

    • normalizeColumn

      public static DataValueDescriptor normalizeColumn(DataTypeDescriptor dtd, ExecRow sourceRow, int sourceColumnPosition, DataValueDescriptor resultCol, ResultDescription desc) throws StandardException
      Normalize a column. For now, this means calling constructors through the type services to normalize a type to itself. For example, if you're putting a char(30) value into a char(15) column, it calls a SQLChar constructor with the char(30) value, and the constructor truncates the value and makes sure that no non-blank characters are truncated.
      Parameters:
      dtd - Data type to coerce to
      sourceRow - row holding the source column
      sourceColumnPosition - position of column in row
      resultCol - where to stuff the coerced value
      desc - Additional metadata for error reporting if necessary
      Throws:
      StandardException - thrown on failure
    • normalizeRow

      private ExecRow normalizeRow(ExecRow sourceRow) throws StandardException
      Normalize a row.
      Parameters:
      sourceRow - The row to normalize
      Returns:
      The normalized row
      Throws:
      StandardException - thrown on failure
    • getCachedDestination

      private DataValueDescriptor getCachedDestination(int col) throws StandardException
      Get a cached data value descriptor that can receive the normalized value of the specified column.
      Parameters:
      col - the column number (1-based)
      Returns:
      a data value descriptor of the correct type for the column
      Throws:
      StandardException - if a new data value descriptor cannot be created
    • getDesiredType

      private DataTypeDescriptor getDesiredType(int col)
      Get a data type descriptor that describes the desired type for the specified column.
      Parameters:
      col - the column number (1-based)
      Returns:
      a data type descriptor for the column
    • fetchResultTypes

      private DataTypeDescriptor[] fetchResultTypes(ResultDescription desc)

      Fetch the result datatypes out of the activation.

    • updateRow

      public void updateRow(ExecRow row, RowChanger rowChanger) throws StandardException
      Description copied from interface: NoPutResultSet
      Updates the resultSet's current row with it's new values after an update has been issued either using positioned update or JDBC's udpateRow method.
      Specified by:
      updateRow in interface NoPutResultSet
      Overrides:
      updateRow in class NoPutResultSetImpl
      Parameters:
      row - new values for the currentRow
      rowChanger - holds information about row: what columns of it is to be used for updating, and what underlying base table column each such column corresponds to.
      Throws:
      StandardException - thrown on failure.
      See Also:
    • markRowAsDeleted

      public void markRowAsDeleted() throws StandardException
      Description copied from interface: NoPutResultSet
      Marks the resultSet's currentRow as deleted after a delete has been issued by either by using positioned delete or JDBC's deleteRow method.
      Specified by:
      markRowAsDeleted in interface NoPutResultSet
      Overrides:
      markRowAsDeleted in class NoPutResultSetImpl
      Throws:
      StandardException - thrown on failure.
      See Also: