aboutsummaryrefslogtreecommitdiffstats
path: root/db/migrate
diff options
context:
space:
mode:
Diffstat (limited to 'db/migrate')
-rw-r--r--db/migrate/067_factor_out_raw_email.rb38
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