use vibesql_ast::*;
use vibesql_storage::{Database, Row};
use vibesql_types::{DataType, SqlValue};
use super::common::setup_users_table as setup_test_table;
use crate::{advanced_objects, errors::ExecutorError};
pub(crate) fn setup_test_db() -> Database {
Database::new()
}
pub(crate) fn create_simple_procedure(
name: &str,
parameters: Vec<ProcedureParameter>,
body: Vec<ProceduralStatement>,
) -> CreateProcedureStmt {
CreateProcedureStmt {
procedure_name: name.to_string(),
parameters,
body: ProcedureBody::BeginEnd(body),
sql_security: None,
comment: None,
language: None,
}
}
pub(crate) fn create_empty_procedure(name: &str) -> CreateProcedureStmt {
create_simple_procedure(name, vec![], vec![])
}
pub(crate) fn create_procedure_with_in_param(
name: &str,
param_name: &str,
param_type: DataType,
body: Vec<ProceduralStatement>,
) -> CreateProcedureStmt {
create_simple_procedure(
name,
vec![ProcedureParameter {
mode: ParameterMode::In,
name: param_name.to_string(),
data_type: param_type,
}],
body,
)
}
#[allow(dead_code)]
pub(crate) fn create_simple_function(
name: &str,
parameters: Vec<FunctionParameter>,
return_type: DataType,
body: Vec<ProceduralStatement>,
) -> CreateFunctionStmt {
CreateFunctionStmt {
function_name: name.to_string(),
parameters,
return_type,
body: ProcedureBody::BeginEnd(body),
deterministic: None,
sql_security: None,
comment: None,
language: None,
}
}
#[allow(dead_code)]
pub(crate) fn create_empty_function(name: &str, return_type: DataType) -> CreateFunctionStmt {
create_simple_function(name, vec![], return_type, vec![])
}
mod control_flow;
mod edge_cases;
mod error_messages;
mod functions;
mod parameters;
mod stored_procedures;