class ActiveRecord::ConnectionAdapters::MysqlAdapter

Parent:
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter

The MySQL adapter will work with both Ruby/MySQL, which is a Ruby-based MySQL adapter that comes bundled with Active Record, and with the faster C-based MySQL/Ruby adapter (available both as a gem and from www.tmtm.org/en/mysql/ruby/).

Options:

  • :host - Defaults to “localhost”.

  • :port - Defaults to 3306.

  • :socket - Defaults to “/tmp/mysql.sock”.

  • :username - Defaults to “root”

  • :password - Defaults to nothing.

  • :database - The name of the database. No default, must be provided.

  • :encoding - (Optional) Sets the client encoding by executing “SET NAMES <encoding>” after connection.

  • :reconnect - Defaults to false (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html).

  • :strict - Defaults to true. Enable STRICT_ALL_TABLES. (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/sql-mode.html)

  • :variables - (Optional) A hash session variables to send as SET @@SESSION.key = value on each database connection. Use the value :default to set a variable to its DEFAULT value. (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/set-statement.html).

  • :sslca - Necessary to use MySQL with an SSL connection.

  • :sslkey - Necessary to use MySQL with an SSL connection.

  • :sslcert - Necessary to use MySQL with an SSL connection.

  • :sslcapath - Necessary to use MySQL with an SSL connection.

  • :sslcipher - Necessary to use MySQL with an SSL connection.

Constants

ADAPTER_NAME
ENCODINGS

Taken from here:

https://github.com/tmtm/ruby-mysql/blob/master/lib/mysql/charset.rb

Author: TOMITA Masahiro <[email protected]>

Public Class Methods

new(connection, logger, connection_options, config) Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 103
def initialize(connection, logger, connection_options, config)
  super
  @statements = StatementPool.new(@connection,
                                  self.class.type_cast_config_to_integer(config.fetch(:statement_limit) { 1000 }))
  @client_encoding = nil
  connect
end

Public Instance Methods

active?() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 144
def active?
  if @connection.respond_to?(:stat)
    @connection.stat
  else
    @connection.query 'select 1'
  end

  # mysql-ruby doesn't raise an exception when stat fails.
  if @connection.respond_to?(:errno)
    @connection.errno.zero?
  else
    true
  end
rescue Mysql::Error
  false
end
clear_cache!() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 195
def clear_cache!
  super
  @statements.clear
end

Clears the prepared statements cache.

client_encoding() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 244
def client_encoding
  return @client_encoding if @client_encoding

  result = exec_query(
    "select @@character_set_client",
    'SCHEMA')
  @client_encoding = ENCODINGS[result.rows.last.last]
end

Get the client encoding for this database

disconnect!() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 169
def disconnect!
  super
  @connection.close rescue nil
end

Disconnects from the database if already connected. Otherwise, this method does nothing.

exec_query(sql, name = 'SQL', binds = []) { |affected_rows| ... } Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 253
def exec_query(sql, name = 'SQL', binds = [])
  if without_prepared_statement?(binds)
    result_set, affected_rows = exec_without_stmt(sql, name)
  else
    result_set, affected_rows = exec_stmt(sql, name, binds)
  end

  yield affected_rows if block_given?

  result_set
end
last_inserted_id(result) Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 265
def last_inserted_id(result)
  @connection.insert_id
end
reconnect!() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 161
def reconnect!
  super
  disconnect!
  connect
end
reset!() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 174
def reset!
  if @connection.respond_to?(:change_user)
    # See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to
    # reset the connection is to change the user to the same user.
    @connection.change_user(@config[:username], @config[:password], @config[:database])
    configure_connection
  end
end
select_rows(sql, name = nil, binds = []) Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 187
def select_rows(sql, name = nil, binds = [])
  @connection.query_with_result = true
  rows = exec_query(sql, name, binds).rows
  @connection.more_results && @connection.next_result    # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped
  rows
end
supports_statement_cache?() Show source
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 113
def supports_statement_cache?
  true
end

Returns true, since this connection adapter supports prepared statement caching.

© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.