aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.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/schema_creation.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/schema_creation.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb13
1 files changed, 12 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb
index ad62eab4d2..57790d5667 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb
@@ -19,11 +19,13 @@ module ActiveRecord
end
def visit_AddForeignKey(o)
- <<-SQL
+ sql = <<-SQL
ADD CONSTRAINT #{quote_column_name(o.name)}
FOREIGN KEY (#{quote_column_name(o.column)})
REFERENCES #{quote_table_name(o.to_table)} (#{quote_column_name(o.primary_key)})
SQL
+ sql << " #{dependency_sql(o.dependent)}" if o.dependent
+ sql
end
def visit_DropForeignKey(name)
@@ -98,6 +100,15 @@ FOREIGN KEY (#{quote_column_name(o.column)})
def options_include_default?(options)
options.include?(:default) && !(options[:null] == false && options[:default].nil?)
end
+
+ def dependency_sql(dependency)
+ case dependency
+ when :nullify then "ON DELETE SET NULL"
+ when :delete then "ON DELETE CASCADE"
+ when :restrict then "ON DELETE RESTRICT"
+ else ""
+ end
+ end
end
end
end