aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2014-06-10 14:26:50 +0200
committerYves Senn <yves.senn@gmail.com>2014-06-26 22:03:48 +0200
commit402f303f1d938cf2c7781d7734c4ff8e6b874f35 (patch)
treed96eb08bab6f5fc63f9f8a9a7fe2086d24c9e7e4 /activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
parent69c711f38cac85e9c8bdbe286591bf88ef720bfa (diff)
downloadrails-402f303f1d938cf2c7781d7734c4ff8e6b874f35.tar.gz
rails-402f303f1d938cf2c7781d7734c4ff8e6b874f35.tar.bz2
rails-402f303f1d938cf2c7781d7734c4ff8e6b874f35.zip
fk: support dependent option (:delete, :nullify and :restrict).
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb14
1 files changed, 13 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
index 6ba226765c..9610296043 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -524,7 +524,19 @@ module ActiveRecord
create_table_info = select_one("SHOW CREATE TABLE #{quote_table_name(table_name)}")["Create Table"]
fk_info.map do |row|
- options = {column: row['column'], name: row['name'], primary_key: row['primary_key']}
+ options = {
+ column: row['column'],
+ name: row['name'],
+ primary_key: row['primary_key']
+ }
+
+ if create_table_info =~ /CONSTRAINT #{quote_column_name(row['name'])} FOREIGN KEY .* REFERENCES .* ON DELETE (CASCADE|SET NULL|RESTRICT)/
+ options[:dependent] = case $1
+ when 'CASCADE' then :delete
+ when 'SET NULL' then :nullify
+ end
+ end
+
ForeignKeyDefinition.new(table_name, row['to_table'], options)
end
end