pub enum NonStrictExpression {
Sync(Arc<dyn SyncExpression>),
Async(Arc<dyn AsyncDynExpression>),
}Expand description
An type-safe wrapper that indicates the inner expression can be evaluated in a non-strict
manner, i.e., developers can directly call eval_infallible and eval_row_infallible without
checking the result.
This is usually created by non-strict build functions like crate::expr::build_non_strict_from_prost
and crate::expr::build_func_non_strict. It can also be created directly by
NonStrictExpression::new_topmost, where only the evaluation of the topmost level expression
node is non-strict and should be treated as a TODO.
Compared to crate::expr::wrapper::non_strict::NonStrict, this is more like an indicator
applied on the root of an expression tree, while the latter is a wrapper that can be applied on
each node of the tree and actually changes the behavior. As a result, NonStrictExpression
does not implement expression traits and instead deals directly with developers.
Variants§
Sync(Arc<dyn SyncExpression>)
Async(Arc<dyn AsyncDynExpression>)
Implementations§
Source§impl NonStrictExpression
impl NonStrictExpression
Sourcepub fn for_test(inner: impl Into<BoxedExpression>) -> NonStrictExpression
pub fn for_test(inner: impl Into<BoxedExpression>) -> NonStrictExpression
Create a non-strict expression directly wrapping the given expression.
Should only be used in tests as evaluation may panic.
Sourcepub fn new_topmost(
inner: impl Into<BoxedExpression>,
error_report: impl EvalErrorReport + 'static,
) -> NonStrictExpression
pub fn new_topmost( inner: impl Into<BoxedExpression>, error_report: impl EvalErrorReport + 'static, ) -> NonStrictExpression
Create a non-strict expression from the given expression, where only the evaluation of the
topmost level expression node is non-strict (which is subtly different from
crate::expr::build_non_strict_from_prost where every node is non-strict).
This should be used as a TODO.
Sourcepub fn return_type(&self) -> DataType
pub fn return_type(&self) -> DataType
Get the return data type.
Sourcepub async fn eval_infallible(&self, input: &DataChunk) -> ArrayRef
pub async fn eval_infallible(&self, input: &DataChunk) -> ArrayRef
Evaluate the expression in vectorized execution and assert it succeeds. Returns an array.
Use with expressions built in non-strict mode.
Sourcepub async fn eval_row_infallible(&self, input: &OwnedRow) -> Datum
pub async fn eval_row_infallible(&self, input: &OwnedRow) -> Datum
Evaluate the expression in row-based execution and assert it succeeds. Returns a nullable scalar.
Use with expressions built in non-strict mode.
Sourcepub fn into_inner(self) -> BoxedExpression
pub fn into_inner(self) -> BoxedExpression
Unwrap the inner expression.
Sourcepub fn inner(&self) -> &dyn ExpressionInfo
pub fn inner(&self) -> &dyn ExpressionInfo
Get a reference to the inner expression.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for NonStrictExpression
impl !UnwindSafe for NonStrictExpression
impl Freeze for NonStrictExpression
impl Send for NonStrictExpression
impl Sync for NonStrictExpression
impl Unpin for NonStrictExpression
impl UnsafeUnpin for NonStrictExpression
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read moreSource§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
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> Downcast for Twhere
T: AsAny + ?Sized,
impl<T> Downcast for Twhere
T: AsAny + ?Sized,
§fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
fn downcast_ref<T>(&self) -> Option<&T>where
T: AsAny,
Any.§fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
fn downcast_mut<T>(&mut self) -> Option<&mut T>where
T: AsAny,
Any.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FutureExt for T
impl<T> FutureExt for T
§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoResult<T> for T
impl<T> IntoResult<T> for T
type Err = Infallible
fn into_result(self) -> Result<T, <T as IntoResult<T>>::Err>
§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> LruValue for T
impl<T> MaybeSend for Twhere
T: Send,
Source§impl<M> MetricVecRelabelExt for M
impl<M> MetricVecRelabelExt for M
Source§fn relabel(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level.Source§fn relabel_n(
self,
metric_level: MetricLevel,
relabel_threshold: MetricLevel,
relabel_num: usize,
) -> RelabeledMetricVec<M>
fn relabel_n( self, metric_level: MetricLevel, relabel_threshold: MetricLevel, relabel_num: usize, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n.Source§fn relabel_debug_1(
self,
relabel_threshold: MetricLevel,
) -> RelabeledMetricVec<M>
fn relabel_debug_1( self, relabel_threshold: MetricLevel, ) -> RelabeledMetricVec<M>
RelabeledMetricVec::with_metric_level_relabel_n with metric_level set to
MetricLevel::Debug and relabel_num set to 1.