org.apache.derby.impl.sql.execute
Class UpdateResultSet

java.lang.Object
  extended byorg.apache.derby.impl.sql.execute.NoRowsResultSetImpl
      extended byorg.apache.derby.impl.sql.execute.DMLWriteResultSet
          extended byorg.apache.derby.impl.sql.execute.UpdateResultSet
All Implemented Interfaces:
ResultSet

public class UpdateResultSet
extends DMLWriteResultSet

Update the rows from the specified base table. This will cause constraints to be checked and triggers to be executed based on the c's and t's compiled into the update plan.

Author:
ames

Field Summary
protected  Activation activation
           
private  FormatableBitSet baseRowReadList
           
protected  int[] baseRowReadMap
           
(package private)  boolean beforeUpdateCopyRequired
           
protected  long beginExecutionTime
           
protected  long beginTime
           
private  GeneratedMethod checkGM
           
protected  WriteCursorConstantAction constantAction
           
 UpdateConstantAction constants
           
(package private)  boolean deferred
           
protected  ConglomerateController deferredBaseCC
           
private  ExecRow deferredBaseRow
           
 ExecRow deferredSparseRow
           
private  ExecRow deferredTempRow
           
protected  ConglomerateController[] deferredUniqueCC
           
protected  long[] deferredUniqueCIDs
           
protected  boolean[] deferredUniqueCreated
           
protected  ScanController[] deferredUniqueScans
           
private  TemporaryRowHolderImpl deletedRowHolder
           
protected  long endExecutionTime
           
protected  long endTime
           
private  FKInfo[] fkInfoArray
           
private  long heapConglom
           
protected  DynamicCompiledOpenConglomInfo heapDCOCI
           
protected  java.lang.String indent
           
protected  DynamicCompiledOpenConglomInfo[] indexDCOCIs
           
private  TemporaryRowHolderImpl insertedRowHolder
           
 LanguageConnectionContext lcc
           
(package private)  int lockMode
           
 ExecRow newBaseRow
           
private  int numberOfBaseColumns
           
private  int numOpens
           
private  ExecRow oldDeletedRow
           
private  ResultDescription resultDescription
           
private  int resultWidth
           
private  RISetChecker riChecker
           
 ExecRow row
           
private  RowChanger rowChanger
           
 int rowCount
           
 NoPutResultSet savedSource
           
private  NoPutResultSet source
           
protected  int sourceDepth
           
protected  int[] streamStorableHeapColIds
           
protected  java.lang.String subIndent
           
protected  NoPutResultSet[] subqueryTrackingArray
           
 TransactionController tc
           
private  TriggerEventActivator triggerActivator
           
private  TriggerInfo triggerInfo
           
private  ResultDescription triggerResultDescription
           
private  boolean updatingForeignKey
           
private  boolean updatingReferencedKey
           
 
Fields inherited from interface org.apache.derby.iapi.sql.ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST
 
Constructor Summary
UpdateResultSet(NoPutResultSet source, GeneratedMethod checkGM, Activation activation)
           
UpdateResultSet(NoPutResultSet source, GeneratedMethod checkGM, Activation activation, ConstantAction passedInConstantAction, ResultDescription passedInRsd)
           
UpdateResultSet(NoPutResultSet source, GeneratedMethod checkGM, Activation activation, int constantActionItem, int rsdItem)
           
 
Method Summary
 boolean checkRowPosition(int isType)
          Determine if the cursor is before the first row in the result set.
private  FormatableBitSet checkStreamCols()
           
 void cleanUp()
          Tells the system to clean up on an error.
 void close()
          No rows to return, does nothing
 boolean collectAffectedRows()
           
protected static int decodeLockMode(LanguageConnectionContext lcc, int lockMode)
          Decode the update lock mode.
 boolean doesCommit()
          Does this ResultSet cause a commit or rollback.
static void evaluateACheckConstraint(GeneratedMethod checkGM, java.lang.String checkName, long heapConglom, Activation activation)
          Run a check constraint against the current row.
static void evaluateCheckConstraints(GeneratedMethod checkGM, Activation activation)
          Run check constraints against the current row.
 void finish()
          doesn't need to do anything, as no calls are made that need to be restricted once the result set is 'finished'.
(package private)  void fireAfterTriggers()
           
(package private)  void fireBeforeTriggers()
           
static boolean foundRow(ExecRow checkRow, int[] colsToCheck, TemporaryRowHolderImpl rowHolder)
           
 ExecRow getAbsoluteRow(int row)
          Returns the row at the absolute position from the query, and returns NULL when there is no such position.
 ResultSet getAutoGeneratedKeysResultset()
          ResultSet for rows inserted into the table (contains auto-generated keys columns only)
 java.sql.Timestamp getBeginExecutionTimestamp()
          Get the Timestamp for the beginning of execution.
protected  long getCurrentTimeMillis()
          Return the current time in milliseconds, if DEBUG and RunTimeStats is on, else return 0.
 java.lang.String getCursorName()
          Return the cursor name, null in this case.
 java.sql.Timestamp getEndExecutionTimestamp()
          Get the Timestamp for the end of execution.
 long getExecuteTime()
          Get the execution time in milliseconds.
 ExecRow getFirstRow()
          Returns the first row from the query, and returns NULL when there are no rows.
(package private)  java.lang.String getIndexNameFromCID(long indexCID)
          get the index name given the conglomerate id of the index.
 ExecRow getLastRow()
          Returns the last row from the query, and returns NULL when there are no rows.
 ExecRow getNextRow()
          No rows to return, so throw an exception.
protected  ExecRow getNextRowCore(NoPutResultSet source)
          Get next row from the source result set.
 ExecRow getPreviousRow()
          Returns the previous row from the query, and returns NULL when there are no more previous rows.
 java.lang.String getQueryPlanText(int depth)
          RESOLVE - This method will go away once it is overloaded in all subclasses.
 ExecRow getRelativeRow(int row)
          Returns the row at the relative position from the current cursor position, and returns NULL when there is no such position.
 ResultDescription getResultDescription()
          Returns the description of the updated rows.
 int getRowNumber()
          Returns the row number of the current row.
 NoPutResultSet[] getSubqueryTrackingArray(int numSubqueries)
          Get the subquery ResultSet tracking array from the top ResultSet.
 long getTimeSpent(int type)
          Return the total amount of time spent in this ResultSet
 java.sql.SQLWarning getWarnings()
          Return the set of warnings generated during the execution of this result set.
 boolean isClosed()
          Just report that it is always closed.
protected  ExecRow makeDeferredSparseRow(ExecRow deferredBaseRow, FormatableBitSet baseRowReadList, LanguageConnectionContext lcc)
          For deferred update, get a deferred sparse row based on the deferred non-sparse row.
 int modifiedRowCount()
          Returns zero.
private  void notifyForUpdateCursor(DataValueDescriptor[] row, DataValueDescriptor[] newBaseRow, RowLocation rl, TableScanResultSet tableScan)
           
private  void objectifyStream(ExecRow tempRow, FormatableBitSet streamCols)
           
 void open()
          Needs to be called before the result set will do anything.
 boolean returnsRows()
          Returns FALSE
(package private)  void rowChangerFinish()
           
(package private)  void runChecker(boolean restrictCheckOnly)
           
private  void saveLastCusorKey(TableScanResultSet tableScan, ExecRow aRow)
           
 ExecRow setAfterLastRow()
          Sets the current position to after the last row and returns NULL because there is no current row.
 ExecRow setBeforeFirstRow()
          Sets the current position to before the first row and returns NULL because there is no current row.
(package private)  void setup()
           
(package private)  void updateDeferredRows()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

tc

public TransactionController tc

newBaseRow

public ExecRow newBaseRow

row

public ExecRow row

deferredSparseRow

public ExecRow deferredSparseRow

constants

public UpdateConstantAction constants

resultDescription

private ResultDescription resultDescription

source

private NoPutResultSet source

savedSource

public NoPutResultSet savedSource

rowChanger

private RowChanger rowChanger

deferredBaseCC

protected ConglomerateController deferredBaseCC

deferredUniqueCIDs

protected long[] deferredUniqueCIDs

deferredUniqueCreated

protected boolean[] deferredUniqueCreated

deferredUniqueCC

protected ConglomerateController[] deferredUniqueCC

deferredUniqueScans

protected ScanController[] deferredUniqueScans

lcc

public LanguageConnectionContext lcc

deletedRowHolder

private TemporaryRowHolderImpl deletedRowHolder

insertedRowHolder

private TemporaryRowHolderImpl insertedRowHolder

riChecker

private RISetChecker riChecker

triggerInfo

private TriggerInfo triggerInfo

triggerActivator

private TriggerEventActivator triggerActivator

updatingReferencedKey

private boolean updatingReferencedKey

updatingForeignKey

private boolean updatingForeignKey

numOpens

private int numOpens

heapConglom

private long heapConglom

fkInfoArray

private FKInfo[] fkInfoArray

baseRowReadList

private FormatableBitSet baseRowReadList

checkGM

private GeneratedMethod checkGM

resultWidth

private int resultWidth

numberOfBaseColumns

private int numberOfBaseColumns

deferredTempRow

private ExecRow deferredTempRow

deferredBaseRow

private ExecRow deferredBaseRow

oldDeletedRow

private ExecRow oldDeletedRow

triggerResultDescription

private ResultDescription triggerResultDescription

lockMode

int lockMode

deferred

boolean deferred

beforeUpdateCopyRequired

boolean beforeUpdateCopyRequired

constantAction

protected WriteCursorConstantAction constantAction

baseRowReadMap

protected int[] baseRowReadMap

streamStorableHeapColIds

protected int[] streamStorableHeapColIds

heapDCOCI

protected DynamicCompiledOpenConglomInfo heapDCOCI

indexDCOCIs

protected DynamicCompiledOpenConglomInfo[] indexDCOCIs

rowCount

public int rowCount

activation

protected final Activation activation

subqueryTrackingArray

protected NoPutResultSet[] subqueryTrackingArray

indent

protected java.lang.String indent

subIndent

protected java.lang.String subIndent

sourceDepth

protected int sourceDepth

beginTime

protected long beginTime

endTime

protected long endTime

beginExecutionTime

protected long beginExecutionTime

endExecutionTime

protected long endExecutionTime
Constructor Detail

UpdateResultSet

public UpdateResultSet(NoPutResultSet source,
                       GeneratedMethod checkGM,
                       Activation activation)
                throws StandardException
Parameters:
source - update rows come from source
checkGM - Generated method for enforcing check constraints
Throws:
StandardException - thrown on error

UpdateResultSet

public UpdateResultSet(NoPutResultSet source,
                       GeneratedMethod checkGM,
                       Activation activation,
                       int constantActionItem,
                       int rsdItem)
                throws StandardException
Parameters:
source - update rows come from source
checkGM - Generated method for enforcing check constraints
activation - Activation
constantActionItem - id of the update constant action saved objec
rsdItem - id of the Result Description saved object
Throws:
StandardException - thrown on error

UpdateResultSet

public UpdateResultSet(NoPutResultSet source,
                       GeneratedMethod checkGM,
                       Activation activation,
                       ConstantAction passedInConstantAction,
                       ResultDescription passedInRsd)
                throws StandardException
Parameters:
source - update rows come from source
checkGM - Generated method for enforcing check constraints
Throws:
StandardException - thrown on error
Method Detail

getResultDescription

public ResultDescription getResultDescription()
Returns the description of the updated rows. REVISIT: Do we want this to return NULL instead?

Specified by:
getResultDescription in interface ResultSet
Overrides:
getResultDescription in class NoRowsResultSetImpl

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.

Returns:
Nothing
Throws:
StandardException - Standard Cloudscape error policy

setup

void setup()
     throws StandardException
Throws:
StandardException - Standard Cloudscape error policy

checkStreamCols

private FormatableBitSet checkStreamCols()

objectifyStream

private void objectifyStream(ExecRow tempRow,
                             FormatableBitSet streamCols)
                      throws StandardException
Throws:
StandardException

collectAffectedRows

public boolean collectAffectedRows()
                            throws StandardException
Throws:
StandardException

notifyForUpdateCursor

private void notifyForUpdateCursor(DataValueDescriptor[] row,
                                   DataValueDescriptor[] newBaseRow,
                                   RowLocation rl,
                                   TableScanResultSet tableScan)
                            throws StandardException
Throws:
StandardException

saveLastCusorKey

private void saveLastCusorKey(TableScanResultSet tableScan,
                              ExecRow aRow)
                       throws StandardException
Throws:
StandardException

fireBeforeTriggers

void fireBeforeTriggers()
                  throws StandardException
Throws:
StandardException

fireAfterTriggers

void fireAfterTriggers()
                 throws StandardException
Throws:
StandardException

updateDeferredRows

void updateDeferredRows()
                  throws StandardException
Throws:
StandardException

runChecker

void runChecker(boolean restrictCheckOnly)
          throws StandardException
Throws:
StandardException

foundRow

public static boolean foundRow(ExecRow checkRow,
                               int[] colsToCheck,
                               TemporaryRowHolderImpl rowHolder)
                        throws StandardException
Throws:
StandardException

cleanUp

public void cleanUp()
             throws StandardException
Description copied from interface: ResultSet
Tells the system to clean up on an error.

Returns:
Nothing
Throws:
StandardException - Thrown on error
See Also:
ResultSet.cleanUp()

decodeLockMode

protected static int decodeLockMode(LanguageConnectionContext lcc,
                                    int lockMode)
Decode the update lock mode.

The value for update lock mode is in the 2nd 2 bytes for ExecutionContext.SERIALIZABLE_ISOLATION_LEVEL isolation level. Otherwise (REPEATABLE READ, READ COMMITTED, and READ UNCOMMITTED) the lock mode is located in the first 2 bytes.

This is done to override the optimizer choice to provide maximum concurrency of record level locking except in SERIALIZABLE where table level locking is required in heap scans for correctness.

See Compilation!QueryTree!FromBaseTable for encoding of the lockmode.

Parameters:
lcc - The context to look for current isolation level.
lockMode - The compiled encoded lock mode for this query.
Returns:
The lock mode (record or table) to use to open the result set.
Throws:
StandardException - Standard exception policy.

rowChangerFinish

void rowChangerFinish()
                throws StandardException
Throws:
StandardException

modifiedRowCount

public final int modifiedRowCount()
Description copied from class: NoRowsResultSetImpl
Returns zero.

Specified by:
modifiedRowCount in interface ResultSet
Overrides:
modifiedRowCount in class NoRowsResultSetImpl

getNextRowCore

protected ExecRow getNextRowCore(NoPutResultSet source)
                          throws StandardException
Get next row from the source result set.

Parameters:
source - SourceResultSet Also look at Track#2432/change 12433
Throws:
StandardException

makeDeferredSparseRow

protected ExecRow makeDeferredSparseRow(ExecRow deferredBaseRow,
                                        FormatableBitSet baseRowReadList,
                                        LanguageConnectionContext lcc)
                                 throws StandardException
For deferred update, get a deferred sparse row based on the deferred non-sparse row. Share the underlying columns. If there is no column bit map, make them the same row.

Throws:
StandardException - Thrown on error

getIndexNameFromCID

java.lang.String getIndexNameFromCID(long indexCID)
get the index name given the conglomerate id of the index.

Parameters:
indexCID - conglomerate ID of the index.
Returns:
index name of given index.

returnsRows

public final boolean returnsRows()
Returns FALSE

Specified by:
returnsRows in interface ResultSet
Returns:
TRUE if the statement returns rows, FALSE if not.

getAbsoluteRow

public ExecRow getAbsoluteRow(int row)
                       throws StandardException
Returns the row at the absolute position from the query, and returns NULL when there is no such position. (Negative position means from the end of the result set.) Moving the cursor to an invalid position leaves the cursor positioned either before the first row (negative position) or after the last row (positive position). NOTE: An exception will be thrown on 0.

Specified by:
getAbsoluteRow in interface ResultSet
Parameters:
row - The position.
Returns:
The row at the absolute position, or NULL if no such position.
Throws:
StandardException - Thrown on failure
See Also:
Row

getRelativeRow

public ExecRow getRelativeRow(int row)
                       throws StandardException
Returns the row at the relative position from the current cursor position, and returns NULL when there is no such position. (Negative position means toward the beginning of the result set.) Moving the cursor to an invalid position leaves the cursor positioned either before the first row (negative position) or after the last row (positive position). NOTE: 0 is valid. NOTE: An exception is thrown if the cursor is not currently positioned on a row.

Specified by:
getRelativeRow in interface ResultSet
Parameters:
row - The position.
Returns:
The row at the relative position, or NULL if no such position.
Throws:
StandardException - Thrown on failure
See Also:
Row

setBeforeFirstRow

public ExecRow setBeforeFirstRow()
                          throws StandardException
Sets the current position to before the first row and returns NULL because there is no current row.

Specified by:
setBeforeFirstRow in interface ResultSet
Returns:
NULL.
Throws:
StandardException - Thrown on failure
See Also:
Row

getFirstRow

public ExecRow getFirstRow()
                    throws StandardException
Returns the first row from the query, and returns NULL when there are no rows.

Specified by:
getFirstRow in interface ResultSet
Returns:
The first row, or NULL if no rows.
Throws:
StandardException - Thrown on failure
See Also:
Row

getNextRow

public ExecRow getNextRow()
                   throws StandardException
No rows to return, so throw an exception.

Specified by:
getNextRow in interface ResultSet
Returns:
The next row, or NULL if no more rows.
Throws:
StandardException - Always throws a StandardException to indicate that this method is not intended to be used.
See Also:
Row

getPreviousRow

public ExecRow getPreviousRow()
                       throws StandardException
Returns the previous row from the query, and returns NULL when there are no more previous rows.

Specified by:
getPreviousRow in interface ResultSet
Returns:
The previous row, or NULL if no more previous rows.
Throws:
StandardException - Thrown on failure
See Also:
Row

getLastRow

public ExecRow getLastRow()
                   throws StandardException
Returns the last row from the query, and returns NULL when there are no rows.

Specified by:
getLastRow in interface ResultSet
Returns:
The last row, or NULL if no rows.
Throws:
StandardException - Thrown on failure
See Also:
Row

setAfterLastRow

public ExecRow setAfterLastRow()
                        throws StandardException
Sets the current position to after the last row and returns NULL because there is no current row.

Specified by:
setAfterLastRow in interface ResultSet
Returns:
NULL.
Throws:
StandardException - Thrown on failure
See Also:
Row

checkRowPosition

public boolean checkRowPosition(int isType)
Determine if the cursor is before the first row in the result set.

Specified by:
checkRowPosition in interface ResultSet
Returns:
true if before the first row, false otherwise. Returns false when the result set contains no rows.

getRowNumber

public int getRowNumber()
Returns the row number of the current row. Row numbers start from 1 and go to 'n'. Corresponds to row numbering used to position current row in the result set (as per JDBC).

Specified by:
getRowNumber in interface ResultSet
Returns:
the row number, or 0 if not on a row

close

public void close()
           throws StandardException
No rows to return, does nothing

Specified by:
close in interface ResultSet
Returns:
Nothing
Throws:
StandardException - thrown on error

isClosed

public boolean isClosed()
Just report that it is always closed. RESOLVE: if we don't report that we are closed, then we will wind up with a dependency problem when we send an invalidateFor on our own Statement. It will call lcc.verifyNoOpenResultSets(), which is really supposed to be verify that there are no read only result sets that are open.

Specified by:
isClosed in interface ResultSet
Returns:
true if the ResultSet has been closed.

finish

public void finish()
            throws StandardException
doesn't need to do anything, as no calls are made that need to be restricted once the result set is 'finished'.

Specified by:
finish in interface ResultSet
Returns:
Nothing
Throws:
StandardException - on error

getExecuteTime

public long getExecuteTime()
Get the execution time in milliseconds.

Specified by:
getExecuteTime in interface ResultSet
Returns:
long The execution time in milliseconds.

getBeginExecutionTimestamp

public java.sql.Timestamp getBeginExecutionTimestamp()
Get the Timestamp for the beginning of execution.

Specified by:
getBeginExecutionTimestamp in interface ResultSet
Returns:
Timestamp The Timestamp for the beginning of execution.

getEndExecutionTimestamp

public java.sql.Timestamp getEndExecutionTimestamp()
Get the Timestamp for the end of execution.

Specified by:
getEndExecutionTimestamp in interface ResultSet
Returns:
Timestamp The Timestamp for the end of execution.

getQueryPlanText

public java.lang.String getQueryPlanText(int depth)
RESOLVE - This method will go away once it is overloaded in all subclasses. Return the query plan as a String.

Parameters:
depth - Indentation level.
Returns:
String The query plan as a String.

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).

getSubqueryTrackingArray

public final NoPutResultSet[] getSubqueryTrackingArray(int numSubqueries)
Description copied from interface: ResultSet
Get the subquery ResultSet tracking array from the top ResultSet. (Used for tracking open subqueries when closing down on an error.)

Specified by:
getSubqueryTrackingArray in interface ResultSet
Parameters:
numSubqueries - The size of the array (For allocation on demand.)
Returns:
NoPutResultSet[] Array of NoPutResultSets for subqueries.
See Also:
ResultSet.getSubqueryTrackingArray(int)

getAutoGeneratedKeysResultset

public ResultSet getAutoGeneratedKeysResultset()
Description copied from interface: ResultSet
ResultSet for rows inserted into the table (contains auto-generated keys columns only)

Specified by:
getAutoGeneratedKeysResultset in interface ResultSet
Returns:
NoPutResultSet NoPutResultSets for rows inserted into the table.
See Also:
ResultSet.getAutoGeneratedKeysResultset()

getCursorName

public java.lang.String getCursorName()
Return the cursor name, null in this case.

Specified by:
getCursorName in interface ResultSet
Returns:
A String with the name of the cursor, if any. Returns NULL if this is not a cursor statement.
See Also:
ResultSet.getCursorName()

getCurrentTimeMillis

protected final long getCurrentTimeMillis()
Return the current time in milliseconds, if DEBUG and RunTimeStats is on, else return 0. (Only pay price of system call if need to.)

Returns:
long Current time in milliseconds.

evaluateACheckConstraint

public static void evaluateACheckConstraint(GeneratedMethod checkGM,
                                            java.lang.String checkName,
                                            long heapConglom,
                                            Activation activation)
                                     throws StandardException
Run a check constraint against the current row. Raise an error if the check constraint is violated.

Parameters:
checkGM - Generated code to run the check constraint.
checkName - Name of the constraint to check.
heapConglom - Number of heap conglomerate.
Throws:
StandardException - thrown on error

evaluateCheckConstraints

public static void evaluateCheckConstraints(GeneratedMethod checkGM,
                                            Activation activation)
                                     throws StandardException
Run check constraints against the current row. Raise an error if a check constraint is violated.

Parameters:
checkGM - Generated code to run the check constraint.
Throws:
StandardException - thrown on error

doesCommit

public boolean doesCommit()
Does this ResultSet cause a commit or rollback.

Returns:
Whether or not this ResultSet cause a commit or rollback.

getWarnings

public java.sql.SQLWarning getWarnings()
Description copied from interface: ResultSet
Return the set of warnings generated during the execution of this result set. The warnings are cleared once this call returns.

Specified by:
getWarnings in interface ResultSet

Built on Mon 2007-06-04 09:58:47+0400, from revision ???

Apache Derby V10.1 Engine Documentation - Copyright © 1997,2005 The Apache Software Foundation or its licensors, as applicable.