Spec-Zone.ru › Ruby on Rails 7.0

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

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

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

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

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

Константы

ADAPTER_NAME
COMMENT_REGEX
SIMPLE_INT
TYPE_MAP

Атрибуты

in_use?[R]
lock[R]
logger[R]
owner[R]
pool[RW]
visitor[R]

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

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

Существует ли база данных для данного адаптера?

type_cast_config_to_boolean(config) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 57
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 47
def self.type_cast_config_to_integer(config)
  if config.is_a?(Integer)
    config
  elsif SIMPLE_INT.match?(config)
    config.to_i
  else
    config
  end
end
END_OF_DOCUMENT_MARKER

Публичные методы экземпляра

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

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

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

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

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

Переопределите для проверки всех ограничений внешних ключей в базе данных.

clear_cache!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 574
def clear_cache!
  @lock.synchronize { @statements.clear } if @statements
end

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

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

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

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

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

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

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

discard!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 547
def discard!
  # This should be overridden by concrete adapters.
  #
  # Prevent @connection's finalizer from touching the socket, or
  # otherwise communicating with its server, when it is collected.
  if schema_cache.connection == self
    schema_cache.connection = nil
  end
end

Немедленно забывает об этом соединении. В отличие от disconnect!, это не общается с сервером.

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

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

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

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

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

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

    @idle_since = Process.clock_gettime(Process::CLOCK_MONOTONIC)
    @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 497
def extensions
  []
end

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

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

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

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

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

prepared_statements()
Псевдоним для: prepared_statements?
prepared_statements?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 175
def prepared_statements?
  @prepared_statements && !prepared_statements_disabled_cache.include?(object_id)
end
Также алиас для: prepared_statements
preventing_writes?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 141
def preventing_writes?
  return true if replica?
  return ActiveRecord::Base.connection_handler.prevent_writes if ActiveRecord.legacy_connection_handling
  return false if connection_class.nil?

  connection_class.current_preventing_writes
end

Определяет, предотвращаются ли в данный момент записи.

Возвращает true, если соединение является репликацией.

Если приложение использует устаревленное обращение, возвращает true, если connection_handler.prevent_writes установлено.

Если приложение использует новое обращение к соединениям, вернёт true, в зависимости от current_preventing_writes.

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

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

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

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

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

replica?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 124
def replica?
  @config[:replica] || false
end
requires_reloading?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 579
def requires_reloading?
  false
end

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

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

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

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

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

Роль (например :writing) для текущего подключения. В приложении без множественных ролей возвращается `:writing`.

schema_cache() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 239
def schema_cache
  @pool.get_schema_cache(self)
end
schema_cache=(cache) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 243
def schema_cache=(cache)
  cache.connection = self
  @pool.set_schema_cache(cache)
end
schema_version() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 660
def schema_version
  migration_context.current_version
end

Возвращает идентификатор версии схемы, текущей в базе данных. Обычно равно номеру самой последней выполненной миграции, или 0, если нет информации о схеме/ база данных пуста.

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

Раздел (например :default) для текущего подключения. В нефрагментированном приложении возвращается `:default`.

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

Поддерживает ли данный адаптер конфигурационные блокировки?

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

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

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

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

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

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

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

Поддерживает ли данный адаптер даты и время с точностью?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

supports_insert_conflict_target?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 453
def supports_insert_conflict_target?
  false
end
supports_insert_on_duplicate_skip?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 445
def supports_insert_on_duplicate_skip?
  false
end
supports_insert_on_duplicate_update?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 449
def supports_insert_on_duplicate_update?
  false
end
supports_insert_returning?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 441
def supports_insert_returning?
  false
end
supports_json?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 404
def supports_json?
  false
end

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удаляет подключение из пула и отключает его.

unprepared_statement() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 283
def unprepared_statement
  cache = prepared_statements_disabled_cache.add?(object_id) if @prepared_statements
  yield
ensure
  cache&.delete(object_id)
end
use_metadata_table?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 128
def use_metadata_table?
  @config.fetch(:use_metadata_table, true)
end
verify!() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 586
def verify!
  reconnect! unless active?
end

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

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

log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false, &block) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 755
def log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false, &block) # :doc:
  @instrumenter.instrument(
    "sql.active_record",
    sql:               sql,
    name:              name,
    binds:             binds,
    type_casted_binds: type_casted_binds,
    statement_name:    statement_name,
    async:             async,
    connection:        self) do
    @lock.synchronize(&block)
  rescue => e
    raise translate_exception_class(e, sql, binds)
  end
end

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

Spec-Zone.ru

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