Class: ActiveRecord::ConnectionAdapters::PostgreSQL::OID::TypeMapInitializer

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb

Overview

This class uses the data from PostgreSQL pg_type table to build the OID -> Type mapping.

- OID is an integer representing the type.
- Type is an OID::Type object.

This class has side effects on the store passed during initialization.

Instance Method Summary collapse

Constructor Details

#initialize(store) ⇒ TypeMapInitializer

:nodoc:



11
12
13
# File 'lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb', line 11

def initialize(store)
  @store = store
end

Instance Method Details

#run(records) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/active_record/connection_adapters/postgresql/oid/type_map_initializer.rb', line 15

def run(records)
  nodes = records.reject { |row| @store.key? row['oid'].to_i }
  mapped, nodes = nodes.partition { |row| @store.key? row['typname'] }
  ranges, nodes = nodes.partition { |row| row['typtype'] == 'r' }
  enums, nodes = nodes.partition { |row| row['typtype'] == 'e' }
  domains, nodes = nodes.partition { |row| row['typtype'] == 'd' }
  arrays, nodes = nodes.partition { |row| row['typinput'] == 'array_in' }
  composites, nodes = nodes.partition { |row| row['typelem'] != '0' }

  mapped.each     { |row| register_mapped_type(row)    }
  enums.each      { |row| register_enum_type(row)      }
  domains.each    { |row| register_domain_type(row)    }
  arrays.each     { |row| register_array_type(row)     }
  ranges.each     { |row| register_range_type(row)     }
  composites.each { |row| register_composite_type(row) }
end