module DatabaseCleaner::ActiveRecord::SelectiveTruncation
Public Instance Methods
information_schema_exists?(connection)
click to toggle source
# File lib/database_cleaner/active_record/deletion.rb, line 80 def information_schema_exists? connection return false unless connection.is_a? ActiveRecord::ConnectionAdapters::Mysql2Adapter @information_schema_exists ||= begin connection.execute("SELECT 1 FROM information_schema.tables") true rescue false end end
table_stats_query(connection, db_name)
click to toggle source
# File lib/database_cleaner/active_record/deletion.rb, line 65 def table_stats_query(connection, db_name) if @cache_tables && !@table_stats_query.nil? return @table_stats_query else @table_stats_query = connection.select_values(" SELECT CONCAT('SELECT \"', table_name, '\" AS table_name, COUNT(*) AS exact_row_count FROM ', table_name) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = '#{db_name}' AND table_name <> '#{::DatabaseCleaner::ActiveRecord::Base.migration_table_name}'; ").join(' UNION ') end end
tables_to_truncate(connection)
click to toggle source
Calls superclass method
# File lib/database_cleaner/active_record/deletion.rb, line 47 def tables_to_truncate(connection) if information_schema_exists?(connection) (@only || tables_with_new_rows(connection)) - @tables_to_exclude else super end end
tables_with_new_rows(connection)
click to toggle source
# File lib/database_cleaner/active_record/deletion.rb, line 55 def tables_with_new_rows(connection) @db_name ||= connection.instance_variable_get('@config')[:database] stats = table_stats_query(connection, @db_name) if stats != '' connection.exec_query(stats).inject([]) {|all, stat| all << stat['table_name'] if stat['exact_row_count'] > 0; all } else [] end end