/usr/lib/ruby/vendor_ruby/database_cleaner/sequel/truncation.rb is in ruby-database-cleaner 1.5.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | require 'database_cleaner/generic/truncation'
require 'database_cleaner/sequel/base'
module DatabaseCleaner
module Sequel
class Truncation
include ::DatabaseCleaner::Sequel::Base
include ::DatabaseCleaner::Generic::Truncation
def start
@last_txid = txid
end
def clean
return unless dirty?
case db.database_type
when :postgres
# PostgreSQL requires all tables with FKs to be truncates in the same command, or have the CASCADE keyword
# appended. Bulk truncation without CASCADE is:
# * Safer. Tables outside of tables_to_truncate won't be affected.
# * Faster. Less roundtrips to the db.
unless (tables = tables_to_truncate(db)).empty?
all_tables = tables.map { |t| %("#{t}") }.join(',')
db.run "TRUNCATE TABLE #{all_tables};"
end
else
tables = tables_to_truncate(db)
if pre_count?
# Count rows before truncating
pre_count_truncate_tables(db, tables)
else
# Truncate each table normally
truncate_tables(db, tables)
end
end
end
private
def pre_count_truncate_tables(db, tables)
tables = tables.reject { |table| db[table.to_sym].count == 0 }
truncate_tables(db, tables)
end
def truncate_tables(db, tables)
tables.each do |table|
db[table.to_sym].truncate
end
end
def dirty?
@last_txid != txid || @last_txid.nil?
end
def txid
case db.database_type
when :postgres
db.fetch('SELECT txid_snapshot_xmax(txid_current_snapshot()) AS txid').first[:txid]
end
end
def tables_to_truncate(db)
(@only || db.tables.map(&:to_s)) - @tables_to_exclude
end
# overwritten
def migration_storage_names
%w(schema_info schema_migrations)
end
def pre_count?
@pre_count == true
end
end
end
end
|