From 0938d5305758dfcbec4e813c777bb627e82a5906 Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Wed, 11 Jun 2014 11:35:26 +0200 Subject: fk: dump foreign keys at the bottom to make sure tables exist. --- activerecord/lib/active_record/schema_dumper.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/schema_dumper.rb b/activerecord/lib/active_record/schema_dumper.rb index 9b46f7751b..84ce725409 100644 --- a/activerecord/lib/active_record/schema_dumper.rb +++ b/activerecord/lib/active_record/schema_dumper.rb @@ -91,7 +91,8 @@ HEADER end def tables(stream) - @connection.tables.sort.each do |tbl| + sorted_tables = @connection.tables.sort + sorted_tables.each do |tbl| next if ['schema_migrations', ignore_tables].flatten.any? do |ignored| case ignored when String; remove_prefix_and_suffix(tbl) == ignored @@ -102,6 +103,13 @@ HEADER end table(tbl, stream) end + + # dump foreign keys at the end to make sure all dependent tables exist. + if @connection.supports_foreign_keys? + sorted_tables.each do |tbl| + foreign_keys(tbl, stream) + end + end end def table(table, stream) @@ -171,8 +179,6 @@ HEADER indexes(table, tbl) - foreign_keys(table, tbl) - tbl.rewind stream.print tbl.read rescue => e @@ -215,8 +221,6 @@ HEADER end def foreign_keys(table, stream) - return unless @connection.supports_foreign_keys? - if (foreign_keys = @connection.foreign_keys(table)).any? add_foreign_key_statements = foreign_keys.map do |foreign_key| parts = [ @@ -233,7 +237,6 @@ HEADER end stream.puts add_foreign_key_statements.sort.join("\n") - stream.puts end end -- cgit v1.2.3