aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuillermo Iguaran <guilleiguaran@gmail.com>2017-06-16 20:54:27 -0500
committerGitHub <noreply@github.com>2017-06-16 20:54:27 -0500
commita3f758ab0ad7d65bf498980f875c8b3c71e347c0 (patch)
tree38769f798ed4f3a1b0e38d78d43b3ff0f946356a
parentf8f792fa4f7d393f1c00aaef44a76917ddb6c2fb (diff)
parent675a912eb86a9e109e9877379e8454b388242d57 (diff)
downloadrails-a3f758ab0ad7d65bf498980f875c8b3c71e347c0.tar.gz
rails-a3f758ab0ad7d65bf498980f875c8b3c71e347c0.tar.bz2
rails-a3f758ab0ad7d65bf498980f875c8b3c71e347c0.zip
Merge pull request #29455 from kirs/remove-column-with-fk-mysql
Remove FK together with column in MySQL
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb7
-rw-r--r--activerecord/test/cases/migration/references_foreign_key_test.rb10
2 files changed, 17 insertions, 0 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
index f9e1e046ea..fc57e41fc9 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql/schema_statements.rb
@@ -45,6 +45,13 @@ module ActiveRecord
indexes
end
+ def remove_column(table_name, column_name, type = nil, options = {})
+ if foreign_key_exists?(table_name, column: column_name)
+ remove_foreign_key(table_name, column: column_name)
+ end
+ super
+ end
+
def internal_string_options_for_primary_key
super.tap do |options|
if CHARSETS_OF_4BYTES_MAXLEN.include?(charset) && (mariadb? || version < "8.0.0")
diff --git a/activerecord/test/cases/migration/references_foreign_key_test.rb b/activerecord/test/cases/migration/references_foreign_key_test.rb
index f1ddac1ee2..718b9a0613 100644
--- a/activerecord/test/cases/migration/references_foreign_key_test.rb
+++ b/activerecord/test/cases/migration/references_foreign_key_test.rb
@@ -139,6 +139,16 @@ if ActiveRecord::Base.connection.supports_foreign_keys?
end
end
+ test "removing column removes foreign key" do
+ @connection.create_table :testings do |t|
+ t.references :testing_parent, index: true, foreign_key: true
+ end
+
+ assert_difference "@connection.foreign_keys('testings').size", -1 do
+ @connection.remove_column :testings, :testing_parent_id
+ end
+ end
+
test "foreign key methods respect pluralize_table_names" do
begin
original_pluralize_table_names = ActiveRecord::Base.pluralize_table_names