Class MergeResultSet

java.lang.Object
org.apache.derby.impl.sql.execute.NoRowsResultSetImpl
org.apache.derby.impl.sql.execute.MergeResultSet
All Implemented Interfaces:
ResultSet

class MergeResultSet extends NoRowsResultSetImpl
INSERT/UPDATE/DELETE a target table based on how it outer joins with a driving table. For a description of how Derby processes the MERGE statement, see the header comment on MergeNode.
  • Field Details

  • Constructor Details

  • Method Details

    • modifiedRowCount

      public final long modifiedRowCount()
      Description copied from class: NoRowsResultSetImpl
      Returns zero.
      Specified by:
      modifiedRowCount in interface ResultSet
      Overrides:
      modifiedRowCount in class NoRowsResultSetImpl
      Returns:
      The number of rows affect by the statement, so far.
    • open

      public void open() throws StandardException
      Description copied from interface: ResultSet
      Needs to be called before the result set will do anything. Need to call before getNextRow(), or for a result set that doesn't return rows, this is the call that will cause all the work to be done.
      Throws:
      StandardException - Thrown on failure
    • setup

      void setup() throws StandardException
      Description copied from class: NoRowsResultSetImpl
      Set up the result set for use. Should always be called from open().
      Overrides:
      setup in class NoRowsResultSetImpl
      Throws:
      StandardException - thrown on error
    • close

      public void close() throws StandardException
      Clean up resources and call close on data members.
      Throws:
      StandardException - Thrown on error.
    • cleanUp

      public void cleanUp() throws StandardException
      Description copied from interface: ResultSet
      Tells the system to clean up on an error.
      Throws:
      StandardException - Thrown on error.
    • 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 NoRowsResultSetImpl
      Throws:
      StandardException - on error
    • collectAffectedRows

      boolean collectAffectedRows() throws StandardException

      Loop through the rows in the driving left join.

      Throws:
      StandardException
    • addSubjectRow

      private void addSubjectRow(SQLRef subjectRowID) throws StandardException

      Add another subject row id to the evolving hashtable of affected target rows. The concept of a subject row is defined by the 2011 SQL Standard, part 2, section 14.12 (merge statement), general rule 6. A row in the target table is a subject row if it joins to the source table on the main search condition and if the joined row satisfies the matching refinement condition for some WHEN MATCHED clause. A row in the target table may only be a subject row once. That is, a given target row may only qualify for UPDATE or DELETE processing once. If it qualifies for more than one UPDATE or DELETE action, then the Standard requires us to raise a cardinality violation.

      Parameters:
      subjectRowID - The location of the subject row.
      Throws:
      StandardException - A cardinality exception is thrown if we've already added this subject row.
    • createSubjectRowIDhashtable

      private void createSubjectRowIDhashtable() throws StandardException

      Create a BackingStoreHashtable to hold the ids of subject rows.

      Throws:
      StandardException