Struct mz_expr::AggregateExpr
source · pub struct AggregateExpr {
pub func: AggregateFunc,
pub expr: MirScalarExpr,
pub distinct: bool,
}
Expand description
Describes an aggregation expression.
Fields§
§func: AggregateFunc
Names the aggregation function.
expr: MirScalarExpr
An expression which extracts from each row the input to func
.
distinct: bool
Should the aggregation be applied only to distinct results in each group.
Implementations§
source§impl AggregateExpr
impl AggregateExpr
sourcepub fn typ(&self, column_types: &[ColumnType]) -> ColumnType
pub fn typ(&self, column_types: &[ColumnType]) -> ColumnType
Computes the type of this AggregateExpr
.
sourcepub fn is_constant(&self) -> bool
pub fn is_constant(&self) -> bool
Returns whether the expression has a constant result.
sourcepub fn on_unique(&self, input_type: &[ColumnType]) -> MirScalarExpr
pub fn on_unique(&self, input_type: &[ColumnType]) -> MirScalarExpr
Returns an expression that computes self
on a group that has exactly one row.
Instead of performing a Reduce
with self
, one can perform a Map
with the expression
returned by on_unique
, which is cheaper. (See ReduceElision
.)
sourcefn on_unique_ranking_window_funcs(
&self,
input_type: &[ColumnType],
col_name: &str,
) -> MirScalarExpr
fn on_unique_ranking_window_funcs( &self, input_type: &[ColumnType], col_name: &str, ) -> MirScalarExpr
on_unique
for ROW_NUMBER, RANK, DENSE_RANK
sourcefn on_unique_lag_lead(
lag_lead: &LagLeadType,
encoded_args: MirScalarExpr,
return_type: ScalarType,
) -> (MirScalarExpr, ColumnName)
fn on_unique_lag_lead( lag_lead: &LagLeadType, encoded_args: MirScalarExpr, return_type: ScalarType, ) -> (MirScalarExpr, ColumnName)
on_unique
for lag
and lead
sourcefn on_unique_first_value_last_value(
window_frame: &WindowFrame,
arg: MirScalarExpr,
return_type: ScalarType,
) -> (MirScalarExpr, ColumnName)
fn on_unique_first_value_last_value( window_frame: &WindowFrame, arg: MirScalarExpr, return_type: ScalarType, ) -> (MirScalarExpr, ColumnName)
on_unique
for first_value
and last_value
sourcefn on_unique_window_agg(
window_frame: &WindowFrame,
arg_expr: MirScalarExpr,
input_type: &[ColumnType],
return_type: ScalarType,
wrapped_aggr: &AggregateFunc,
) -> (MirScalarExpr, ColumnName)
fn on_unique_window_agg( window_frame: &WindowFrame, arg_expr: MirScalarExpr, input_type: &[ColumnType], return_type: ScalarType, wrapped_aggr: &AggregateFunc, ) -> (MirScalarExpr, ColumnName)
on_unique
for window aggregations
sourcepub fn is_count_asterisk(&self) -> bool
pub fn is_count_asterisk(&self) -> bool
Returns whether the expression is COUNT() or not. Note that when we define the count builtin in sql::func, we convert COUNT() to COUNT(true), making it indistinguishable from literal COUNT(true), but we prefer to consider this as the former.
Trait Implementations§
source§impl Arbitrary for AggregateExpr
impl Arbitrary for AggregateExpr
§type Parameters = (<AggregateFunc as Arbitrary>::Parameters, <MirScalarExpr as Arbitrary>::Parameters, <bool as Arbitrary>::Parameters)
type Parameters = (<AggregateFunc as Arbitrary>::Parameters, <MirScalarExpr as Arbitrary>::Parameters, <bool as Arbitrary>::Parameters)
arbitrary_with
accepts for configuration
of the generated Strategy
. Parameters must implement Default
.§type Strategy = Map<(<AggregateFunc as Arbitrary>::Strategy, <MirScalarExpr as Arbitrary>::Strategy, <bool as Arbitrary>::Strategy), fn(_: (AggregateFunc, MirScalarExpr, bool)) -> AggregateExpr>
type Strategy = Map<(<AggregateFunc as Arbitrary>::Strategy, <MirScalarExpr as Arbitrary>::Strategy, <bool as Arbitrary>::Strategy), fn(_: (AggregateFunc, MirScalarExpr, bool)) -> AggregateExpr>
Strategy
used to generate values of type Self
.source§fn arbitrary_with(_top: Self::Parameters) -> Self::Strategy
fn arbitrary_with(_top: Self::Parameters) -> Self::Strategy
source§impl Clone for AggregateExpr
impl Clone for AggregateExpr
source§fn clone(&self) -> AggregateExpr
fn clone(&self) -> AggregateExpr
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for AggregateExpr
impl Debug for AggregateExpr
source§impl<'de> Deserialize<'de> for AggregateExpr
impl<'de> Deserialize<'de> for AggregateExpr
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
source§impl Hash for AggregateExpr
impl Hash for AggregateExpr
source§impl MzReflect for AggregateExpr
impl MzReflect for AggregateExpr
source§fn add_to_reflected_type_info(rti: &mut ReflectedTypeInfo)
fn add_to_reflected_type_info(rti: &mut ReflectedTypeInfo)
rti
. Read moresource§impl Ord for AggregateExpr
impl Ord for AggregateExpr
source§fn cmp(&self, other: &AggregateExpr) -> Ordering
fn cmp(&self, other: &AggregateExpr) -> Ordering
1.21.0 · source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
source§impl PartialEq for AggregateExpr
impl PartialEq for AggregateExpr
source§impl PartialOrd for AggregateExpr
impl PartialOrd for AggregateExpr
source§impl RustType<ProtoAggregateExpr> for AggregateExpr
impl RustType<ProtoAggregateExpr> for AggregateExpr
source§fn into_proto(&self) -> ProtoAggregateExpr
fn into_proto(&self) -> ProtoAggregateExpr
Self
into a Proto
value.source§fn from_proto(proto: ProtoAggregateExpr) -> Result<Self, TryFromProtoError>
fn from_proto(proto: ProtoAggregateExpr) -> Result<Self, TryFromProtoError>
source§fn into_proto_owned(self) -> Proto
fn into_proto_owned(self) -> Proto
Self::into_proto
that types can
optionally implement, otherwise, the default implementation
delegates to Self::into_proto
.source§impl Serialize for AggregateExpr
impl Serialize for AggregateExpr
impl Eq for AggregateExpr
impl StructuralPartialEq for AggregateExpr
Auto Trait Implementations§
impl Freeze for AggregateExpr
impl RefUnwindSafe for AggregateExpr
impl Send for AggregateExpr
impl Sync for AggregateExpr
impl Unpin for AggregateExpr
impl UnwindSafe for AggregateExpr
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
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)
clone_to_uninit
)source§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
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>
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> PreferredContainer for T
impl<T> PreferredContainer 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>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
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)
std::ops::AddAssign
, for types that do not implement AddAssign
.