Sha256: aeef4c7d00b96593d5ee039c74f27c6472ea2827661311995da13d229c936714

Contents?: true

Size: 1.78 KB

Versions: 2

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

require 'avm/instances/data/unit'

module Avm
  module EacPostgresqlBase0
    class Instance
      class DataUnit < ::Avm::Instances::Data::Unit
        EXTENSION = '.pgdump.gz'
        SCHEMA_VAR = '%%SCHEMA%%'
        TABLE_PARTS_SEPARATOR = '/'
        TABLES_SQL = "select schemaname || '#{TABLE_PARTS_SEPARATOR}' || tablename from " \
          "pg_tables where schemaname = '#{SCHEMA_VAR}'"

        before_load :clear

        def clear
          info 'Clearing database (Dropping all tables)...'
          ts = tables
          if ts.empty?
            info 'Database has no tables'
          else
            info "Removing #{ts.count} table(s)..."
            run_sql(drop_tables_sql(ts))
          end
        end

        def dump_command
          instance.dump_gzip_command
        end

        def load_command
          instance.load_gzip_command
        end

        private

        # @param table_list [Array<String>]
        # @return [String]
        def drop_tables_sql(table_list)
          'drop table ' + table_list.map(&:to_s).join(', ') + ' cascade'
        end

        # @param parts [Array<String>, Strings]
        # @return [String]
        def join_table_parts(parts)
          parts = parts.to_s.split(TABLE_PARTS_SEPARATOR) unless parts.is_a?(::Enumerable)
          parts.map { |p| "\"#{p}\"" }.join('.')
        end

        def run_sql(sql)
          instance.psql_command_command(sql).execute!
        end

        # @return [Array<String>]
        def tables
          run_sql(tables_sql).each_line.map(&:strip).reject(&:blank?)
                             .map { |line| join_table_parts(line) }
        end

        # @return [String]
        def tables_sql
          TABLES_SQL.gsub(SCHEMA_VAR, instance.schema)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
avm-eac_postgresql_base0-0.4.0 lib/avm/eac_postgresql_base0/instance/data_unit.rb
eac_tools-0.63.0 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/data_unit.rb