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 Summary
Fields Modifier and Type Field Description private MergeConstantAction_constantsprivate NoPutResultSet_drivingLeftJoinprivate int_numOpensprivate ExecRow_rowprivate long_rowCountprivate BackingStoreHashtable_subjectRowIDsprivate TemporaryRowHolderImpl[]_thenRows-
Fields inherited from class org.apache.derby.impl.sql.execute.NoRowsResultSetImpl
activation, beginExecutionTime, beginTime, endExecutionTime, endTime, lcc
-
Fields inherited from interface org.apache.derby.iapi.sql.ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST
-
-
Constructor Summary
Constructors Constructor Description MergeResultSet(NoPutResultSet drivingLeftJoin, Activation activation)Construct from a driving left join and an Activation.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddSubjectRow(SQLRef subjectRowID)Add another subject row id to the evolving hashtable of affected target rows.voidcleanUp()Tells the system to clean up on an error.voidclose()Clean up resources and call close on data members.(package private) booleancollectAffectedRows()Loop through the rows in the driving left join.private voidcreateSubjectRowIDhashtable()Create a BackingStoreHashtable to hold the ids of subject rows.voidfinish()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().longmodifiedRowCount()Returns zero.voidopen()Needs to be called before the result set will do anything.(package private) voidsetup()Set up the result set for use.-
Methods inherited from class org.apache.derby.impl.sql.execute.NoRowsResultSetImpl
addWarning, checkRowPosition, clearCurrentRow, close, doesCommit, evaluateGenerationClauses, getAbsoluteRow, getActivation, getAutoGeneratedKeysResultset, getBeginExecutionTimestamp, getCurrentTimeMillis, getCursorName, getEndExecutionTimestamp, getExecuteTime, getFirstRow, getLastRow, getNextRow, getPreviousRow, getQueryPlanText, getRelativeRow, getResultDescription, getRowNumber, getSubqueryTrackingArray, getTimeSpent, getWarnings, isClosed, returnsRows, setAfterLastRow, setBeforeFirstRow, toXML
-
-
-
-
Field Detail
-
_drivingLeftJoin
private NoPutResultSet _drivingLeftJoin
-
_constants
private MergeConstantAction _constants
-
_row
private ExecRow _row
-
_rowCount
private long _rowCount
-
_thenRows
private TemporaryRowHolderImpl[] _thenRows
-
_subjectRowIDs
private BackingStoreHashtable _subjectRowIDs
-
_numOpens
private int _numOpens
-
-
Constructor Detail
-
MergeResultSet
MergeResultSet(NoPutResultSet drivingLeftJoin, Activation activation) throws StandardException
Construct from a driving left join and an Activation.- Throws:
StandardException
-
-
Method Detail
-
modifiedRowCount
public final long modifiedRowCount()
Description copied from class:NoRowsResultSetImplReturns zero.- Specified by:
modifiedRowCountin interfaceResultSet- Overrides:
modifiedRowCountin classNoRowsResultSetImpl- Returns:
- The number of rows affect by the statement, so far.
-
open
public void open() throws StandardExceptionDescription copied from interface:ResultSetNeeds 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 StandardExceptionDescription copied from class:NoRowsResultSetImplSet up the result set for use. Should always be called fromopen().- Overrides:
setupin classNoRowsResultSetImpl- Throws:
StandardException- thrown on error
-
close
public void close() throws StandardExceptionClean up resources and call close on data members.- Throws:
StandardException- Thrown on error.
-
cleanUp
public void cleanUp() throws StandardExceptionDescription copied from interface:ResultSetTells the system to clean up on an error.- Throws:
StandardException- Thrown on error.
-
finish
public void finish() throws StandardExceptionDescription copied from interface:ResultSetTells 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:
finishin interfaceResultSet- Overrides:
finishin classNoRowsResultSetImpl- Throws:
StandardException- on error
-
collectAffectedRows
boolean collectAffectedRows() throws StandardExceptionLoop 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 StandardExceptionCreate a BackingStoreHashtable to hold the ids of subject rows.
- Throws:
StandardException
-
-