diff options
Diffstat (limited to 'db/migrate')
-rw-r--r-- | db/migrate/067_factor_out_raw_email.rb | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/db/migrate/067_factor_out_raw_email.rb b/db/migrate/067_factor_out_raw_email.rb new file mode 100644 index 000000000..be4153938 --- /dev/null +++ b/db/migrate/067_factor_out_raw_email.rb @@ -0,0 +1,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 |