1
0
Fork 0
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:
Rafael Mendonça França 2014-05-23 17:36:19 -03:00
commit 482091ca7c

View file

@ -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