aboutsummaryrefslogtreecommitdiffstats
path: root/db/migrate/067_factor_out_raw_email.rb
blob: be415393820f8e641eb43514877896343dc6896c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
class FactorOutRawEmail < ActiveRecord::Migration
    def self.up
        create_table :raw_emails do |t|
            t.column :data, :text, :null => false
        end

        add_column :incoming_messages, :raw_email_id, :integer, :null => true
        change_column :incoming_messages, :raw_data, :text, :null => true

        if ActiveRecord::Base.connection.adapter_name == "PostgreSQL"
            execute "ALTER TABLE incoming_messages ADD CONSTRAINT fk_incoming_messages_raw_email FOREIGN KEY (raw_email_id) REFERENCES raw_emails(id)"
        end

        batch_size = 10
        0.step(IncomingMessage.count, batch_size) do |i|
            IncomingMessage.find(:all, :limit => batch_size, :offset => i, :order => :id).each do |incoming_message|
                if incoming_message.raw_email_id.nil?
                    STDERR.puts "doing incoming_message id " + incoming_message.id.to_s
                    ActiveRecord::Base.transaction do
                        raw_email = RawEmail.new
                        raw_email.data = incoming_message.raw_data
                        incoming_message.raw_email = raw_email
                        incoming_message.raw_data = nil
                        raw_email.save!
                        incoming_message.save!
                    end
                end
            end
        end

        change_column :incoming_messages, :raw_email_id, :integer, :null => false
        remove_column :incoming_messages, :raw_data
    end

    def self.down
        raise "down migration not implemented"
    end
end