Class DependentResultSet

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

class DependentResultSet extends ScanResultSet implements CursorResultSet
DependentResultSet should be used by only ON DELETE CASCADE/ON DELETE SET NULL ref actions implementation to gather the rows from the dependent tables. Idea is to scan the foreign key index for the rows in the source table materialized temporary result set. Scanning of foreign key index gives us the rows that needs to be deleted on dependent tables. Using the row location we got from the index , base row is fetched.
  • Field Details

  • Constructor Details

    • DependentResultSet

      DependentResultSet(long conglomId, StaticCompiledOpenConglomInfo scoci, Activation activation, int resultRowTemplate, int resultSetNumber, GeneratedMethod startKeyGetter, int startSearchOperator, GeneratedMethod stopKeyGetter, int stopSearchOperator, boolean sameStartStopPosition, Qualifier[][] qualifiers, String tableName, String userSuppliedOptimizerOverrides, String indexName, boolean isConstraint, boolean forUpdate, int colRefItem, int lockMode, boolean tableLocked, int isolationLevel, int rowsPerRead, boolean oneRowScan, double optimizerEstimatedRowCount, double optimizerEstimatedCost, String parentResultSetId, long fkIndexConglomId, int fkColArrayItem, int rltItem) throws StandardException
      Throws:
      StandardException
  • Method Details

    • openIndexScanController

      private ScanController openIndexScanController(ExecRow searchRow) throws StandardException
      Get a scan controller positioned using searchRow as the start/stop position. The assumption is that searchRow is of the same format as the index being opened.
      Parameters:
      searchRow - the row to match
      Throws:
      StandardException - on error
    • reopenIndexScanController

      private void reopenIndexScanController(ExecRow searchRow) throws StandardException
      Throws:
      StandardException
    • setupQualifierRow

      private void setupQualifierRow(ExecRow searchRow)
    • openIndexScan

      private void openIndexScan(ExecRow searchRow) throws StandardException
      Throws:
      StandardException
    • fetchIndexRow

      private ExecRow fetchIndexRow() throws StandardException
      Fetch a row from the index scan.
      Returns:
      The row or null. Note that the next call to fetch will replace the columns in the returned row.
      Throws:
      StandardException - Ooops
    • fetchBaseRow

      private ExecRow fetchBaseRow() throws StandardException
      Fetch the base row corresponding to the current index row
      Returns:
      The base row row or null.
      Throws:
      StandardException - Ooops
    • 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 if cursor finished.
      See Also:
    • getNextParentRow

      private ExecRow getNextParentRow() throws StandardException
      Throws:
      StandardException
    • openHeapConglomerateController

      public ConglomerateController openHeapConglomerateController() throws StandardException
      Throws:
      StandardException
    • close

      public void close() throws StandardException
      Close the all the opens we did in this result set.
      Specified by:
      close in interface ResultSet
      Overrides:
      close in class ScanResultSet
      Throws:
      StandardException - if an error occurs
    • finish

      public void finish() throws StandardException
      Description copied from interface: ResultSet
      Tells the system that there will be no more access to any database information via this result set; in particular, no more calls to open(). Will close the result set if it is not already closed.
      Specified by:
      finish in interface ResultSet
      Overrides:
      finish in class BasicNoPutResultSetImpl
      Throws:
      StandardException - on error
    • openCore

      public void openCore() throws StandardException
      Description copied from interface: NoPutResultSet
      open a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values...

      openCore() can only be called on a closed result set. see reopenCore if you want to reuse an open result set.

      For NoPutResultSet open() must only be called on the top ResultSet. Opening of NoPutResultSet's below the top result set are implemented by calling openCore.

      Specified by:
      openCore in interface NoPutResultSet
      Throws:
      StandardException - thrown if cursor finished.
    • addNewSources

      private void addNewSources()
    • canGetInstantaneousLocks

      boolean canGetInstantaneousLocks()
      Can we get instantaneous locks when getting share row locks at READ COMMITTED.
      Specified by:
      canGetInstantaneousLocks in class ScanResultSet
    • getTimeSpent

      public long getTimeSpent(int type)
      Description copied from interface: ResultSet
      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
      Description copied from interface: CursorResultSet
      Returns the row location of the current base table row of the cursor. If this cursor's row is composed of multiple base tables' rows, i.e. due to a join, then a null is returned.
      Specified by:
      getRowLocation in interface CursorResultSet
      Returns:
      the row location of the current cursor row.
      Throws:
      StandardException - thrown on failure to get location from storage engine
    • getCurrentRow

      public ExecRow getCurrentRow() throws StandardException
      Description copied from interface: CursorResultSet
      Returns the current row of the result set. REMIND: eventually, this will only return the current row for result sets that need to return it; either some field in the activation or a parameter in the constructor will be used to signal that this needs to function. This will let us limit the number of live objects we are holding on to.

      Specified by:
      getCurrentRow in interface CursorResultSet
      Returns:
      the last row returned by getNextRow. null if closed.
      Throws:
      StandardException - thrown on failure.
    • getScanProperties

      public Properties getScanProperties()
    • printStartPosition

      public String printStartPosition()
    • printStopPosition

      public String printStopPosition()
    • printPosition

      private String printPosition(int searchOperator, ExecIndexRow positioner)
      Return a start or stop positioner as a String. If we already generated the information, then use that. Otherwise, invoke the activation to get it.
    • printQualifiers

      public String printQualifiers()
      Return an array of Qualifiers as a String