linkrs_query/executor/expression/functions/registry/
table.rs1use super::super::TableFunction;
2use super::FunctionRegistry;
3use crate::executor::expression::{ExpressionError, ExpressionErrorType};
4use linkrs_core::Value;
5
6impl FunctionRegistry {
7 pub fn register_table_function(&mut self, func: Box<dyn TableFunction>) {
9 let upper_name = func.name().to_uppercase();
10 self.table_functions.insert(upper_name, func);
11 }
12
13 pub fn contains_table_function(&self, name: &str) -> bool {
15 self.table_functions.contains_key(&name.to_uppercase())
16 }
17
18 pub fn execute_table_function(
20 &self,
21 name: &str,
22 args: &[Value],
23 ) -> Result<Vec<Vec<Value>>, ExpressionError> {
24 let upper_name = name.to_uppercase();
25 if let Some(func) = self.table_functions.get(&upper_name) {
26 return func.execute(args);
27 }
28 Err(ExpressionError::new(
29 ExpressionErrorType::UndefinedFunction,
30 format!("Undefined table function: {}", name),
31 ))
32 }
33
34 pub fn table_function_names(&self) -> Vec<&str> {
36 self.table_functions.keys().map(|s| s.as_str()).collect()
37 }
38
39 pub(super) fn register_builtin_table_functions(&mut self) {
41 use super::super::BuiltinTableFunction;
42 self.register_table_function(Box::new(BuiltinTableFunction::ReadCsv));
43 }
44}