Struct mz_expr::MfpPlan

source ·
pub struct MfpPlan {
    pub(crate) mfp: SafeMfpPlan,
    pub(crate) lower_bounds: Vec<MirScalarExpr>,
    pub(crate) upper_bounds: Vec<MirScalarExpr>,
}
Expand description

Predicates partitioned into temporal and non-temporal.

Temporal predicates require some recognition to determine their structure, and it is best to do that once and re-use the results.

There are restrictions on the temporal predicates we currently support. They must directly constrain MzNow from below or above, by expressions that do not themselves contain MzNow. Conjunctions of such constraints are also ok.

Fields§

§mfp: SafeMfpPlan

Normal predicates to evaluate on &[Datum] and expect Ok(Datum::True).

§lower_bounds: Vec<MirScalarExpr>

Expressions that when evaluated lower-bound MzNow.

§upper_bounds: Vec<MirScalarExpr>

Expressions that when evaluated upper-bound MzNow.

Implementations§

source§

impl MfpPlan

source

pub fn create_from(mfp: MapFilterProject) -> Result<Self, String>

Partitions predicates into non-temporal, and lower and upper temporal bounds.

The first returned list is of predicates that do not contain mz_now. The second and third returned lists contain expressions that, once evaluated, lower and upper bound the validity interval of a record, respectively. These second two lists are populated only by binary expressions of the form

mz_now cmp_op expr

where cmp_op is a comparison operator and expr does not contain mz_now.

If any unsupported expression is found, for example one that uses mz_now in an unsupported position, an error is returned.

source

pub fn is_identity(&self) -> bool

Indicates if the planned MapFilterProject emits exactly its inputs as outputs.

source

pub fn take(&mut self) -> Self

Returns self, and leaves behind an identity operator that acts on its output.

source

pub fn into_nontemporal(self) -> Result<SafeMfpPlan, Self>

Attempt to convert self into a non-temporal MapFilterProject plan.

If that is not possible, the original instance is returned as an error.

source

pub fn iter_nontemporal_exprs( &mut self, ) -> impl Iterator<Item = &mut MirScalarExpr>

Returns an iterator over mutable references to all non-temporal scalar expressions in the plan.

The order of iteration is unspecified.

source

pub fn evaluate<'b, 'a: 'b, E: From<EvalError>, V: Fn(&Timestamp) -> bool>( &'a self, datums: &'b mut Vec<Datum<'a>>, arena: &'a RowArena, time: Timestamp, diff: Diff, valid_time: V, row_builder: &mut Row, ) -> impl Iterator<Item = Result<(Row, Timestamp, Diff), (E, Timestamp, Diff)>>

Evaluate the predicates, temporal and non-, and return times and differences for data.

If self contains only non-temporal predicates, the result will either be (time, diff), or an evaluation error. If self contains temporal predicates, the results can be times that are greater than the input time, and may contain negated diff` values.

The row_builder is not cleared first, but emptied if the function returns an iterator with any Ok(_) element.

source

pub fn could_error(&self) -> bool

Returns true if evaluation could introduce an error on non-error inputs.

source

pub fn ignores_input(&self) -> bool

Indicates that Self ignores its input to the extent that it can be evaluated on &[].

At the moment, this is only true if it projects away all columns and applies no filters, but it could be extended to plans that produce literals independent of the input.

Trait Implementations§

source§

impl Arbitrary for MfpPlan

§

type Parameters = <SafeMfpPlan as Arbitrary>::Parameters

The type of parameters that arbitrary_with accepts for configuration of the generated Strategy. Parameters must implement Default.
§

type Strategy = Map<(<SafeMfpPlan as Arbitrary>::Strategy, BoxedStrategy<Vec<MirScalarExpr>>, BoxedStrategy<Vec<MirScalarExpr>>), fn(_: (SafeMfpPlan, Vec<MirScalarExpr>, Vec<MirScalarExpr>)) -> MfpPlan>

The type of Strategy used to generate values of type Self.
source§

fn arbitrary_with(_top: Self::Parameters) -> Self::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). The strategy is passed the arguments given in args. Read more
source§

fn arbitrary() -> Self::Strategy

Generates a Strategy for producing arbitrary values of type the implementing type (Self). Read more
source§

impl Clone for MfpPlan

source§

fn clone(&self) -> MfpPlan

Returns a copy 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 MfpPlan

source§

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

Formats the value using the given formatter. Read more
source§

impl PartialEq for MfpPlan

source§

fn eq(&self, other: &MfpPlan) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl RustType<ProtoMfpPlan> for MfpPlan

source§

fn into_proto(&self) -> ProtoMfpPlan

Convert a Self into a Proto value.
source§

fn from_proto(proto: ProtoMfpPlan) -> Result<Self, TryFromProtoError>

Consume and convert a Proto back into a Self value. Read more
source§

fn into_proto_owned(self) -> Proto

A zero clone version of Self::into_proto that types can optionally implement, otherwise, the default implementation delegates to Self::into_proto.
source§

impl StructuralPartialEq for MfpPlan

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, U> CastInto<U> for T
where U: CastFrom<T>,

source§

fn cast_into(self) -> U

Performs the cast.
source§

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

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
source§

impl<T> FutureExt for T

source§

fn with_context(self, otel_cx: Context) -> WithContext<Self>

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
source§

fn with_current_context(self) -> WithContext<Self>

Attaches the current Context to this type, returning a WithContext wrapper. Read more
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T, U> OverrideFrom<Option<&T>> for U
where U: OverrideFrom<T>,

source§

fn override_from(self, layer: &Option<&T>) -> U

Override the configuration represented by Self with values from the given layer.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
§

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> ProgressEventTimestamp for T
where T: Data + Debug + Any,

source§

fn as_any(&self) -> &(dyn Any + 'static)

Upcasts this ProgressEventTimestamp to Any. Read more
source§

fn type_name(&self) -> &'static str

Returns the name of the concrete type of this object. Read more
source§

impl<P, R> ProtoType<R> for P
where R: RustType<P>,

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<'a, S, T> Semigroup<&'a S> for T
where T: Semigroup<S>,

source§

fn plus_equals(&mut self, rhs: &&'a S)

The method of std::ops::AddAssign, for types that do not implement AddAssign.
source§

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

§

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>,

§

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>,

§

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

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

source§

impl<T> Data for T
where T: Clone + 'static,