Skip to main content

PredicateBytecode

Struct PredicateBytecode 

Source
pub struct PredicateBytecode { /* private fields */ }

Implementations§

Source§

impl PredicateBytecode

Source

pub fn ops(&self) -> &[PredicateOp]

Read-only view of the lowered op sequence. Useful for tests and for the optional optimizer pass landing in v2.2.

Source

pub fn lower(predicate: &DExpr, base: &DataFrame) -> Option<Self>

Lower a DExpr predicate to bytecode. Returns None if the predicate shape is not supported by the columnar fast path (caller falls through to row-wise evaluation, exactly as the AST-walk path did).

Source

pub fn interpret_sparse( &self, base: &DataFrame, existing_indices: &[usize], nrows: usize, ) -> BitMask

Sparse-aware interpretation (v2.2). Evaluates the predicate over only the rows listed in existing_indices (must be ascending and a subset of 0..nrows). Result bits are set exclusively for indices in the input set, so no final AND with existing_mask is needed — the caller has effectively pre-applied it via index materialization.

Bit-identical to interpret(base, &existing_mask) whenever existing_indices == existing_mask.iter_set().collect(). The win is amortizing per-Cmp cost from O(nrows) to O(|existing_indices|), which is meaningful when the parent selection has already narrowed the row set substantially (typical for chained .filter(...).filter(...)).

Caller is responsible for the density decision (see should_use_sparse_path). Below that threshold, the random-access gather here beats the sequential column scan in interpret.

Source

pub fn evaluate_to_selection( &self, base: &DataFrame, nrows: usize, ) -> AdaptiveSelection

Interpret the bytecode against base, AND-merging the result with existing_mask. Result is bit-identical to AST-walk on every shape lower accepts. Evaluate the predicate without ANDing into an existing mask, classifying the result as an AdaptiveSelection. Used by the v3 Phase 3 production wiring path: when the existing selection is already a Hybrid (mid-band density, large nrows), we want the fresh predicate result to also be classified so the downstream existing.intersect(fresh) call can route through Phase 3’s per-chunk dispatch instead of materialising-and-AND.

Bit-equivalent to interpret followed by AdaptiveSelection:: from_predicate_result(...), but skips the per-call existing-mask AND so the classification reflects the predicate’s own selectivity.

Source

pub fn interpret(&self, base: &DataFrame, existing_mask: &BitMask) -> BitMask

Trait Implementations§

Source§

impl Clone for PredicateBytecode

Source§

fn clone(&self) -> PredicateBytecode

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PredicateBytecode

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<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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.