Class TableScanResultSet
java.lang.Object
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
org.apache.derby.impl.sql.execute.NoPutResultSetImpl
org.apache.derby.impl.sql.execute.ScanResultSet
org.apache.derby.impl.sql.execute.TableScanResultSet
- All Implemented Interfaces:
Cloneable
,CursorResultSet
,NoPutResultSet
,ResultSet
,RowLocationRetRowSource
,RowSource
- Direct Known Subclasses:
BulkTableScanResultSet
,MultiProbeTableScanResultSet
,ValidateCheckConstraintResultSet
Takes a table and a table filter and returns
the table's rows satisfying the filter as a result set.
There are several things we could do during object
construction that are done in the open and next calls, to
improve performance.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
BasicNoPutResultSetImpl.FieldComparator
-
Field Summary
FieldsModifier and TypeFieldDescriptionboolean
protected long
protected boolean
protected DynamicCompiledOpenConglomInfo
private long
protected boolean
boolean
protected int[]
boolean
protected boolean
protected boolean
boolean
protected BackingStoreHashtable
This field is used by beetle 3865, updateable cursor using index.Qualifier[][]
protected boolean
private RowLocation
int
protected long
protected boolean
(package private) final boolean
protected ScanController
protected boolean
private Properties
protected boolean
protected StaticCompiledOpenConglomInfo
protected GeneratedMethod
protected ExecIndexRow
protected int
protected GeneratedMethod
protected ExecIndexRow
protected int
Fields inherited from class org.apache.derby.impl.sql.execute.ScanResultSet
accessedCols, candidate, fetchRowLocations, indexName, isolationLevel, lockMode, resultRowBuilder, tableName
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, TEMPORARY_RESULT_SET_NUMBER
Fields inherited from interface org.apache.derby.iapi.sql.ResultSet
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST
-
Constructor Summary
ConstructorsConstructorDescriptionTableScanResultSet
(long conglomId, StaticCompiledOpenConglomInfo scoci, Activation activation, int resultRowTemplate, int resultSetNumber, GeneratedMethod startKeyGetter, int startSearchOperator, GeneratedMethod stopKeyGetter, int stopSearchOperator, boolean sameStartStopPosition, Qualifier[][] qualifiers, String tableName, String userSuppliedOptimizerOverrides, String indexName, boolean isConstraint, boolean forUpdate, int colRefItem, int indexColItem, int lockMode, boolean tableLocked, int isolationLevel, int rowsPerRead, boolean oneRowScan, double optimizerEstimatedRowCount, double optimizerEstimatedCost) -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
Can we get instantaneous locks when getting share row locks at READ COMMITTED.clone()
Shallow clone this result set.void
close()
If the result set has been opened, close the open scan.This result set has its row from the last fetch done.Return the next row (if any) from the scan (if open).This result set has its row location from the last fetch done.long
getTimeSpent
(int type) Return the total amount of time spent in this ResultSet(package private) void
Initialize thestartPosition
andstopPosition
fields which are used to limit the rows returned by the scan.boolean
Is this ResultSet or it's source result set for update(package private) boolean
loopControl
(boolean moreRows) void
openCore()
open a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values...protected void
void
Positions the cursor in the specified rowLocation.private String
printPosition
(int searchOperator, GeneratedMethod positionGetter, ExecIndexRow positioner) Return a start or stop positioner as a String.Print an array of Qualifiers to the trace stream.void
Reopen a table scan.protected void
boolean
Do we need to relock the row when going to the heap.protected final void
setRowCountIfPossible
(long rowsThisScan) Update the number of rows in the scan controller.Methods inherited from class org.apache.derby.impl.sql.execute.ScanResultSet
getScanIsolationLevel, initIsolationLevel, setRowLocationsState, toXML
Methods inherited from class org.apache.derby.impl.sql.execute.NoPutResultSetImpl
clearCurrentRow, clearOrderableCache, closeRowSource, getCursorName, getNextRowFromRowSource, getResultDescription, getValidColumns, markRowAsDeleted, needsRowLocation, needsRowLocationForDeferredCheckConstraints, needsToClone, offendingRowLocation, printQualifiers, resultSetNumber, rowLocation, setCurrentRow, setHasDeferrableChecks, setNeedsRowLocation, setTargetResultSet, skipRow, skipScan, unpackHashValue, updateRow
Methods inherited from class org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl
addWarning, attachStatementContext, checkCancellationFlag, checkRowPosition, childrenToXML, cleanUp, dumpTimeStats, finish, finishAndRTS, getAbsoluteRow, getActivation, getAutoGeneratedKeysResultset, getBeginExecutionTimestamp, getCompactRow, getCurrentTimeMillis, getElapsedMillis, getEndExecutionTimestamp, getEstimatedRowCount, getExecuteTime, getExecutionFactory, getFirstRow, getLanguageConnectionContext, getLastRow, getNextRow, getPointOfAttachment, getPreviousRow, getRelativeRow, getRowNumber, getSubqueryTrackingArray, getTransactionController, getWarnings, isClosed, isXplainOnlyMode, markAsTopResultSet, modifiedRowCount, open, recordConstructorTime, returnsRows, setAfterLastRow, setBeforeFirstRow, setCompactRow, setCompatRow, toXML
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.derby.iapi.sql.ResultSet
addWarning, checkRowPosition, cleanUp, clearCurrentRow, finish, getAbsoluteRow, getActivation, getAutoGeneratedKeysResultset, getBeginExecutionTimestamp, getCursorName, getEndExecutionTimestamp, getExecuteTime, getFirstRow, getLastRow, getNextRow, getPreviousRow, getRelativeRow, getResultDescription, getRowNumber, getSubqueryTrackingArray, getWarnings, isClosed, modifiedRowCount, open, returnsRows, setAfterLastRow, setBeforeFirstRow, toXML
-
Field Details
-
scanController
-
scanControllerOpened
protected boolean scanControllerOpened -
isKeyed
protected boolean isKeyed -
firstScan
protected boolean firstScan -
startPosition
-
stopPosition
-
conglomId
protected long conglomId -
dcoci
-
scoci
-
startKeyGetter
-
startSearchOperator
protected int startSearchOperator -
stopKeyGetter
-
stopSearchOperator
protected int stopSearchOperator -
qualifiers
-
userSuppliedOptimizerOverrides
-
runTimeStatisticsOn
protected boolean runTimeStatisticsOn -
indexCols
protected int[] indexCols -
rowsPerRead
public int rowsPerRead -
forUpdate
public boolean forUpdate -
sameStartStopPosition
final boolean sameStartStopPosition -
nextDone
protected boolean nextDone -
rlTemplate
-
scanProperties
-
startPositionString
-
stopPositionString
-
isConstraint
public boolean isConstraint -
coarserLock
public boolean coarserLock -
oneRowScan
public boolean oneRowScan -
rowsThisScan
protected long rowsThisScan -
estimatedRowCount
private long estimatedRowCount -
past2FutureTbl
This field is used by beetle 3865, updateable cursor using index. It is a hash table containing updated rows that are thrown into future direction of the index scan, and as a result we'll hit it again but should skip it. The hash table will spill to disk if it grows too big to be kept in memory. -
qualify
protected boolean qualify -
currentRowIsValid
protected boolean currentRowIsValid -
scanRepositioned
protected boolean scanRepositioned
-
-
Constructor Details
-
TableScanResultSet
TableScanResultSet(long conglomId, StaticCompiledOpenConglomInfo scoci, Activation activation, int resultRowTemplate, int resultSetNumber, GeneratedMethod startKeyGetter, int startSearchOperator, GeneratedMethod stopKeyGetter, int stopSearchOperator, boolean sameStartStopPosition, Qualifier[][] qualifiers, String tableName, String userSuppliedOptimizerOverrides, String indexName, boolean isConstraint, boolean forUpdate, int colRefItem, int indexColItem, int lockMode, boolean tableLocked, int isolationLevel, int rowsPerRead, boolean oneRowScan, double optimizerEstimatedRowCount, double optimizerEstimatedCost) throws StandardException - Throws:
StandardException
-
-
Method Details
-
openCore
open a scan on the table. scan parameters are evaluated at each open, so there is probably some way of altering their values...- Specified by:
openCore
in interfaceNoPutResultSet
- Throws:
StandardException
- thrown on failure to open
-
initStartAndStopKey
Initialize thestartPosition
andstopPosition
fields which are used to limit the rows returned by the scan.- Throws:
StandardException
-
openScanController
- Throws:
StandardException
-
reopenScanController
- Throws:
StandardException
-
reopenCore
Reopen a table scan. Here we take advantage of the reopenScan() interface on scanController for optimimal performance on joins where we are an inner table.- Specified by:
reopenCore
in interfaceNoPutResultSet
- Overrides:
reopenCore
in classBasicNoPutResultSetImpl
- Throws:
StandardException
- thrown on failure to open- See Also:
-
loopControl
- Throws:
StandardException
-
getNextRowCore
Return the next row (if any) from the scan (if open).- Specified by:
getNextRowCore
in interfaceNoPutResultSet
- Specified by:
getNextRowCore
in classBasicNoPutResultSetImpl
- Returns:
- the next row in the result
- Throws:
StandardException
- thrown on failure to get next row- See Also:
-
close
If the result set has been opened, close the open scan.- Specified by:
close
in interfaceResultSet
- Overrides:
close
in classScanResultSet
- Throws:
StandardException
- on error
-
getTimeSpent
public long getTimeSpent(int type) Return the total amount of time spent in this ResultSet- Specified by:
getTimeSpent
in interfaceResultSet
- 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).
-
getRowLocation
This result set has its row location from the last fetch done. If the cursor is closed, or the row has been deleted a null is returned.- Specified by:
getRowLocation
in interfaceCursorResultSet
- Returns:
- the row location of the current cursor row.
- Throws:
StandardException
- thrown on failure to get row location- See Also:
-
getCurrentRow
This result set has its row from the last fetch done. If the cursor is closed, the row has been deleted, or no longer qualifies (for forward only result sets) a null is returned.- Specified by:
getCurrentRow
in interfaceCursorResultSet
- Returns:
- the last row returned;
- Throws:
StandardException
- thrown on failure.- See Also:
-
positionScanAtRowLocation
Description copied from interface:NoPutResultSet
Positions the cursor in the specified rowLocation. Used for scrollable insensitive result sets in order to position the cursor back to a row that has already be visited.- Specified by:
positionScanAtRowLocation
in interfaceNoPutResultSet
- Overrides:
positionScanAtRowLocation
in classNoPutResultSetImpl
- Parameters:
rl
- row location of the current cursor row- Throws:
StandardException
- thrown on failure to get location from storage engine- See Also:
-
printStartPosition
Print an array of Qualifiers to the trace stream. -
printStopPosition
-
printPosition
private String printPosition(int searchOperator, GeneratedMethod positionGetter, ExecIndexRow positioner) Return a start or stop positioner as a String. If we already generated the information, then use that. Otherwise, invoke the activation to get it. -
getScanProperties
-
requiresRelocking
public boolean requiresRelocking()Description copied from interface:NoPutResultSet
Do we need to relock the row when going to the heap.- Specified by:
requiresRelocking
in interfaceNoPutResultSet
- Overrides:
requiresRelocking
in classBasicNoPutResultSetImpl
- Returns:
- Whether or not we need to relock the row when going to the heap.
- See Also:
-
setRowCountIfPossible
Update the number of rows in the scan controller. NOTE: It would be more efficient to only update the scan controller if the optimizer's estimated number of rows were wrong by more than some threshold (like 10%). This would require a little more work than I have the time for now, however, as the row estimate that is given to this result set is the total number of rows for all scans, not the number of rows per scan.- Parameters:
rowsThisScan
- The number of rows to update the scanController to- Throws:
StandardException
- Thrown on error
-
canGetInstantaneousLocks
protected boolean canGetInstantaneousLocks()Can we get instantaneous locks when getting share row locks at READ COMMITTED.- Specified by:
canGetInstantaneousLocks
in classScanResultSet
-
isForUpdate
public boolean isForUpdate()Is this ResultSet or it's source result set for update- Specified by:
isForUpdate
in interfaceNoPutResultSet
- Overrides:
isForUpdate
in classNoPutResultSetImpl
- Returns:
- Whether or not the result set is for update.
-
clone
Shallow clone this result set. Used in trigger reference. beetle 4373.
-