diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-09 15:46:29 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2005-07-09 15:46:29 +0000 |
commit | 47a3bafe26fb5f773ac082162c3e595ce80d9ad7 (patch) | |
tree | 1574a44c26b5f1102cd96b188933728289f7c7cb | |
parent | 8266867881e708813eec3c359869d14098e3789d (diff) | |
download | rails-47a3bafe26fb5f773ac082162c3e595ce80d9ad7.tar.gz rails-47a3bafe26fb5f773ac082162c3e595ce80d9ad7.tar.bz2 rails-47a3bafe26fb5f773ac082162c3e595ce80d9ad7.zip |
Added a VERSION parameter to the migrate task that allows you to do "rake migrate VERSION=34" to migrate to the 34th version traveling up or down depending on the current version. Added ActiveRecord::Migrator.migrate that can figure out whether to go up or down based on the target version and the current
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1780 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rw-r--r-- | activerecord/lib/active_record/migration.rb | 23 | ||||
-rw-r--r-- | activerecord/test/migration_test.rb | 15 | ||||
-rw-r--r-- | railties/CHANGELOG | 7 | ||||
-rwxr-xr-x | railties/fresh_rakefile | 4 |
5 files changed, 47 insertions, 4 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 1c09b4e6dc..6eec1c03cf 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added ActiveRecord::Migrator.migrate that can figure out whether to go up or down based on the target version and the current + * Added better error message for "packets out of order" #1630 [courtenay] * Fixed first run of "rake migrate" on PostgreSQL by not expecting a return value on the id #1640 diff --git a/activerecord/lib/active_record/migration.rb b/activerecord/lib/active_record/migration.rb index 365f57f366..a71e367ef2 100644 --- a/activerecord/lib/active_record/migration.rb +++ b/activerecord/lib/active_record/migration.rb @@ -108,6 +108,18 @@ module ActiveRecord # add_column :items, :completed_items_count # end # end + # + # And some times you need to do something in SQL not abstracted directly by migrations: + # + # class MakeJoinUnique < ActiveRecord::Migration + # def self.up + # execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)" + # end + # + # def self.down + # execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`" + # end + # end class Migration class << self def up() end @@ -122,6 +134,17 @@ module ActiveRecord class Migrator#:nodoc: class << self + def migrate(migrations_path, target_version = nil) + case + when target_version.nil?, current_version < target_version + up(migrations_path, target_version) + when current_version > target_version + down(migrations_path, target_version) + when current_version == target_version + return # You're on the right version + end + end + def up(migrations_path, target_version = nil) self.new(:up, migrations_path, target_version).migrate end diff --git a/activerecord/test/migration_test.rb b/activerecord/test/migration_test.rb index 9e84978395..d5081e5335 100644 --- a/activerecord/test/migration_test.rb +++ b/activerecord/test/migration_test.rb @@ -182,5 +182,20 @@ if ActiveRecord::Base.connection.supports_migrations? assert !Person.column_methods_hash.include?(:last_name) assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } end + + def test_migrator_going_down_due_to_version_target + ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/fixtures/migrations/', 1) + ActiveRecord::Migrator.migrate(File.dirname(__FILE__) + '/fixtures/migrations/', 0) + + assert !Person.column_methods_hash.include?(:last_name) + assert_raises(ActiveRecord::StatementInvalid) { Reminder.column_methods_hash } + + ActiveRecord::Migrator.migrate(File.dirname(__FILE__) + '/fixtures/migrations/') + + Person.reset_column_information + assert Person.column_methods_hash.include?(:last_name) + assert Reminder.create("content" => "hello world", "remind_at" => Time.now) + assert_equal "hello world", Reminder.find(:first).content + end end end
\ No newline at end of file diff --git a/railties/CHANGELOG b/railties/CHANGELOG index 149c85e11d..35b4fc9ec3 100644 --- a/railties/CHANGELOG +++ b/railties/CHANGELOG @@ -1,8 +1,11 @@ *SVN* -* Extend Ruby version check to include RUBY_RELEASE_DATE >= '2005-12-25', the final Ruby 1.8.2 release. #1674 [court3nay@gmail.com] +* Added a VERSION parameter to the migrate task that allows you to do "rake migrate VERSION=34" to migrate to the 34th version traveling up or down depending on the current version + +* Extend Ruby version check to include RUBY_RELEASE_DATE >= '2005-12-25', the final Ruby 1.8.2 release #1674 [court3nay@gmail.com] + +* Improved documentation for environment config files #1625 [court3nay@gmail.com] -* Improved documentation for environment config files. #1625 [court3nay@gmail.com] *0.13.0* diff --git a/railties/fresh_rakefile b/railties/fresh_rakefile index 46bb73ef86..ac17c75546 100755 --- a/railties/fresh_rakefile +++ b/railties/fresh_rakefile @@ -187,7 +187,7 @@ task :clear_logs => :environment do end end -desc "Migrate the database according to the migrate scripts in db/migrate" +desc "Migrate the database according to the migrate scripts in db/migrate (only supported on PG/MySQL). A specific version can be targetted with VERSION=x" task :migrate => :environment do - ActiveRecord::Migrator.up(File.dirname(__FILE__) + '/db/migrate/') + ActiveRecord::Migrator.migrate(File.dirname(__FILE__) + '/db/migrate/', ENV["VERSION"]) end
\ No newline at end of file |