Sha256: fa9177f5f859258deae027d433832c07c710e3e21b646124161341f0f669bbcc

Contents?: true

Size: 1.93 KB

Versions: 2

Compression:

Stored size: 1.93 KB

Contents

module Lotus
  module Model
    module Migrator
      # MySQL adapter
      #
      # @since 0.4.0
      # @api private
      class MySQLAdapter < Adapter
        # @since 0.4.0
        # @api private
        def create
          new_connection(global: true).run %(CREATE DATABASE #{ database };)
        rescue Sequel::DatabaseError => e
          message = if e.message.match(/database exists/)
            "Database creation failed. There is 1 other session using the database"
          else
            e.message
          end

          raise MigrationError.new(message)
        end

        # @since 0.4.0
        # @api private
        def drop
          new_connection(global: true).run %(DROP DATABASE #{ database };)
        rescue Sequel::DatabaseError => e
          message = if e.message.match(/doesn\'t exist/)
            "Cannot find database: #{ database }"
          else
            e.message
          end

          raise MigrationError.new(message)
        end

        # @since 0.4.0
        # @api private
        def dump
          dump_structure
          dump_migrations_data
        end

        # @since 0.4.0
        # @api private
        def load
          load_structure
        end

        private

        # @since 0.4.0
        # @api private
        def dump_structure
          system "mysqldump --user=#{ username } --password=#{ password } --no-data --skip-comments --ignore-table=#{ database }.#{ migrations_table } #{ database } > #{ schema }"
        end

        # @since 0.4.0
        # @api private
        def load_structure
          system "mysql --user=#{ username } --password=#{ password } #{ database } < #{ escape(schema) }" if schema.exist?
        end

        # @since 0.4.0
        # @api private
        def dump_migrations_data
          system "mysqldump --user=#{ username } --password=#{ password } --skip-comments #{ database } #{ migrations_table } >> #{ schema }"
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lotus-model-0.5.2 lib/lotus/model/migrator/mysql_adapter.rb
lotus-model-0.5.1 lib/lotus/model/migrator/mysql_adapter.rb