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
`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
`protected java.util.List<RowFilter.Expression>` `expressions`
`static RowFilter` `NONE`
`static RowFilter.Serializer` `serializer`

### Constructor Summary

Constructors
`protected` `RowFilter(java.util.List<RowFilter.Expression> expressions)`

### Method Summary

All Methods Static Methods Instance Methods Abstract Methods Concrete Methods
`RowFilter.SimpleExpression` `add(ColumnDefinition def, Operator op, java.nio.ByteBuffer value)`
`void` `addCustomIndexExpression(CFMetaData cfm, IndexMetadata targetIndex, java.nio.ByteBuffer value)`
`void` `addMapEquality(ColumnDefinition def, java.nio.ByteBuffer key, Operator op, java.nio.ByteBuffer value)`
`void` `addThriftExpression(CFMetaData metadata, java.nio.ByteBuffer name, 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)`
`abstract 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.
`static RowFilter` `forThrift(int capacity)`
`java.util.List<RowFilter.Expression>` `getExpressions()`
`boolean` `hasExpressionOnClusteringOrRegularColumns()` Checks if some of the expressions apply to clustering or regular columns.
`boolean` `isEmpty()`
`boolean` `isSatisfiedBy(CFMetaData 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()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface java.lang.Iterable

`forEach, spliterator`

### 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)

#### forThrift

    public static RowFilter forThrift(int capacity)

#### add

    public RowFilter.SimpleExpression add(ColumnDefinition def,
                                          Operator op,
                                          java.nio.ByteBuffer value)

#### addMapEquality

    public void addMapEquality(ColumnDefinition def,
                               java.nio.ByteBuffer key,
                               Operator op,
                               java.nio.ByteBuffer value)

#### addThriftExpression

    public void addThriftExpression(CFMetaData metadata,
                                    java.nio.ByteBuffer name,
                                    Operator op,
                                    java.nio.ByteBuffer value)

#### addCustomIndexExpression

    public void addCustomIndexExpression(CFMetaData cfm,
                                         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

    public abstract 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 filter
  `nowInSec` - the time of query in seconds.
Returns:
  the filtered iterator.

#### isSatisfiedBy

    public boolean isSatisfiedBy(CFMetaData 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` if `row` in partition `partitionKey` 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 interface `java.lang.Iterable<RowFilter.Expression>`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`