@@ -35,7 +35,7 @@ def check_all_foreign_keys_valid!
3535
3636 def disable_referential_integrity
3737 foreign_keys = all_foreign_keys
38- dropped_fks = foreign_keys . size
38+ dropped_fks = foreign_keys
3939
4040 statements = foreign_keys . map do |foreign_key |
4141 # We do not use the `#remove_foreign_key` method here because it
@@ -70,18 +70,23 @@ def disable_referential_integrity
7070 # for every key. This method is performance critical for the test suite, hence
7171 # we use the `#all_foreign_keys` method that only make one query to the database.
7272 already_inserted_foreign_keys = all_foreign_keys
73+ new_fks = [ ]
7374 statements = foreign_keys . map do |foreign_key |
7475 next if already_inserted_foreign_keys . any? { |fk | fk . from_table == foreign_key . from_table && fk . options [ :name ] == foreign_key . options [ :name ] }
7576
7677 options = foreign_key_options ( foreign_key . from_table , foreign_key . to_table , foreign_key . options )
7778 at = create_alter_table foreign_key . from_table
7879 at . add_foreign_key foreign_key . to_table , options
7980
81+ new_fks << foreign_key
8082 schema_creation . accept ( at )
8183 end
8284 execute_batch ( statements . compact , "Disable referential integrity -> add foreign keys" )
83- new_fks = statements . compact . size
84- STDOUT . puts "FK DIFF: #{ new_fks - dropped_fks } "
85+
86+ new_fks = new_fks . map { _1 . from_table + " -> " + _1 . to_table + ( _1 . options [ :name ] ? " (#{ _1 . options [ :name ] } )" : "" ) }
87+ dropped_fks = dropped_fks . map { _1 . from_table + " -> " + _1 . to_table + ( _1 . options [ :name ] ? " (#{ _1 . options [ :name ] } )" : "" ) }
88+ STDOUT . puts "FK DIFF NEW:\n " , ( new_fks - dropped_fks ) . map { "\t #{ _1 } " } if ( new_fks - dropped_fks ) . any?
89+ STDOUT . puts "FK DIFF OLD:\n " , ( dropped_fks - new_fks ) . map { "\t #{ _1 } " } if ( dropped_fks - new_fks ) . any?
8590 ensure
8691 ActiveRecord ::Base . table_name_prefix = old_prefix
8792 ActiveRecord ::Base . table_name_suffix = old_suffix
0 commit comments