aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
diff options
context:
space:
mode:
authorRafael Mendonça França <rafaelmfranca@gmail.com>2017-01-03 22:11:16 -0500
committerRafael Mendonça França <rafaelmfranca@gmail.com>2017-01-03 22:11:16 -0500
commit127509c071b4f983f2beafc8766e990670a21215 (patch)
treed8804c1343af0a30cb26d72c8d06150fbfd30b16 /activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
parentb6ffb5efcb694a9302453b8d2081f02090a90c62 (diff)
downloadrails-127509c071b4f983f2beafc8766e990670a21215.tar.gz
rails-127509c071b4f983f2beafc8766e990670a21215.tar.bz2
rails-127509c071b4f983f2beafc8766e990670a21215.zip
Revert "Merge pull request #21233 from mtsmfm/disable-referential-integrity-without-superuser-privileges"
This reverts commit eeac6151a55cb7d5f799e1ae33aa64a839cbc3aa, reversing changes made to 5c40239d3104543e70508360d27584a3e4dc5baf. Reason: Broke the isolated tests. https://travis-ci.org/rails/rails/builds/188721346
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb47
1 files changed, 4 insertions, 43 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb b/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
index 730e7c7137..44a7338bf5 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/referential_integrity.rb
@@ -6,50 +6,8 @@ module ActiveRecord
true
end
- def disable_referential_integrity(&block) # :nodoc:
+ def disable_referential_integrity # :nodoc:
if supports_disable_referential_integrity?
- if supports_alter_constraint?
- disable_referential_integrity_with_alter_constraint(&block)
- else
- disable_referential_integrity_with_disable_trigger(&block)
- end
- else
- yield
- end
- end
-
- private
-
- def disable_referential_integrity_with_alter_constraint
- tables_constraints = execute(<<-SQL).values
- SELECT table_name, constraint_name
- FROM information_schema.table_constraints
- WHERE constraint_type = 'FOREIGN KEY'
- AND is_deferrable = 'NO'
- SQL
-
- execute(
- tables_constraints.collect { |table, constraint|
- "ALTER TABLE #{quote_table_name(table)} ALTER CONSTRAINT #{constraint} DEFERRABLE"
- }.join(";")
- )
-
- begin
- transaction do
- execute("SET CONSTRAINTS ALL DEFERRED")
-
- yield
- end
- ensure
- execute(
- tables_constraints.collect { |table, constraint|
- "ALTER TABLE #{quote_table_name(table)} ALTER CONSTRAINT #{constraint} NOT DEFERRABLE"
- }.join(";")
- )
- end
- end
-
- def disable_referential_integrity_with_disable_trigger
original_exception = nil
begin
@@ -81,7 +39,10 @@ Rails needs superuser privileges to disable referential integrity.
end
rescue ActiveRecord::ActiveRecordError
end
+ else
+ yield
end
+ end
end
end
end