36 lines
1.2 KiB
Ruby
36 lines
1.2 KiB
Ruby
# Copyright (c) 2010-2011, Diaspora Inc. This file is
|
|
# licensed under the Affero General Public License version 3 or later. See
|
|
# the COPYRIGHT file.
|
|
|
|
# disable_referential_integrity doesn't work when using PostgreSQL
|
|
# with a non-root user.
|
|
# See http://kopongo.com/2008/7/25/postgres-ri_constrainttrigger-error
|
|
module ActiveRecord
|
|
module ConnectionAdapters
|
|
class PostgreSQLAdapter < AbstractAdapter
|
|
def disable_referential_integrity(&block)
|
|
transaction {
|
|
begin
|
|
execute "SET CONSTRAINTS ALL DEFERRED"
|
|
yield
|
|
ensure
|
|
execute "SET CONSTRAINTS ALL IMMEDIATE"
|
|
end
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
DatabaseCleaner::ActiveRecord::Truncation.class_eval do
|
|
# You could argue that this technically isn't truncation. You'd be right.
|
|
# But something in the MySQL adapter segfaults (!) on actual truncation, and we
|
|
# don't have that much data in our tests, so a DELETE is not appreciably slower.
|
|
def clean
|
|
connection.disable_referential_integrity do
|
|
tables_to_truncate.each do |table_name|
|
|
connection.execute("DELETE FROM #{table_name};")
|
|
end
|
|
end
|
|
end
|
|
end
|