One network trip for the deletion strategy
Make the deletion strategy faster by sending all the delete commands over the network in one go. In an application with 57 models this made cleaning an empty database 50% faster on average with PostgreSQL 9.1.
This commit is contained in:
parent
8e448beba5
commit
51527a0384
|
@ -3,51 +3,6 @@ require 'active_record/connection_adapters/abstract_adapter'
|
|||
require "database_cleaner/generic/truncation"
|
||||
require 'database_cleaner/active_record/base'
|
||||
require 'database_cleaner/active_record/truncation'
|
||||
# This file may seem to have duplication with that of truncation, but by keeping them separate
|
||||
# we avoiding loading this code when it is not being used (which is the common case).
|
||||
|
||||
module ActiveRecord
|
||||
module ConnectionAdapters
|
||||
|
||||
class MysqlAdapter < MYSQL_ADAPTER_PARENT
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)};")
|
||||
end
|
||||
end
|
||||
|
||||
class Mysql2Adapter < MYSQL2_ADAPTER_PARENT
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)};")
|
||||
end
|
||||
end
|
||||
|
||||
class JdbcAdapter < AbstractAdapter
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)};")
|
||||
end
|
||||
end
|
||||
|
||||
class PostgreSQLAdapter < POSTGRE_ADAPTER_PARENT
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)};")
|
||||
end
|
||||
end
|
||||
|
||||
class SQLServerAdapter < AbstractAdapter
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)};")
|
||||
end
|
||||
end
|
||||
|
||||
class OracleEnhancedAdapter < AbstractAdapter
|
||||
def delete_table(table_name)
|
||||
execute("DELETE FROM #{quote_table_name(table_name)}")
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
module DatabaseCleaner::ActiveRecord
|
||||
class Deletion < Truncation
|
||||
|
@ -55,9 +10,11 @@ module DatabaseCleaner::ActiveRecord
|
|||
def clean
|
||||
connection = connection_class.connection
|
||||
connection.disable_referential_integrity do
|
||||
tables_to_truncate(connection).each do |table_name|
|
||||
connection.delete_table table_name
|
||||
end
|
||||
sql = tables_to_truncate(connection).map do |table_name|
|
||||
"DELETE FROM #{connection.quote_table_name(table_name)}"
|
||||
end.join(";")
|
||||
|
||||
connection.execute sql
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue