aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/migration.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-19 11:23:56 -0300
committerRafael Mendonça França <rafaelmfranca@gmail.com>2013-04-19 11:23:56 -0300
commitdb1594c61c0cd1de53eeaf9e705a609ac8ba95a0 (patch)
tree88c978b5092198dd86cba9a5fefdee4e1ade2a07 /activerecord/lib/active_record/migration.rb
parent77fec1344bfbf7c01f595afbf752633c0eaeed10 (diff)
parent2976558bc3a02019b605a1d70fda76ba5e9b5df2 (diff)
downloadrails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.tar.gz
rails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.tar.bz2
rails-db1594c61c0cd1de53eeaf9e705a609ac8ba95a0.zip
Merge pull request #10217 from mirasrael/make-migrator-run-transactional-4.0
Support transactions in Migrator.run Conflicts: activerecord/CHANGELOG.md
Diffstat (limited to 'activerecord/lib/active_record/migration.rb')
-rw-r--r--activerecord/lib/active_record/migration.rb17
1 files changed, 12 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb
index 451104106c..d2f10cf2ac 100644
--- a/activerecord/lib/active_record/migration.rb
+++ b/activerecord/lib/active_record/migration.rb
@@ -867,11 +867,18 @@ module ActiveRecord
alias :current :current_migration
def run
- target = migrations.detect { |m| m.version == @target_version }
- raise UnknownMigrationVersionError.new(@target_version) if target.nil?
- unless (up? && migrated.include?(target.version.to_i)) || (down? && !migrated.include?(target.version.to_i))
- target.migrate(@direction)
- record_version_state_after_migrating(target.version)
+ migration = migrations.detect { |m| m.version == @target_version }
+ raise UnknownMigrationVersionError.new(@target_version) if migration.nil?
+ unless (up? && migrated.include?(migration.version.to_i)) || (down? && !migrated.include?(migration.version.to_i))
+ begin
+ ddl_transaction(migration) do
+ migration.migrate(@direction)
+ record_version_state_after_migrating(migration.version)
+ end
+ rescue => e
+ canceled_msg = use_transaction?(migration) ? ", the migration canceled" : ""
+ raise StandardError, "An error has occurred#{canceled_msg}:\n\n#{e}", e.backtrace
+ end
end
end