pub struct MaterializedBatch { /* private fields */ }Expand description
Column-oriented materialized batch.
Replaces Vec<Vec<Value>> in MaterializeState / DataCollectState /
RollUpApplyState. Logical rows are addressed through num_rows() which
honors an optional SelectionVector.
Implementations§
Source§impl MaterializedBatch
impl MaterializedBatch
Sourcepub fn new(num_columns: usize, schema_fingerprint: u64) -> Self
pub fn new(num_columns: usize, schema_fingerprint: u64) -> Self
Create an empty batch with num_columns columns.
Sourcepub fn with_schema_names(names: Arc<[String]>) -> Self
pub fn with_schema_names(names: Arc<[String]>) -> Self
Create an empty batch with column names backing the fingerprint.
The fingerprint is derived from the column names so batches with the
same column count but different schemas no longer collide. When
names is empty the legacy column-count fingerprint applies.
Sourcepub fn set_schema_names(&mut self, names: Arc<[String]>)
pub fn set_schema_names(&mut self, names: Arc<[String]>)
Attach column names and recompute the fingerprint from them.
Sourcepub fn schema_names(&self) -> Option<&Arc<[String]>>
pub fn schema_names(&self) -> Option<&Arc<[String]>>
Borrow the column names backing the fingerprint, if any.
Sourcepub fn set_fingerprint(&mut self, fingerprint: u64)
pub fn set_fingerprint(&mut self, fingerprint: u64)
Override the spill-compatibility token (used by run replay checks).
Sourcepub fn from_rows(rows: impl IntoIterator<Item = Vec<Value>>) -> Self
pub fn from_rows(rows: impl IntoIterator<Item = Vec<Value>>) -> Self
Build a batch from an iterator of rows.
The column count is inferred from the first row; all subsequent rows must have the same arity. The schema fingerprint is the hashed column count (placeholder until R3 threads the column-name fingerprint).
Sourcepub fn num_columns(&self) -> usize
pub fn num_columns(&self) -> usize
Number of columns in the batch.
Sourcepub fn num_rows(&self) -> usize
pub fn num_rows(&self) -> usize
Logical row count (length of the selection, or physical count).
Sourcepub fn schema_fingerprint(&self) -> u64
pub fn schema_fingerprint(&self) -> u64
Schema fingerprint (spill-compatibility token).
Sourcepub fn append_row(&mut self, row: Vec<Value>)
pub fn append_row(&mut self, row: Vec<Value>)
Append one row, growing the column set from the first row’s arity.
Panics if a non-empty batch receives a row with a different column count; blocking operators feed rows of uniform arity so this invariant always holds.
Sourcepub fn append_column(&mut self, values: Vec<Value>)
pub fn append_column(&mut self, values: Vec<Value>)
Append one pre-built column of values.
The column length must match the existing row count (or define it when the batch is empty). Column count grows by one.
Sourcepub fn column(&self, i: usize) -> &ColumnBuffer
pub fn column(&self, i: usize) -> &ColumnBuffer
Borrow column i.
Sourcepub fn row(&self, i: usize) -> Vec<Value>
pub fn row(&self, i: usize) -> Vec<Value>
Logical row i (after selection) as an owned Vec<Value>.
Sourcepub fn rows(&self) -> impl Iterator<Item = Vec<Value>> + '_
pub fn rows(&self) -> impl Iterator<Item = Vec<Value>> + '_
Iterate logical rows as owned Vec<Value>.
Sourcepub fn to_rows(&self) -> Vec<Vec<Value>>
pub fn to_rows(&self) -> Vec<Vec<Value>>
All logical rows as owned Vec<Vec<Value>> (borrow version).
Sourcepub fn into_rows(&mut self) -> Vec<Vec<Value>>
pub fn into_rows(&mut self) -> Vec<Vec<Value>>
Drain the batch’s column buffers and return all logical rows without
cloning values (transposes column buffers into row vectors). The batch is
left empty but remains a valid zero-row state, so it can be called
through a &mut reference owned by an operator state struct.
Sourcepub fn memory_size(&self) -> usize
pub fn memory_size(&self) -> usize
Approximate in-memory footprint in bytes, for MemoryTracker accounting.
This is a conservative per-value heuristic plus per-column vector
overhead; it intentionally does not try to measure heap payloads behind
Value’s indirection (the row-oriented path used the same heuristic via
MemoryBudget::estimate_row_memory).
Sourcepub fn set_selection(&mut self, sel: SelectionVector)
pub fn set_selection(&mut self, sel: SelectionVector)
Install a selection vector over the physical rows.
The selection length must equal the logical row count (i.e. the value
returned by num_rows() before installing it).
Sourcepub fn clear_selection(&mut self)
pub fn clear_selection(&mut self)
Clear any installed selection vector, reverting to identity.
Sourcepub fn refresh_fingerprint(&mut self)
pub fn refresh_fingerprint(&mut self)
Recompute the schema fingerprint from the current column count.
Legacy behavior preserved for batches without column names. Prefer
Self::refresh_fingerprint_from_names for new code.
Sourcepub fn refresh_fingerprint_from_names(&mut self, names: &[String])
pub fn refresh_fingerprint_from_names(&mut self, names: &[String])
Recompute the fingerprint from explicit column names.
Sourcepub fn column_slice(&self, i: usize) -> &[Value]
pub fn column_slice(&self, i: usize) -> &[Value]
Borrow one column as a value slice.
Sourcepub fn slice_rows(&self, offset: usize, len: usize) -> MaterializedBatch
pub fn slice_rows(&self, offset: usize, len: usize) -> MaterializedBatch
Copy a row range into a new batch (clamped to the logical size).
The selection, if any, is resolved so the output batch is always identity-selected. Schema names are carried over.
Sourcepub fn gather(&self, indices: &[usize]) -> MaterializedBatch
pub fn gather(&self, indices: &[usize]) -> MaterializedBatch
Reorder/copy rows by physical indices into a new identity batch.
Sourcepub fn hash_rows(&self, cols: &[usize]) -> Vec<u64>
pub fn hash_rows(&self, cols: &[usize]) -> Vec<u64>
Hash each logical row over a column subset (FNV-1a over postcard bytes).
cols empty means all columns. Only the equality partition matters:
rows equal under Value equality share a hash; unequal rows may (rarely)
collide. Null/NaN/mixed-kind handling follows postcard encoding, and
equivalence with HashSet<Vec<Value>> is covered by tests.
Trait Implementations§
Source§impl Clone for MaterializedBatch
impl Clone for MaterializedBatch
Auto Trait Implementations§
impl Freeze for MaterializedBatch
impl RefUnwindSafe for MaterializedBatch
impl Send for MaterializedBatch
impl Sync for MaterializedBatch
impl Unpin for MaterializedBatch
impl UnsafeUnpin for MaterializedBatch
impl UnwindSafe for MaterializedBatch
Blanket Implementations§
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<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.