pub struct CellData {
pub column: String,
pub value: Value,
pub timestamp: i64,
pub ttl: Option<u32>,
pub cell_path: Option<Vec<u8>>,
pub local_deletion_time: Option<i32>,
pub is_complex_element: bool,
pub is_deleted: bool,
pub has_empty_value: bool,
}Expand description
Cell data with timestamp, optional TTL, and (for complex columns) cell path.
§Per-cell merge metadata (issue #886 — byte-parity foundation)
To reconcile per-cell and per-element data byte-faithfully (Cassandra
Cells#reconcile), the merge entry must carry more than a single row-level
timestamp. The fields below thread that richer state from the reader toward
the followup behaviors (#844 per-cell-path collection/UDT merge, #848
tombstone-vs-expiring TTL tie-break). They are carried but not yet acted
on by reconciliation — this struct change is plumbing only and must not
alter output bytes.
Where the reader does not yet surface a value the field is left None; the
dependent issues fill it in once the reader is extended.
Fields§
§column: StringColumn name
value: ValueColumn value
timestamp: i64Cell timestamp (microseconds)
ttl: Option<u32>TTL in seconds (None = no expiration)
cell_path: Option<Vec<u8>>Cell path for a complex (collection / non-frozen UDT) element — the serialized element key/index that distinguishes one element of a multi-cell column from another (issue #886 substrate).
Carry-only. This field is threaded through the merge entry so that
per-element reconciliation can become byte-faithful, but nothing
populates or consumes it yet: the reader still collapses collections to
a single whole-column CellData and the writer does not read this
field. Population (per-element reader emit) and consumption (per-path
merge #844) land in the follow-up #899. None for simple cells.
local_deletion_time: Option<i32>Local deletion time in seconds since the Unix epoch for this cell
(the on-disk localDeletionTime), used by gc_grace purging and
expiring-cell tie-breaks (issue #886 substrate).
For an expiring (TTL) cell this is the cell’s expiration instant; for a cell tombstone it is when the delete was applied.
Populated for complex (collection / UDT) elements on the compaction read
path (epic #899, Phase C); None for simple cells whose LDT the reader
does not surface, and for live simple cells.
is_complex_element: boolTrue when this CellData represents a single ELEMENT of a non-frozen
complex column (a list/set member or a map entry), as opposed to a simple
single-cell column (epic #899, Phase C).
When true, cell_path is the element’s authoritative
on-disk path and the merge→mutation step emits a
CellOperation::WriteComplexElement (preserving per-element
ts/ttl/ldt/path) rather than a whole-column Write. false for every
simple cell (whole-column collapse no longer happens on the production
path).
is_deleted: boolAuthoritative IS_DELETED (0x01) flag for a complex element (epic #899,
Phase C). Carried verbatim from ComplexElement::is_deleted — NOT
re-derived from value/ttl/ldt shape, so an expiring SET member (empty
value, ttl + ldt set) is correctly NOT treated as a tombstone
(no-heuristics mandate). Always false for simple cells (a simple cell
tombstone rides in value as Value::Tombstone).
has_empty_value: boolOn-disk HAS_EMPTY_VALUE (0x04) flag for a complex element (epic #899,
Phase C). true for a SET member (whose identity lives in the cell_path)
and any genuinely empty-value element, so the writer reproduces the same
on-disk emptiness rather than re-deriving it from the decoded value.
Always false for simple cells.
Implementations§
Trait Implementations§
Source§impl Clone for CellData
Available on crate feature write-support only.Manual Clone (was #[derive(Clone)]) so the #1665 reconcile micro-alloc
guard can count CellData clones via a #[cfg(test)]-gated recorder. The
clone is field-wise identical to the former derived clone (all 9 fields); in
a production (non-test) build the record() call vanishes entirely, so this
is a plain field-wise clone with ZERO added cost (mirrors MergeEntry’s
#1664 manual clone).
impl Clone for CellData
write-support only.Manual Clone (was #[derive(Clone)]) so the #1665 reconcile micro-alloc
guard can count CellData clones via a #[cfg(test)]-gated recorder. The
clone is field-wise identical to the former derived clone (all 9 fields); in
a production (non-test) build the record() call vanishes entirely, so this
is a plain field-wise clone with ZERO added cost (mirrors MergeEntry’s
#1664 manual clone).
impl Eq for CellData
impl StructuralPartialEq for CellData
Auto Trait Implementations§
impl !Freeze for CellData
impl RefUnwindSafe for CellData
impl Send for CellData
impl Sync for CellData
impl Unpin for CellData
impl UnsafeUnpin for CellData
impl UnwindSafe for CellData
Blanket Implementations§
impl<T> Allocation for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.