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