Spec-Zone.ru › Ruby on Rails 5.1

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

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

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

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

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

Константы

ADAPTER_NAME
SIMPLE_INT

Атрибуты

in_use?[R]
lock[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 89
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 81
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 397
def active?
end

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

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

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

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

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

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

Возвращает соединение в пул соединений

collector() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 144
def collector
  if prepared_statements
    SQLString.new
  else
    BindCollector.new
  end
end
disable_extension(name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 354
def disable_extension(name)
end

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

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

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

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

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

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

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

expire() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 194
def expire
  if in_use?
    if @owner != Thread.current
      raise ActiveRecordError, "Cannot expire connection, "                "it is owned by a different thread: #{@owner}. "                "Current thread: #{Thread.current}."
    end

    @owner = nil
  else
    raise ActiveRecordError, "Cannot expire connection, it is not currently leased."
  end
end

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

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

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

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

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

lease() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 173
def lease
  if in_use?
    msg = "Cannot lease connection, "
    if @owner == Thread.current
      msg << "it is already leased by the current thread."
    else
      msg << "it is already in use by a different thread: #{@owner}. "                     "Current thread: #{Thread.current}."
    end
    raise ActiveRecordError, msg
  end

  @owner = Thread.current
end

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

prefetch_primary_key?(table_name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 267
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 453
def raw_connection
  @connection
end

Предоставляет доступ к базовому драйверу базы данных для этого адаптера. Например, этот метод возвращает объект Mysql2::Client в случае Mysql2Adapter и объект PG::Connection в случае PostgreSQLAdapter.

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

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

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

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

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

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

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

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

schema_cache=(cache) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 188
def schema_cache=(cache)
  cache.connection = self
  @schema_cache = cache
end
schema_creation() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 160
def schema_creation
  SchemaCreation.new self
end
supports_advisory_locks?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 260
def supports_advisory_locks?
  false
end

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

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

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

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

Можно ли указать комментарии к таблицам, столбцам и индексам в операторах создания/изменения таблиц?

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

Поддерживает ли этот адаптер тип datetime с точностью?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Поддерживает ли этот адаптер тип данных json?

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

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

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

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

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

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

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

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

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

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

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

Поддерживает ли этот адаптер виртуальные столбцы?

unprepared_statement() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 221
def unprepared_statement
  old_prepared_statements, @prepared_statements = @prepared_statements, false
  yield
ensure
  @prepared_statements = old_prepared_statements
end
verify!(*ignored) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 440
def verify!(*ignored)
  if ignored.size > 0
    ActiveSupport::Deprecation.warn("Passing arguments to #verify method of the connection has no effect and has been deprecated. Please remove all arguments from the #verify method call.")
  end
  reconnect! unless active?
end

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

Методы частного экземпляра

log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 603
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil) # :doc:
  @instrumenter.instrument(
    "sql.active_record",
    sql:               sql,
    name:              name,
    binds:             binds,
    type_casted_binds: type_casted_binds,
    statement_name:    statement_name,
    connection_id:     object_id) do
      @lock.synchronize do
        yield
      end
    end
rescue => e
  raise translate_exception_class(e, sql)
end

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

Spec-Zone.ru

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