Sha256: 9fc6905c5e182c0ccb2fef7462589d9a72cc380d6bd861b9ee503c7e84a13ee9

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 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}'"

        def do_clear
          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.pg.dump_gzip_command
        end

        def load_command
          instance.pg.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.pg.psql_command_command(sql).execute!
        end

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

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

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
avm-eac_postgresql_base0-0.5.3 lib/avm/eac_postgresql_base0/instance/data_unit.rb
eac_tools-0.86.3 sub/avm-eac_postgresql_base0/lib/avm/eac_postgresql_base0/instance/data_unit.rb