-- +goose Up -- +goose StatementBegin CREATE TABLE images( id INTEGER PRIMARY KEY AUTOINCREMENT, subreddit VARCHAR(255) NOT NULL COLLATE NOCASE, device VARCHAR(250) NOT NULL COLLATE NOCASE, post_title VARCHAR(255) NOT NULL, post_name VARCHAR(255) NOT NULL, post_url VARCHAR(255) NOT NULL, post_created BIGINT NOT NULL DEFAULT CURRENT_TIMESTAMP, post_author VARCHAR(50) NOT NULL, post_author_url VARCHAR(255) NOT NULL, image_relative_path VARCHAR(255) NOT NULL, image_original_url VARCHAR(255) NOT NULL, image_height BIGINT NOT NULL DEFAULT 0, image_width BIGINT NOT NULL DEFAULT 0, image_size BIGINT NOT NULL DEFAULT 0, thumbnail_relative_path VARCHAR(255) NOT NULL DEFAULT '', nsfw TINYINT NOT NULL DEFAULT 0, blacklisted TINYINT NOT NULL DEFAULT 0, created_at BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), updated_at BIGINT NOT NULL DEFAULT (strftime('%s', 'now')), CONSTRAINT fk_image_subreddit FOREIGN KEY (subreddit) REFERENCES subreddits(name) ON DELETE CASCADE, CONSTRAINT fk_image_devices_slug FOREIGN KEY (device) REFERENCES devices(slug) ON DELETE CASCADE, CONSTRAINT fk_image_subreddit_cover FOREIGN KEY (id) REFERENCES subreddits(cover_image_id) ); CREATE VIRTUAL TABLE images_fts5 USING fts5( post_author, post_title, post_name, image_relative_path, post_url, post_author_url, content='images', content_rowid='id' ); CREATE INDEX idx_subreddit_images_blacklisted ON images(subreddit, blacklisted); CREATE INDEX idx_subreddit_device_images_blacklisted ON images(device, subreddit, blacklisted); CREATE INDEX idx_images_nsfw_blacklisted ON images(nsfw, blacklisted); CREATE INDEX idx_images_created_at_nsfw_blacklisted ON images(created_at DESC, nsfw, blacklisted); CREATE INDEX idx_images_blacklisted ON images(blacklisted); CREATE UNIQUE INDEX idx_unique_images_per_device ON images(device, post_name); CREATE TRIGGER images_update_timestamp AFTER UPDATE ON images FOR EACH ROW BEGIN UPDATE images SET updated_at = strftime('%s', 'now') WHERE id = old.id; END; CREATE TRIGGER images_update_subreddit_cover_on_insert AFTER INSERT ON images FOR EACH ROW BEGIN UPDATE subreddits SET cover_image_id = new.id WHERE name = new.subreddit AND cover_image_id IS NULL; END; CREATE TRIGGER images_update_subreddit_cover_on_delete AFTER DELETE ON images FOR EACH ROW BEGIN UPDATE subreddits SET cover_image_id = NULL WHERE cover_image_id = old.id; END; CREATE TRIGGER images_update_fts_insert AFTER INSERT ON images FOR EACH ROW BEGIN INSERT INTO images_fts5( rowid, post_author, post_title, post_name, image_relative_path, post_url, post_author_url ) VALUES( new.id, new.post_author, new.post_title, new.post_name, new.image_relative_path, new.post_url, new.post_author_url ); END; CREATE TRIGGER images_update_fts_delete AFTER DELETE ON images FOR EACH ROW BEGIN DELETE FROM images_fts5 WHERE rowid = old.id; END; -- +goose StatementEnd -- +goose Down -- +goose StatementBegin DROP TABLE images_fts5; DROP TABLE images; -- +goose StatementEnd