mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #15277 from sgrif/sg-schema-cache-refactor
Simplify the code in schema cache
This commit is contained in:
commit
482091ca7c
1 changed files with 11 additions and 31 deletions
|
@ -12,11 +12,10 @@ module ActiveRecord
|
|||
@columns_hash = {}
|
||||
@primary_keys = {}
|
||||
@tables = {}
|
||||
prepare_default_proc
|
||||
end
|
||||
|
||||
def primary_keys(table_name)
|
||||
@primary_keys[table_name]
|
||||
@primary_keys[table_name] ||= table_exists?(table_name) ? connection.primary_key(table_name) : nil
|
||||
end
|
||||
|
||||
# A cached lookup for table existence.
|
||||
|
@ -29,9 +28,9 @@ module ActiveRecord
|
|||
# Add internal cache for table with +table_name+.
|
||||
def add(table_name)
|
||||
if table_exists?(table_name)
|
||||
@primary_keys[table_name]
|
||||
@columns[table_name]
|
||||
@columns_hash[table_name]
|
||||
primary_keys(table_name)
|
||||
columns(table_name)
|
||||
columns_hash(table_name)
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -40,14 +39,16 @@ module ActiveRecord
|
|||
end
|
||||
|
||||
# Get the columns for a table
|
||||
def columns(table)
|
||||
@columns[table]
|
||||
def columns(table_name)
|
||||
@columns[table_name] ||= connection.columns(table_name)
|
||||
end
|
||||
|
||||
# Get the columns for a table as a hash, key is the column name
|
||||
# value is the column object.
|
||||
def columns_hash(table)
|
||||
@columns_hash[table]
|
||||
def columns_hash(table_name)
|
||||
@columns_hash[table_name] ||= Hash[columns(table_name).map { |col|
|
||||
[col.name, col]
|
||||
}]
|
||||
end
|
||||
|
||||
# Clears out internal caches
|
||||
|
@ -76,32 +77,11 @@ module ActiveRecord
|
|||
def marshal_dump
|
||||
# if we get current version during initialization, it happens stack over flow.
|
||||
@version = ActiveRecord::Migrator.current_version
|
||||
[@version] + [@columns, @columns_hash, @primary_keys, @tables].map { |val|
|
||||
Hash[val]
|
||||
}
|
||||
[@version, @columns, @columns_hash, @primary_keys, @tables]
|
||||
end
|
||||
|
||||
def marshal_load(array)
|
||||
@version, @columns, @columns_hash, @primary_keys, @tables = array
|
||||
prepare_default_proc
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def prepare_default_proc
|
||||
@columns.default_proc = Proc.new do |h, table_name|
|
||||
h[table_name] = connection.columns(table_name)
|
||||
end
|
||||
|
||||
@columns_hash.default_proc = Proc.new do |h, table_name|
|
||||
h[table_name] = Hash[columns(table_name).map { |col|
|
||||
[col.name, col]
|
||||
}]
|
||||
end
|
||||
|
||||
@primary_keys.default_proc = Proc.new do |h, table_name|
|
||||
h[table_name] = table_exists?(table_name) ? connection.primary_key(table_name) : nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue