pub struct FunctionRegistry { /* private fields */ }Expand description
Function Registry
Using a static distribution mechanism, functions are called directly through the BuiltinFunction and CustomFunction enumerations. The overhead associated with dynamic distribution (dyn) was avoided.
Implementations§
Source§impl FunctionRegistry
impl FunctionRegistry
Sourcepub fn register_builtin(&mut self, function: BuiltinFunction)
pub fn register_builtin(&mut self, function: BuiltinFunction)
Registering built-in functions
Sourcepub fn register_alias(&mut self, alias: &str, function: BuiltinFunction)
pub fn register_alias(&mut self, alias: &str, function: BuiltinFunction)
Register an additional spelling for an already-defined builtin.
Used for compatibility aliases (NEXTVAL for NEXT_VAL): the entry
carries the same function value and return type, so dispatch, purity
classification, and return-type inference stay identical.
Sourcepub fn get_return_type(&self, name: &str) -> Option<&DataType>
pub fn get_return_type(&self, name: &str) -> Option<&DataType>
Get the static return type for a function name.
Sourcepub fn get_builtin(&self, name: &str) -> Option<&BuiltinFunction>
pub fn get_builtin(&self, name: &str) -> Option<&BuiltinFunction>
Obtaining built-in functions
Sourcepub fn get_entry(&self, name: &str) -> Option<&RegistryEntry>
pub fn get_entry(&self, name: &str) -> Option<&RegistryEntry>
Get the full registry entry (function + return type).
Source§impl FunctionRegistry
impl FunctionRegistry
Sourcepub fn register_custom_full(&mut self, function: CustomFunction)
pub fn register_custom_full(&mut self, function: CustomFunction)
Registering a custom function (full form)
Sourcepub fn unregister_custom(&mut self, name: &str) -> bool
pub fn unregister_custom(&mut self, name: &str) -> bool
Remove a non-dynamic custom function by name.
Dynamic UDFs must go through unload_dynamic_udf so the library
handle is dropped exactly once; builtins are never removed here.
Returns true when an entry was removed.
Sourcepub fn get_custom(&self, name: &str) -> Option<&CustomFunction>
pub fn get_custom(&self, name: &str) -> Option<&CustomFunction>
Obtaining a custom function
Source§impl FunctionRegistry
impl FunctionRegistry
Sourcepub fn register_table_function(&mut self, func: Box<dyn TableFunction>)
pub fn register_table_function(&mut self, func: Box<dyn TableFunction>)
Register a table function
Sourcepub fn contains_table_function(&self, name: &str) -> bool
pub fn contains_table_function(&self, name: &str) -> bool
Check if a table function exists
Sourcepub fn execute_table_function(
&self,
name: &str,
args: &[Value],
) -> Result<Vec<Vec<Value>>, ExpressionError>
pub fn execute_table_function( &self, name: &str, args: &[Value], ) -> Result<Vec<Vec<Value>>, ExpressionError>
Execute a table function by name
Sourcepub fn table_function_names(&self) -> Vec<&str>
pub fn table_function_names(&self) -> Vec<&str>
Get all table function names
Source§impl FunctionRegistry
impl FunctionRegistry
Sourcepub fn dynamic_udf_mtime(&self, name: &str) -> Option<SystemTime>
pub fn dynamic_udf_mtime(&self, name: &str) -> Option<SystemTime>
Modification time of a loaded dynamic UDF library, when recorded.
Sourcepub fn load_dynamic_udf(&mut self, path: &Path) -> Result<String, UdfError>
pub fn load_dynamic_udf(&mut self, path: &Path) -> Result<String, UdfError>
Load a UDF dynamic library and register the exported function.
Returns the registered (original-case) function name. The library
handle is retained until unload_dynamic_udf is called.
Sourcepub fn install_dynamic_udf(&mut self, source: &str) -> Result<String, UdfError>
pub fn install_dynamic_udf(&mut self, source: &str) -> Result<String, UdfError>
Install a UDF from an INSTALL EXTENSION ... FROM source.
Local file paths load directly; http(s):// sources return
RepoDownloadUnsupported until a repository module is added.
Sourcepub fn register_dynamic_plugin(
&mut self,
plugin: SharedPlugin,
) -> Result<String, UdfError>
pub fn register_dynamic_plugin( &mut self, plugin: SharedPlugin, ) -> Result<String, UdfError>
Register an in-process plugin without a dynamic library.
Primarily intended for tests and embeddings that build the plugin
in the host binary; production libraries go through load_dynamic_udf.
Sourcepub fn unload_dynamic_udf(&mut self, name: &str) -> Result<(), UdfError>
pub fn unload_dynamic_udf(&mut self, name: &str) -> Result<(), UdfError>
Unload a previously loaded dynamic UDF by function name.
Sourcepub fn reload_dynamic_udf(&mut self, name: &str) -> Result<bool, UdfError>
pub fn reload_dynamic_udf(&mut self, name: &str) -> Result<bool, UdfError>
Reload a dynamic UDF from its original library path.
Returns true when the library was reloaded, false when the file
is unchanged since the initial load and reloading was skipped.
In-process plugins (no library path) always report false.
Sourcepub fn is_dynamic(&self, name: &str) -> bool
pub fn is_dynamic(&self, name: &str) -> bool
Check whether a function name resolves to a dynamic UDF.
Sourcepub fn list_dynamic_udfs(&self) -> Vec<DynamicUdfInfo>
pub fn list_dynamic_udfs(&self) -> Vec<DynamicUdfInfo>
List all loaded dynamic UDFs ordered by name.
Source§impl FunctionRegistry
impl FunctionRegistry
pub fn new() -> Self
Sourcepub fn function_names(&self) -> Vec<&str>
pub fn function_names(&self) -> Vec<&str>
Obtain all function names
Sourcepub fn execute(
&self,
name: &str,
args: &[Value],
) -> Result<Value, ExpressionError>
pub fn execute( &self, name: &str, args: &[Value], ) -> Result<Value, ExpressionError>
Execute a function (based on its name)
Sourcepub fn execute_with_storage(
&self,
name: &str,
args: &[Value],
storage: &GraphStorageRef,
) -> Result<Value, ExpressionError>
pub fn execute_with_storage( &self, name: &str, args: &[Value], storage: &GraphStorageRef, ) -> Result<Value, ExpressionError>
Execute a function with graph storage access
Trait Implementations§
Source§impl Debug for FunctionRegistry
impl Debug for FunctionRegistry
Auto Trait Implementations§
impl !RefUnwindSafe for FunctionRegistry
impl !UnwindSafe for FunctionRegistry
impl Freeze for FunctionRegistry
impl Send for FunctionRegistry
impl Sync for FunctionRegistry
impl Unpin for FunctionRegistry
impl UnsafeUnpin for FunctionRegistry
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.