module Tennpipes::Generators::SqlHelpers

Public Class Methods

create_db(adapter, user, password, host, database, charset, collation) click to toggle source
# File lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb, line 6
def self.create_db(adapter, user, password, host, database, charset, collation)
  case adapter
    when 'postgres'
      environment = {}
      environment['PGPASSWORD'] = password unless password.blank?

      arguments = []
      arguments << "--encoding=#{charset}" if charset
      arguments << "--host=#{host}" if host
      arguments << "--username=#{user}" if user
      arguments << database

      Process.wait Process.spawn(environment, 'createdb', *arguments)
    when 'mysql', 'mysql2'
      environment = {}
      environment['MYSQL_PWD'] = password unless password.blank?

      arguments = []
      arguments << "--user=#{user}" if user
      arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host)

      arguments << '-e'
      arguments << "CREATE DATABASE #{database} DEFAULT CHARACTER SET #{charset} DEFAULT COLLATE #{collation}"

      Process.wait Process.spawn(environment, 'mysql', *arguments)
    when 'sqlite', 'sqlite3'
      fail "Database #{database} already exists" if File.file?(database)
      FileUtils.mkdir_p(File.dirname(database))
      File.open(database, 'a') {}
    else
      raise "Adapter #{adapter} not supported for creating databases yet."
  end
end
drop_db(adapter, user, password, host, database) click to toggle source
# File lib/tennpipes-init/tennpipes-tasks/sql-helpers.rb, line 40
def self.drop_db(adapter, user, password, host, database)
  case adapter
    when 'postgres'
      environment = {}
      environment['PGPASSWORD'] = password unless password.blank?

      arguments = []
      arguments << "--host=#{host}" if host
      arguments << "--username=#{user}" if user
      arguments << database

      Process.wait Process.spawn(environment, 'dropdb', *arguments)
    when 'mysql', 'mysql2'
      environment = {}
      environment['MYSQL_PWD'] = password unless password.blank?

      arguments = []
      arguments << "--user=#{user}" if user
      arguments << "--host=#{host}" unless %w[127.0.0.1 localhost].include?(host)

      arguments << '-e'
      arguments << "DROP DATABASE IF EXISTS #{database}"

      Process.wait Process.spawn(environment, 'mysql', *arguments)
    when 'sqlite', 'sqlite3'
      File.delete(database) if File.file?(database)
    else
      raise "Adapter #{adapter} not supported for dropping databases yet."
  end
end