class MoveTopicRevisionsToPostRevisions < ActiveRecord::Migration[4.2] def up execute <<SQL INSERT INTO post_revisions(user_id, post_id, modifications, number, created_at, updated_at) SELECT tr.user_id, p.id, tr.modifications, tr.number, tr.created_at, tr.updated_at FROM topic_revisions tr JOIN topics t ON t.id = tr.topic_id JOIN posts p ON p.topic_id = t.id AND p.post_number = 1 SQL execute <<SQL UPDATE post_revisions r SET number = 2 + ( SELECT COUNT(*) FROM post_revisions r2 WHERE r2.post_id = r.post_id AND r2.created_at < r.created_at ) SQL execute <<SQL UPDATE posts p SET version = 1 + ( SELECT COUNT(*) FROM post_revisions r WHERE r.post_id = p.id ) SQL execute <<SQL DROP TABLE topic_revisions SQL end def down # strictly, we could reverse this, but not implemented raise ActiveRecord::IrreversibleMigration end end