Class SelectStatement
- java.lang.Object
-
- org.apache.cassandra.cql3.statements.SelectStatement
-
- All Implemented Interfaces:
CQLStatement
,CQLStatement.SingleKeyspaceCqlStatement
@ThreadSafe public class SelectStatement extends java.lang.Object implements CQLStatement.SingleKeyspaceCqlStatement
Encapsulates a completely parsed SELECT query, including the target column family, expression, result count, and ordering clause.A number of public methods here are only used internally. However, many of these are made accessible for the benefit of custom QueryHandler implementations, so before reducing their accessibility due consideration should be given.
Note that select statements can be accessed by multiple threads, so we cannot rely on mutable attributes.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
SelectStatement.Parameters
static class
SelectStatement.RawStatement
-
Nested classes/interfaces inherited from interface org.apache.cassandra.cql3.CQLStatement
CQLStatement.Raw, CQLStatement.SingleKeyspaceCqlStatement
-
-
Field Summary
Fields Modifier and Type Field Description VariableSpecifications
bindVariables
static int
DEFAULT_PAGE_SIZE
SelectStatement.Parameters
parameters
TableMetadata
table
static java.lang.String
TOPK_AGGREGATION_ERROR
static java.lang.String
TOPK_CONSISTENCY_LEVEL_ERROR
static java.lang.String
TOPK_CONSISTENCY_LEVEL_WARNING
static java.lang.String
TOPK_LIMIT_ERROR
static java.lang.String
TOPK_PAGE_SIZE_WARNING
static java.lang.String
TOPK_PARTITION_LIMIT_ERROR
-
Constructor Summary
Constructors Constructor Description SelectStatement(TableMetadata table, VariableSpecifications bindVariables, SelectStatement.Parameters parameters, Selection selection, StatementRestrictions restrictions, boolean isReversed, AggregationSpecification.Factory aggregationSpecFactory, org.apache.cassandra.cql3.statements.SelectStatement.ColumnComparator<java.util.List<java.nio.ByteBuffer>> orderingComparator, Term limit, Term perPartitionLimit)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
authorize(ClientState state)
Perform any access verification necessary for the statement.Slices
clusteringIndexFilterAsSlices()
Returns the slices fetched by this SELECT, assuming an internal call (no bound values in particular).ResultMessage.Rows
execute(QueryState state, QueryOptions options, Dispatcher.RequestTime requestTime)
Execute the statement and return the resulting result or null if there is no result.ResultMessage.Rows
executeInternal(QueryState state, QueryOptions options, long nowInSec, Dispatcher.RequestTime requestTime)
ResultMessage.Rows
executeLocally(QueryState state, QueryOptions options)
Variant of execute used for internal query against the system tables, and thus only query the local node.java.util.Map<DecoratedKey,java.util.List<Row>>
executeRawInternal(QueryOptions options, ClientState state, long nowInSec)
AggregationSpecification
getAggregationSpec(QueryOptions options)
AuditLogContext
getAuditLogContext()
Provides the context needed for audit logging statements.java.util.List<ColumnSpecification>
getBindVariables()
Returns all bind variables for the statementstatic java.nio.ByteBuffer[]
getComponents(TableMetadata metadata, DecoratedKey dk)
java.lang.Iterable<Function>
getFunctions()
Return an Iterable over all of the functions (both native and user-defined) used by any component of the statementint
getLimit(QueryOptions options)
Returns the limit specified by the user.short[]
getPartitionKeyBindVariableIndexes()
Returns an array with the same length as the number of partition key columns for the table corresponding to table.int
getPerPartitionLimit(QueryOptions options)
Returns the per partition limit specified by the user.ReadQuery
getQuery(QueryOptions options, long nowInSec)
ReadQuery
getQuery(QueryOptions options, ClientState state, ColumnFilter columnFilter, long nowInSec, int userLimit, int perPartitionLimit, int pageSize, AggregationSpecification aggregationSpec)
ReadQuery
getQuery(QueryOptions options, ClientState state, ColumnFilter columnFilter, long nowInSec, DataLimits limit)
StatementRestrictions
getRestrictions()
May be used by custom QueryHandler implementationsResultSet.ResultMetadata
getResultMetadata()
RowFilter
getRowFilter(QueryOptions options, ClientState state)
May be used by custom QueryHandler implementationsSelection
getSelection()
May be used by custom QueryHandler implementationsSinglePartitionReadCommand
internalReadForView(DecoratedKey key, long nowInSec)
Returns a read command that can be used internally to query all the rows queried by this SELECT for a give key (used for materialized views).java.lang.String
keyspace()
Slices
makeSlices(QueryOptions options)
ResultSet
process(PartitionIterator partitions, long nowInSec, boolean unmask, ClientState state)
void
processPartition(RowIterator partition, QueryOptions options, ResultSetBuilder result, long nowInSec)
ColumnFilter
queriedColumns()
The columns to fetch internally for this SELECT statement (which can be more than the one selected by the user as it also include any restricted column in particular).RowFilter
rowFilterForInternalCalls()
TheRowFilter
for this SELECT, assuming an internal call (no bound values in particular).java.lang.String
table()
java.lang.String
toString()
void
validate(ClientState state)
Perform additional validation required by the statment.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.cassandra.cql3.CQLStatement
hasConditions
-
-
-
-
Field Detail
-
DEFAULT_PAGE_SIZE
public static final int DEFAULT_PAGE_SIZE
- See Also:
- Constant Field Values
-
TOPK_CONSISTENCY_LEVEL_ERROR
public static final java.lang.String TOPK_CONSISTENCY_LEVEL_ERROR
- See Also:
- Constant Field Values
-
TOPK_LIMIT_ERROR
public static final java.lang.String TOPK_LIMIT_ERROR
- See Also:
- Constant Field Values
-
TOPK_PARTITION_LIMIT_ERROR
public static final java.lang.String TOPK_PARTITION_LIMIT_ERROR
- See Also:
- Constant Field Values
-
TOPK_AGGREGATION_ERROR
public static final java.lang.String TOPK_AGGREGATION_ERROR
- See Also:
- Constant Field Values
-
TOPK_CONSISTENCY_LEVEL_WARNING
public static final java.lang.String TOPK_CONSISTENCY_LEVEL_WARNING
- See Also:
- Constant Field Values
-
TOPK_PAGE_SIZE_WARNING
public static final java.lang.String TOPK_PAGE_SIZE_WARNING
- See Also:
- Constant Field Values
-
bindVariables
public final VariableSpecifications bindVariables
-
table
public final TableMetadata table
-
parameters
public final SelectStatement.Parameters parameters
-
-
Constructor Detail
-
SelectStatement
public SelectStatement(TableMetadata table, VariableSpecifications bindVariables, SelectStatement.Parameters parameters, Selection selection, StatementRestrictions restrictions, boolean isReversed, AggregationSpecification.Factory aggregationSpecFactory, org.apache.cassandra.cql3.statements.SelectStatement.ColumnComparator<java.util.List<java.nio.ByteBuffer>> orderingComparator, Term limit, Term perPartitionLimit)
-
-
Method Detail
-
getBindVariables
public java.util.List<ColumnSpecification> getBindVariables()
Description copied from interface:CQLStatement
Returns all bind variables for the statement- Specified by:
getBindVariables
in interfaceCQLStatement
-
getPartitionKeyBindVariableIndexes
public short[] getPartitionKeyBindVariableIndexes()
Description copied from interface:CQLStatement
Returns an array with the same length as the number of partition key columns for the table corresponding to table. Each short in the array represents the bind index of the marker that holds the value for that partition key column. If there are no bind markers for any of the partition key columns, null is returned.- Specified by:
getPartitionKeyBindVariableIndexes
in interfaceCQLStatement
-
getFunctions
public java.lang.Iterable<Function> getFunctions()
Description copied from interface:CQLStatement
Return an Iterable over all of the functions (both native and user-defined) used by any component of the statement- Specified by:
getFunctions
in interfaceCQLStatement
- Returns:
- functions all functions found (may contain duplicates)
-
queriedColumns
public ColumnFilter queriedColumns()
The columns to fetch internally for this SELECT statement (which can be more than the one selected by the user as it also include any restricted column in particular).
-
getResultMetadata
public ResultSet.ResultMetadata getResultMetadata()
-
authorize
public void authorize(ClientState state) throws InvalidRequestException, UnauthorizedException
Description copied from interface:CQLStatement
Perform any access verification necessary for the statement.- Specified by:
authorize
in interfaceCQLStatement
- Parameters:
state
- the current client state- Throws:
InvalidRequestException
UnauthorizedException
-
validate
public void validate(ClientState state) throws InvalidRequestException
Description copied from interface:CQLStatement
Perform additional validation required by the statment. To be overriden by subclasses if needed.- Specified by:
validate
in interfaceCQLStatement
- Parameters:
state
- the current client state- Throws:
InvalidRequestException
-
execute
public ResultMessage.Rows execute(QueryState state, QueryOptions options, Dispatcher.RequestTime requestTime)
Description copied from interface:CQLStatement
Execute the statement and return the resulting result or null if there is no result.- Specified by:
execute
in interfaceCQLStatement
- Parameters:
state
- the current query stateoptions
- options for this query (consistency, variables, pageSize, ...)requestTime
- request enqueue / and start times;
-
getAggregationSpec
public AggregationSpecification getAggregationSpec(QueryOptions options)
-
getQuery
public ReadQuery getQuery(QueryOptions options, long nowInSec) throws RequestValidationException
- Throws:
RequestValidationException
-
getQuery
public ReadQuery getQuery(QueryOptions options, ClientState state, ColumnFilter columnFilter, long nowInSec, int userLimit, int perPartitionLimit, int pageSize, AggregationSpecification aggregationSpec)
-
getQuery
public ReadQuery getQuery(QueryOptions options, ClientState state, ColumnFilter columnFilter, long nowInSec, DataLimits limit)
-
getAuditLogContext
public AuditLogContext getAuditLogContext()
Description copied from interface:CQLStatement
Provides the context needed for audit logging statements.- Specified by:
getAuditLogContext
in interfaceCQLStatement
-
executeLocally
public ResultMessage.Rows executeLocally(QueryState state, QueryOptions options) throws RequestExecutionException, RequestValidationException
Description copied from interface:CQLStatement
Variant of execute used for internal query against the system tables, and thus only query the local node.- Specified by:
executeLocally
in interfaceCQLStatement
- Parameters:
state
- the current query state- Throws:
RequestExecutionException
RequestValidationException
-
executeInternal
public ResultMessage.Rows executeInternal(QueryState state, QueryOptions options, long nowInSec, Dispatcher.RequestTime requestTime)
-
executeRawInternal
public java.util.Map<DecoratedKey,java.util.List<Row>> executeRawInternal(QueryOptions options, ClientState state, long nowInSec) throws RequestExecutionException, RequestValidationException
-
process
public ResultSet process(PartitionIterator partitions, long nowInSec, boolean unmask, ClientState state) throws InvalidRequestException
- Throws:
InvalidRequestException
-
keyspace
public java.lang.String keyspace()
- Specified by:
keyspace
in interfaceCQLStatement.SingleKeyspaceCqlStatement
-
table
public java.lang.String table()
-
getSelection
public Selection getSelection()
May be used by custom QueryHandler implementations
-
getRestrictions
public StatementRestrictions getRestrictions()
May be used by custom QueryHandler implementations
-
clusteringIndexFilterAsSlices
public Slices clusteringIndexFilterAsSlices()
Returns the slices fetched by this SELECT, assuming an internal call (no bound values in particular).Note that if the SELECT intrinsically selects rows by names, we convert them into equivalent slices for the purpose of this method. This is used for MVs to restrict what needs to be read when we want to read everything that could be affected by a given view (and so, if the view SELECT statement has restrictions on the clustering columns, we can restrict what we read).
-
internalReadForView
public SinglePartitionReadCommand internalReadForView(DecoratedKey key, long nowInSec)
Returns a read command that can be used internally to query all the rows queried by this SELECT for a give key (used for materialized views).
-
rowFilterForInternalCalls
public RowFilter rowFilterForInternalCalls()
TheRowFilter
for this SELECT, assuming an internal call (no bound values in particular).
-
makeSlices
public Slices makeSlices(QueryOptions options) throws InvalidRequestException
- Throws:
InvalidRequestException
-
getLimit
public int getLimit(QueryOptions options)
Returns the limit specified by the user. May be used by custom QueryHandler implementations- Returns:
- the limit specified by the user or
DataLimits.NO_LIMIT
if no value as been specified.
-
getPerPartitionLimit
public int getPerPartitionLimit(QueryOptions options)
Returns the per partition limit specified by the user. May be used by custom QueryHandler implementations- Returns:
- the per partition limit specified by the user or
DataLimits.NO_LIMIT
if no value as been specified.
-
getRowFilter
public RowFilter getRowFilter(QueryOptions options, ClientState state) throws InvalidRequestException
May be used by custom QueryHandler implementations- Throws:
InvalidRequestException
-
getComponents
public static java.nio.ByteBuffer[] getComponents(TableMetadata metadata, DecoratedKey dk)
-
processPartition
public void processPartition(RowIterator partition, QueryOptions options, ResultSetBuilder result, long nowInSec) throws InvalidRequestException
- Throws:
InvalidRequestException
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-