class PG::BasicTypeRegistry::CoderMap
An instance of this class stores the coders that should be used for a particular wire format (text or binary) and type cast direction (encoder or decoder).
Each coder object is filled with the PostgreSQL type name, OID, wire format and array coders are filled with the base elements_type.
Attributes
coders[R]
coders_by_name[R]
coders_by_oid[R]
Public Class Methods
new(result, coders_by_name, format, arraycoder)
click to toggle source
# File lib/pg/basic_type_registry.rb, line 44 def initialize(result, coders_by_name, format, arraycoder) coder_map = {} arrays, nodes = result.partition { |row| row['typinput'] == 'array_in' } # populate the base types nodes.find_all { |row| coders_by_name.key?(row['typname']) }.each do |row| coder = coders_by_name[row['typname']].dup coder.oid = row['oid'].to_i coder.name = row['typname'] coder.format = format coder_map[coder.oid] = coder.freeze end if arraycoder # populate array types arrays.each do |row| elements_coder = coder_map[row['typelem'].to_i] next unless elements_coder coder = arraycoder.new coder.oid = row['oid'].to_i coder.name = row['typname'] coder.format = format coder.elements_type = elements_coder coder.needs_quotation = !DONT_QUOTE_TYPES[elements_coder.name] coder_map[coder.oid] = coder.freeze end end @coders = coder_map.values.freeze @coders_by_name = @coders.inject({}){|h, t| h[t.name] = t; h }.freeze @coders_by_oid = @coders.inject({}){|h, t| h[t.oid] = t; h }.freeze freeze end
Public Instance Methods
coder_by_name(name)
click to toggle source
# File lib/pg/basic_type_registry.rb, line 84 def coder_by_name(name) @coders_by_name[name] end
coder_by_oid(oid)
click to toggle source
# File lib/pg/basic_type_registry.rb, line 88 def coder_by_oid(oid) @coders_by_oid[oid] end