diff options
author | Joris | 2025-02-07 11:45:22 +0100 |
---|---|---|
committer | Joris | 2025-02-07 11:45:22 +0100 |
commit | b324803fe11b52b28ac2dc459504f904a48a79d4 (patch) | |
tree | 1d916303b3b262dc09c38a3c6f9abbb4a9a4e4be | |
parent | f7afa9cf50a9459f41146ca5cb009eab69b76c5f (diff) |
Use strict tables
-rw-r--r-- | .gitignore | 3 | ||||
-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 |
6 files changed, 36 insertions, 7 deletions
@@ -1,3 +1,2 @@ target/ -deck.deck -deck.db +deck.* 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)?) } |