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

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.DeleteResultSet
All Implemented Interfaces:
ResultSet
Direct Known Subclasses:
DeleteCascadeResultSet

public class DeleteResultSet
extends DMLWriteResultSet

Delete 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 insert plan.


Field Summary
protected  Activation activation
           
private  FormatableBitSet baseRowReadList
           
protected  int[] baseRowReadMap
           
protected  long beginExecutionTime
           
protected  long beginTime
           
protected  boolean cascadeDelete
           
protected  WriteCursorConstantAction constantAction
           
 DeleteConstantAction constants
           
protected  ConglomerateController deferredBaseCC
           
(package private)  ExecRow deferredBaseRow
           
(package private)  ExecRow deferredRLRow
           
(package private)  ExecRow deferredSparseRow
           
protected  long endExecutionTime
           
protected  long endTime
           
private  boolean firstExecute
           
private  RISetChecker fkChecker
           
protected  FKInfo[] fkInfoArray
           
protected  DynamicCompiledOpenConglomInfo heapDCOCI
           
protected  java.lang.String indent
           
protected  DynamicCompiledOpenConglomInfo[] indexDCOCIs
           
 LanguageConnectionContext lcc
           
(package private)  int lockMode
           
private  boolean noTriggersOrFks
           
(package private)  int numberOfBaseColumns
           
(package private)  int numIndexes
           
private  int numOpens
           
protected  RowChanger rc
           
protected  ResultDescription resultDescription
           
private  int rlColumnNumber
           
 ExecRow row
           
 int rowCount
           
protected  TemporaryRowHolderImpl rowHolder
           
 NoPutResultSet savedSource
           
protected  NoPutResultSet source
           
protected  int sourceDepth
           
protected  int[] streamStorableHeapColIds
           
protected  java.lang.String subIndent
           
protected  NoPutResultSet[] subqueryTrackingArray
           
 TransactionController tc
           
private  TriggerEventActivator triggerActivator
           
private  TriggerInfo triggerInfo
           
 
Fields inherited from interface org.apache.derby.iapi.sql.ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST
 
Constructor Summary
  DeleteResultSet(NoPutResultSet source, Activation activation)
           
protected DeleteResultSet(NoPutResultSet source, ConstantAction passedInConstantAction, Activation activation)
          REMIND: At present this takes just the conglomerate id of the table.
 
Method Summary
 boolean checkRowPosition(int isType)
          Determine if the cursor is before the first row in the result set.
 void cleanUp()
          Tells the system to clean up on an error.
 void close()
          No rows to return, does nothing
(package private)  boolean collectAffectedRows()
           
(package private)  NoPutResultSet createDependentSource(RowChanger rc)
          create a source for the dependent table Delete Cascade ResultSet class will override this method.
(package private)  void deleteDeferredRows()
           
 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()
           
 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 deleted 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.
 void open()
          Needs to be called before the result set will do anything.
 boolean returnsRows()
          Returns FALSE
(package private)  void runFkChecker(boolean restrictCheckOnly)
           
 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()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

tc

public TransactionController tc

constants

public DeleteConstantAction constants

resultDescription

protected ResultDescription resultDescription

source

protected NoPutResultSet source

savedSource

public NoPutResultSet savedSource

numIndexes

int numIndexes

rc

protected RowChanger rc

row

public ExecRow row

deferredBaseCC

protected ConglomerateController deferredBaseCC

lcc

public LanguageConnectionContext lcc

rowHolder

protected TemporaryRowHolderImpl rowHolder

numOpens

private int numOpens

firstExecute

private boolean firstExecute

baseRowReadList

private FormatableBitSet baseRowReadList

rlColumnNumber

private int rlColumnNumber

fkInfoArray

protected FKInfo[] fkInfoArray

triggerInfo

private TriggerInfo triggerInfo

fkChecker

private RISetChecker fkChecker

triggerActivator

private TriggerEventActivator triggerActivator

noTriggersOrFks

private boolean noTriggersOrFks

deferredSparseRow

ExecRow deferredSparseRow

deferredBaseRow

ExecRow deferredBaseRow

lockMode

int lockMode

cascadeDelete

protected boolean cascadeDelete

deferredRLRow

ExecRow deferredRLRow

numberOfBaseColumns

int numberOfBaseColumns

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

DeleteResultSet

public DeleteResultSet(NoPutResultSet source,
                       Activation activation)
                throws StandardException

DeleteResultSet

protected DeleteResultSet(NoPutResultSet source,
                          ConstantAction passedInConstantAction,
                          Activation activation)
                   throws StandardException
REMIND: At present this takes just the conglomerate id of the table. We can expect this to expand to include passing information about triggers, constraints, and any additional conglomerates on the underlying table for access methods.

Throws:
StandardException - Thrown on error
Method Detail

getResultDescription

public ResultDescription getResultDescription()
Returns the description of the deleted 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

collectAffectedRows

boolean collectAffectedRows()
                      throws StandardException
Throws:
StandardException

fireBeforeTriggers

void fireBeforeTriggers()
                  throws StandardException
Throws:
StandardException

fireAfterTriggers

void fireAfterTriggers()
                 throws StandardException
Throws:
StandardException

deleteDeferredRows

void deleteDeferredRows()
                  throws StandardException
Throws:
StandardException

runFkChecker

void runFkChecker(boolean restrictCheckOnly)
            throws StandardException
Throws:
StandardException

createDependentSource

NoPutResultSet createDependentSource(RowChanger rc)
                               throws StandardException
create a source for the dependent table

Delete Cascade ResultSet class will override this method.

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.

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

finish

public void finish()
            throws StandardException
Description copied from class: NoRowsResultSetImpl
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
Overrides:
finish in class NoRowsResultSetImpl
Throws:
StandardException - on error

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.

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 Tue 2006-10-10 19:23:47+0200, from revision exported

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