pub trait AggregateExpr: Send + Sync + Debug {
fn as_any(&self) -> &dyn Any;
fn field(&self) -> Result<Field>;
fn create_accumulator(&self) -> Result<Box<dyn Accumulator>>;
fn state_fields(&self) -> Result<Vec<Field>>;
fn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ;
fn name(&self) -> &str { ... }
fn row_accumulator_supported(&self) -> bool { ... }
fn create_row_accumulator(
&self,
_start_index: usize
) -> Result<Box<dyn RowAccumulator>> { ... }
}
Expand description
An aggregate expression that:
- knows its resulting field
- knows how to create its accumulator
- knows its accumulator’s state’s field
- knows the expressions from whose its accumulator will receive values
Required Methods§
sourcefn as_any(&self) -> &dyn Any
fn as_any(&self) -> &dyn Any
Returns the aggregate expression as Any
so that it can be
downcast to a specific implementation.
sourcefn create_accumulator(&self) -> Result<Box<dyn Accumulator>>
fn create_accumulator(&self) -> Result<Box<dyn Accumulator>>
the accumulator used to accumulate values from the expressions.
the accumulator expects the same number of arguments as expressions
and must
return states with the same description as state_fields
sourcefn state_fields(&self) -> Result<Vec<Field>>
fn state_fields(&self) -> Result<Vec<Field>>
the fields that encapsulate the Accumulator’s state the number of fields here equals the number of states that the accumulator contains
sourcefn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
fn expressions(&self) -> Vec<Arc<dyn PhysicalExpr>> ⓘ
expressions that are passed to the Accumulator.
Single-column aggregations such as sum
return a single value, others (e.g. cov
) return many.
Provided Methods§
sourcefn name(&self) -> &str
fn name(&self) -> &str
Human readable name such as "MIN(c2)"
. The default
implementation returns placeholder text.
sourcefn row_accumulator_supported(&self) -> bool
fn row_accumulator_supported(&self) -> bool
If the aggregate expression is supported by row format
sourcefn create_row_accumulator(
&self,
_start_index: usize
) -> Result<Box<dyn RowAccumulator>>
fn create_row_accumulator(
&self,
_start_index: usize
) -> Result<Box<dyn RowAccumulator>>
RowAccumulator to access/update row-based aggregation state in-place. Currently, row accumulator only supports states of fixed-sized type.
We recommend implementing RowAccumulator
along with the standard Accumulator
,
when its state is of fixed size, as RowAccumulator is more memory efficient and CPU-friendly.