Class: PostgresPR::RowDescription

Inherits:
Message
  • Object
show all
Defined in:
lib/postgres-pr/message.rb

Defined Under Namespace

Classes: FieldInfo

Constant Summary

Constants inherited from Message

Message::MsgTypeMap

Instance Method Summary collapse

Methods inherited from Message

#buffer, create, dump, fields, read, register_message_type

Instance Method Details

#dumpObject



450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
# File 'lib/postgres-pr/message.rb', line 450

def dump
  sz = @fields.inject(2) {|sum, fld| sum + 18 + fld.name.size + 1 }
  super(sz) do |buffer|
    buffer.write_int16_network(@fields.size)
    @fields.each { |f|
      buffer.write_cstring(f.name)
      buffer.write_int32_network(f.oid)
      buffer.write_int16_network(f.attr_nr)
      buffer.write_int32_network(f.type_oid)
      buffer.write_int16_network(f.typlen)
      buffer.write_int32_network(f.atttypmod)
      buffer.write_int16_network(f.formatcode)
    }
  end
end

#parse(buffer) ⇒ Object



467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
# File 'lib/postgres-pr/message.rb', line 467

def parse(buffer)
  super do
    fields = []
    n_fields = buffer.read_int16_network
    while n_fields > 0
      f = FieldInfo.new
      f.name       = buffer.read_cstring
      f.oid        = buffer.read_int32_network
      f.attr_nr    = buffer.read_int16_network
      f.type_oid   = buffer.read_int32_network
      f.typlen     = buffer.read_int16_network
      f.atttypmod  = buffer.read_int32_network
      f.formatcode = buffer.read_int16_network
      fields << f
      n_fields -= 1
    end
    @fields = fields
  end
end