Spec-Zone.ru › Ruby on Rails 4.1

класс ActiveRecord::ConnectionAdapters::MysqlAdapter

Родитель:
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter

Адаптер MySQL будет работать как с Ruby/MySQL, который является адаптером MySQL на базе Ruby, поставляемым вместе с Active Record, так и с более быстрым адаптером MySQL/Ruby на основе C (доступен как в виде gem, так и по адресу www.tmtm.org/en/mysql/ruby/).

Параметры:

  • :host - По умолчанию равно “localhost”.

  • :port - По умолчанию равно 3306.

  • :socket - По умолчанию равно “/tmp/mysql.sock”.

  • :username - По умолчанию равно “root”.

  • :password - По умолчанию ничего.

  • :database - Имя базы данных. Значение по умолчанию отсутствует, необходимо указать.

  • :encoding - (Необязательно) Устанавливает кодировку клиента, выполняя «SET NAMES <encoding>» после подключения.

  • :reconnect - По умолчанию false (См. документацию MySQL: dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html).

  • :strict - По умолчанию true. Включить STRICT_ALL_TABLES. (См. документацию MySQL: dev.mysql.com/doc/refman/5.0/en/sql-mode.html)

  • :variables - (Необязательно) Словарь сессионных переменных для отправки в качестве `SET @@SESSION.key = value` при каждом подключении к базе данных. Используйте значение `:default`, чтобы установить переменную в её значение по умолчанию. (См. документацию MySQL: dev.mysql.com/doc/refman/5.0/en/set-statement.html).

  • :sslca - Необходимо для использования MySQL с подключением SSL.

  • :sslkey - Необходимо для использования MySQL с подключением SSL.

  • :sslcert - Необходимо для использования MySQL с подключением SSL.

  • :sslcapath - Необходимо для использования MySQL с подключением SSL.

  • :sslcipher - Необходимо для использования MySQL с подключением SSL.

Константы

ADAPTER_NAME
ENCODINGS

Взято отсюда:

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

Автор: TOMITA Masahiro <tommy@tmtm.org>

Открытые методы класса

new(connection, logger, connection_options, config) Показать исходный код
Вызывает метод суперкласса ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.new
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 132
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

Открытые методы экземпляра

active?() Показать исходный код

УПРАВЛЕНИЕ ПОДКЛЮЧЕНИЕМ ====================================

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 175
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!() Показать исходный код

Очищает кэш подготовленных запросов.

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 224
def clear_cache!
  @statements.clear
end
client_encoding() Показать исходный код

Получить кодировку клиента для этой базы данных

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 272
def client_encoding
  return @client_encoding if @client_encoding

  result = exec_query(
    "SHOW VARIABLES WHERE Variable_name = 'character_set_client'",
    'SCHEMA')
  @client_encoding = ENCODINGS[result.rows.last.last]
end
disconnect!() Показать исходный код

Отключается от базы данных, если подключение уже установлено. В противном случае этот метод ничего не делает.

Вызывает метод суперкласса ActiveRecord::ConnectionAdapters::AbstractAdapter#disconnect!
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 200
def disconnect!
  super
  @connection.close rescue nil
end
exec_delete(sql, name, binds) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 463
def exec_delete(sql, name, binds)
  affected_rows = 0

  exec_query(sql, name, binds) do |n|
    affected_rows = n
  end

  affected_rows
end
Также алиас: exec_update
exec_query(sql, name = 'SQL', binds = []) { |affected_rows| ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 281
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
exec_update(sql, name, binds)
Псевдоним для: exec_delete
execute_and_free(sql, name = nil) { |result| ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 450
def execute_and_free(sql, name = nil)
  result = execute(sql, name)
  ret = yield result
  result.free
  ret
end
last_inserted_id(result) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 293
def last_inserted_id(result)
  @connection.insert_id
end
reconnect!() Показать исходный код
Вызывает метод суперкласса ActiveRecord::ConnectionAdapters::AbstractAdapter#reconnect!
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 192
def reconnect!
  super
  disconnect!
  connect
end
reset!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 205
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 = []) Показать исходный код

ЗАПРОСЫ К БАЗЕ ДАННЫХ ======================================

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 216
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?() Показать исходный код

Возвращает true, так как этот адаптер подключения поддерживает кэширование подготовленных запросов.

# File activerecord/lib/active_record/connection_adapters/mysql_adapter.rb, line 142
def supports_statement_cache?
  true
end

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API