From 7042fe2f8428b713894601a9bc9bdcdbcdbfb37b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Fri, 2 Nov 2012 19:51:06 -0200 Subject: [PATCH] Deprecate passing a string as third argument of `add_index` This was there due historical reasons since 7dc45818dc43c163700efc9896a0f3feafa31138 to give the user the possibility to create unique indexes passing "UNIQUE" as the third argument --- activerecord/CHANGELOG.md | 7 +++++++ .../connection_adapters/abstract/schema_statements.rb | 6 ++++++ activerecord/test/cases/migration/index_test.rb | 10 ++++++++++ 3 files changed, 23 insertions(+) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index da149dac54..28d8b066e0 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,12 @@ ## Rails 4.0.0 (unreleased) ## +* Deprecate the possibility to pass a string as third argument of `add_index`. + Pass `unique: true` instead. + + add_index(:users, :organization_id, unique: true) + + *Rafael Mendonça França* + * Raise an `ArgumentError` when passing an invalid option to `add_index`. *Rafael Mendonça França* 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 a606a5c775..2d7ec55d3e 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -629,6 +629,12 @@ module ActiveRecord index_options = options[:where] ? " WHERE #{options[:where]}" : "" end else + message = "Passing a string as third argument of `add_index` is deprecated and will" + + " be removed in Rails 4.1." + + " Use add_index(#{table_name.inspect}, #{column_name.inspect}, unique: true) instead" + + ActiveSupport::Deprecation.warn message + index_type = options end diff --git a/activerecord/test/cases/migration/index_test.rb b/activerecord/test/cases/migration/index_test.rb index bfa275fee2..0787414d8f 100644 --- a/activerecord/test/cases/migration/index_test.rb +++ b/activerecord/test/cases/migration/index_test.rb @@ -97,6 +97,16 @@ module ActiveRecord end end + def test_deprecated_type_argument + message = "Passing a string as third argument of `add_index` is deprecated and will" + + " be removed in Rails 4.1." + + " Use add_index(:testings, [:foo, :bar], unique: true) instead" + + assert_deprecated message do + connection.add_index :testings, [:foo, :bar], "UNIQUE" + end + end + def test_unique_index_exists connection.add_index :testings, :foo, :unique => true