класс ActiveRecord::ConnectionAdapters::AbstractAdapter
Active Record поддерживает множество систем баз данных. AbstractAdapter и связанные классы образуют абстракционный слой, который делает это возможным. AbstractAdapter представляет соединение с базой данных и предоставляет абстрактный интерфейс для функций, специфичных для базы данных, таких как установление соединения, экранирование значений, построение правильных фрагментов SQL для параметров ':offset' и ':limit' и т. д.
Все конкретные адаптеры баз данных следуют интерфейсу, заданному в этом классе. ActiveRecord::Base.connection возвращает объект AbstractAdapter, который вы можете использовать.
Большинство методов адаптера полезны при миграциях. В частности, методы экземпляров, предоставляемые SchemaStatement, очень полезны.
Константы
- ADAPTER_NAME
- SIMPLE_INT
Атрибуты
Публичные методы класса
# 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 # 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 Общедоступные методы экземпляра
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 296 def active? end
Проверяет, активное ли подключение к базе данных. Это включает проверку, действительно ли база данных способна отвечать, то есть, не устарело ли подключение.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 180 def adapter_name self.class::ADAPTER_NAME end
Возвращает удобочитаемое имя адаптера. Используйте смешанный регистр — можно всегда использовать строчные буквы, если нужно.
# 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
# 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
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 359 def case_sensitive_modifier(node, table_attribute) node end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 327 def clear_cache! # this should be overridden by concrete adapters end
Очистить кэширование, которое может выполнять адаптер базы данных, например, очистить кэш подготовленных запросов. Это зависит от базы данных.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 378 def close pool.checkin self end
Возвращает подключение обратно в пул подключений
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 138
def collector
if prepared_statements
SQLString.new
else
BindCollector.new
end
end # File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 353 def create_savepoint(name = nil) end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 373 def current_savepoint_name current_transaction.savepoint_name end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 259 def disable_extension(name) end
Это должно быть реализовано адаптерами, которые поддерживают расширения
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 287 def disable_referential_integrity yield end
Переопределите, чтобы отключить целостность ссылок при выполнении &block.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 309 def disconnect! clear_cache! reset_transaction end
Отключается от базы данных, если уже подключен. В противном случае этот метод ничего не делает.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 263 def enable_extension(name) end
Это должно быть реализовано адаптерами, которые поддерживают расширения
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 167 def expire @owner = nil end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 267 def extensions [] end
Список расширений, который необходимо заполнить адаптерам, которые их поддерживают.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 272
def index_algorithms
{}
end Список алгоритмов индексов, который необходимо заполнить адаптерам, которые их поддерживают.
# 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 # 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
# 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 вызывается перед каждой вставкой для установки первичного ключа записи.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 349 def raw_connection @connection end
Предоставляет доступ к базовому драйверу базы данных для этого адаптера. Например, этот метод возвращает объект Mysql в случае MysqlAdapter и объект PGconn в случае PostgreSQLAdapter.
Это полезно, когда вам нужно вызвать собственный метод, например, методы lo_* PostgreSQL.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 302 def reconnect! clear_cache! reset_transaction end
Отключается от базы данных, если уже подключен, и устанавливает новое соединение с базой данных. Реализаторы должны вызывать super, если они переопределяют стандартную реализацию.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 356 def release_savepoint(name = nil) end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 332 def requires_reloading? false end
Возвращает true, если требуется перезагрузка соединения между запросами для режима разработки.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 320 def reset! # this should be overridden by concrete adapters end
Сбросить состояние этого подключения, указав СУБД очистить транзакции и другие связанные с подключением состояние на стороне сервера. Обычно операция, зависящая от базы данных.
Стандартная реализация ничего не делает; реализация должна быть переопределена конкретными адаптерами.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 162 def schema_cache=(cache) cache.connection = self @schema_cache = cache end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 150 def schema_creation SchemaCreation.new self end
# 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.
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 201 def supports_bulk_alter? false end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 197 def supports_ddl_transactions? false end
Поддерживает ли этот адаптер откат DDL в транзакциях? То есть, будет ли CREATE TABLE или ALTER TABLE отменён транзакцией?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 228 def supports_explain? false end
Поддерживает ли этот адаптер explain?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 238 def supports_extensions? false end
Поддерживает ли этот адаптер расширения базы данных?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 249 def supports_foreign_keys? false end
Поддерживает ли этот адаптер создание ограничений внешних ключей?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 218 def supports_index_sort_order? false end
Поддерживает ли этот адаптер порядок сортировки индекса?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 244 def supports_indexes_in_create? false end
Поддерживает ли этот адаптер создание индексов в одном операторе с созданием таблицы?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 185 def supports_migrations? false end
Поддерживает ли этот адаптер миграции?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 223 def supports_partial_index? false end
Поддерживает ли этот адаптер частичные индексы?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 191 def supports_primary_key? false end
Может ли этот адаптер определить первичный ключ для таблиц, не привязанных к классу Active Record, таких как таблицы соединения?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 206 def supports_savepoints? false end
Поддерживает ли этот адаптер точки сохранения?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 233 def supports_transaction_isolation? false end
Поддерживает ли этот адаптер настройку уровня изоляции транзакции?
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 254 def supports_views? false end
Поддерживает ли этот адаптер представления?
# 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
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 146 def valid_type?(type) true end
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 339 def verify!(*ignored) reconnect! unless active? end
Проверяет, активен ли (т.е. не устарел) подключение к базе данных. Это делается внутри вызывая active?. Если подключение больше не активно, этот метод переподключится к базе данных.
Защищенные методы экземпляра
# 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 # 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
# 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 # 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.