Class: PG::BasicTypeRegistry::CoderMap
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/pg/basic_type_registry.rb |
Overview
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.
Constant Summary
-
DONT_QUOTE_TYPES =
private
Hash of text types that don’t require quotation, when used within composite types.
type.name => true
%w[ int2 int4 int8 float4 float8 oid bool date timestamp timestamptz ].inject({}){|h,e| h[e] = true; h }.freeze
Class Method Summary
Instance Attribute Summary
- #coders readonly
- #coders_by_name readonly
- #coders_by_oid readonly
Instance Method Summary
Constructor Details
.new(result, coders_by_name, format, arraycoder) ⇒ CoderMap
# File 'lib/pg/basic_type_registry.rb', line 45
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
Instance Attribute Details
#coders (readonly)
[ GitHub ]# File 'lib/pg/basic_type_registry.rb', line 81
attr_reader :coders
#coders_by_name (readonly)
[ GitHub ]# File 'lib/pg/basic_type_registry.rb', line 83
attr_reader :coders_by_name
#coders_by_oid (readonly)
[ GitHub ]# File 'lib/pg/basic_type_registry.rb', line 82
attr_reader :coders_by_oid
Instance Method Details
#coder_by_name(name)
[ GitHub ]# File 'lib/pg/basic_type_registry.rb', line 85
def coder_by_name(name) @coders_by_name[name] end
#coder_by_oid(oid)
[ GitHub ]# File 'lib/pg/basic_type_registry.rb', line 89
def coder_by_oid(oid) @coders_by_oid[oid] end