|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.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
org.apache.derby.impl.sql.execute.MultiProbeTableScanResultSet
class MultiProbeTableScanResultSet
Result set that fetches rows from a scan by "probing" the underlying table with a given list of values. Repeated calls to getNextRowCore() will first return all rows matching probeValues[0], then all rows matching probeValues[1], and so on (duplicate probe values are ignored). Once all matching rows for all values in probeValues have been returned, the call to getNextRowCore() will return null, thereby ending the scan. The expectation is that this kind of result set only ever appears beneath some other top-level result set (esp. IndexRowToBaseRowResultSet), in which case all result sets higher up in the result set tree will just see a stream of rows satisfying the list of probe values. Currently this type of result is used for evaluation of IN lists, where the user wants to retrieve all rows for which some target column has a value that equals one of values in the IN list. In that case the IN list values are represented by the probeValues array. Most of the work for this class is inherited from TableScanResultSet. This class overrides four public methods and two protected methods from TableScanResultSet. In all cases the methods here set probing state and then call the corresponding methods on "super".
Field Summary | |
---|---|
protected DataValueDescriptor[] |
origProbeValues
The values with which we will probe the table, as they were passed to the constructor. |
protected int |
probeValIndex
0-based position of the next value to lookup w.r.t. the probe values list. |
protected DataValueDescriptor[] |
probeValues
The values with which we will probe the table. |
private boolean |
skipNextScan
Tells whether or not we should skip the next attempt to (re)open the scan controller. |
private int |
sortRequired
Indicator as to which type of sort we need: ASCENDING, DESCENDING, or NONE (NONE is represented by "RowOrdering.DONTCARE" and is used for cases where all necessary sorting occurred at compilation time). |
Fields inherited from class org.apache.derby.impl.sql.execute.TableScanResultSet |
---|
coarserLock, compareToLastKey, conglomId, currentRowPrescanned, dcoci, firstScan, forUpdate, futureForUpdateRows, futureRowResultSet, indexCols, indexName, isConstraint, isKeyed, lastCursorKey, oneRowScan, past2FutureTbl, qualifiers, resultRowAllocator, rowsPerRead, rowsThisScan, runTimeStatisticsOn, sameStartStopPosition, scanController, scanControllerOpened, scoci, skipFutureRowHolder, sourceDrained, startKeyGetter, startPosition, startPositionString, startSearchOperator, stopKeyGetter, stopPosition, stopPositionString, stopSearchOperator, tableName, userSuppliedOptimizerOverrides |
Fields inherited from class org.apache.derby.impl.sql.execute.ScanResultSet |
---|
accessedCols, candidate, isolationLevel, lockMode |
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.ResultSet |
---|
CURRENT_RESULTSET_ONLY, ENTIRE_RESULTSET_TREE, ISAFTERLAST, ISBEFOREFIRST, ISFIRST, ISLAST |
Fields inherited from interface org.apache.derby.iapi.sql.execute.NoPutResultSet |
---|
ABSOLUTE, FIRST, LAST, NEXT, PREVIOUS, RELATIVE |
Constructor Summary | |
---|---|
MultiProbeTableScanResultSet(long conglomId,
StaticCompiledOpenConglomInfo scoci,
Activation activation,
GeneratedMethod resultRowAllocator,
int resultSetNumber,
GeneratedMethod startKeyGetter,
int startSearchOperator,
GeneratedMethod stopKeyGetter,
int stopSearchOperator,
boolean sameStartStopPosition,
Qualifier[][] qualifiers,
DataValueDescriptor[] probingVals,
int sortRequired,
java.lang.String tableName,
java.lang.String userSuppliedOptimizerOverrides,
java.lang.String indexName,
boolean isConstraint,
boolean forUpdate,
int colRefItem,
int indexColItem,
int lockMode,
boolean tableLocked,
int isolationLevel,
boolean oneRowScan,
double optimizerEstimatedRowCount,
double optimizerEstimatedCost)
Constructor. |
Method Summary | |
---|---|
void |
close()
If the result set has been opened, close the open scan. |
private DataValueDescriptor |
getNextProbeValue()
Return the next non-duplicate value from the probe list. |
ExecRow |
getNextRowCore()
Return the next row (if any) from the scan (if open). |
(package private) void |
initStartAndStopKey()
Initialize the start key and the stop key used in the scan. |
private boolean |
moreInListVals()
Figure out whether or not we can (re-)position the scan controller based on the next value in probeValues. |
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... |
void |
reopenCore()
Reopen a table scan. |
private void |
reopenCore(boolean forNextProbe)
There are two scenarios for which we reopen this kind of scan: A - The first is for join processing. |
protected void |
reopenScanController()
Reopen the scan controller |
protected boolean |
skipScan(ExecIndexRow startPosition,
ExecIndexRow stopPosition)
Check if the scan should be skipped. |
Methods inherited from class org.apache.derby.impl.sql.execute.TableScanResultSet |
---|
canGetInstantaneousLocks, clone, getCurrentRow, getRowLocation, getScanProperties, getTimeSpent, isForUpdate, openScanController, positionScanAtRowLocation, printStartPosition, printStopPosition, requiresRelocking, setRowCountIfPossible |
Methods inherited from class org.apache.derby.impl.sql.execute.ScanResultSet |
---|
getScanIsolationLevel, initIsolationLevel |
Methods inherited from class org.apache.derby.impl.sql.execute.NoPutResultSetImpl |
---|
clearCurrentRow, clearOrderableCache, closeRowSource, getCursorName, getNextRowFromRowSource, getResultDescription, getValidColumns, markRowAsDeleted, needsRowLocation, needsToClone, printQualifiers, resultSetNumber, rowLocation, setCurrentRow, setNeedsRowLocation, setTargetResultSet, skipRow, updateRow |
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.execute.CursorResultSet |
---|
getCurrentRow, getRowLocation |
Methods inherited from interface org.apache.derby.iapi.sql.ResultSet |
---|
checkRowPosition, cleanUp, clearCurrentRow, finish, getAbsoluteRow, getActivation, getAutoGeneratedKeysResultset, getBeginExecutionTimestamp, getCursorName, getEndExecutionTimestamp, getExecuteTime, getFirstRow, getLastRow, getNextRow, getPreviousRow, getRelativeRow, getResultDescription, getRowNumber, getSubqueryTrackingArray, getTimeSpent, getWarnings, isClosed, modifiedRowCount, open, returnsRows, setAfterLastRow, setBeforeFirstRow |
Field Detail |
---|
protected DataValueDescriptor[] probeValues
protected DataValueDescriptor[] origProbeValues
protected int probeValIndex
private int sortRequired
private boolean skipNextScan
true
it means that the previous call
to initStartAndStopKey()
did not find a new probe value, which
means that the probe list is exhausted and we shouldn't perform a scan.
Constructor Detail |
---|
MultiProbeTableScanResultSet(long conglomId, StaticCompiledOpenConglomInfo scoci, Activation activation, GeneratedMethod resultRowAllocator, int resultSetNumber, GeneratedMethod startKeyGetter, int startSearchOperator, GeneratedMethod stopKeyGetter, int stopSearchOperator, boolean sameStartStopPosition, Qualifier[][] qualifiers, DataValueDescriptor[] probingVals, int sortRequired, java.lang.String tableName, java.lang.String userSuppliedOptimizerOverrides, java.lang.String indexName, boolean isConstraint, boolean forUpdate, int colRefItem, int indexColItem, int lockMode, boolean tableLocked, int isolationLevel, boolean oneRowScan, double optimizerEstimatedRowCount, double optimizerEstimatedCost) throws StandardException
StandardException
- thrown on failure to openResultSetFactory.getMultiProbeTableScanResultSet(org.apache.derby.iapi.sql.Activation, long, int, org.apache.derby.iapi.services.loader.GeneratedMethod, int, org.apache.derby.iapi.services.loader.GeneratedMethod, int, org.apache.derby.iapi.services.loader.GeneratedMethod, int, boolean, org.apache.derby.iapi.store.access.Qualifier[][], org.apache.derby.iapi.types.DataValueDescriptor[], int, java.lang.String, java.lang.String, java.lang.String, boolean, boolean, int, int, int, boolean, int, boolean, double, double)
Method Detail |
---|
public void openCore() throws StandardException
TableScanResultSet
openCore
in interface NoPutResultSet
openCore
in class TableScanResultSet
StandardException
- thrown on failure to openNoPutResultSet.openCore()
public void reopenCore() throws StandardException
TableScanResultSet
reopenCore
in interface NoPutResultSet
reopenCore
in class TableScanResultSet
StandardException
- thrown on failure to openNoPutResultSet.reopenCore()
private void reopenCore(boolean forNextProbe) throws StandardException
StandardException
protected void reopenScanController() throws StandardException
reopenScanController
in class TableScanResultSet
StandardException
- thrown on failure to openvoid initStartAndStopKey() throws StandardException
true
when the method returns to prevent a new scan from being reopened with
a missing or incorrect probe value.
initStartAndStopKey
in class TableScanResultSet
StandardException
protected boolean skipScan(ExecIndexRow startPosition, ExecIndexRow stopPosition) throws StandardException
initStartAndStopKey()
exhausted the probe list, or (2) the scan
should return no results because of nulls in the start key or stop key.
See NoPutResultSetImpl.skipScan(ExecIndexRow,ExecIndexRow)
for
details about (2).
skipScan
in class NoPutResultSetImpl
startPosition
- the key on which to start the scanstopPosition
- the key on which to stop the scan
true
if scan should be skipped, false
otherwise
StandardException
public ExecRow getNextRowCore() throws StandardException
getNextRowCore
in interface NoPutResultSet
getNextRowCore
in class TableScanResultSet
StandardException
- thrown on failure to get next rowNoPutResultSet.getNextRowCore()
public void close() throws StandardException
TableScanResultSet
close
in interface ResultSet
close
in class TableScanResultSet
StandardException
- on errorResultSet.close()
private boolean moreInListVals()
private DataValueDescriptor getNextProbeValue() throws StandardException
StandardException
|
Built on Thu 2010-12-23 20:49:13+0000, from revision ??? | ||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |