use vibesql_storage::Database;
use crate::{errors::ExecutorError, truncate_validation::can_use_truncate};
pub fn get_fk_children(
database: &Database,
parent_table: &str,
) -> Result<Vec<String>, ExecutorError> {
let mut children = Vec::new();
for table_name in database.catalog.list_tables() {
let child_schema = database
.catalog
.get_table(&table_name)
.ok_or_else(|| ExecutorError::TableNotFound(table_name.clone()))?;
for fk in &child_schema.foreign_keys {
if fk.parent_table == parent_table && table_name != parent_table {
children.push(table_name.clone());
break; }
}
}
Ok(children)
}
pub fn validate_truncate_allowed(
database: &Database,
table_name: &str,
) -> Result<(), ExecutorError> {
if !can_use_truncate(database, table_name)? {
return Err(ExecutorError::Other(format!(
"Cannot TRUNCATE table '{}': table has DELETE triggers or is referenced by foreign keys",
table_name
)));
}
Ok(())
}