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<'a>,
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<'a>,
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<'a> {
40 pub params: Columns<'a>,
41 pub execution: ExecutionContext<'a>,
42 pub executor: Executor,
43}
44
45pub trait GeneratorFunction: Send + Sync {
46 fn generate<'a>(
47 &self,
48 txn: &mut StandardTransaction<'a>,
49 ctx: GeneratorContext<'a>,
50 ) -> crate::Result<Columns<'a>>;
51}