class PG::BasicTypeRegistry::CoderMap
Each coder object is filled with the PostgreSQL type name, OID, wire format and array coders are filled with the base elements_type.
and type cast direction (encoder or decoder).
An instance of this class stores the coders that should be used for a particular wire format (text or binary)
def coder_by_name(name)
def coder_by_name(name) @coders_by_name[name] end
def coder_by_oid(oid)
def coder_by_oid(oid) @coders_by_oid[oid] end
def initialize(result, coders_by_name, format, arraycoder)
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