use crate::table::Table;
use log::info;
use rusqlite::Result;
pub fn init(mut conn: rusqlite::Connection, tables: Vec<Box<dyn Table>>) -> Result<()> {
let tx = conn.transaction()?;
for t in &tables {
let statement = generate_statement(&**t);
tx.execute(&statement, [])?;
}
tx.commit()?;
info!("Initialize database, done.");
Ok(())
}
fn generate_statement(table: &dyn Table) -> String {
let mut column_definitions = String::new();
for (column_name, column_type) in table.get_columns() {
column_definitions.push_str(&format!("{} {}, ", column_name, column_type));
}
column_definitions.pop();
column_definitions.pop();
let sql = format!(
"CREATE TABLE {} (id INTEGER PRIMARY KEY, {});",
table.get_name(),
column_definitions
);
println!("{}", sql);
sql
}