aboutsummaryrefslogtreecommitdiff
path: root/src/db/mod.rs
blob: 210f5e97691a9a95598eb91e651bb1eddf7467f8 (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
29
30
use anyhow::Result;
use rusqlite::Connection;
use rusqlite_migration::{Migrations, M};

pub mod cards;

pub fn init(database: &str) -> 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)?)
}