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 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}