Spec-Zone.ru › Ruby on Rails 4.1

класс 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.

Константы

SIMPLE_INT

Атрибуты

in_use[Ч]
in_use?[Ч]
last_use[Ч]
logger[Ч]
pool[Ч/З]
schema_cache[Ч]
visitor[Ч/З]

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

type_cast_config_to_boolean(config) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 85
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 77
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 262
def active?
end
active_threadsafe?() Показать исходный код

Адаптер должен переопределить это, если ему нужен потокобезопасный способ приблизительной оценки активности соединения

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

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 147
def adapter_name
  'Abstract'
end
case_insensitive_comparison(table, attribute, column, value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 343
def case_insensitive_comparison(table, attribute, column, value)
  table[attribute].lower.eq(table.lower(value))
end
case_sensitive_modifier(node) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 339
def case_sensitive_modifier(node)
  node
end
clear_cache!() Показать исходный код

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

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

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 352
def close
  pool.checkin self
end
create_savepoint(name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 330
def create_savepoint(name = nil)
end
current_savepoint_name() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 347
def current_savepoint_name
  "active_record_#{open_transactions}"
end
disable_extension(name) Показать исходный код

Предназначено для реализации адаптерами, которые поддерживают расширения

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

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

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

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

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

Предназначено для реализации адаптерами, которые поддерживают расширения

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 227
def enable_extension(name)
end
expire() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 129
def expire
  @in_use = false
end
extensions() Показать исходный код

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

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

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 238
def index_algorithms
  {}
end
lease() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 115
def lease
  synchronize do
    unless in_use
      @in_use   = true
      @last_use = Time.now
    end
  end
end
open_transactions() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 326
def open_transactions
  @transaction.number
end
prefetch_primary_key?(table_name = nil) Показать исходный код

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

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

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

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

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

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

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

Возвращает true, если требуется перезагрузить соединение между запросами для режима разработки. Это не так для Ruby/MySQL, и это не нужно для каких-либо адаптеров, кроме SQLite.

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

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

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 292
def reset!
  # this should be overridden by concrete adapters
end
rollback_to_savepoint(name = nil) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 333
def rollback_to_savepoint(name = nil)
end
schema_cache=(cache) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 124
def schema_cache=(cache)
  cache.connection = self
  @schema_cache = cache
end
schema_creation() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 111
def schema_creation
  SchemaCreation.new self
end
substitute_at(column, index) Показать исходный код

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 246
def substitute_at(column, index)
  Arel::Nodes::BindParam.new '?'
end
supports_bulk_alter?() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 177
def supports_bulk_alter?
  false
end
supports_count_distinct?() Показать исходный код

Поддерживает ли этот адаптер использование DISTINCT в COUNT? Это true для всех адаптеров, кроме sqlite.

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

Поддерживает ли этот адаптер откат DDL в транзакциях? То есть, CREATE TABLE или ALTER TABLE будут отменены транзакцией? PostgreSQL, SQL Server и другие поддерживают это. MySQL и другие — нет.

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

Поддерживает ли этот адаптер explain? На данный момент sqlite3, mysql2 и postgresql — единственные, кто это делают.

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

Поддерживает ли этот адаптер расширения базы данных? На данный момент только postgresql.

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

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

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

Поддерживает ли этот адаптер миграции? Зависит от бэкенда, так как абстрактный адаптер всегда возвращает false.

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

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

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

Может ли этот адаптер определить первичный ключ для таблиц, не присоединённых к классу Active Record, например, для таблиц объединения? Зависит от бэкенда, так как абстрактный адаптер всегда возвращает false.

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

Поддерживает ли этот адаптер savepoints? PostgreSQL и MySQL поддерживают, SQLite < 3.6.8 — нет.

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

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 212
def supports_transaction_isolation?
  false
end
unprepared_statement() { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 137
def unprepared_statement
  old_prepared_statements, @prepared_statements = @prepared_statements, false
  old_visitor, @visitor = @visitor, unprepared_visitor
  yield
ensure
  @visitor, @prepared_statements = old_visitor, old_prepared_statements
end
unprepared_visitor() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 133
def unprepared_visitor
  self.class::BindSubstitution.new self
end
valid_type?(type) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 107
def valid_type?(type)
  true
end
verify!(*ignored) Показать исходный код

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

# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 312
def verify!(*ignored)
  reconnect! unless active?
end

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

log(sql, name = "SQL", binds = [], statement_name = nil) { || ... } Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 371
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 383
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 358
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

  @logger.error message if @logger
  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 388
def without_prepared_statement?(binds)
  !@prepared_statements || binds.empty?
end

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

Spec-Zone.ru

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