public class SinglePartitionReadCommand extends ReadCommand implements SinglePartitionReadQuery
| Modifier and Type | Class and Description |
|---|---|
static class |
SinglePartitionReadCommand.Group
Groups multiple single partition read commands.
|
ReadCommand.CheckForAbort, ReadCommand.Kind, ReadCommand.SelectionDeserializer, ReadCommand.Serializer| Modifier and Type | Field and Description |
|---|---|
protected static ReadCommand.SelectionDeserializer |
selectionDeserializer |
logger, serializer| Modifier | Constructor and Description |
|---|---|
protected |
SinglePartitionReadCommand(boolean isDigest,
int digestVersion,
boolean acceptsTransient,
TableMetadata metadata,
int nowInSec,
ColumnFilter columnFilter,
RowFilter rowFilter,
DataLimits limits,
DecoratedKey partitionKey,
ClusteringIndexFilter clusteringIndexFilter,
IndexMetadata index) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
appendCQLWhereClause(java.lang.StringBuilder sb) |
ClusteringIndexFilter |
clusteringIndexFilter() |
ClusteringIndexFilter |
clusteringIndexFilter(DecoratedKey key)
The clustering index filter this command to use for the provided key.
|
ColumnFilter |
columnFilter()
A filter on which (non-PK) columns must be returned by the query.
|
SinglePartitionReadCommand |
copy()
Returns a copy of this command.
|
protected SinglePartitionReadCommand |
copyAsDigestQuery() |
protected SinglePartitionReadCommand |
copyAsTransientQuery() |
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
java.nio.ByteBuffer key,
Slices slices)
Creates a new single partition slice command for the provided slices.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
ColumnFilter columnFilter,
RowFilter rowFilter,
DataLimits limits,
DecoratedKey partitionKey,
ClusteringIndexFilter clusteringIndexFilter)
Creates a new read command on a single partition.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
ColumnFilter columnFilter,
RowFilter rowFilter,
DataLimits limits,
DecoratedKey partitionKey,
ClusteringIndexFilter clusteringIndexFilter,
IndexMetadata indexMetadata)
Creates a new read command on a single partition.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
DecoratedKey key,
Clustering<?> name)
Creates a new single partition name command for the provided row.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
DecoratedKey key,
ColumnFilter columnFilter,
ClusteringIndexFilter filter)
Creates a new read command on a single partition.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
DecoratedKey key,
java.util.NavigableSet<Clustering<?>> names)
Creates a new single partition name command for the provided rows.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
DecoratedKey key,
Slice slice)
Creates a new single partition slice command for the provided single slice.
|
static SinglePartitionReadCommand |
create(TableMetadata metadata,
int nowInSec,
DecoratedKey key,
Slices slices)
Creates a new single partition slice command for the provided slices.
|
PartitionIterator |
execute(ConsistencyLevel consistency,
ClientState clientState,
long queryStartNanoTime)
Executes the query at the provided consistency level.
|
PartitionIterator |
executeInternal(ReadExecutionController controller)
Execute the query for internal queries (that is, it basically executes the query locally).
|
SinglePartitionReadCommand |
forPaging(Clustering<?> lastReturned,
DataLimits limits)
Returns a new
SinglePartitionReadQuery suitable to paging from the last returned row. |
static SinglePartitionReadCommand |
fullPartitionRead(TableMetadata metadata,
int nowInSec,
java.nio.ByteBuffer key)
Creates a new read command that queries a single partition in its entirety.
|
static SinglePartitionReadCommand |
fullPartitionRead(TableMetadata metadata,
int nowInSec,
DecoratedKey key)
Creates a new read command that queries a single partition in its entirety.
|
long |
getTimeout(java.util.concurrent.TimeUnit unit)
The configured timeout for this command.
|
boolean |
isLimitedToOnePartition() |
boolean |
isRangeRequest() |
boolean |
isReversed()
Whether the underlying
ClusteringIndexFilter is reversed or not. |
DataLimits |
limits()
The limits for the query.
|
TableMetadata |
metadata()
The metadata for the table this is a query on.
|
int |
nowInSec()
The time in seconds to use as "now" for this query.
|
DecoratedKey |
partitionKey()
Returns the key of the partition queried by this
ReadQuery |
UnfilteredRowIterator |
queryMemtableAndDisk(ColumnFamilyStore cfs,
ReadExecutionController executionController)
Queries both memtable and sstables to fetch the result of this query.
|
protected UnfilteredPartitionIterator |
queryStorage(ColumnFamilyStore cfs,
ReadExecutionController executionController) |
protected void |
recordLatency(TableMetrics metric,
long latencyNanos) |
RowFilter |
rowFilter()
Filters/Resrictions on CQL rows.
|
protected long |
selectionSerializedSize(int version) |
boolean |
selectsFullPartition()
Checks if this
ReadQuery selects full partitions, that is it has no filtering on clustering or regular columns. |
protected void |
serializeSelection(DataOutputPlus out,
int version) |
java.lang.String |
toString() |
Verb |
verb() |
SinglePartitionReadCommand |
withUpdatedLimit(DataLimits newLimits)
Creates a new
ReadCommand instance with new limits. |
acceptsTransient, copyAsDigestQuery, copyAsDigestQuery, copyAsTransientQuery, copyAsTransientQuery, createMessage, createResponse, digestVersion, executeLocally, executionController, getIndex, getRepairedDataDigest, indexMetadata, isDigestQuery, isRepairedDataDigestConclusive, isTrackingRepairedStatus, maybeValidateIndex, name, oldestUnrepairedTombstone, setDigestVersion, toCQLString, trackRepairedStatus, withoutPurgeableTombstones, withStateTrackingabort, complete, creationTimeNanos, isAborted, isCompleted, isCrossNode, isInProgress, isSlow, setMonitoringTime, slowTimeoutNanos, timeoutNanosclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitcreateGroup, getPager, selectsClustering, selectsKeycolumnFilter, empty, executeInternal, executeLocally, executionController, isEmpty, limits, maybeValidateIndex, metadata, nowInSec, rowFilterprotected static final ReadCommand.SelectionDeserializer selectionDeserializer
protected SinglePartitionReadCommand(boolean isDigest,
int digestVersion,
boolean acceptsTransient,
TableMetadata metadata,
int nowInSec,
ColumnFilter columnFilter,
RowFilter rowFilter,
DataLimits limits,
DecoratedKey partitionKey,
ClusteringIndexFilter clusteringIndexFilter,
IndexMetadata index)
public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DecoratedKey partitionKey, ClusteringIndexFilter clusteringIndexFilter, IndexMetadata indexMetadata)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.columnFilter - the column filter to use for the query.rowFilter - the row filter to use for the query.limits - the limits to use for the query.partitionKey - the partition key for the partition to query.clusteringIndexFilter - the clustering index filter to use for the query.indexMetadata - explicitly specified index to use for the querypublic static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, ColumnFilter columnFilter, RowFilter rowFilter, DataLimits limits, DecoratedKey partitionKey, ClusteringIndexFilter clusteringIndexFilter)
create in interface SinglePartitionReadQuerymetadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.columnFilter - the column filter to use for the query.rowFilter - the row filter to use for the query.limits - the limits to use for the query.partitionKey - the partition key for the partition to query.clusteringIndexFilter - the clustering index filter to use for the query.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, ColumnFilter columnFilter, ClusteringIndexFilter filter)
create in interface SinglePartitionReadQuerymetadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.columnFilter - the column filter to use for the query.filter - the clustering index filter to use for the query.public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, int nowInSec, DecoratedKey key)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.key.public static SinglePartitionReadCommand fullPartitionRead(TableMetadata metadata, int nowInSec, java.nio.ByteBuffer key)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.key.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Slice slice)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.slice - the slice of rows to query.slice in key. The returned query will
query every columns for the table (without limit or row filtering) and be in forward order.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Slices slices)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.slices - the slices of rows to query.slices in key. The returned query will
query every columns for the table (without limit or row filtering) and be in forward order.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, java.nio.ByteBuffer key, Slices slices)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.slices - the slices of rows to query.slices in key. The returned query will
query every columns for the table (without limit or row filtering) and be in forward order.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, java.util.NavigableSet<Clustering<?>> names)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.names - the clustering for the rows to query.names in key. The returned query will
query every columns (without limit or row filtering) and be in forward order.public static SinglePartitionReadCommand create(TableMetadata metadata, int nowInSec, DecoratedKey key, Clustering<?> name)
metadata - the table to query.nowInSec - the time in seconds to use are "now" for this query.key - the partition key for the partition to query.name - the clustering for the row to query.name in key. The returned query will
query every columns (without limit or row filtering).public SinglePartitionReadCommand copy()
ReadCommandcopy in class ReadCommandprotected SinglePartitionReadCommand copyAsDigestQuery()
copyAsDigestQuery in class ReadCommandprotected SinglePartitionReadCommand copyAsTransientQuery()
copyAsTransientQuery in class ReadCommandpublic SinglePartitionReadCommand withUpdatedLimit(DataLimits newLimits)
ReadCommandReadCommand instance with new limits.withUpdatedLimit in interface SinglePartitionReadQuerywithUpdatedLimit in class ReadCommandnewLimits - the new limitsReadCommand with the updated limitspublic DecoratedKey partitionKey()
SinglePartitionReadQueryReadQuerypartitionKey in interface SinglePartitionReadQuerypublic ClusteringIndexFilter clusteringIndexFilter()
clusteringIndexFilter in interface SinglePartitionReadQuerypublic ClusteringIndexFilter clusteringIndexFilter(DecoratedKey key)
ReadCommandNote that that method should only be called on a key actually queried by this command and in practice, this will almost always return the same filter, but for the sake of paging, the filter on the first key of a range command might be slightly different.
clusteringIndexFilter in class ReadCommandkey - a partition key queried by this command.ClusteringIndexFilter to use for the partition of key key.public long getTimeout(java.util.concurrent.TimeUnit unit)
ReadCommandgetTimeout in class ReadCommandpublic boolean isReversed()
ReadCommandClusteringIndexFilter is reversed or not.isReversed in class ReadCommandClusteringIndexFilter is reversed or not.public SinglePartitionReadCommand forPaging(Clustering<?> lastReturned, DataLimits limits)
SinglePartitionReadQuerySinglePartitionReadQuery suitable to paging from the last returned row.forPaging in interface SinglePartitionReadQuerylastReturned - the last row returned by the previous page. The newly created query
will only query row that comes after this (in query order). This can be null if this
is the first page.limits - the limits to use for the page to query.public PartitionIterator execute(ConsistencyLevel consistency, ClientState clientState, long queryStartNanoTime) throws RequestExecutionException
ReadQueryexecute in interface ReadQueryconsistency - the consistency level to achieve for the query.clientState - the ClientState for the query. In practice, this can be null unless
consistency is a serial consistency.RequestExecutionExceptionprotected void recordLatency(TableMetrics metric, long latencyNanos)
recordLatency in class ReadCommandprotected UnfilteredPartitionIterator queryStorage(ColumnFamilyStore cfs, ReadExecutionController executionController)
queryStorage in class ReadCommandpublic UnfilteredRowIterator queryMemtableAndDisk(ColumnFamilyStore cfs, ReadExecutionController executionController)
Please note that this method:
1) does not check the row cache.
2) does not apply the query limit, nor the row filter (and so ignore 2ndary indexes).
Those are applied in ReadCommand.executeLocally(org.apache.cassandra.db.ReadExecutionController).
3) does not record some of the read metrics (latency, scanned cells histograms) nor
throws TombstoneOverwhelmingException.
It is publicly exposed because there is a few places where that is exactly what we want,
but it should be used only where you know you don't need thoses things.
Also note that one must have created a ReadExecutionController on the queried table and we require it as
a parameter to enforce that fact, even though it's not explicitlly used by the method.
public boolean selectsFullPartition()
ReadQueryReadQuery selects full partitions, that is it has no filtering on clustering or regular columns.selectsFullPartition in interface ReadQuerytrue if this ReadQuery selects full partitions, false otherwise.public java.lang.String toString()
toString in class java.lang.Objectpublic Verb verb()
verb in class ReadCommandprotected void appendCQLWhereClause(java.lang.StringBuilder sb)
appendCQLWhereClause in class ReadCommandprotected void serializeSelection(DataOutputPlus out, int version) throws java.io.IOException
serializeSelection in class ReadCommandjava.io.IOExceptionprotected long selectionSerializedSize(int version)
selectionSerializedSize in class ReadCommandpublic boolean isLimitedToOnePartition()
isLimitedToOnePartition in class ReadCommandpublic boolean isRangeRequest()
isRangeRequest in class ReadCommandpublic TableMetadata metadata()
ReadQuerypublic PartitionIterator executeInternal(ReadExecutionController controller)
ReadQueryexecuteInternal in interface ReadQuerycontroller - the ReadExecutionController protecting the read.public DataLimits limits()
ReadQuerypublic int nowInSec()
ReadQueryWe use the same time as "now" for the whole query to avoid considering different values as expired during the query, which would be buggy (would throw of counting amongst other things).
public RowFilter rowFilter()
ReadQuery
This contains the restrictions that are not directly handled by the
ClusteringIndexFilter. More specifically, this includes any non-PK column
restrictions and can include some PK columns restrictions when those can't be
satisfied entirely by the clustering index filter (because not all clustering columns
have been restricted for instance). If there is 2ndary indexes on the table,
one of this restriction might be handled by a 2ndary index.
public ColumnFilter columnFilter()
ReadQuerycolumnFilter in interface ReadQueryCopyright © 2009-2020 The Apache Software Foundation