reifydb_engine/function/
mod.rs1use reifydb_core::value::column::{Column, ColumnData, Columns, GroupByView, GroupKey};
5
6use crate::{StandardTransaction, execute::ExecutionContext};
7
8pub mod blob;
9pub mod flow_node_type;
10pub mod generator;
11pub mod math;
12mod registry;
13pub mod text;
14
15pub use registry::{Functions, FunctionsBuilder};
16
17use crate::execute::Executor;
18
19pub struct ScalarFunctionContext<'a> {
20 pub columns: &'a Columns,
21 pub row_count: usize,
22}
23
24pub trait ScalarFunction: Send + Sync {
25 fn scalar<'a>(&'a self, ctx: ScalarFunctionContext<'a>) -> crate::Result<ColumnData>;
26}
27
28pub struct AggregateFunctionContext<'a> {
29 pub column: &'a Column,
30 pub groups: &'a GroupByView,
31}
32
33pub trait AggregateFunction: Send + Sync {
34 fn aggregate<'a>(&'a mut self, ctx: AggregateFunctionContext<'a>) -> crate::Result<()>;
35
36 fn finalize(&mut self) -> crate::Result<(Vec<GroupKey>, ColumnData)>;
37}
38
39pub struct GeneratorContext {
40 pub params: Columns,
41 pub execution: ExecutionContext,
42 pub executor: Executor,
43}
44
45pub trait GeneratorFunction: Send + Sync {
46 fn generate<'a>(&self, txn: &mut StandardTransaction<'a>, ctx: GeneratorContext) -> crate::Result<Columns>;
47}