diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-03-08 10:35:16 -0300 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-03-08 10:35:16 -0300 |
commit | ba6b3c165f121d080fe59cf227c9823e0bebc186 (patch) | |
tree | bcd857b3ea176f4ee20f90ce377d7a5a71389eef | |
parent | 22f31214a01eb5ad39adf18ca3f7c53ae100f971 (diff) | |
parent | b6226c3cfb0344e8973c92bddf8276ff1d26cd08 (diff) | |
download | rails-ba6b3c165f121d080fe59cf227c9823e0bebc186.tar.gz rails-ba6b3c165f121d080fe59cf227c9823e0bebc186.tar.bz2 rails-ba6b3c165f121d080fe59cf227c9823e0bebc186.zip |
Merge pull request #8868 from tehgeekmeister/master
Use the index name explicitly provided in a migration when reverting.
Fixes #8868
Conflicts:
activerecord/CHANGELOG.md
-rw-r--r-- | activerecord/CHANGELOG.md | 11 | ||||
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/migration_test.rb | 16 |
3 files changed, 33 insertions, 0 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 4916ff4523..2db3c0cdee 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,16 @@ ## Rails 4.0.0 (unreleased) ## +* When `:name` option is provided to `remove_index`, use it if there is no + index by the conventional name. + + For example, previously if an index was removed like so + `remove_index :values, column: :value, name: 'a_different_name'` + the generated SQL would not contain the specified index name, + and hence the migration would fail. + Fixes #8858. + + *Ezekiel Smithburg* + * Created block to by-pass the prepared statement bindings. This will allow to compose fragments of large SQL statements to avoid multiple round-trips between Ruby and the DB. 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 5b8de184fe..9d624a6648 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -687,6 +687,12 @@ module ActiveRecord index_name = index_name(table_name, options) unless index_name_exists?(table_name, index_name, true) + if options.has_key? :name + options_without_column = options.dup + options_without_column.delete :column + index_name_without_column = index_name(table_name, options_without_column) + return index_name_without_column if index_name_exists?(table_name, index_name_without_column, false) + end raise ArgumentError, "Index name '#{index_name}' on table '#{table_name}' does not exist" end diff --git a/activerecord/test/cases/migration_test.rb b/activerecord/test/cases/migration_test.rb index 960d28fcf5..6f90500189 100644 --- a/activerecord/test/cases/migration_test.rb +++ b/activerecord/test/cases/migration_test.rb @@ -462,6 +462,22 @@ class ReservedWordsMigrationTest < ActiveRecord::TestCase end end +class ExplicitlyNamedIndexMigrationTest < ActiveRecord::TestCase + def test_drop_index_by_name + connection = Person.connection + connection.create_table :values, force: true do |t| + t.integer :value + end + + assert_nothing_raised ArgumentError do + connection.add_index :values, :value, name: 'a_different_name' + connection.remove_index :values, column: :value, name: 'a_different_name' + end + + connection.drop_table :values rescue nil + end +end + if ActiveRecord::Base.connection.supports_bulk_alter? class BulkAlterTableMigrationsTest < ActiveRecord::TestCase def setup |