Spec-Zone.ru › Ruby on Rails 4.2

класс ActiveRecord::ConnectionAdapters::AbstractAdapter

Родитель:
Объект
Включенные модули:
ActiveRecord::ConnectionAdapters::Quoting, ActiveRecord::ConnectionAdapters::DatabaseStatements, ActiveRecord::ConnectionAdapters::SchemaStatements, ActiveRecord::ConnectionAdapters::DatabaseLimits, ActiveRecord::ConnectionAdapters::QueryCache, ActiveSupport::Callbacks, ActiveRecord::ConnectionAdapters::ColumnDumper

Active Record поддерживает множество систем баз данных. AbstractAdapter и связанные классы образуют абстракционный слой, который делает это возможным. AbstractAdapter представляет соединение с базой данных и предоставляет абстрактный интерфейс для функций, специфичных для базы данных, таких как установление соединения, экранирование значений, построение правильных фрагментов SQL для параметров ':offset' и ':limit' и т. д.

Все конкретные адаптеры баз данных следуют интерфейсу, заданному в этом классе. ActiveRecord::Base.connection возвращает объект AbstractAdapter, который вы можете использовать.

Большинство методов адаптера полезны при миграциях. В частности, методы экземпляров, предоставляемые SchemaStatement, очень полезны.

Константы

ADAPTER_NAME
SIMPLE_INT

Атрибуты

in_use?[R]
logger[R]
owner[R]
pool[RW]
prepared_statements[R]
schema_cache[R]
visitor[RW]

Публичные методы класса

type_cast_config_to_boolean(config) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 91
def self.type_cast_config_to_boolean(config)
  if config == "false"
    false
  else
    config
  end
end
type_cast_config_to_integer(config) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 83
def self.type_cast_config_to_integer(config)
  if config =~ SIMPLE_INT
    config.to_i
  else
    config
  end
end

Общедоступные методы экземпляра

active?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 296
def active?
end

Проверяет, активное ли подключение к базе данных. Это включает проверку, действительно ли база данных способна отвечать, то есть, не устарело ли подключение.

adapter_name() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 180
def adapter_name
  self.class::ADAPTER_NAME
end

Возвращает удобочитаемое имя адаптера. Используйте смешанный регистр — можно всегда использовать строчные буквы, если нужно.

case_insensitive_comparison(table, attribute, column, value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 369
def case_insensitive_comparison(table, attribute, column, value)
  table[attribute].lower.eq(table.lower(value))
end
case_sensitive_comparison(table, attribute, column, value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 363
def case_sensitive_comparison(table, attribute, column, value)
  table_attr = table[attribute]
  value = case_sensitive_modifier(value, table_attr) unless value.nil?
  table_attr.eq(value)
end
case_sensitive_modifier(node, table_attribute) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 359
def case_sensitive_modifier(node, table_attribute)
  node
end
clear_cache!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 327
def clear_cache!
  # this should be overridden by concrete adapters
end

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

close() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 378
def close
  pool.checkin self
end

Возвращает подключение обратно в пул подключений

collector() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 138
def collector
  if prepared_statements
    SQLString.new
  else
    BindCollector.new
  end
end
create_savepoint(name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 353
def create_savepoint(name = nil)
end
current_savepoint_name() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 373
def current_savepoint_name
  current_transaction.savepoint_name
end
disable_extension(name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 259
def disable_extension(name)
end

Это должно быть реализовано адаптерами, которые поддерживают расширения

disable_referential_integrity() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 287
def disable_referential_integrity
  yield
end

Переопределите, чтобы отключить целостность ссылок при выполнении &block.

disconnect!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 309
def disconnect!
  clear_cache!
  reset_transaction
end

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

enable_extension(name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 263
def enable_extension(name)
end

Это должно быть реализовано адаптерами, которые поддерживают расширения

expire() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 167
def expire
  @owner = nil
end
extensions() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 267
def extensions
  []
end

Список расширений, который необходимо заполнить адаптерам, которые их поддерживают.

index_algorithms() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 272
def index_algorithms
  {}
end

Список алгоритмов индексов, который необходимо заполнить адаптерам, которые их поддерживают.

lease() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 154
def lease
  synchronize do
    unless in_use?
      @owner = Thread.current
    end
  end
end
new_column(name, default, cast_type, sql_type = nil, null = true) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 388
def new_column(name, default, cast_type, sql_type = nil, null = true)
  Column.new(name, default, cast_type, sql_type, null)
end
prefetch_primary_key?(table_name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 213
def prefetch_primary_key?(table_name = nil)
  false
end

Следует ли выбирать значения первичного ключа из соответствующей последовательности до оператора вставки? Если значение true, то next_sequence_value вызывается перед каждой вставкой для установки первичного ключа записи.

raw_connection() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 349
def raw_connection
  @connection
end

Предоставляет доступ к базовому драйверу базы данных для этого адаптера. Например, этот метод возвращает объект Mysql в случае MysqlAdapter и объект PGconn в случае PostgreSQLAdapter.

Это полезно, когда вам нужно вызвать собственный метод, например, методы lo_* PostgreSQL.

reconnect!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 302
def reconnect!
  clear_cache!
  reset_transaction
end

Отключается от базы данных, если уже подключен, и устанавливает новое соединение с базой данных. Реализаторы должны вызывать super, если они переопределяют стандартную реализацию.

release_savepoint(name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 356
def release_savepoint(name = nil)
end
requires_reloading?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 332
def requires_reloading?
  false
end

Возвращает true, если требуется перезагрузка соединения между запросами для режима разработки.

reset!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 320
def reset!
  # this should be overridden by concrete adapters
end

Сбросить состояние этого подключения, указав СУБД очистить транзакции и другие связанные с подключением состояние на стороне сервера. Обычно операция, зависящая от базы данных.

Стандартная реализация ничего не делает; реализация должна быть переопределена конкретными адаптерами.

END_OF_DOCUMENT_MARKER
schema_cache=(cache) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 162
def schema_cache=(cache)
  cache.connection = self
  @schema_cache = cache
end
schema_creation() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 150
def schema_creation
  SchemaCreation.new self
end
substitute_at(column, _unused = 0) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 280
def substitute_at(column, _unused = 0)
  Arel::Nodes::BindParam.new
end

Возвращает значение подстановки связывания, заданное связыванием column ПРИМЕЧАНИЕ: параметр столбца в настоящее время используется адаптером sqlserver.

supports_bulk_alter?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 201
def supports_bulk_alter?
  false
end
supports_ddl_transactions?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 197
def supports_ddl_transactions?
  false
end

Поддерживает ли этот адаптер откат DDL в транзакциях? То есть, будет ли CREATE TABLE или ALTER TABLE отменён транзакцией?

supports_explain?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 228
def supports_explain?
  false
end

Поддерживает ли этот адаптер explain?

supports_extensions?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 238
def supports_extensions?
  false
end

Поддерживает ли этот адаптер расширения базы данных?

supports_foreign_keys?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 249
def supports_foreign_keys?
  false
end

Поддерживает ли этот адаптер создание ограничений внешних ключей?

supports_index_sort_order?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 218
def supports_index_sort_order?
  false
end

Поддерживает ли этот адаптер порядок сортировки индекса?

supports_indexes_in_create?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 244
def supports_indexes_in_create?
  false
end

Поддерживает ли этот адаптер создание индексов в одном операторе с созданием таблицы?

supports_migrations?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 185
def supports_migrations?
  false
end

Поддерживает ли этот адаптер миграции?

supports_partial_index?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 223
def supports_partial_index?
  false
end

Поддерживает ли этот адаптер частичные индексы?

supports_primary_key?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 191
def supports_primary_key?
  false
end

Может ли этот адаптер определить первичный ключ для таблиц, не привязанных к классу Active Record, таких как таблицы соединения?

supports_savepoints?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 206
def supports_savepoints?
  false
end

Поддерживает ли этот адаптер точки сохранения?

supports_transaction_isolation?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 233
def supports_transaction_isolation?
  false
end

Поддерживает ли этот адаптер настройку уровня изоляции транзакции?

supports_views?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 254
def supports_views?
  false
end

Поддерживает ли этот адаптер представления?

unprepared_statement() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 171
def unprepared_statement
  old_prepared_statements, @prepared_statements = @prepared_statements, false
  yield
ensure
  @prepared_statements = old_prepared_statements
end
valid_type?(type) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 146
def valid_type?(type)
  true
end
verify!(*ignored) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 339
def verify!(*ignored)
  reconnect! unless active?
end

Проверяет, активен ли (т.е. не устарел) подключение к базе данных. Это делается внутри вызывая active?. Если подключение больше не активно, этот метод переподключится к базе данных.

Защищенные методы экземпляра

log(sql, name = "SQL", binds = [], statement_name = nil) { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 477
def log(sql, name = "SQL", binds = [], statement_name = nil)
  @instrumenter.instrument(
    "sql.active_record",
    :sql            => sql,
    :name           => name,
    :connection_id  => object_id,
    :statement_name => statement_name,
    :binds          => binds) { yield }
rescue => e
  raise translate_exception_class(e, sql)
end
translate_exception(exception, message) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 489
def translate_exception(exception, message)
  # override in derived class
  ActiveRecord::StatementInvalid.new(message, exception)
end
translate_exception_class(e, sql) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 465
def translate_exception_class(e, sql)
  begin
    message = "#{e.class.name}: #{e.message}: #{sql}"
  rescue Encoding::CompatibilityError
    message = "#{e.class.name}: #{e.message.force_encoding sql.encoding}: #{sql}"
  end

  exception = translate_exception(e, message)
  exception.set_backtrace e.backtrace
  exception
end
without_prepared_statement?(binds) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 494
def without_prepared_statement?(binds)
  !prepared_statements || binds.empty?
end

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

Spec-Zone.ru

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