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

java.lang.Object
  extended by org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
      extended by org.apache.derby.impl.sql.execute.NoPutResultSetImpl
          extended by org.apache.derby.impl.sql.execute.ScanResultSet
All Implemented Interfaces:
NoPutResultSet, ResultSet, RowLocationRetRowSource, RowSource
Direct Known Subclasses:
DependentResultSet, HashScanResultSet, LastIndexKeyResultSet, TableScanResultSet

abstract class ScanResultSet
extends NoPutResultSetImpl

Abstract ResultSet class for NoPutResultSets which contain a scan. Returns rows that may be a column sub-set of the rows in the underlying object to be scanned. If accessedCols is not null then a sub-set of columns will be fetched from the underlying object (usually into the candidate row object), then the returned rows will be a compacted form of that row, with the not-fetched columns moved out. If accessedCols is null then the full row will be returned.
Example: if accessedCols indicates that we want to retrieve columns 1 and 4, then candidate row will have space for 5 columns (because that's the size of the rows in the underlying object), but only cols "1" and "4" will have values:

     0    1    2    3    4
  [  - , COL1,  - ,  - , COL4 ]
  

Rows returned by this ScanResultSet will have the values:
     0     1
  [ COL1, COL4 ]
 


Field Summary
protected  FormatableBitSet accessedCols
          If not null indicates the subset of columns that need to be pulled from the underlying object to be scanned.
(package private)  ExecRow candidate
          The candidate row, matches the shape of the rows in the underlying object to be scanned.
(package private)  int isolationLevel
          The scan isolation level.
private  boolean isolationLevelNeedsUpdate
          Tells whether the isolation level needs to be updated.
(package private)  int lockMode
          The actual lock mode used.
private  int suppliedLockMode
          The lock mode supplied through the constructor.
private  boolean tableLocked
          If true, the table is marked as table locked in SYS.SYSTABLES.
private  boolean unspecifiedIsolationLevel
          If true, the isolation level is unspecified and must be refreshed on each open.
 
Fields inherited from class org.apache.derby.impl.sql.execute.NoPutResultSetImpl
checkNullCols, clonedExecRow, cncLen, resultSetNumber, targetResultSet
 
Fields inherited from class org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
activation, beginTime, closeTime, compactRow, constructorTime, currentRow, endExecutionTime, finished, isOpen, isTopResultSet, nextTime, numOpens, openTime, optimizerEstimatedCost, optimizerEstimatedRowCount, resultDescription, rowsFiltered, rowsSeen, startExecutionTime, subqueryTrackingArray
 
Fields inherited from interface org.apache.derby.iapi.sql.execute.NoPutResultSet
ABSOLUTE, FIRST, LAST, NEXT, PREVIOUS, RELATIVE
 
Fields inherited from interface org.apache.derby.iapi.sql.ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST
 
Constructor Summary
ScanResultSet(Activation activation, int resultSetNumber, GeneratedMethod resultRowAllocator, int lockMode, boolean tableLocked, int isolationLevel, int colRefItem, double optimizerEstimatedRowCount, double optimizerEstimatedCost)
          Construct a ScanResultSet.
 
Method Summary
(package private) abstract  boolean canGetInstantaneousLocks()
          Can we get instantaneous locks when getting share row locks at READ COMMITTED.
 void close()
          Close the result set.
private  int getLockMode(int languageLevel)
          Get the lock mode based on the language isolation level.
 int getScanIsolationLevel()
          Return the isolation level of the scan in the result set.
(package private)  void initIsolationLevel()
          Initialize the isolation level and the lock mode.
private  int translateLanguageIsolationLevel(int languageLevel)
          Translate isolation level from language to store.
 
Methods inherited from class org.apache.derby.impl.sql.execute.NoPutResultSetImpl
clearCurrentRow, clearOrderableCache, closeRowSource, getCursorName, getNextRowFromRowSource, getResultDescription, getValidColumns, isForUpdate, markRowAsDeleted, needsRowLocation, needsToClone, positionScanAtRowLocation, printQualifiers, resultSetNumber, rowLocation, setCurrentRow, setNeedsRowLocation, setTargetResultSet, skipRow, skipScan, updateRow
 
Methods inherited from class org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
addWarning, attachStatementContext, checkCancellationFlag, checkRowPosition, cleanUp, dumpTimeStats, finish, finishAndRTS, getAbsoluteRow, getActivation, getAutoGeneratedKeysResultset, getBeginExecutionTimestamp, getCompactRow, getCurrentTimeMillis, getElapsedMillis, getEndExecutionTimestamp, getEstimatedRowCount, getExecuteTime, getExecutionFactory, getFirstRow, getLanguageConnectionContext, getLastRow, getNextRow, getNextRowCore, getPointOfAttachment, getPreviousRow, getRelativeRow, getRowNumber, getSubqueryTrackingArray, getTransactionController, getWarnings, isClosed, markAsTopResultSet, modifiedRowCount, open, recordConstructorTime, reopenCore, requiresRelocking, returnsRows, setAfterLastRow, setBeforeFirstRow, setCompactRow, setCompatRow
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.apache.derby.iapi.sql.execute.NoPutResultSet
openCore
 
Methods inherited from interface org.apache.derby.iapi.sql.ResultSet
getTimeSpent
 

Field Detail

tableLocked

private final boolean tableLocked
If true, the table is marked as table locked in SYS.SYSTABLES.


unspecifiedIsolationLevel

private final boolean unspecifiedIsolationLevel
If true, the isolation level is unspecified and must be refreshed on each open.


suppliedLockMode

private final int suppliedLockMode
The lock mode supplied through the constructor.


isolationLevelNeedsUpdate

private boolean isolationLevelNeedsUpdate
Tells whether the isolation level needs to be updated.


lockMode

int lockMode
The actual lock mode used.


isolationLevel

int isolationLevel
The scan isolation level.


candidate

final ExecRow candidate
The candidate row, matches the shape of the rows in the underlying object to be scanned.


accessedCols

protected final FormatableBitSet accessedCols
If not null indicates the subset of columns that need to be pulled from the underlying object to be scanned. Set from the PreparedStatement's saved objects, if it exists.

Constructor Detail

ScanResultSet

ScanResultSet(Activation activation,
              int resultSetNumber,
              GeneratedMethod resultRowAllocator,
              int lockMode,
              boolean tableLocked,
              int isolationLevel,
              int colRefItem,
              double optimizerEstimatedRowCount,
              double optimizerEstimatedCost)
        throws StandardException
Construct a ScanResultSet.

Parameters:
activation - the activation
resultSetNumber - number of the result set (unique within statement)
resultRowAllocator - method which generates rows
lockMode - lock mode (record or table)
tableLocked - true if marked as table locked in SYS.SYSTABLES
isolationLevel - language isolation level for the result set
colRefItem - Identifier of saved object for accessedCols, -1 if need to fetch all columns.
optimizerEstimatedRowCount - estimated row count
optimizerEstimatedCost - estimated cost
Throws:
StandardException
Method Detail

initIsolationLevel

void initIsolationLevel()
Initialize the isolation level and the lock mode. If the result set was constructed with an explicit isolation level, or if the isolation level has already been initialized, this is a no-op. All sub-classes should invoke this method from their openCore() methods.


getLockMode

private int getLockMode(int languageLevel)
Get the lock mode based on the language isolation level. Always do row locking unless the isolation level is serializable or the table is marked as table locked.

Parameters:
languageLevel - the (language) isolation level
Returns:
lock mode

translateLanguageIsolationLevel

private int translateLanguageIsolationLevel(int languageLevel)
Translate isolation level from language to store.

Parameters:
languageLevel - language isolation level
Returns:
store isolation level

canGetInstantaneousLocks

abstract boolean canGetInstantaneousLocks()
Can we get instantaneous locks when getting share row locks at READ COMMITTED.


getScanIsolationLevel

public int getScanIsolationLevel()
Return the isolation level of the scan in the result set.

Specified by:
getScanIsolationLevel in interface NoPutResultSet
Overrides:
getScanIsolationLevel in class BasicNoPutResultSetImpl
Returns:
The isolation level of the scan (in TransactionController constants).
See Also:
NoPutResultSet.getScanIsolationLevel()

close

public void close()
           throws StandardException
Close the result set.

Specified by:
close in interface ResultSet
Overrides:
close in class NoPutResultSetImpl
Throws:
StandardException - if an error occurs

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.