From 42fd35a463480f2c2a8d4c68ab4124cad80a1dcb Mon Sep 17 00:00:00 2001 From: estepnv Date: Tue, 20 Aug 2024 13:13:20 +0300 Subject: [PATCH] Update deletion.rb Only send a single query for all deletion alterations --- .../active_record/deletion.rb | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/lib/database_cleaner/active_record/deletion.rb b/lib/database_cleaner/active_record/deletion.rb index ad28212..173f7a2 100644 --- a/lib/database_cleaner/active_record/deletion.rb +++ b/lib/database_cleaner/active_record/deletion.rb @@ -14,24 +14,29 @@ def clean private def delete_tables(connection, table_names) + statements = [] + table_names.each do |table_name| - delete_table(connection, table_name) - reset_id_sequence(connection, table_name) if @reset_ids + statements << delete_table_sql(connection, table_name) + statements << reset_id_sequence_sql(connection, table_name) if @reset_ids end + + connection.execute(statements.join) end - def delete_table connection, table_name - connection.execute("DELETE FROM #{connection.quote_table_name(table_name)} WHERE 1=1") + def delete_table_sql connection, table_name + "DELETE FROM #{connection.quote_table_name(table_name)};" end - def reset_id_sequence connection, table_name + def reset_id_sequence_sql connection, table_name case connection.adapter_name - when 'Mysql2', 'Trilogy' - connection.execute("ALTER TABLE #{table_name} AUTO_INCREMENT = 1;") - when 'SQLite' - connection.execute("delete from sqlite_sequence where name='#{table_name}';") - when 'PostgreSQL' - connection.reset_pk_sequence!(table_name) + when "Mysql2", "Trilogy" + "ALTER TABLE #{table_name} AUTO_INCREMENT = 1;" + when "SQLite" + "delete from sqlite_sequence where name='#{table_name}';" + when "PostgreSQL" + _, sequence_name = pk_and_sequence_for(table) + "ALTER SEQUENCE #{sequence_name} RESTART WITH 1;" else raise "reset_id option not supported for #{connection.adapter_name}" end