IlluminusLimited/pgdice

View on GitHub
lib/pgdice/partition_dropper.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

# Entry point for TableDropperHelper
module PgDice
  # Simple class used to provide a mechanism that users can hook into if they want to override this
  # default behavior for dropping a table.
  class PartitionDropper
    attr_reader :logger, :query_executor

    def initialize(logger:, query_executor:)
      @logger = logger
      @query_executor = query_executor
    end

    def call(old_partitions)
      logger.info { "Partitions to be deleted are: #{old_partitions}" }

      query_executor.call(generate_drop_sql(old_partitions))

      old_partitions
    end

    private

    def generate_drop_sql(old_partitions)
      return if old_partitions.size.zero?

      sql_query = old_partitions.reduce("BEGIN;\n") do |sql, table_name|
        sql + "DROP TABLE IF EXISTS #{table_name} CASCADE;\n"
      end
      "#{sql_query}COMMIT;"
    end
  end
end