Methods
F
N
S
Class Public methods
new(app)
# File railties/lib/rails/commands/dbconsole.rb, line 18
def initialize(app)
  @app = app
end
start(app)
# File railties/lib/rails/commands/dbconsole.rb, line 14
def self.start(app)
  new(app).start
end
Instance Public methods
find_cmd(*commands)
# File railties/lib/rails/commands/dbconsole.rb, line 49
def find_cmd(*commands)
  dirs_on_path = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
  commands += commands.map{|cmd| "#{cmd}.exe"} if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/

  full_path_command = nil
  found = commands.detect do |cmd|
    dir = dirs_on_path.detect do |path|
      full_path_command = File.join(path, cmd)
      File.executable? full_path_command
    end
  end
  found ? full_path_command : abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
end
start()
# File railties/lib/rails/commands/dbconsole.rb, line 22
def start
  include_password = false
  options = {}
  OptionParser.new do |opt|
    opt.banner = "Usage: dbconsole [environment] [options]"
    opt.on("-p", "--include-password", "Automatically provide the password from database.yml") do |v|
      include_password = true
    end

    opt.on("--mode [MODE]", ['html', 'list', 'line', 'column'],
      "Automatically put the sqlite3 database in the specified mode (html, list, line, column).") do |mode|
        options['mode'] = mode
    end

    opt.on("--header") do |h|
      options['header'] = h
    end

    opt.parse!(ARGV)
    abort opt.to_s unless (0..1).include?(ARGV.size)
  end

  unless config = @app.config.database_configuration[Rails.env]
    abort "No database is configured for the environment '#{Rails.env}'"
  end


  def find_cmd(*commands)
    dirs_on_path = ENV['PATH'].to_s.split(File::PATH_SEPARATOR)
    commands += commands.map{|cmd| "#{cmd}.exe"} if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/

    full_path_command = nil
    found = commands.detect do |cmd|
      dir = dirs_on_path.detect do |path|
        full_path_command = File.join(path, cmd)
        File.executable? full_path_command
      end
    end
    found ? full_path_command : abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.")
  end

  case config["adapter"]
  when /^mysql/
    args = {
      'host'      => '--host',
      'port'      => '--port',
      'socket'    => '--socket',
      'username'  => '--user',
      'encoding'  => '--default-character-set'
    }.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact

    if config['password'] && include_password
      args << "--password=#{config['password']}"
    elsif config['password'] && !config['password'].to_s.empty?
      args << "-p"
    end

    args << config['database']

    exec(find_cmd('mysql', 'mysql5'), *args)

  when "postgresql", "postgres"
    ENV['PGUSER']     = config["username"] if config["username"]
    ENV['PGHOST']     = config["host"] if config["host"]
    ENV['PGPORT']     = config["port"].to_s if config["port"]
    ENV['PGPASSWORD'] = config["password"].to_s if config["password"] && include_password
    exec(find_cmd('psql'), config["database"])

  when "sqlite"
    exec(find_cmd('sqlite'), config["database"])

  when "sqlite3"
    args = []

    args << "-#{options['mode']}" if options['mode']
    args << "-header" if options['header']
    args << config['database']

    exec(find_cmd('sqlite3'), *args)

  when "oracle", "oracle_enhanced"
    logon = ""

    if config['username']
      logon = config['username']
      logon << "/#{config['password']}" if config['password'] && include_password
      logon << "@#{config['database']}" if config['database']
    end

    exec(find_cmd('sqlplus'), logon)

  else
    abort "Unknown command-line client for #{config['database']}. Submit a Rails patch to add support!"
  end
end