From b0f54488a4a9b56d9510be53f713bdb88275570b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20B=C3=BChmann?= Date: Thu, 22 Feb 2018 13:29:27 +0100 Subject: [PATCH] Don't disable referential integrity for the same table twice --- .../connection_adapters/sqlserver_adapter.rb | 2 +- test/cases/adapter_test_sqlserver.rb | 5 +++++ test/schema/sqlserver_specific_schema.rb | 10 +++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/active_record/connection_adapters/sqlserver_adapter.rb b/lib/active_record/connection_adapters/sqlserver_adapter.rb index 6dbed485e..82f32a690 100644 --- a/lib/active_record/connection_adapters/sqlserver_adapter.rb +++ b/lib/active_record/connection_adapters/sqlserver_adapter.rb @@ -189,7 +189,7 @@ def reset! def tables_with_referential_integrity schemas_and_tables = select_rows <<-SQL.strip_heredoc - SELECT s.name, o.name + SELECT DISTINCT s.name, o.name FROM sys.foreign_keys i INNER JOIN sys.objects o ON i.parent_object_id = o.OBJECT_ID INNER JOIN sys.schemas s ON o.schema_id = s.schema_id diff --git a/test/cases/adapter_test_sqlserver.rb b/test/cases/adapter_test_sqlserver.rb index 1b7b46635..16cb96b97 100644 --- a/test/cases/adapter_test_sqlserver.rb +++ b/test/cases/adapter_test_sqlserver.rb @@ -231,6 +231,11 @@ class AdapterTestSQLServer < ActiveRecord::TestCase end end + it 'not disable referential integrity for the same table twice' do + tables = SSTestHasPk.connection.tables_with_referential_integrity + assert_equal tables.size, tables.uniq.size + end + end describe 'database statements' do diff --git a/test/schema/sqlserver_specific_schema.rb b/test/schema/sqlserver_specific_schema.rb index 52329387f..00fef941e 100644 --- a/test/schema/sqlserver_specific_schema.rb +++ b/test/schema/sqlserver_specific_schema.rb @@ -144,12 +144,20 @@ # Constraints - create_table(:sst_has_fks, force: true) { |t| t.column(:fk_id, :bigint, null: false) } + create_table(:sst_has_fks, force: true) do |t| + t.column(:fk_id, :bigint, null: false) + t.column(:fk_id2, :bigint) + end + create_table(:sst_has_pks, force: true) { } execute <<-ADDFKSQL ALTER TABLE sst_has_fks ADD CONSTRAINT FK__sst_has_fks_id FOREIGN KEY ([fk_id]) + REFERENCES [sst_has_pks] ([id]), + + CONSTRAINT FK__sst_has_fks_id2 + FOREIGN KEY ([fk_id2]) REFERENCES [sst_has_pks] ([id]) ADDFKSQL