Struct mz_expr::interpret::ColumnSpecs
source · pub struct ColumnSpecs<'a> {
pub relation: &'a RelationType,
pub columns: Vec<ResultSpec<'a>>,
pub unmaterializables: BTreeMap<UnmaterializableFunc, ResultSpec<'a>>,
pub arena: &'a RowArena,
}
Expand description
An interpreter that:
- stores both the type and the range of possible values for every column and
unmaterializable function. (See the
push_
methods.) - given an expression (or MFP, etc.), returns the range of possible results that evaluating that
expression might have. (See the
eval_
methods.)
Fields§
§relation: &'a RelationType
§columns: Vec<ResultSpec<'a>>
§unmaterializables: BTreeMap<UnmaterializableFunc, ResultSpec<'a>>
§arena: &'a RowArena
Implementations§
source§impl<'a> ColumnSpecs<'a>
impl<'a> ColumnSpecs<'a>
const MAX_EVAL_ARGS: usize = 6usize
sourcepub fn new(relation: &'a RelationType, arena: &'a RowArena) -> Self
pub fn new(relation: &'a RelationType, arena: &'a RowArena) -> Self
Create a new, empty set of column specs. (Initially, the only assumption we make about the data in the column is that it matches the type.)
sourcepub fn push_column(&mut self, id: usize, update: ResultSpec<'a>)
pub fn push_column(&mut self, id: usize, update: ResultSpec<'a>)
Restrict the set of possible values in a given column. (By intersecting it with the existing spec.)
sourcepub fn push_unmaterializable(
&mut self,
func: UnmaterializableFunc,
update: ResultSpec<'a>,
)
pub fn push_unmaterializable( &mut self, func: UnmaterializableFunc, update: ResultSpec<'a>, )
Restrict the set of possible values a given unmaterializable func might return. (By intersecting it with the existing spec.)
fn eval_result<'b, E>(&self, result: Result<Datum<'b>, E>) -> ResultSpec<'a>
fn set_literal(expr: &mut MirScalarExpr, update: Result<Datum<'_>, EvalError>)
fn set_argument( expr: &mut MirScalarExpr, arg: usize, value: Result<Datum<'_>, EvalError>, )
sourcefn placeholder(col_type: ColumnType) -> MirScalarExpr
fn placeholder(col_type: ColumnType) -> MirScalarExpr
A literal with the given type and a trivial default value. Callers should ensure that Self::set_literal is called on the resulting expression to give it a meaningful value before evaluating.
Trait Implementations§
source§impl<'a> Clone for ColumnSpecs<'a>
impl<'a> Clone for ColumnSpecs<'a>
source§fn clone(&self) -> ColumnSpecs<'a>
fn clone(&self) -> ColumnSpecs<'a>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<'a> Debug for ColumnSpecs<'a>
impl<'a> Debug for ColumnSpecs<'a>
source§impl<'a> Interpreter for ColumnSpecs<'a>
impl<'a> Interpreter for ColumnSpecs<'a>
type Summary = ColumnSpec<'a>
source§fn literal(
&self,
result: &Result<Row, EvalError>,
col_type: &ColumnType,
) -> Self::Summary
fn literal( &self, result: &Result<Row, EvalError>, col_type: &ColumnType, ) -> Self::Summary
A literal value.
(Stored as a row, because we can’t own a Datum.)
source§fn unmaterializable(&self, func: &UnmaterializableFunc) -> Self::Summary
fn unmaterializable(&self, func: &UnmaterializableFunc) -> Self::Summary
A call to an unmaterializable function. Read more
source§fn unary(&self, func: &UnaryFunc, summary: Self::Summary) -> Self::Summary
fn unary(&self, func: &UnaryFunc, summary: Self::Summary) -> Self::Summary
A function call that takes one expression as an argument.
source§fn binary(
&self,
func: &BinaryFunc,
left: Self::Summary,
right: Self::Summary,
) -> Self::Summary
fn binary( &self, func: &BinaryFunc, left: Self::Summary, right: Self::Summary, ) -> Self::Summary
A function call that takes two expressions as arguments.
source§fn variadic(
&self,
func: &VariadicFunc,
args: Vec<Self::Summary>,
) -> Self::Summary
fn variadic( &self, func: &VariadicFunc, args: Vec<Self::Summary>, ) -> Self::Summary
A function call that takes an arbitrary number of arguments.
source§fn cond(
&self,
cond: Self::Summary,
then: Self::Summary,
els: Self::Summary,
) -> Self::Summary
fn cond( &self, cond: Self::Summary, then: Self::Summary, els: Self::Summary, ) -> Self::Summary
Conditionally evaluated expressions.
source§fn expr(&self, expr: &MirScalarExpr) -> Self::Summary
fn expr(&self, expr: &MirScalarExpr) -> Self::Summary
Evaluate an entire expression, by delegating to the fine-grained methods on Interpreter.
source§fn mfp_filter(&self, mfp: &MapFilterProject) -> Self::Summary
fn mfp_filter(&self, mfp: &MapFilterProject) -> Self::Summary
Specifically, this evaluates the map and filters stages of an MFP: summarize each of the
map expressions, then
and
together all of the filters.source§fn mfp_plan_filter(&self, plan: &MfpPlan) -> Self::Summary
fn mfp_plan_filter(&self, plan: &MfpPlan) -> Self::Summary
Similar to Self::mfp_filter, but includes the additional temporal filters that have been
broken out.
Auto Trait Implementations§
impl<'a> Freeze for ColumnSpecs<'a>
impl<'a> !RefUnwindSafe for ColumnSpecs<'a>
impl<'a> !Send for ColumnSpecs<'a>
impl<'a> !Sync for ColumnSpecs<'a>
impl<'a> Unpin for ColumnSpecs<'a>
impl<'a> !UnwindSafe for ColumnSpecs<'a>
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
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
Wrap the input message
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> ProgressEventTimestamp for T
impl<T> ProgressEventTimestamp for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
See
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
See
RustType::into_proto
.source§impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
The method of
std::ops::AddAssign
, for types that do not implement AddAssign
.