class ActiveRecord::ConnectionAdapters::Mysql2Adapter

def self.database_exists?(config)

def self.database_exists?(config)
  !!ActiveRecord::Base.mysql2_connection(config)
rescue ActiveRecord::NoDatabaseError
  false
end

def active?

def active?
  @connection.ping
end

def configure_connection

def configure_connection
  @connection.query_options[:as] = :array
  super
end

def connect

def connect
  @connection = self.class.new_client(@config)
  configure_connection
end

def discard! # :nodoc:

:nodoc:
def discard! # :nodoc:
  super
  @connection.automatic_close = false
  @connection = nil
end

def disconnect!

Otherwise, this method does nothing.
Disconnects from the database if already connected.
def disconnect!
  super
  @connection.close
end

def each_hash(result, &block) # :nodoc:

:nodoc:
def each_hash(result, &block) # :nodoc:
  if block_given?
    result.each(as: :hash, symbolize_keys: true, &block)
  else
    to_enum(:each_hash, result)
  end
end

def error_number(exception)

def error_number(exception)
  exception.error_number if exception.respond_to?(:error_number)
end

def full_version

def full_version
  schema_cache.database_version.full_version_string
end

def get_full_version

def get_full_version
  @connection.server_info[:version]
end

def initialize(connection, logger, connection_options, config)

def initialize(connection, logger, connection_options, config)
  superclass_config = config.reverse_merge(prepared_statements: false)
  super(connection, logger, connection_options, superclass_config)
  configure_connection
end

def new_client(config)

def new_client(config)
  Mysql2::Client.new(config)
rescue Mysql2::Error => error
  if error.error_number == ConnectionAdapters::Mysql2Adapter::ER_BAD_DB_ERROR
    raise ActiveRecord::NoDatabaseError.db_error(config[:database])
  elsif error.error_number == ConnectionAdapters::Mysql2Adapter::ER_ACCESS_DENIED_ERROR
    raise ActiveRecord::DatabaseConnectionError.username_error(config[:username])
  elsif [ConnectionAdapters::Mysql2Adapter::ER_CONN_HOST_ERROR, ConnectionAdapters::Mysql2Adapter::ER_UNKNOWN_HOST_ERROR].include?(error.error_number)
    raise ActiveRecord::DatabaseConnectionError.hostname_error(config[:host])
  else
    raise ActiveRecord::ConnectionNotEstablished, error.message
  end
end

def quote_string(string)

def quote_string(string)
  @connection.escape(string)
rescue Mysql2::Error => error
  raise translate_exception(error, message: error.message, sql: "<escape>", binds: [])
end

def reconnect!

def reconnect!
  super
  disconnect!
  connect
end

def supports_comments?

def supports_comments?
  true
end

def supports_comments_in_create?

def supports_comments_in_create?
  true
end

def supports_json?

def supports_json?
  !mariadb? && database_version >= "5.7.8"
end

def supports_lazy_transactions?

def supports_lazy_transactions?
  true
end

def supports_savepoints?

def supports_savepoints?
  true
end

def translate_exception(exception, message:, sql:, binds:)

def translate_exception(exception, message:, sql:, binds:)
  if exception.is_a?(Mysql2::Error::TimeoutError) && !exception.error_number
    ActiveRecord::AdapterTimeout.new(message, sql: sql, binds: binds)
  else
    super
  end
end