diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index d3e5b0a4adbc1a6a5ea99d88e834b85e098bf8d1..6310d7019279ca34fa2fea054beea6dca2727fdc 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -431,22 +431,16 @@ def translate_exception(exception, message) private def get_oid_type(oid, fmod, column_name, sql_type = '') # :nodoc: - - result = type_map.fetch(oid, fmod, sql_type) { - nil - } - - unless result + if !type_map.key?(oid) load_additional_types(type_map, [oid]) - result = type_map.fetch(oid, fmod, sql_type) { - warn "unknown OID #{oid}: failed to recognize type of '#{column_name}'. It will be treated as String." - Type::Value.new.tap do |cast_type| - type_map.register_type(oid, cast_type) - end - } end - result + type_map.fetch(oid, fmod, sql_type) { + warn "unknown OID #{oid}: failed to recognize type of '#{column_name}'. It will be treated as String." + Type::Value.new.tap do |cast_type| + type_map.register_type(oid, cast_type) + end + } end def initialize_type_map(m) # :nodoc: diff --git a/activerecord/lib/active_record/type/hash_lookup_type_map.rb b/activerecord/lib/active_record/type/hash_lookup_type_map.rb index 2a146d38a9d87b77e5d2fd78fed961f9a73ed53b..bf92680268fcabe8f832168f38d9bff58d538128 100644 --- a/activerecord/lib/active_record/type/hash_lookup_type_map.rb +++ b/activerecord/lib/active_record/type/hash_lookup_type_map.rb @@ -1,12 +1,6 @@ module ActiveRecord module Type class HashLookupTypeMap < TypeMap # :nodoc: - - def initialize - @cache = {} - super - end - delegate :key?, to: :@mapping def lookup(type, *args) @@ -14,24 +8,12 @@ def lookup(type, *args) end def fetch(type, *args, &block) - cache = (@cache[type] ||= {}) - resolved = cache[args] - - unless resolved - resolved = cache[args] = @mapping.fetch(type, block).call(type, *args) - end - - resolved + @mapping.fetch(type, block).call(type, *args) end def alias_type(type, alias_type) register_type(type) { |_, *args| lookup(alias_type, *args) } end - - def register_type(key, value=nil, &block) - @cache = {} - super(key, value, &block) - end end end end