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