reifydb_engine/function/
mod.rs

1// Copyright (c) reifydb.com 2025
2// This file is licensed under the AGPL-3.0-or-later, see license.md file
3
4use 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}