Initial import
This commit is contained in:
commit
dd492db92e
37 changed files with 1953 additions and 0 deletions
3
migrations/kind_2_down.sql
Normal file
3
migrations/kind_2_down.sql
Normal file
|
@ -0,0 +1,3 @@
|
|||
DELETE FROM kind WHERE id = 'r';
|
||||
DELETE FROM kind WHERE id = 'c';
|
||||
DELETE FROM kind WHERE id = 'a';
|
3
migrations/kind_2_up.sql
Normal file
3
migrations/kind_2_up.sql
Normal file
|
@ -0,0 +1,3 @@
|
|||
INSERT INTO kind(id, name) VALUES ('a', 'author');
|
||||
INSERT INTO kind(id, name) VALUES ('c', 'character');
|
||||
INSERT INTO kind(id, name) VALUES ('r', 'release');
|
7
migrations/pooru_1_down.sql
Normal file
7
migrations/pooru_1_down.sql
Normal file
|
@ -0,0 +1,7 @@
|
|||
DROP VIEW IF EXISTS tagged_media_view;
|
||||
DROP VIEW IF EXISTS tag_count_view;
|
||||
DROP TABLE IF EXISTS media_tag;
|
||||
DROP INDEX IF EXISTS tag_display_idx;
|
||||
DROP TABLE IF EXISTS tag;
|
||||
DROP TABLE IF EXISTS kind;
|
||||
DROP TABLE IF EXISTS media;
|
57
migrations/pooru_1_up.sql
Normal file
57
migrations/pooru_1_up.sql
Normal file
|
@ -0,0 +1,57 @@
|
|||
PRAGMA journal_mode = WAL;
|
||||
|
||||
CREATE TABLE media(
|
||||
id INTEGER PRIMARY KEY,
|
||||
storage_id TEXT (64) NOT NULL UNIQUE,
|
||||
filename TEXT (256) NOT NULL,
|
||||
content_type TEXT (256),
|
||||
upload_datetime TEXT (32) DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE TABLE kind(
|
||||
id TEXT (32) PRIMARY KEY,
|
||||
name TEXT (256) NOT NULL UNIQUE
|
||||
) WITHOUT ROWID;
|
||||
|
||||
CREATE TABLE tag(
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT (256) NOT NULL,
|
||||
kind_id TEXT (32) REFERENCES kind(id) ON UPDATE CASCADE,
|
||||
display TEXT (289) AS (concat_ws(':', kind_id, name)) STORED,
|
||||
UNIQUE (name, kind_id)
|
||||
);
|
||||
CREATE UNIQUE INDEX tag_display_idx ON tag(display);
|
||||
|
||||
CREATE TABLE media_tag(
|
||||
media_id INTEGER NOT NULL,
|
||||
tag_id INTEGER NOT NULL,
|
||||
FOREIGN KEY (media_id) REFERENCES media(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE,
|
||||
PRIMARY KEY (media_id, tag_id)
|
||||
);
|
||||
|
||||
CREATE VIEW tag_count_view AS SELECT
|
||||
tag.id AS id,
|
||||
tag.name AS name,
|
||||
tag.kind_id AS kind_id,
|
||||
tag.display AS display,
|
||||
COUNT(media_tag.tag_id) AS count
|
||||
FROM tag
|
||||
INNER JOIN media_tag ON media_tag.tag_id = tag.id
|
||||
LEFT JOIN kind ON kind.id = tag.kind_id
|
||||
GROUP BY tag.id;
|
||||
|
||||
CREATE VIEW tagged_media_view AS SELECT
|
||||
media.id AS media_id,
|
||||
media.storage_id AS media_storage_id,
|
||||
media.filename AS media_filename,
|
||||
media.content_type AS media_content_type,
|
||||
media.upload_datetime AS media_upload_datetime,
|
||||
tag_count_view.id AS tag_id,
|
||||
tag_count_view.name AS tag_name,
|
||||
tag_count_view.kind_id AS tag_kind_id,
|
||||
tag_count_view.display AS tag_display,
|
||||
tag_count_view.count AS tag_count
|
||||
FROM media_tag
|
||||
INNER JOIN media ON media.id = media_id
|
||||
INNER JOIN tag_count_view ON tag_count_view.id = tag_id;
|
Loading…
Add table
Add a link
Reference in a new issue