aboutsummaryrefslogtreecommitdiff
path: root/src/db/migrations
diff options
context:
space:
mode:
authorJoris2025-02-07 11:45:22 +0100
committerJoris2025-02-07 11:45:22 +0100
commitb324803fe11b52b28ac2dc459504f904a48a79d4 (patch)
tree1d916303b3b262dc09c38a3c6f9abbb4a9a4e4be /src/db/migrations
parentf7afa9cf50a9459f41146ca5cb009eab69b76c5f (diff)
Use strict tables
Diffstat (limited to 'src/db/migrations')
-rw-r--r--src/db/migrations/01-init.sql10
-rw-r--r--src/db/migrations/02-primary-key-question-responses.sql20
-rw-r--r--src/db/migrations/03-drop-deck-read.sql1
-rw-r--r--src/db/migrations/04-strict-tables.sql18
4 files changed, 49 insertions, 0 deletions
diff --git a/src/db/migrations/01-init.sql b/src/db/migrations/01-init.sql
new file mode 100644
index 0000000..29d70ed
--- /dev/null
+++ b/src/db/migrations/01-init.sql
@@ -0,0 +1,10 @@
+CREATE TABLE IF NOT EXISTS cards (
+ question VARCHAR PRIMARY KEY,
+ responses VARCHAR NOT NULL,
+ state VARCHAR NOT NULL,
+ created TIMESTAMP NOT NULL,
+ updated TIMESTAMP NULL,
+ deleted TIMESTAMP NULL,
+ deck_read TIMESTAMP NOT NULL,
+ ready TIMESTAMP NOT NULL
+)
diff --git a/src/db/migrations/02-primary-key-question-responses.sql b/src/db/migrations/02-primary-key-question-responses.sql
new file mode 100644
index 0000000..cb7df21
--- /dev/null
+++ b/src/db/migrations/02-primary-key-question-responses.sql
@@ -0,0 +1,20 @@
+/* Allows to use ON CONFLICT on (question, responses) when inserting a card. */
+
+CREATE TABLE IF NOT EXISTS cards_copy (
+ question VARCHAR NOT NULL,
+ responses VARCHAR NOT NULL,
+ state VARCHAR NOT NULL,
+ created TIMESTAMP NOT NULL,
+ updated TIMESTAMP NULL,
+ deleted TIMESTAMP NULL,
+ deck_read TIMESTAMP NOT NULL,
+ ready TIMESTAMP NOT NULL,
+ PRIMARY KEY (question, responses)
+);
+
+INSERT INTO cards_copy (question, responses, state, created, updated, deleted, deck_read, ready)
+ SELECT question, responses, state, created, updated, deleted, deck_read, ready FROM cards;
+
+DROP TABLE cards;
+
+ALTER TABLE cards_copy RENAME TO cards;
diff --git a/src/db/migrations/03-drop-deck-read.sql b/src/db/migrations/03-drop-deck-read.sql
new file mode 100644
index 0000000..1ca23d1
--- /dev/null
+++ b/src/db/migrations/03-drop-deck-read.sql
@@ -0,0 +1 @@
+ALTER TABLE cards DROP COLUMN deck_read;
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;