diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-11-19 10:31:03 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-11-19 10:31:03 -0800 |
commit | 47017bd1697d6b4d6780356a403f91536eacd689 (patch) | |
tree | 72619dbd4cf2c997d72a70cecd14babfacc369df /activerecord/lib/active_record/migration.rb | |
parent | 6519df4157a861c9c9d567ee57983ded0e967a10 (diff) | |
download | rails-47017bd1697d6b4d6780356a403f91536eacd689.tar.gz rails-47017bd1697d6b4d6780356a403f91536eacd689.tar.bz2 rails-47017bd1697d6b4d6780356a403f91536eacd689.zip |
invertable migrations are working
Diffstat (limited to 'activerecord/lib/active_record/migration.rb')
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index e7063bca11..99dd50ccb1 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -332,7 +332,25 @@ module ActiveRecord time = nil ActiveRecord::Base.connection_pool.with_connection do |conn| @connection = conn - time = Benchmark.measure { send(direction) } + if respond_to?(:change) + if direction == :down + recorder = CommandRecorder.new(@connection) + suppress_messages do + @connection = recorder + change + end + @connection = conn + time = Benchmark.measure { + recorder.inverse.each do |cmd, args| + send(cmd, *args) + end + } + else + time = Benchmark.measure { change } + end + else + time = Benchmark.measure { send(direction) } + end @connection = nil end |