pub mod insert_constraint_fixtures;
use vibesql_executor::ExpressionEvaluator;
#[allow(dead_code)] pub fn create_test_evaluator() -> (ExpressionEvaluator<'static>, vibesql_storage::Row) {
let schema = Box::leak(Box::new(vibesql_catalog::TableSchema::new(
"test".to_string(),
vec![vibesql_catalog::ColumnSchema::new(
"id".to_string(),
vibesql_types::DataType::Integer,
false,
)],
)));
let evaluator = ExpressionEvaluator::new(schema);
let row = vibesql_storage::Row::new(vec![vibesql_types::SqlValue::Integer(1)]);
(evaluator, row)
}
#[allow(dead_code)] pub fn setup_test_table(db: &mut vibesql_storage::Database) {
let schema = vibesql_catalog::TableSchema::new(
"employees".to_string(),
vec![
vibesql_catalog::ColumnSchema::new(
"id".to_string(),
vibesql_types::DataType::Integer,
false,
),
vibesql_catalog::ColumnSchema::new(
"name".to_string(),
vibesql_types::DataType::Varchar { max_length: Some(50) },
false,
),
vibesql_catalog::ColumnSchema::new(
"salary".to_string(),
vibesql_types::DataType::Integer,
true,
),
vibesql_catalog::ColumnSchema::new(
"department".to_string(),
vibesql_types::DataType::Varchar { max_length: Some(50) },
true,
),
],
);
db.create_table(schema).unwrap();
db.insert_row(
"employees",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(1),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Alice")),
vibesql_types::SqlValue::Integer(45000),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Engineering")),
]),
)
.unwrap();
db.insert_row(
"employees",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(2),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Bob")),
vibesql_types::SqlValue::Integer(48000),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Engineering")),
]),
)
.unwrap();
db.insert_row(
"employees",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(3),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Charlie")),
vibesql_types::SqlValue::Integer(42000),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Sales")),
]),
)
.unwrap();
}
#[allow(dead_code)] pub fn setup_users_table(db: &mut vibesql_storage::Database) {
let schema = vibesql_catalog::TableSchema::new(
"users".to_string(),
vec![
vibesql_catalog::ColumnSchema::new(
"id".to_string(),
vibesql_types::DataType::Integer,
false,
),
vibesql_catalog::ColumnSchema::new(
"name".to_string(),
vibesql_types::DataType::Varchar { max_length: Some(50) },
false,
),
],
);
db.create_table(schema).unwrap();
}
#[allow(dead_code)] pub fn setup_users_table_with_active(db: &mut vibesql_storage::Database) {
let schema = vibesql_catalog::TableSchema::new(
"users".to_string(),
vec![
vibesql_catalog::ColumnSchema::new(
"id".to_string(),
vibesql_types::DataType::Integer,
false,
),
vibesql_catalog::ColumnSchema::new(
"name".to_string(),
vibesql_types::DataType::Varchar { max_length: Some(50) },
false,
),
vibesql_catalog::ColumnSchema::new(
"active".to_string(),
vibesql_types::DataType::Boolean,
false,
),
],
);
db.create_table(schema).unwrap();
db.insert_row(
"users",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(1),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Alice")),
vibesql_types::SqlValue::Boolean(true),
]),
)
.unwrap();
db.insert_row(
"users",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(2),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Bob")),
vibesql_types::SqlValue::Boolean(false),
]),
)
.unwrap();
db.insert_row(
"users",
vibesql_storage::Row::new(vec![
vibesql_types::SqlValue::Integer(3),
vibesql_types::SqlValue::Varchar(arcstr::ArcStr::from("Charlie")),
vibesql_types::SqlValue::Boolean(true),
]),
)
.unwrap();
}
#[allow(dead_code)] pub fn setup_timestamps_table(db: &mut vibesql_storage::Database) -> Result<String, String> {
use vibesql_ast::Statement;
use vibesql_executor::CreateTableExecutor;
use vibesql_parser::Parser;
let sql = "CREATE TABLE timestamps (id INTEGER, ts TIMESTAMP)";
let stmt = Parser::parse_sql(sql).map_err(|e| format!("Parse error: {:?}", e))?;
match stmt {
Statement::CreateTable(create_stmt) => CreateTableExecutor::execute(&create_stmt, db)
.map_err(|e| format!("Execution error: {:?}", e)),
other => Err(format!("Expected CREATE TABLE statement, got {:?}", other)),
}
}