class TestProf::AnyFixture::Dump::Subscriber

def commit

def commit
  return unless defined?(:@file)
  file.close
  FileUtils.mv(tmp_path, path)
end

def file

def file
  @file ||= File.open(tmp_path, "w")
end

def finish(_event, _id, payload)

def finish(_event, _id, payload)
  sql = payload.fetch(:sql)
  return unless trackable_sql?(sql)
  sql = payload[:binds].any? ? adapter.compile_sql(sql, quoted(payload[:binds])) : +sql
  sql.tr!("\n", " ")
  file.write(sql + ";\n")
end

def initialize(path, adapter)

def initialize(path, adapter)
  @path = path
  @adapter = adapter
  @tmp_path = path + ".tmp"
  @reset_pk = Set.new
end

def quoted(val)

def quoted(val)
  if val.is_a?(Array)
    val.map { |v| quoted(v) }
  elsif val.is_a?(ActiveModel::Attribute)
    quoted(val.value_for_database)
  else
    ActiveRecord::Base.connection.quote(val)
  end
end

def reset_pk!(table_name)

def reset_pk!(table_name)
  return if /sqlite_sequence/.match?(table_name)
  return if reset_pk.include?(table_name)
  adapter.reset_sequence!(table_name, AnyFixture.config.dump_sequence_random_start)
  reset_pk << table_name
end

def start(_event, _id, payload)

def start(_event, _id, payload)
  sql = payload.fetch(:sql)
  return if sql.match?(ANY_FIXTURE_IGNORE_RXP)
  matches = sql.match(MODIFY_RXP)
  return unless matches
  reset_pk!(matches[2]) if /insert/i.match?(matches[1])
end

def trackable_sql?(sql)

def trackable_sql?(sql)
  return false if sql.match?(ANY_FIXTURE_IGNORE_RXP)
  sql.match?(MODIFY_RXP) || sql.match?(ANY_FIXTURE_RXP) || sql.match?(AnyFixture.config.dump_matching_queries)
end