diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/db/migrations/01-init.sql (renamed from src/db/sql/1-init.sql) | 0 | ||||
| -rw-r--r-- | src/db/migrations/02-primary-key-question-responses.sql (renamed from src/db/sql/2-primary-key-question-responses.sql) | 0 | ||||
| -rw-r--r-- | src/db/migrations/03-drop-deck-read.sql (renamed from src/db/sql/3-drop-deck-read.sql) | 0 | ||||
| -rw-r--r-- | src/db/migrations/04-strict-tables.sql | 18 | ||||
| -rw-r--r-- | src/db/mod.rs | 22 | 
5 files changed, 35 insertions, 5 deletions
| diff --git a/src/db/sql/1-init.sql b/src/db/migrations/01-init.sql index 29d70ed..29d70ed 100644 --- a/src/db/sql/1-init.sql +++ b/src/db/migrations/01-init.sql diff --git a/src/db/sql/2-primary-key-question-responses.sql b/src/db/migrations/02-primary-key-question-responses.sql index cb7df21..cb7df21 100644 --- a/src/db/sql/2-primary-key-question-responses.sql +++ b/src/db/migrations/02-primary-key-question-responses.sql diff --git a/src/db/sql/3-drop-deck-read.sql b/src/db/migrations/03-drop-deck-read.sql index 1ca23d1..1ca23d1 100644 --- a/src/db/sql/3-drop-deck-read.sql +++ b/src/db/migrations/03-drop-deck-read.sql diff --git a/src/db/migrations/04-strict-tables.sql b/src/db/migrations/04-strict-tables.sql new file mode 100644 index 0000000..9ce4ce9 --- /dev/null +++ b/src/db/migrations/04-strict-tables.sql @@ -0,0 +1,18 @@ +ALTER TABLE "cards" RENAME TO "cards_non_strict"; + +CREATE TABLE IF NOT EXISTS "cards" ( +  question TEXT NOT NULL, +  responses TEXT NOT NULL, +  state TEXT NOT NULL, +  created INTEGER NOT NULL, /* TIMESTAMP */ +  updated INTEGER NULL, /* TIMESTAMP */ +  deleted INTEGER NULL, /* TIMESTAMP */ +  ready INTEGER NOT NULL, /* TIMESTAMP */ +  PRIMARY KEY (question, responses) +) STRICT; + +INSERT INTO cards (question, responses, state, created, updated, deleted, ready) +  SELECT question, responses, state, created, updated, deleted, ready +  FROM cards_non_strict; + +DROP TABLE cards_non_strict; diff --git a/src/db/mod.rs b/src/db/mod.rs index 54bf90f..fb9f823 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -6,11 +6,23 @@ 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!("sql/1-init.sql")), -        M::up(include_str!("sql/2-primary-key-question-responses.sql")), -        M::up(include_str!("sql/3-drop-deck-read.sql")), +        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(&mut conn)?; -    Ok(conn) +    migrations.to_latest(conn)?; +    Ok(()) +} + +fn set_pragma(conn: &Connection, key: &str, value: &str) -> Result<()> { +    Ok(conn.pragma_update(None, key, value)?)  } | 
