# frozen_string_literal: true

# The following magic allows to drop a PG database even if a connection exists
# @see https://stackoverflow.com/a/38710021
class ActiveRecord::Tasks::PostgreSQLDatabaseTasks
  include ActiveRecord::Sanitization::ClassMethods

  def drop
    establish_master_connection
    q = sanitize_sql_array [
      "select pg_terminate_backend(pg_stat_activity.pid) from pg_stat_activity where datname= ? AND state='idle';",
      configuration_hash[:database]
    ]
    connection.select_all q
    connection.drop_database configuration_hash[:database]
  end
end