aboutsummaryrefslogtreecommitdiff
path: root/src/db/mod.rs
blob: fb9f823ebe408fe8c3306e11390e3022398d7c18 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use anyhow::Result;
use rusqlite::Connection;
use rusqlite_migration::{Migrations, M};

pub mod cards;

pub fn init(database: String) -> Result<Connection> {
    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)?)
}