class PG::BasicTypeRegistry::CoderMap

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