aboutsummaryrefslogtreecommitdiff
path: root/migrations
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2018-04-05 22:52:02 -0400
committerNathan Perry <avaglir@gmail.com>2018-04-05 22:52:02 -0400
commitee1d099c6acdb38a173a7455804724f3a1b78836 (patch)
tree0f4a8a949de370874d3e61788f5882dd7dddcf43 /migrations
parent1fda857d25c3d33e593951eef3ce713fa69a7025 (diff)
consolidate memes to one table
Diffstat (limited to 'migrations')
-rw-r--r--migrations/2018-04-06-005800_consolidate_memes/down.sql41
-rw-r--r--migrations/2018-04-06-005800_consolidate_memes/up.sql19
2 files changed, 60 insertions, 0 deletions
diff --git a/migrations/2018-04-06-005800_consolidate_memes/down.sql b/migrations/2018-04-06-005800_consolidate_memes/down.sql
new file mode 100644
index 0000000..339bf8f
--- /dev/null
+++ b/migrations/2018-04-06-005800_consolidate_memes/down.sql
@@ -0,0 +1,41 @@
+DROP INDEX memes_audio;
+DROP INDEX memes_content;
+DROP INDEX memes_image;
+
+ALTER TABLE memes RENAME TO text_memes;
+
+CREATE TABLE image_memes (
+ id SERIAL PRIMARY KEY,
+ title varchar UNIQUE NOT NULL,
+ image_id INTEGER REFERENCES images NOT NULL,
+
+ metadata_id INTEGER REFERENCES metadata UNIQUE NOT NULL,
+ UNIQUE(title, image_id)
+);
+
+
+CREATE TABLE audio_memes (
+ id SERIAL PRIMARY KEY,
+ title varchar UNIQUE NOT NULL,
+ audio_id INTEGER REFERENCES audio NOT NULL,
+
+ metadata_id INTEGER REFERENCES metadata UNIQUE NOT NULL,
+ UNIQUE(title, audio_id)
+);
+
+
+INSERT INTO audio_memes(title, audio_id, metadata_id) SELECT title, audio_id, metadata_id FROM text_memes
+ WHERE audio_id IS NOT NULL AND content IS NULL;
+
+DELETE FROM text_memes WHERE audio_id IS NOT NULL AND content IS NULL;
+
+
+INSERT INTO image_memes(title, image_id, metadata_id) SELECT title, image_id, metadata_id FROM text_memes
+ WHERE image_id IS NOT NULL AND content IS NULL;
+
+DELETE FROM text_memes WHERE image_id IS NOT NULL AND content IS NULL;
+
+
+ALTER TABLE text_memes ALTER COLUMN content SET NOT NULL;
+ALTER TABLE text_memes DROP CONSTRAINT text_memes_image_or_audio_null;
+ALTER TABLE text_memes DROP CONSTRAINT text_memes_content_not_all_null;
diff --git a/migrations/2018-04-06-005800_consolidate_memes/up.sql b/migrations/2018-04-06-005800_consolidate_memes/up.sql
new file mode 100644
index 0000000..084525b
--- /dev/null
+++ b/migrations/2018-04-06-005800_consolidate_memes/up.sql
@@ -0,0 +1,19 @@
+ALTER TABLE text_memes ADD CONSTRAINT text_memes_content_not_all_null
+ CHECK (content IS NOT NULL OR image_id IS NOT NULL OR audio_id IS NOT NULL);
+
+ALTER TABLE text_memes ADD CONSTRAINT text_memes_image_or_audio_null
+ CHECK (image_id IS NULL OR audio_id IS NULL);
+
+ALTER TABLE text_memes ALTER COLUMN content DROP NOT NULL;
+
+INSERT INTO text_memes(audio_id, metadata_id, title) SELECT audio_id, metadata_id, title FROM audio_memes;
+INSERT INTO text_memes(image_id, metadata_id, title) SELECT image_id, metadata_id, title FROM image_memes;
+
+DROP TABLE audio_memes;
+DROP TABLE image_memes;
+
+ALTER TABLE text_memes RENAME TO memes;
+
+CREATE INDEX memes_audio ON memes (audio_id);
+CREATE INDEX memes_image ON memes (image_id);
+CREATE INDEX memes_content ON memes (content);