diff options
author | Tobias Lütke <tobias.luetke@gmail.com> | 2005-10-06 14:10:45 +0000 |
---|---|---|
committer | Tobias Lütke <tobias.luetke@gmail.com> | 2005-10-06 14:10:45 +0000 |
commit | ebfddf35b9d4ebcdb5be37df77b83b2e1e16df97 (patch) | |
tree | aabf37727ae0d35131bebbd2df8c877210db06cc | |
parent | 7e70fc1e9d1bd3f1d0be37fcf23dae1736ccbaaa (diff) | |
download | rails-ebfddf35b9d4ebcdb5be37df77b83b2e1e16df97.tar.gz rails-ebfddf35b9d4ebcdb5be37df77b83b2e1e16df97.tar.bz2 rails-ebfddf35b9d4ebcdb5be37df77b83b2e1e16df97.zip |
Add rename_table to mysql, sqlite and postgres adapters for use in migrations
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2477 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
5 files changed, 39 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb index 861480d980..366192909e 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -90,6 +90,13 @@ module ActiveRecord create_sql << ") #{options[:options]}" execute create_sql end + + # Renames a table. + # ===== Example + # rename_table('octopuses', 'octopi') + def rename_table(name, new_name) + raise NotImplementedError, "rename_table is not implemented" + end # Drops a table from the database. def drop_table(name) @@ -109,7 +116,7 @@ module ActiveRecord # remove_column(:suppliers, :qualification) def remove_column(table_name, column_name) execute "ALTER TABLE #{table_name} DROP #{column_name}" - end + end # Changes the column's definition according to the new options. # See TableDefinition#column for details of the options you can use. diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb index 9f38dabdcc..d56e1f90da 100755 --- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb @@ -258,6 +258,10 @@ module ActiveRecord def create_table(name, options = {}) #:nodoc: super(name, {:options => "ENGINE=InnoDB"}.merge(options)) end + + def rename_table(name, new_name) + execute "RENAME TABLE #{name} TO #{new_name}" + end def change_column_default(table_name, column_name, default) #:nodoc: current_type = select_one("SHOW COLUMNS FROM #{table_name} LIKE '#{column_name}'")["Type"] diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 320ef2752b..b908c10049 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -198,6 +198,10 @@ module ActiveRecord def schema_search_path #:nodoc: @schema_search_path ||= query('SHOW search_path')[0][0] end + + def rename_table(name, new_name) + execute "ALTER TABLE #{name} RENAME TO #{new_name}" + end def add_column(table_name, column_name, type, options = {}) native_type = native_database_types[type] diff --git a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb index 5c7a93e9d0..8f2b6cda03 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite_adapter.rb @@ -214,6 +214,10 @@ module ActiveRecord execute "DROP INDEX #{index_name}" end + + def rename_table(name, new_name) + move_table(name, new_name) + end def add_column(table_name, column_name, type, options = {}) #:nodoc: alter_table(table_name) do |definition| diff --git a/activerecord/test/migration_test.rb b/activerecord/test/migration_test.rb index cbcaff8cc4..317ac3720b 100644 --- a/activerecord/test/migration_test.rb +++ b/activerecord/test/migration_test.rb @@ -180,6 +180,25 @@ if ActiveRecord::Base.connection.supports_migrations? end + def test_rename_table + begin + ActiveRecord::Base.connection.create_table :octopuses do |t| + t.column :url, :string + end + ActiveRecord::Base.connection.rename_table :octopuses, :octopi + + assert_nothing_raised do + ActiveRecord::Base.connection.execute "INSERT INTO octopi (url) VALUES ('http://www.foreverflying.com/octopus-black7.jpg')" + end + + assert_equal 'http://www.foreverflying.com/octopus-black7.jpg', ActiveRecord::Base.connection.select_value("SELECT url FROM octopi WHERE id=1") + + ensure + ActiveRecord::Base.connection.drop_table :octopuses rescue nil + ActiveRecord::Base.connection.drop_table :octopi rescue nil + end + end + def test_change_column Person.connection.add_column "people", "bio", :string assert_nothing_raised { Person.connection.change_column "people", "bio", :text } |