2018-03-10 10:15:56 +01:00
|
|
|
class PoolsCreate < ActiveRecord::Migration[5.1]
|
2010-04-20 23:05:11 +00:00
|
|
|
def self.up
|
2014-11-08 23:02:46 +09:00
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE TABLE pools (
|
|
|
|
id SERIAL PRIMARY KEY,
|
|
|
|
name TEXT NOT NULL,
|
|
|
|
created_at TIMESTAMP NOT NULL,
|
|
|
|
updated_at TIMESTAMP NOT NULL,
|
|
|
|
user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE,
|
|
|
|
is_public BOOLEAN NOT NULL DEFAULT FALSE,
|
|
|
|
post_count INTEGER NOT NULL DEFAULT 0,
|
|
|
|
description TEXT NOT NULL DEFAULT ''
|
|
|
|
)
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE TABLE pools_posts (
|
|
|
|
id SERIAL PRIMARY KEY,
|
|
|
|
sequence INTEGER NOT NULL DEFAULT 0,
|
|
|
|
pool_id INTEGER NOT NULL REFERENCES pools ON DELETE CASCADE,
|
|
|
|
post_id INTEGER NOT NULL REFERENCES posts ON DELETE CASCADE
|
|
|
|
)
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE OR REPLACE FUNCTION pools_posts_delete_trg() RETURNS "trigger" AS $$
|
|
|
|
BEGIN
|
|
|
|
UPDATE pools SET post_count = post_count - 1 WHERE id = OLD.pool_id;
|
|
|
|
RETURN OLD;
|
|
|
|
END;
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE OR REPLACE FUNCTION pools_posts_insert_trg() RETURNS "trigger" AS $$
|
|
|
|
BEGIN
|
|
|
|
UPDATE pools SET post_count = post_count + 1 WHERE id = NEW.pool_id;
|
|
|
|
RETURN NEW;
|
|
|
|
END;
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE TRIGGER pools_posts_insert_trg
|
|
|
|
BEFORE INSERT ON pools_posts
|
|
|
|
FOR EACH ROW
|
|
|
|
EXECUTE PROCEDURE pools_posts_insert_trg();
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE TRIGGER pools_posts_delete_trg
|
|
|
|
BEFORE DELETE ON pools_posts
|
|
|
|
FOR EACH ROW
|
|
|
|
EXECUTE PROCEDURE pools_posts_delete_trg();
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE INDEX pools_user_id_idx ON pools (user_id)
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE INDEX pools_posts_pool_id_idx ON pools_posts (pool_id)
|
|
|
|
EOS
|
|
|
|
execute <<-EOS
|
|
|
|
CREATE INDEX pools_posts_post_id_idx ON pools_posts (post_id)
|
|
|
|
EOS
|
|
|
|
end
|
2010-04-20 23:05:11 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def self.down
|
2014-11-08 23:02:46 +09:00
|
|
|
ActiveRecord::Base.transaction do
|
|
|
|
execute "DROP TABLE pools_posts"
|
|
|
|
execute "DROP TABLE pools"
|
|
|
|
execute "DROP FUNCTION pools_posts_insert_trg()"
|
|
|
|
execute "DROP FUNCTION pools_posts_delete_trg()"
|
|
|
|
end
|
2010-04-20 23:05:11 +00:00
|
|
|
end
|
|
|
|
end
|