aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2019-06-21 18:20:16 +0200
committerKasper Timm Hansen <kaspth@gmail.com>2019-06-21 18:20:16 +0200
commitef1dbd8cc725f3df9080870ce58afd7d822df98a (patch)
treed538b0f3a5b25fb14066a0343384877112e3bf63
parent75a0cf4f8bc2e9be3e852a7b2e4ddd14380bd222 (diff)
downloadrails-ef1dbd8cc725f3df9080870ce58afd7d822df98a.tar.gz
rails-ef1dbd8cc725f3df9080870ce58afd7d822df98a.tar.bz2
rails-ef1dbd8cc725f3df9080870ce58afd7d822df98a.zip
Schema Cache: extract deduplication commonality
-rw-r--r--activerecord/lib/active_record/connection_adapters/schema_cache.rb25
1 files changed, 15 insertions, 10 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb
index d01327290d..7d54fcf9a0 100644
--- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb
+++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb
@@ -35,13 +35,14 @@ module ActiveRecord
end
def init_with(coder)
- @columns = deep_deduplicate(coder["columns"])
- @columns_hash = @columns.transform_values { |columns| columns.index_by(&:name) }
- @primary_keys = deep_deduplicate(coder["primary_keys"])
- @data_sources = deep_deduplicate(coder["data_sources"])
- @indexes = deep_deduplicate(coder["indexes"] || {})
+ @columns = coder["columns"]
+ @primary_keys = coder["primary_keys"]
+ @data_sources = coder["data_sources"]
+ @indexes = coder["indexes"] || {}
@version = coder["version"]
@database_version = coder["database_version"]
+
+ derive_columns_hash_and_deduplicate_values
end
def primary_keys(table_name)
@@ -128,14 +129,18 @@ module ActiveRecord
@version, @columns, _columns_hash, @primary_keys, @data_sources, @indexes, @database_version = array
@indexes ||= {}
- @columns = deep_deduplicate(@columns)
- @columns_hash = @columns.transform_values { |columns| columns.index_by(&:name) }
- @primary_keys = deep_deduplicate(@primary_keys)
- @data_sources = deep_deduplicate(@data_sources)
- @indexes = deep_deduplicate(@indexes)
+ derive_columns_hash_and_deduplicate_values
end
private
+ def derive_columns_hash_and_deduplicate_values
+ @columns = deep_deduplicate(@columns)
+ @columns_hash = @columns.transform_values { |columns| columns.index_by(&:name) }
+ @primary_keys = deep_deduplicate(@primary_keys)
+ @data_sources = deep_deduplicate(@data_sources)
+ @indexes = deep_deduplicate(@indexes)
+ end
+
def deep_deduplicate(value)
case value
when Hash