Active Record 抽象适配器
Active Record 支持多个数据库系统。 AbstractAdapter
和相关类构成了抽象层,使之成为可能。 AbstractAdapter
表示与数据库的连接,并为特定于数据库的功能(如建立连接、转义值、为 :offset
和 :limit
选项构建正确的 SQL 片段等)提供抽象接口。
所有具体的数据库适配器都遵循此类中规定的接口。 ActiveRecord::Base.connection 返回 AbstractAdapter
对象,你可以使用该对象。
适配器中的大多数方法在迁移期间很有用。最值得注意的是, SchemaStatements
提供的实例方法非常有用。
- A
- C
- D
- E
- F
- I
- L
- P
- R
- S
-
- 保存点错误使事务无效?,
- 模式缓存,
- 模式版本,
- 分片,
- 支持咨询锁?,
- 支持批量更改?,
- 支持检查约束?,
- 支持注释?,
- 支持创建中的注释?,
- 支持公共表表达式?,
- 支持并发连接?,
- 支持带精度的日期时间?,
- 支持 DDL 事务?,
- 支持可延迟约束?,
- 支持排除约束?,
- 支持解释?,
- 支持表达式索引?,
- 支持扩展?,
- 支持外键?,
- 支持外部表?,
- 支持索引包含?,
- 支持索引排序顺序?,
- 支持创建中的索引?,
- 支持插入冲突目标?,
- 支持插入时跳过重复?,
- 支持插入时更新重复?,
- 支持插入返回?,
- 支持 JSON?,
- 支持延迟事务?,
- 支持物化视图?,
- 支持非空值不区分?,
- 支持优化器提示?,
- 支持部分索引?,
- 支持分区索引?,
- 支持重新启动数据库事务?,
- 支持保存点?,
- 支持事务隔离?,
- 支持唯一约束?,
- 支持验证约束?,
- 支持视图?,
- 支持虚拟列?
- T
- U
- V
- ActiveSupport::Callbacks
- ActiveRecord::ConnectionAdapters::DatabaseLimits
- ActiveRecord::ConnectionAdapters::QueryCache
- ActiveRecord::ConnectionAdapters::Savepoints
常量
ADAPTER_NAME | = | "Abstract" |
COMMENT_REGEX | = | %r{(?:--.*\n)|/\*(?:[^*]|\*[^/])*\*/} |
EXTENDED_TYPE_MAPS | = | Concurrent::Map.new |
SIMPLE_INT | = | /\A\d+\z/ |
TYPE_MAP | = | Type::TypeMap.new.tap { |m| initialize_type_map(m) } |
属性
[R] | in_use? | |
[R] | lock | |
[R] | logger | |
[R] | owner | |
[R] | pool | |
[R] | visitor |
类公共方法
database_exists?(config) 链接
此适配器的数据库是否存在?
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 382 def self.database_exists?(config) new(config).database_exists? end
dbconsole(config, options = {}) 链接
打开数据库控制台会话。
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 124 def self.dbconsole(config, options = {}) raise NotImplementedError end
find_cmd_and_exec(commands, *args) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 95 def self.find_cmd_and_exec(commands, *args) # :doc: commands = Array(commands) dirs_on_path = ENV["PATH"].to_s.split(File::PATH_SEPARATOR) unless (ext = RbConfig::CONFIG["EXEEXT"]).empty? commands = commands.map { |cmd| "#{cmd}#{ext}" } end full_path_command = nil found = commands.detect do |cmd| dirs_on_path.detect do |path| full_path_command = File.join(path, cmd) begin stat = File.stat(full_path_command) rescue SystemCallError else stat.file? && stat.executable? end end end if found exec full_path_command, *args else abort("Couldn't find database client: #{commands.join(', ')}. Check your $PATH and try again.") end end
type_cast_config_to_boolean(config) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 68 def self.type_cast_config_to_boolean(config) if config == "false" false else config end end
type_cast_config_to_integer(config) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 58 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
validate_default_timezone(config) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 76 def self.validate_default_timezone(config) case config when nil when "utc", "local" config.to_sym else raise ArgumentError, "default_timezone must be either 'utc' or 'local'" end end
实例公共方法
active?() 链接
检查与数据库的连接是否仍然有效。这包括检查数据库是否实际上能够响应,即连接是否没有失效。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 674 def active? end
adapter_name() 链接
返回适配器的可读名称。使用混合大小写 - 如果需要,始终可以使用小写。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 377 def adapter_name self.class::ADAPTER_NAME end
all_foreign_keys_valid?() 链接
重写以检查数据库中的所有外键约束。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 655 def all_foreign_keys_valid? check_all_foreign_keys_valid! true rescue ActiveRecord::StatementInvalid false end
check_all_foreign_keys_valid!() 链接
重写以检查数据库中的所有外键约束。如果外键约束未满足,则适配器应引发 ActiveRecord::StatementInvalid
。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 666 def check_all_foreign_keys_valid! end
clear_cache!(new_connection: false) 链接
清除数据库适配器可能正在执行的任何缓存。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 754 def clear_cache!(new_connection: false) if @statements @lock.synchronize do if new_connection @statements.reset else @statements.clear end end end end
close() 链接
将连接检回连接池
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 846 def close pool.checkin self end
connect!() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 794 def connect! verify! self end
connection_retries() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 222 def connection_retries (@config[:connection_retries] || 1).to_i end
database_exists?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 386 def database_exists? connect! true rescue ActiveRecord::NoDatabaseError false end
default_timezone() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 234 def default_timezone @default_timezone || ActiveRecord.default_timezone end
disable_extension(name, **) 链接
此方法应由支持扩展的适配器实现
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 592 def disable_extension(name, **) end
disable_referential_integrity() 链接
覆盖此方法以在执行 &block
时关闭引用完整性。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 650 def disable_referential_integrity yield end
discard!() 链接
立即忘记此连接的存在。与 disconnect! 不同,此方法不会与服务器通信。
调用此方法后,所有其他方法的行为将变得未定义。在分叉进程摆脱属于其父进程的连接之前,此方法在内部调用。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 729 def discard! # This should be overridden by concrete adapters. end
disconnect!() 链接
如果已连接,则断开与数据库的连接。否则,此方法不起作用。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 717 def disconnect! clear_cache!(new_connection: true) reset_transaction @raw_connection_dirty = false end
enable_extension(name, **) 链接
此方法应由支持扩展的适配器实现
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 596 def enable_extension(name, **) end
expire() 链接
此方法只能在持有连接池的互斥锁时调用
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 334 def expire if in_use? if @owner != ActiveSupport::IsolatedExecutionState.context raise ActiveRecordError, "Cannot expire connection, " \ "it is owned by a different thread: #{@owner}. " \ "Current thread: #{ActiveSupport::IsolatedExecutionState.context}." 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() 链接
扩展列表,由支持它们的适配器填充。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 638 def extensions [] end
index_algorithms() 链接
索引算法列表,由支持它们的适配器填充。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 643 def index_algorithms {} end
lease() 链接
此方法只能在持有连接池的互斥锁时调用
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 298 def lease if in_use? msg = +"Cannot lease connection, " if @owner == ActiveSupport::IsolatedExecutionState.context msg << "it is already leased by the current thread." else msg << "it is already in use by a different thread: #{@owner}. " \ "Current thread: #{ActiveSupport::IsolatedExecutionState.context}." end raise ActiveRecordError, msg end @owner = ActiveSupport::IsolatedExecutionState.context end
pool=(value) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 48 def pool=(value) return if value.eql?(@pool) @schema_cache = nil @pool = value @pool.schema_reflection.load!(self) if ActiveRecord.lazily_load_schema_cache end
prefetch_primary_key?(table_name = nil) 链接
是否在插入语句之前从其对应的序列中选择主键值?如果为 true,则在每次插入之前调用 next_sequence_value 以设置记录的主键。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 426 def prefetch_primary_key?(table_name = nil) false end
prepared_statements?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 265 def prepared_statements? @prepared_statements && !prepared_statements_disabled_cache.include?(object_id) end
preventing_writes?() 链接
确定当前是否阻止写入。
如果连接是副本或返回 current_preventing_writes
的值,则返回 true。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 242 def preventing_writes? return true if replica? return false if connection_class.nil? connection_class.current_preventing_writes end
raw_connection() 链接
提供对该适配器的底层数据库驱动程序的访问。例如,此方法在 Mysql2Adapter
的情况下返回一个 Mysql2::Client 对象,在 PostgreSQLAdapter
的情况下返回一个 PG::Connection 对象。
当您需要调用专有方法(例如 PostgreSQL 的 lo_* 方法)时,这非常有用。
ActiveRecord 无法跟踪是否使用此客户端修改了数据库。如果是这种情况,通常您需要使用 ActiveRecord::Base.clear_query_cache
使查询缓存无效。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 814 def raw_connection with_raw_connection do |conn| disable_lazy_transactions! @raw_connection_dirty = true conn end end
reconnect!(restore_transactions: false) 链接
如果已连接,则断开与数据库的连接,并建立与数据库的新连接。实现者应该定义私有 reconnect。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 680 def reconnect!(restore_transactions: false) retries_available = connection_retries deadline = retry_deadline && Process.clock_gettime(Process::CLOCK_MONOTONIC) + retry_deadline @lock.synchronize do reconnect enable_lazy_transactions! @raw_connection_dirty = false @verified = true reset_transaction(restore: restore_transactions) do clear_cache!(new_connection: true) configure_connection end rescue => original_exception translated_exception = translate_exception_class(original_exception, nil, nil) retry_deadline_exceeded = deadline && deadline < Process.clock_gettime(Process::CLOCK_MONOTONIC) if !retry_deadline_exceeded && retries_available > 0 retries_available -= 1 if retryable_connection_error?(translated_exception) backoff(connection_retries - retries_available) retry end end @verified = false raise translated_exception end end
replica?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 214 def replica? @config[:replica] || false end
requires_reloading?() 链接
如果需要在开发模式下为请求重新加载连接,则返回 true。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 767 def requires_reloading? false end
reset!() 链接
重置此连接的状态,指示 DBMS 清除事务和其他与连接相关的服务器端状态。通常是与数据库相关的操作。
如果数据库驱动程序或协议不支持此类特性,则实现者可以将其别名为 reconnect!
。否则,实现者应该在重置连接后(并且在仍然持有 @lock 时)立即调用 super。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 741 def reset! clear_cache!(new_connection: true) reset_transaction configure_connection end
retry_deadline() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 226 def retry_deadline if @config[:retry_deadline] @config[:retry_deadline].to_f else nil end end
role() 链接
当前连接的角色(例如 :writing
)。在非多角色应用程序中,返回 :writing
。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 319 def role @pool.role end
savepoint_errors_invalidate_transactions?() 链接
在保存点上发生的 TransactionRollbackErrors 是否会影响父事务?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 410 def savepoint_errors_invalidate_transactions? false end
schema_cache() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 329 def schema_cache @schema_cache ||= BoundSchemaReflection.new(@pool.schema_reflection, self) end
schema_version() 链接
返回当前数据库中可用的架构版本标识符。这通常等于已执行的最高编号迁移的编号,如果不存在架构信息/数据库为空,则为 0。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 881 def schema_version migration_context.current_version end
shard() 链接
当前连接的分片(例如::default
)。在非分片应用程序中,返回 :default
。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 325 def shard @pool.shard end
supports_advisory_locks?() 链接
此适配器是否支持应用程序强制的建议锁定?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 419 def supports_advisory_locks? false end
supports_bulk_alter?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 399 def supports_bulk_alter? false end
supports_check_constraints?() 链接
此适配器是否支持创建检查约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 491 def supports_check_constraints? false end
supports_comments?() 链接
此适配器是否支持数据库对象(表、列、索引)的元数据注释?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 526 def supports_comments? false end
supports_comments_in_create?() 链接
是否可以在创建/更改表语句中指定表、列和索引的注释?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 531 def supports_comments_in_create? false end
supports_common_table_expressions?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 550 def supports_common_table_expressions? false end
supports_concurrent_connections?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 574 def supports_concurrent_connections? true end
supports_datetime_with_precision?() 链接
此适配器是否支持带精度的日期时间?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 516 def supports_datetime_with_precision? false end
supports_ddl_transactions?() 链接
此适配器是否支持事务中的 DDL 回滚?也就是说,CREATE TABLE 或 ALTER TABLE 是否会被事务回滚?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 395 def supports_ddl_transactions? false end
supports_deferrable_constraints?() 链接
此适配器是否支持创建可延迟约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 486 def supports_deferrable_constraints? false end
supports_exclusion_constraints?() 链接
此适配器是否支持创建排除约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 496 def supports_exclusion_constraints? false end
supports_explain?() 链接
此适配器是否支持解释?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 455 def supports_explain? false end
supports_expression_index?() 链接
此适配器是否支持表达式索引?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 450 def supports_expression_index? false end
supports_extensions?() 链接
此适配器是否支持数据库扩展?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 465 def supports_extensions? false end
supports_foreign_keys?() 链接
此适配器是否支持创建外键约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 476 def supports_foreign_keys? false end
supports_foreign_tables?() 链接
此适配器是否支持外部/外部表?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 541 def supports_foreign_tables? false end
supports_index_include?() 链接
此适配器是否支持包含非键列?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 445 def supports_index_include? false end
supports_index_sort_order?() 链接
此适配器是否支持索引排序顺序?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 435 def supports_index_sort_order? false end
supports_indexes_in_create?() 链接
此适配器是否支持在创建表的相同语句中创建索引?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 471 def supports_indexes_in_create? false end
supports_insert_conflict_target?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 570 def supports_insert_conflict_target? false end
supports_insert_on_duplicate_skip?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 562 def supports_insert_on_duplicate_skip? false end
supports_insert_on_duplicate_update?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 566 def supports_insert_on_duplicate_update? false end
supports_insert_returning?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 558 def supports_insert_returning? false end
supports_json?() 链接
此适配器是否支持 JSON 数据类型?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 521 def supports_json? false end
supports_lazy_transactions?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 554 def supports_lazy_transactions? false end
supports_materialized_views?() 链接
此适配器是否支持物化视图?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 511 def supports_materialized_views? false end
supports_nulls_not_distinct?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 578 def supports_nulls_not_distinct? false end
supports_optimizer_hints?() 链接
此适配器是否支持优化器提示?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 546 def supports_optimizer_hints? false end
supports_partial_index?() 链接
此适配器是否支持部分索引?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 440 def supports_partial_index? false end
supports_partitioned_indexes?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 430 def supports_partitioned_indexes? false end
supports_restart_db_transaction?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 414 def supports_restart_db_transaction? false end
supports_savepoints?() 链接
此适配器是否支持保存点?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 404 def supports_savepoints? false end
supports_transaction_isolation?() 链接
此适配器是否支持设置事务的隔离级别?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 460 def supports_transaction_isolation? false end
supports_unique_constraints?() 链接
此适配器是否支持创建唯一约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 501 def supports_unique_constraints? false end
supports_validate_constraints?() 链接
此适配器是否支持创建无效约束?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 481 def supports_validate_constraints? false end
supports_views?() 链接
此适配器是否支持视图?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 506 def supports_views? false end
supports_virtual_columns?() 链接
此适配器是否支持虚拟列?
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 536 def supports_virtual_columns? false end
throw_away!() 链接
从池中移除连接并断开连接。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 748 def throw_away! pool.remove self disconnect! end
unprepared_statement() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 368 def unprepared_statement cache = prepared_statements_disabled_cache.add?(object_id) if @prepared_statements yield ensure cache&.delete(object_id) end
use_metadata_table?() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 218 def use_metadata_table? @config.fetch(:use_metadata_table, true) end
verify!() 链接
检查与数据库的连接是否仍然处于活动状态(即,未过期)。这是通过调用active?
在后台完成的。如果连接不再处于活动状态,则此方法将重新连接到数据库。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 774 def verify! unless active? if @unconfigured_connection @lock.synchronize do if @unconfigured_connection @raw_connection = @unconfigured_connection @unconfigured_connection = nil configure_connection @verified = true return end end end reconnect!(restore_transactions: true) end @verified = true end
实例私有方法
log(sql, name = "SQL", binds = [], type_casted_binds = [], statement_name = nil, async: false, &block) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract_adapter.rb, line 1142 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, &block ) rescue ActiveRecord::StatementInvalid => ex raise ex.set_query(sql, binds) end