Package org.apache.cassandra.db.filter
Class RowFilter
- java.lang.Object
-
- org.apache.cassandra.db.filter.RowFilter
-
- All Implemented Interfaces:
java.lang.Iterable<RowFilter.Expression>
public abstract class RowFilter extends java.lang.Object implements java.lang.Iterable<RowFilter.Expression>
A filter on which rows a given query should include or exclude.This corresponds to the restrictions on rows that are not handled by the query
ClusteringIndexFilter
. Some of the expressions of this filter may be handled by a 2ndary index, and the rest is simply filtered out from the result set (the later can only happen if the query was using ALLOW FILTERING).
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
RowFilter.CustomExpression
A custom index expression for use with 2i implementations which support custom syntax and which are not necessarily linked to a single column in the base table.static class
RowFilter.Expression
static class
RowFilter.Serializer
static class
RowFilter.SimpleExpression
An expression of the form 'column' 'op' 'value'.static class
RowFilter.UserExpression
A user defined filtering expression.
-
Field Summary
Fields Modifier and Type Field Description protected java.util.List<RowFilter.Expression>
expressions
static RowFilter
NONE
static RowFilter.Serializer
serializer
-
Constructor Summary
Constructors Modifier Constructor Description protected
RowFilter(java.util.List<RowFilter.Expression> expressions)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description RowFilter.SimpleExpression
add(ColumnMetadata def, Operator op, java.nio.ByteBuffer value)
void
addCustomIndexExpression(TableMetadata metadata, IndexMetadata targetIndex, java.nio.ByteBuffer value)
void
addMapEquality(ColumnMetadata def, java.nio.ByteBuffer key, Operator op, java.nio.ByteBuffer value)
void
addUserExpression(RowFilter.UserExpression e)
boolean
clusteringKeyRestrictionsAreSatisfiedBy(Clustering<?> clustering)
Returns true if all of the expressions within this filter that apply to the clustering key are satisfied by the given Clustering, false otherwise.static RowFilter
create()
static RowFilter
create(int capacity)
PartitionIterator
filter(PartitionIterator iter, TableMetadata metadata, int nowInSec)
Filters the provided iterator so that only the row satisfying the expression of this filter are included in the resulting iterator.UnfilteredPartitionIterator
filter(UnfilteredPartitionIterator iter, int nowInSec)
Filters the provided iterator so that only the row satisfying the expression of this filter are included in the resulting iterator.protected abstract Transformation<BaseRowIterator<?>>
filter(TableMetadata metadata, int nowInSec)
java.util.List<RowFilter.Expression>
getExpressions()
boolean
hasExpressionOnClusteringOrRegularColumns()
Checks if some of the expressions apply to clustering or regular columns.boolean
isEmpty()
boolean
isSatisfiedBy(TableMetadata metadata, DecoratedKey partitionKey, Row row, int nowInSec)
Whether the provided row in the provided partition satisfies this filter.java.util.Iterator<RowFilter.Expression>
iterator()
boolean
partitionKeyRestrictionsAreSatisfiedBy(DecoratedKey key, AbstractType<?> keyValidator)
Returns true if all of the expressions within this filter that apply to the partition key are satisfied by the given key, false otherwise.java.lang.String
toString()
protected abstract RowFilter
withNewExpressions(java.util.List<RowFilter.Expression> expressions)
RowFilter
without(RowFilter.Expression expression)
Returns this filter but without the provided expression.RowFilter
withoutExpressions()
-
-
-
Field Detail
-
serializer
public static final RowFilter.Serializer serializer
-
NONE
public static final RowFilter NONE
-
expressions
protected final java.util.List<RowFilter.Expression> expressions
-
-
Constructor Detail
-
RowFilter
protected RowFilter(java.util.List<RowFilter.Expression> expressions)
-
-
Method Detail
-
create
public static RowFilter create()
-
create
public static RowFilter create(int capacity)
-
add
public RowFilter.SimpleExpression add(ColumnMetadata def, Operator op, java.nio.ByteBuffer value)
-
addMapEquality
public void addMapEquality(ColumnMetadata def, java.nio.ByteBuffer key, Operator op, java.nio.ByteBuffer value)
-
addCustomIndexExpression
public void addCustomIndexExpression(TableMetadata metadata, IndexMetadata targetIndex, java.nio.ByteBuffer value)
-
addUserExpression
public void addUserExpression(RowFilter.UserExpression e)
-
getExpressions
public java.util.List<RowFilter.Expression> getExpressions()
-
hasExpressionOnClusteringOrRegularColumns
public boolean hasExpressionOnClusteringOrRegularColumns()
Checks if some of the expressions apply to clustering or regular columns.- Returns:
true
if some of the expressions apply to clustering or regular columns,false
otherwise.
-
filter
protected abstract Transformation<BaseRowIterator<?>> filter(TableMetadata metadata, int nowInSec)
-
filter
public UnfilteredPartitionIterator filter(UnfilteredPartitionIterator iter, int nowInSec)
Filters the provided iterator so that only the row satisfying the expression of this filter are included in the resulting iterator.- Parameters:
iter
- the iterator to filternowInSec
- the time of query in seconds.- Returns:
- the filtered iterator.
-
filter
public PartitionIterator filter(PartitionIterator iter, TableMetadata metadata, int nowInSec)
Filters the provided iterator so that only the row satisfying the expression of this filter are included in the resulting iterator.- Parameters:
iter
- the iterator to filternowInSec
- the time of query in seconds.- Returns:
- the filtered iterator.
-
isSatisfiedBy
public boolean isSatisfiedBy(TableMetadata metadata, DecoratedKey partitionKey, Row row, int nowInSec)
Whether the provided row in the provided partition satisfies this filter.- Parameters:
metadata
- the table metadata.partitionKey
- the partition key for partition to test.row
- the row to test.nowInSec
- the current time in seconds (to know what is live and what isn't).- Returns:
true
ifrow
in partitionpartitionKey
satisfies this row filter.
-
partitionKeyRestrictionsAreSatisfiedBy
public boolean partitionKeyRestrictionsAreSatisfiedBy(DecoratedKey key, AbstractType<?> keyValidator)
Returns true if all of the expressions within this filter that apply to the partition key are satisfied by the given key, false otherwise.
-
clusteringKeyRestrictionsAreSatisfiedBy
public boolean clusteringKeyRestrictionsAreSatisfiedBy(Clustering<?> clustering)
Returns true if all of the expressions within this filter that apply to the clustering key are satisfied by the given Clustering, false otherwise.
-
without
public RowFilter without(RowFilter.Expression expression)
Returns this filter but without the provided expression. This method *assumes* that the filter contains the provided expression.
-
withoutExpressions
public RowFilter withoutExpressions()
-
withNewExpressions
protected abstract RowFilter withNewExpressions(java.util.List<RowFilter.Expression> expressions)
-
isEmpty
public boolean isEmpty()
-
iterator
public java.util.Iterator<RowFilter.Expression> iterator()
- Specified by:
iterator
in interfacejava.lang.Iterable<RowFilter.Expression>
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-