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