use crate::functions::SQLTableFunctionResult;
use uqa_core::Value;
use uqa_sql::{ast::FunctionBinding, SQLError};
pub trait SQLRoutineInvoker {
fn has_user_function(
&self,
name: &str,
binding: Option<&FunctionBinding>,
) -> Result<bool, SQLError>;
fn user_function_returns_set(
&self,
name: &str,
binding: Option<&FunctionBinding>,
arguments: &[(Option<String>, Value)],
) -> Option<Result<bool, SQLError>>;
fn call_user_scalar_function(
&self,
name: &str,
binding: Option<&FunctionBinding>,
arguments: &[(Option<String>, Value)],
) -> Option<Result<Value, SQLError>>;
fn call_user_table_function(
&self,
name: &str,
binding: Option<&FunctionBinding>,
arguments: &[(Option<String>, Value)],
) -> Option<Result<SQLTableFunctionResult, SQLError>>;
}