aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2014-06-11 08:47:53 +0200
committerYves Senn <yves.senn@gmail.com>2014-06-26 22:03:49 +0200
commitacd0287dc18a3fbba6fa4301cb31a7aecd22922b (patch)
tree7ed2f4dc1d3b9d21772f638f390b876e62512f49 /activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
parent6955d864ceb0ba994ef4fb4c5e866463f247944b (diff)
downloadrails-acd0287dc18a3fbba6fa4301cb31a7aecd22922b.tar.gz
rails-acd0287dc18a3fbba6fa4301cb31a7aecd22922b.tar.bz2
rails-acd0287dc18a3fbba6fa4301cb31a7aecd22922b.zip
fk: support for on_update
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb19
1 files changed, 12 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
index bf87395ef1..7ffbe4434f 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rb
@@ -450,7 +450,7 @@ module ActiveRecord
def foreign_keys(table_name)
fk_info = select_all <<-SQL
-SELECT t2.relname AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confdeltype AS dependency
+SELECT t2.relname AS to_table, a1.attname AS column, a2.attname AS primary_key, c.conname AS name, c.confupdtype AS on_update, c.confdeltype AS on_delete
FROM pg_constraint c
JOIN pg_class t1 ON c.conrelid = t1.oid
JOIN pg_class t2 ON c.confrelid = t2.oid
@@ -470,12 +470,17 @@ ORDER BY c.conname
primary_key: row['primary_key']
}
- options[:on_delete] = case row['dependency']
- when 'c'; :cascade
- when 'n'; :nullify
- when 'r'; :restrict
- end
- ForeignKeyDefinition.new(table_name, row["to_table"], options)
+ options[:on_delete] = extract_foreign_key_action(row['on_delete'])
+ options[:on_update] = extract_foreign_key_action(row['on_update'])
+ ForeignKeyDefinition.new(table_name, row['to_table'], options)
+ end
+ end
+
+ def extract_foreign_key_action(specifier) # :nodoc:
+ case specifier
+ when 'c'; :cascade
+ when 'n'; :nullify
+ when 'r'; :restrict
end
end