aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-12-19 02:56:19 -0800
committerCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-12-19 02:56:19 -0800
commite36f9efd9bb6978b0da6426ab42480071243487c (patch)
tree196c5f1ef8fed94026a81fad912249603d3e3666 /activerecord
parentb2048305b19b2f8d5089e1df3bd913e2c06b3bd9 (diff)
parentd01f913f8d21230b387c70d13b5646a838ba2915 (diff)
downloadrails-e36f9efd9bb6978b0da6426ab42480071243487c.tar.gz
rails-e36f9efd9bb6978b0da6426ab42480071243487c.tar.bz2
rails-e36f9efd9bb6978b0da6426ab42480071243487c.zip
Merge pull request #8522 from senny/3489_index_names_on_copy
Leep index names when using `alter_table` with sqlite3. Closes #3489
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/CHANGELOG.md5
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb3
-rw-r--r--activerecord/test/cases/migration/rename_column_test.rb10
3 files changed, 16 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 25a02d76a4..6c37a193cc 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 4.0.0 (unreleased) ##
+* Keep index names when using `alter_table` with sqlite3.
+ Fix #3489
+
+ *Yves Senn*
+
* Add ability for postgresql adapter to disable user triggers in disable_referential_integrity.
Fix #5523
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
index b89e9a01a8..8aa5707959 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -537,7 +537,6 @@ module ActiveRecord
end
yield @definition if block_given?
end
-
copy_table_indexes(from, to, options[:rename] || {})
copy_table_contents(from, to,
@definition.columns.map {|column| column.name},
@@ -560,7 +559,7 @@ module ActiveRecord
unless columns.empty?
# index name can't be the same
- opts = { :name => name.gsub(/_(#{from})_/, "_#{to}_") }
+ opts = { name: name.gsub(/(^|_)(#{from})_/, "\\1#{to}_") }
opts[:unique] = true if index.unique
add_index(to, columns, opts)
end
diff --git a/activerecord/test/cases/migration/rename_column_test.rb b/activerecord/test/cases/migration/rename_column_test.rb
index d1a85ee5e4..318d61263a 100644
--- a/activerecord/test/cases/migration/rename_column_test.rb
+++ b/activerecord/test/cases/migration/rename_column_test.rb
@@ -173,6 +173,16 @@ module ActiveRecord
refute TestModel.new.administrator?
end
+ def test_change_column_with_custom_index_name
+ add_column "test_models", "category", :string
+ add_index :test_models, :category, name: 'test_models_categories_idx'
+
+ assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
+ change_column "test_models", "category", :string, null: false, default: 'article'
+
+ assert_equal ['test_models_categories_idx'], connection.indexes('test_models').map(&:name)
+ end
+
def test_change_column_default
add_column "test_models", "first_name", :string
connection.change_column_default "test_models", "first_name", "Tester"