From ef1dbd8cc725f3df9080870ce58afd7d822df98a Mon Sep 17 00:00:00 2001 From: Kasper Timm Hansen Date: Fri, 21 Jun 2019 18:20:16 +0200 Subject: Schema Cache: extract deduplication commonality --- .../connection_adapters/schema_cache.rb | 25 +++++++++++++--------- 1 file changed, 15 insertions(+), 10 deletions(-) (limited to 'activerecord/lib') 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 -- cgit v1.2.3