class ActiveRecord::Tasks::MySQLDatabaseTasks
:nodoc:
:nodoc:
def self.using_database_configurations?
def self.using_database_configurations? true end
def charset
def charset connection.charset end
def collation
def collation connection.collation end
def configuration_hash_without_database
def configuration_hash_without_database configuration_hash.merge(database: nil) end
def create
def create establish_connection(configuration_hash_without_database) connection.create_database(db_config.database, creation_options) establish_connection(db_config) end
def creation_options
def creation_options Hash.new.tap do |options| options[:charset] = configuration_hash[:encoding] if configuration_hash.include?(:encoding) options[:collation] = configuration_hash[:collation] if configuration_hash.include?(:collation) end end
def drop
def drop establish_connection(db_config) connection.drop_database(db_config.database) end
def initialize(db_config)
def initialize(db_config) @db_config = db_config @configuration_hash = db_config.configuration_hash end
def prepare_command_options
def prepare_command_options args = { host: "--host", port: "--port", socket: "--socket", username: "--user", password: "--password", encoding: "--default-character-set", sslca: "--ssl-ca", sslcert: "--ssl-cert", sslcapath: "--ssl-capath", sslcipher: "--ssl-cipher", sslkey: "--ssl-key" }.filter_map { |opt, arg| "#{arg}=#{configuration_hash[opt]}" if configuration_hash[opt] } args end
def purge
def purge establish_connection(db_config) connection.recreate_database(db_config.database, creation_options) end
def run_cmd(cmd, args, action)
def run_cmd(cmd, args, action) fail run_cmd_error(cmd, args, action) unless Kernel.system(cmd, *args) end
def run_cmd_error(cmd, args, action)
def run_cmd_error(cmd, args, action) msg = +"failed to execute: `#{cmd}`\n" msg << "Please check the output above for any errors and make sure that `#{cmd}` is installed in your PATH and has proper permissions.\n\n" msg end
def structure_dump(filename, extra_flags)
def structure_dump(filename, extra_flags) args = prepare_command_options args.concat(["--result-file", "#{filename}"]) args.concat(["--no-data"]) args.concat(["--routines"]) args.concat(["--skip-comments"]) ignore_tables = ActiveRecord::SchemaDumper.ignore_tables if ignore_tables.any? args += ignore_tables.map { |table| "--ignore-table=#{db_config.database}.#{table}" } end args.concat([db_config.database.to_s]) args.unshift(*extra_flags) if extra_flags run_cmd("mysqldump", args, "dumping") end
def structure_load(filename, extra_flags)
def structure_load(filename, extra_flags) args = prepare_command_options args.concat(["--execute", %{SET FOREIGN_KEY_CHECKS = 0; SOURCE #{filename}; SET FOREIGN_KEY_CHECKS = 1}]) args.concat(["--database", db_config.database.to_s]) args.unshift(*extra_flags) if extra_flags run_cmd("mysql", args, "loading") end