class DbVcs::Adapters::Mysql

Public Class Methods

config() click to toggle source

@return [DbVcs::Adapters::Mysql::Config]

# File lib/db_vcs/adapters/mysql.rb, line 29
def config
  DbVcs.config.mysql_config
end
connection() click to toggle source

@return [Mysql2::Client]

# File lib/db_vcs/adapters/mysql.rb, line 34
def connection
  @connection ||=
    begin
      require "mysql2"
      Mysql2::Client.new(
        host: config.host,
        username: config.username,
        port: config.port,
        password: config.password
      )
    end
end
copy_database(to_db, from_db) click to toggle source

@param to_db [String] @param from_db [String] @return void

# File lib/db_vcs/adapters/mysql.rb, line 58
        def copy_database(to_db, from_db)
          create_opts =
            connection.query(<<~SQL).first
              SELECT `DEFAULT_CHARACTER_SET_NAME` as charset, `DEFAULT_COLLATION_NAME` as collation
              FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME` = '#{from_db}' LIMIT 1
            SQL
          connection.query(<<~SQL)
            CREATE DATABASE #{to_db} CHARACTER SET #{create_opts["charset"]} COLLATE #{create_opts["collation"]}
          SQL
          password_opt = config.password.to_s.strip.empty? ? "" : "-p#{config.password}"
          command =
            <<~SH
            #{config.mysqldump_path} -u #{config.username} #{password_opt} -h #{config.host} -P #{config.port} #{from_db} \
            | #{config.mysql_path} -u #{config.username} #{password_opt} -h #{config.host} -P #{config.port} #{to_db}
          SH
          `#{command}`
        end
create_database(db_name) click to toggle source

@param db_name [String] @return void

# File lib/db_vcs/adapters/mysql.rb, line 78
def create_database(db_name)
  connection.query("CREATE DATABASE #{db_name}")
end
db_exists?(db_name) click to toggle source

@param db_name [String] @return [Boolean]

# File lib/db_vcs/adapters/mysql.rb, line 49
def db_exists?(db_name)
  !connection
     .query("SELECT 1 as one FROM `INFORMATION_SCHEMA`.`SCHEMATA` WHERE `SCHEMA_NAME` = '#{db_name}' LIMIT 1")
     .first.nil?
end
drop_by_dbname(db_name) click to toggle source

@param db_name [String] @return [void]

# File lib/db_vcs/adapters/mysql.rb, line 89
def drop_by_dbname(db_name)
  connection.query("DROP DATABASE #{db_name}")
end
list_databases() click to toggle source

@return [Array<String>]

# File lib/db_vcs/adapters/mysql.rb, line 83
def list_databases
  connection.query("SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`").to_a.flat_map(&:values)
end