feat: added first class citizen tags
This commit is contained in:
1 parent
57bcd549d1
commit
4dc42d91c2
4 files changed
+469
-38
No files matched your search
@@ -0,0 +1,40 @@
|
||||
-- +goose Up
|
||||
CREATE TABLE IF NOT EXISTS tag (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL UNIQUE,
|
||||
description TEXT NOT NULL DEFAULT ''
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS flashcard_tag (
|
||||
flashcard_id INTEGER NOT NULL REFERENCES flashcard(_id) ON DELETE CASCADE,
|
||||
tag_id INTEGER NOT NULL REFERENCES tag(id),
|
||||
PRIMARY KEY (flashcard_id, tag_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_flashcard_tag_tag_id ON flashcard_tag(tag_id);
|
||||
|
||||
INSERT OR IGNORE INTO tag(name)
|
||||
SELECT DISTINCT j.value
|
||||
FROM flashcard f, json_each(f.tags) j
|
||||
WHERE f.tags IS NOT NULL AND j.value != '';
|
||||
|
||||
INSERT OR IGNORE INTO flashcard_tag(flashcard_id, tag_id)
|
||||
SELECT f._id, t.id
|
||||
FROM flashcard f, json_each(f.tags) j
|
||||
JOIN tag t ON t.name = j.value
|
||||
WHERE f.tags IS NOT NULL AND j.value != '';
|
||||
|
||||
ALTER TABLE flashcard DROP COLUMN tags;
|
||||
|
||||
-- +goose Down
|
||||
ALTER TABLE flashcard ADD COLUMN tags TEXT;
|
||||
|
||||
UPDATE flashcard SET tags = (
|
||||
SELECT json_group_array(t.name)
|
||||
FROM flashcard_tag ft JOIN tag t ON t.id = ft.tag_id
|
||||
WHERE ft.flashcard_id = flashcard._id
|
||||
);
|
||||
|
||||
DROP INDEX IF EXISTS idx_flashcard_tag_tag_id;
|
||||
DROP TABLE IF EXISTS flashcard_tag;
|
||||
DROP TABLE IF EXISTS tag;
|
||||
Reference in new issue
Block a user