org.apache.cassandra.db.rows

## Class BTreeRow

- java.lang.Object
- - java.util.AbstractCollection<ColumnData>
  - - org.apache.cassandra.db.rows.AbstractRow
    - - org.apache.cassandra.db.rows.BTreeRow

All Implemented Interfaces:
  java.lang.Iterable<ColumnData>, java.util.Collection<ColumnData>, Clusterable, Row, Unfiltered

    public class BTreeRow
    extends AbstractRow

Immutable implementation of a Row object.

### Nested Class Summary

Nested Classes
`static class` `BTreeRow.Builder`

### Nested classes/interfaces inherited from interface org.apache.cassandra.db.rows.Row

`Row.Deletion, Row.Merger, Row.SimpleBuilder`

### Nested classes/interfaces inherited from interface org.apache.cassandra.db.rows.Unfiltered

`Unfiltered.Kind`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `apply(java.util.function.Consumer<ColumnData> function, boolean reversed)` Apply a function to every column in a row
`void` `apply(java.util.function.Consumer<ColumnData> funtion, com.google.common.base.Predicate<ColumnData> stopCondition, boolean reversed)` Apply a funtion to every column in a row until a stop condition is reached
`java.lang.Iterable<Cell>` `cells()` An iterable over the cells of this row.
`java.lang.Iterable<Cell>` `cellsInLegacyOrder(CFMetaData metadata, boolean reversed)` An iterable over the cells of this row that return cells in "legacy order".
`Clustering` `clustering()` The clustering values for this row.
`java.util.Collection<ColumnDefinition>` `columns()` An in-natural-order collection of the columns for which data (incl.
`static BTreeRow` `create(Clustering clustering, LivenessInfo primaryKeyLivenessInfo, Row.Deletion deletion, java.lang.Object[] btree)`
`static BTreeRow` `create(Clustering clustering, LivenessInfo primaryKeyLivenessInfo, Row.Deletion deletion, java.lang.Object[] btree, int minDeletionTime)`
`int` `dataSize()`
`Row.Deletion` `deletion()` The row deletion.
`static BTreeRow` `emptyDeletedRow(Clustering clustering, Row.Deletion deletion)`
`static BTreeRow` `emptyRow(Clustering clustering)`
`Row` `filter(ColumnFilter filter, CFMetaData metadata)` Returns a copy of this row that: 1) only includes the data for the column included by `filter`.
`Row` `filter(ColumnFilter filter, DeletionTime activeDeletion, boolean setActiveDeletionToRow, CFMetaData metadata)` Returns a copy of this row that: 1) only includes the data for the column included by `filter`.
`Cell` `getCell(ColumnDefinition c)` Returns a cell for a simple column.
`Cell` `getCell(ColumnDefinition c, CellPath path)` Return a cell for a given complex column and cell path.
`ComplexColumnData` `getComplexColumnData(ColumnDefinition c)` The data for a complex column.
`boolean` `hasComplex()` Whether the row stores any (non-RT) data for any complex column.
`boolean` `hasComplexDeletion()` Whether the row stores any (non-live) complex deletion for any complex column.
`boolean` `hasDeletion(int nowInSec)` Whether the row has any deletion info (row deletion, cell tombstone, expired cell or complex deletion).
`boolean` `isEmpty()` Whether the row has no information whatsoever.
`java.util.Iterator<ColumnData>` `iterator()`
`Row` `markCounterLocalToBeCleared()` Returns a copy of this row where all counter cells have they "local" shard marked for clearing.
`static BTreeRow` `noCellLiveRow(Clustering clustering, LivenessInfo primaryKeyLivenessInfo)`
`LivenessInfo` `primaryKeyLivenessInfo()` Liveness information for the primary key columns of this row.
`Row` `purge(DeletionPurger purger, int nowInSec, boolean enforceStrictLiveness)` Returns a copy of this row without any deletion info that should be purged according to `purger`.
`BTreeSearchIterator<ColumnDefinition,ColumnData>` `searchIterator()` An iterator to efficiently search data for a given column.
`void` `setValue(ColumnDefinition column, CellPath path, java.nio.ByteBuffer value)`
`static BTreeRow` `singleCellRow(Clustering clustering, Cell cell)`
`int` `size()`
`static Row.Builder` `sortedBuilder()`
`long` `unsharedHeapSizeExcludingData()`
`static Row.Builder` `unsortedBuilder(int nowInSec)`
`Row` `updateAllTimestamp(long newTimestamp)` Returns a copy of the row where all timestamps for live data have replaced by `newTimestamp` and all deletion timestamp by `newTimestamp - 1`.
`Row` `withOnlyQueriedData(ColumnFilter filter)` Returns a copy of this row which only include the data queried by `filter`, excluding anything _fetched_ for internal reasons but not queried by the user (see `ColumnFilter` for details).
`Row` `withRowDeletion(DeletionTime newDeletion)` Returns a copy of this row with the new deletion as row deletion if it is more recent than the current row deletion.

### Methods inherited from class org.apache.cassandra.db.rows.AbstractRow

`digest, digest, equals, hashCode, hasLiveData, isStatic, kind, toString, toString, toString, validateData`

### Methods inherited from class java.util.AbstractCollection

`add, addAll, clear, contains, containsAll, remove, removeAll, retainAll, toArray, toArray, toString`

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

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

### Methods inherited from interface org.apache.cassandra.db.rows.Unfiltered

`isRangeTombstoneMarker, isRow`

### Methods inherited from interface java.util.Collection

`add, addAll, clear, contains, containsAll, parallelStream, remove, removeAll, removeIf, retainAll, spliterator, stream, toArray, toArray`

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

`forEach`

### Method Detail

#### create

    public static BTreeRow create(Clustering clustering,
                                  LivenessInfo primaryKeyLivenessInfo,
                                  Row.Deletion deletion,
                                  java.lang.Object[] btree)

#### create

    public static BTreeRow create(Clustering clustering,
                                  LivenessInfo primaryKeyLivenessInfo,
                                  Row.Deletion deletion,
                                  java.lang.Object[] btree,
                                  int minDeletionTime)

#### emptyRow

    public static BTreeRow emptyRow(Clustering clustering)

#### singleCellRow

    public static BTreeRow singleCellRow(Clustering clustering,
                                         Cell cell)

#### emptyDeletedRow

    public static BTreeRow emptyDeletedRow(Clustering clustering,
                                           Row.Deletion deletion)

#### noCellLiveRow

    public static BTreeRow noCellLiveRow(Clustering clustering,
                                         LivenessInfo primaryKeyLivenessInfo)

#### apply

    public void apply(java.util.function.Consumer<ColumnData> function,
                      boolean reversed)

Description copied from interface: `Row`
Apply a function to every column in a row

#### apply

    public void apply(java.util.function.Consumer<ColumnData> funtion,
                      com.google.common.base.Predicate<ColumnData> stopCondition,
                      boolean reversed)

Description copied from interface: `Row`
Apply a funtion to every column in a row until a stop condition is reached

#### clustering

    public Clustering clustering()

Description copied from interface: `Row`
The clustering values for this row.

#### columns

    public java.util.Collection<ColumnDefinition> columns()

Description copied from interface: `Row`
An in-natural-order collection of the columns for which data (incl. simple tombstones) is present in this row.

#### primaryKeyLivenessInfo

    public LivenessInfo primaryKeyLivenessInfo()

Description copied from interface: `Row`
Liveness information for the primary key columns of this row.

As a row is uniquely identified by its primary key, all its primary key columns share the same `LivenessInfo`. This liveness information is what allows us to distinguish between a dead row (it has no live cells and its primary key liveness info is empty) and a live row but where all non PK columns are null (it has no live cells, but its primary key liveness is not empty). Please note that the liveness info (including it's eventually ttl/local deletion time) only apply to the primary key columns and has no impact on the row content.

Note in particular that a row may have live cells but no PK liveness info, because the primary key liveness informations are only set on `INSERT` (which makes sense in itself, see #6782) but live cells can be added through `UPDATE` even if the row wasn't pre-existing (which users are encouraged not to do, but we can't validate).

#### isEmpty

    public boolean isEmpty()

Description copied from interface: `Row`
Whether the row has no information whatsoever. This means no PK liveness info, no row deletion, no cells and no complex deletion info.

Specified by:
  `isEmpty` in interface `java.util.Collection<ColumnData>`
Specified by:
  `isEmpty` in interface `Row`
Specified by:
  `isEmpty` in interface `Unfiltered`
Overrides:
  `isEmpty` in class `java.util.AbstractCollection<ColumnData>`
Returns:
  `true` if the row has no data, `false` otherwise.

#### deletion

    public Row.Deletion deletion()

Description copied from interface: `Row`
The row deletion. This correspond to the last row deletion done on this row.

Returns:
  the row deletion.

#### getCell

    public Cell getCell(ColumnDefinition c)

Description copied from interface: `Row`
Returns a cell for a simple column.

Parameters:
  `c` - the simple column for which to fetch the cell.
Returns:
  the corresponding cell or `null` if the row has no such cell.

#### getCell

    public Cell getCell(ColumnDefinition c,
                        CellPath path)

Description copied from interface: `Row`
Return a cell for a given complex column and cell path.

Parameters:
  `c` - the complex column for which to fetch the cell.
  `path` - the cell path for which to fetch the cell.
Returns:
  the corresponding cell or `null` if the row has no such cell.

#### getComplexColumnData

    public ComplexColumnData getComplexColumnData(ColumnDefinition c)

Description copied from interface: `Row`
The data for a complex column.

The returned object groups all the cells for the column, as well as it's complex deletion (if relevant).

Parameters:
  `c` - the complex column for which to return the complex data.
Returns:
  the data for `c` or `null` if the row has no data for this column.

#### size

    public int size()

Specified by:
  `size` in interface `java.util.Collection<ColumnData>`
Specified by:
  `size` in class `java.util.AbstractCollection<ColumnData>`

#### iterator

    public java.util.Iterator<ColumnData> iterator()

Specified by:
  `iterator` in interface `java.lang.Iterable<ColumnData>`
Specified by:
  `iterator` in interface `java.util.Collection<ColumnData>`
Specified by:
  `iterator` in class `java.util.AbstractCollection<ColumnData>`

#### cells

    public java.lang.Iterable<Cell> cells()

Description copied from interface: `Row`
An iterable over the cells of this row.

The iterable guarantees that cells are returned in order of `Cell.comparator`.

Returns:
  an iterable over the cells of this row.

#### searchIterator

    public BTreeSearchIterator<ColumnDefinition,ColumnData> searchIterator()

Description copied from interface: `Row`
An iterator to efficiently search data for a given column.

Returns:
  a search iterator for the cells of this row.

#### filter

    public Row filter(ColumnFilter filter,
                      CFMetaData metadata)

Description copied from interface: `Row`
Returns a copy of this row that: 1) only includes the data for the column included by `filter`. 2) doesn't include any data that belongs to a dropped column (recorded in `metadata`).

#### filter

    public Row filter(ColumnFilter filter,
                      DeletionTime activeDeletion,
                      boolean setActiveDeletionToRow,
                      CFMetaData metadata)

Description copied from interface: `Row`
Returns a copy of this row that: 1) only includes the data for the column included by `filter`. 2) doesn't include any data that belongs to a dropped column (recorded in `metadata`). 3) doesn't include any data that is shadowed/deleted by `activeDeletion`. 4) uses `activeDeletion` as row deletion iff `setActiveDeletionToRow` and `activeDeletion` supersedes the row deletion.

#### withOnlyQueriedData

    public Row withOnlyQueriedData(ColumnFilter filter)

Description copied from interface: `Row`
Returns a copy of this row which only include the data queried by `filter`, excluding anything _fetched_ for internal reasons but not queried by the user (see `ColumnFilter` for details).

Parameters:
  `filter` - the `ColumnFilter` to use when deciding what is user queried. This should be the filter that was used when querying the row on which this method is called.
Returns:
  the row but with all data that wasn't queried by the user skipped.

#### hasComplex

    public boolean hasComplex()

Description copied from interface: `Row`
Whether the row stores any (non-RT) data for any complex column.

#### hasComplexDeletion

    public boolean hasComplexDeletion()

Description copied from interface: `Row`
Whether the row stores any (non-live) complex deletion for any complex column.

#### markCounterLocalToBeCleared

    public Row markCounterLocalToBeCleared()

Description copied from interface: `Row`
Returns a copy of this row where all counter cells have they "local" shard marked for clearing.

#### hasDeletion

    public boolean hasDeletion(int nowInSec)

Description copied from interface: `Row`
Whether the row has any deletion info (row deletion, cell tombstone, expired cell or complex deletion).

Parameters:
  `nowInSec` - the current time in seconds to decid if a cell is expired.

#### updateAllTimestamp

    public Row updateAllTimestamp(long newTimestamp)

Returns a copy of the row where all timestamps for live data have replaced by `newTimestamp` and all deletion timestamp by `newTimestamp - 1`. This exists for the Paxos path, see `PartitionUpdate.updateAllTimestamp(long)` for additional details.

Parameters:
  `newTimestamp` - the timestamp to use for all live data in the returned row.
See Also:
  `for why we need this.`

#### withRowDeletion

    public Row withRowDeletion(DeletionTime newDeletion)

Description copied from interface: `Row`
Returns a copy of this row with the new deletion as row deletion if it is more recent than the current row deletion.

WARNING: this method does not check that nothing in the row is shadowed by the provided deletion and if that is the case, the created row will be invalid. It is thus up to the caller to verify that this is not the case and the only reasonable use case of this is probably when the row and the deletion comes from the same `UnfilteredRowIterator` since that gives use this guarantee.

#### purge

    public Row purge(DeletionPurger purger,
                     int nowInSec,
                     boolean enforceStrictLiveness)

Description copied from interface: `Row`
Returns a copy of this row without any deletion info that should be purged according to `purger`.

Parameters:
  `purger` - the `DeletionPurger` to use to decide what can be purged.
  `nowInSec` - the current time to decide what is deleted and what isn't (in the case of expired cells).
  `enforceStrictLiveness` - whether the row should be purged if there is no PK liveness info, normally retrieved from `CFMetaData.enforceStrictLiveness()` When enforceStrictLiveness is set, rows with empty PK liveness info and no row deletion are purged. Currently this is only used by views with normal base column as PK column so updates to other base columns do not make the row live when the PK column is not live. See CASSANDRA-11500.
Returns:
  this row but without any deletion info purged by `purger`. If the purged row is empty, returns `null`.

#### dataSize

    public int dataSize()

#### unsharedHeapSizeExcludingData

    public long unsharedHeapSizeExcludingData()

#### sortedBuilder

    public static Row.Builder sortedBuilder()

#### unsortedBuilder

    public static Row.Builder unsortedBuilder(int nowInSec)

#### setValue

    public void setValue(ColumnDefinition column,
                         CellPath path,
                         java.nio.ByteBuffer value)

#### cellsInLegacyOrder

    public java.lang.Iterable<Cell> cellsInLegacyOrder(CFMetaData metadata,
                                                       boolean reversed)

Description copied from interface: `Row`
An iterable over the cells of this row that return cells in "legacy order".

In 3.0+, columns are sorted so that all simple columns are before all complex columns. Previously however, the cells where just sorted by the column name. This iterator return cells in that legacy order. It's only ever meaningful for backward/thrift compatibility code.

Parameters:
  `metadata` - the table this is a row of.
  `reversed` - if cells should returned in reverse order.
Returns:
  an iterable over the cells of this row in "legacy order".