class PG::BasicTypeRegistry::CoderMap
and type cast direction (encoder or decoder).
An instance of this class stores the coders that should be used for a given 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 = {} _ranges, nodes = result.partition { |row| row['typinput'] == 'range_in' } leaves, nodes = nodes.partition { |row| row['typelem'].to_i == 0 } arrays, nodes = nodes.partition { |row| row['typinput'] == 'array_in' } # populate the enum types _enums, leaves = leaves.partition { |row| row['typinput'] == 'enum_in' } # enums.each do |row| # coder_map[row['oid'].to_i] = OID::Enum.new # end # populate the base types leaves.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 end _records_by_oid = result.group_by { |row| row['oid'] } # populate composite types # nodes.each do |row| # add_oid row, records_by_oid, coder_map # 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 end end # populate range types # ranges.find_all { |row| coder_map.key? row['rngsubtype'].to_i }.each do |row| # subcoder = coder_map[row['rngsubtype'].to_i] # range = OID::Range.new subcoder # coder_map[row['oid'].to_i] = range # end @coders = coder_map.values @coders_by_name = @coders.inject({}){|h, t| h[t.name] = t; h } @coders_by_oid = @coders.inject({}){|h, t| h[t.oid] = t; h } @typenames_by_oid = result.inject({}){|h, t| h[t['oid'].to_i] = t['typname']; h } end