use anyhow::Result; use rusqlite::Connection; use rusqlite_migration::{Migrations, M}; pub mod cards; pub fn init(database: &str) -> Result { let mut conn = Connection::open(database)?; apply_migrations(&mut conn)?; set_pragma(&conn, "foreign_keys", "ON")?; set_pragma(&conn, "journal_mode", "wal")?; Ok(conn) } fn apply_migrations(conn: &mut Connection) -> Result<()> { let migrations = Migrations::new(vec![ M::up(include_str!("migrations/01-init.sql")), M::up(include_str!( "migrations/02-primary-key-question-responses.sql" )), M::up(include_str!("migrations/03-drop-deck-read.sql")), M::up(include_str!("migrations/04-strict-tables.sql")), ]); migrations.to_latest(conn)?; Ok(()) } fn set_pragma(conn: &Connection, key: &str, value: &str) -> Result<()> { Ok(conn.pragma_update(None, key, value)?) }