Skip to main content

MaterializedBatch

Struct MaterializedBatch 

Source
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

Source

pub fn new(num_columns: usize, schema_fingerprint: u64) -> Self

Create an empty batch with num_columns columns.

Source

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.

Source

pub fn set_schema_names(&mut self, names: Arc<[String]>)

Attach column names and recompute the fingerprint from them.

Source

pub fn schema_names(&self) -> Option<&Arc<[String]>>

Borrow the column names backing the fingerprint, if any.

Source

pub fn set_fingerprint(&mut self, fingerprint: u64)

Override the spill-compatibility token (used by run replay checks).

Source

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

Source

pub fn num_columns(&self) -> usize

Number of columns in the batch.

Source

pub fn num_rows(&self) -> usize

Logical row count (length of the selection, or physical count).

Source

pub fn is_empty(&self) -> bool

Whether the batch holds no logical rows.

Source

pub fn schema_fingerprint(&self) -> u64

Schema fingerprint (spill-compatibility token).

Source

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.

Source

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.

Source

pub fn column(&self, i: usize) -> &ColumnBuffer

Borrow column i.

Source

pub fn row(&self, i: usize) -> Vec<Value>

Logical row i (after selection) as an owned Vec<Value>.

Source

pub fn rows(&self) -> impl Iterator<Item = Vec<Value>> + '_

Iterate logical rows as owned Vec<Value>.

Source

pub fn to_rows(&self) -> Vec<Vec<Value>>

All logical rows as owned Vec<Vec<Value>> (borrow version).

Source

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.

Source

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

Source

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

Source

pub fn clear_selection(&mut self)

Clear any installed selection vector, reverting to identity.

Source

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.

Source

pub fn refresh_fingerprint_from_names(&mut self, names: &[String])

Recompute the fingerprint from explicit column names.

Source

pub fn clear(&mut self)

Remove all rows while keeping the column layout and names.

Source

pub fn column_slice(&self, i: usize) -> &[Value]

Borrow one column as a value slice.

Source

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.

Source

pub fn gather(&self, indices: &[usize]) -> MaterializedBatch

Reorder/copy rows by physical indices into a new identity batch.

Source

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

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for MaterializedBatch

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
Source§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
Source§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
Source§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
Source§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
Source§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
Source§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows 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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows 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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
Source§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
Source§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .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
where Self: BorrowMut<B>, B: ?Sized,

Calls .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
where Self: AsRef<R>, R: ?Sized,

Calls .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
where Self: AsMut<R>, R: ?Sized,

Calls .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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V