Class: ActiveRecord::ConnectionAdapters::SchemaReflection
Class Attribute Summary
Class Method Summary
Instance Attribute Summary
Instance Method Summary
-
#add(connection, name)
-
#cached?(table_name) ⇒ Boolean
-
#clear!
-
#clear_data_source_cache!(connection, name)
-
#columns(connection, table_name)
-
#columns_hash(connection, table_name)
-
#columns_hash?(connection, table_name) ⇒ Boolean
-
#data_source_exists?(connection, name) ⇒ Boolean
-
#data_sources(connection, name)
-
#dump_to(connection, filename)
-
#indexes(connection, table_name)
-
#load!(connection)
-
#primary_keys(connection, table_name)
-
#set_schema_cache(cache)
-
#size(connection)
-
#version(connection)
-
#cache(connection)
private
-
#empty_cache
private
-
#load_cache(connection)
private
-
#database_version(connection)
Internal use only
Constructor Details
.new(cache_path, cache = nil) ⇒ SchemaReflection
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 16
def initialize(cache_path, cache = nil)
@cache = cache
@cache_path = cache_path
end
Class Attribute Details
.check_schema_cache_dump_version
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 10
attr_accessor :check_schema_cache_dump_version
.use_schema_cache_dump
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 9
attr_accessor :use_schema_cache_dump
Instance Attribute Details
#possible_cache_available? ⇒ Boolean
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 118
def possible_cache_available?
self.class.use_schema_cache_dump &&
@cache_path &&
File.file?(@cache_path)
end
Instance Method Details
#add(connection, name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 45
def add(connection, name)
cache(connection).add(connection, name)
end
#cache(connection)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 114
def cache(connection)
@cache ||= load_cache(connection) || empty_cache
end
#cached?(table_name) ⇒ Boolean
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 87
def cached?(table_name)
if @cache.nil?
unless self.class.check_schema_cache_dump_version
@cache = load_cache(nil)
end
end
@cache&.cached?(table_name)
end
#clear!
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 25
def clear!
@cache = empty_cache
nil
end
#clear_data_source_cache!(connection, name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 81
def clear_data_source_cache!(connection, name)
return if @cache.nil? && !possible_cache_available?
cache(connection).clear_data_source_cache!(connection, name)
end
#columns(connection, table_name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 53
def columns(connection, table_name)
cache(connection).columns(connection, table_name)
end
#columns_hash(connection, table_name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 57
def columns_hash(connection, table_name)
cache(connection).columns_hash(connection, table_name)
end
#columns_hash?(connection, table_name) ⇒ Boolean
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 61
def columns_hash?(connection, table_name)
cache(connection).columns_hash?(connection, table_name)
end
#data_source_exists?(connection, name) ⇒ Boolean
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 41
def data_source_exists?(connection, name)
cache(connection).data_source_exists?(connection, name)
end
#data_sources(connection, name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 49
def data_sources(connection, name)
cache(connection).data_sources(connection, name)
end
#database_version(connection)
This method is for internal use only.
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 69
def database_version(connection) cache(connection).database_version(connection)
end
#dump_to(connection, filename)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 99
def dump_to(connection, filename)
fresh_cache = empty_cache
fresh_cache.add_all(connection)
fresh_cache.dump_to(filename)
@cache = fresh_cache
end
#empty_cache
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 108
def empty_cache
new_cache = SchemaCache.allocate
new_cache.send(:initialize)
new_cache
end
#indexes(connection, table_name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 65
def indexes(connection, table_name)
cache(connection).indexes(connection, table_name)
end
#load!(connection)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 31
def load!(connection)
cache(connection)
self
end
#load_cache(connection)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 124
def load_cache(connection)
return unless possible_cache_available?
return unless new_cache = SchemaCache._load_from(@cache_path)
if self.class.check_schema_cache_dump_version
begin
current_version = connection.schema_version
if new_cache.version(connection) != current_version
warn "Ignoring #{@cache_path} because it has expired. The current schema version is #{current_version}, but the one in the schema cache file is #{new_cache.schema_version}."
return
end
rescue ActiveRecordError => error
warn "Failed to validate the schema cache because of #{error.class}: #{error.message}"
return
end
end
new_cache
end
#primary_keys(connection, table_name)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 37
def primary_keys(connection, table_name)
cache(connection).primary_keys(connection, table_name)
end
#set_schema_cache(cache)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 21
def set_schema_cache(cache)
@cache = cache
end
#size(connection)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 77
def size(connection)
cache(connection).size
end
#version(connection)
[ GitHub ]
# File 'activerecord/lib/active_record/connection_adapters/schema_cache.rb', line 73
def version(connection)
cache(connection).version(connection)
end