Class: Pgoutput::Decoder::RowBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/pgoutput/decoder/row_builder.rb

Overview

Builds decoded row hashes from Relation metadata and TupleValue arrays.

Instance Method Summary collapse

Constructor Details

#initialize(type_registry: TypeRegistry.default) ⇒ void

Parameters:

  • type_registry (TypeRegistry) (defaults to: TypeRegistry.default)


11
12
13
14
# File 'lib/pgoutput/decoder/row_builder.rb', line 11

def initialize(type_registry: TypeRegistry.default)
  @value_decoder = ValueDecoder.new(type_registry: type_registry)
  freeze
end

Instance Method Details

#build(relation, tuple) ⇒ Hash<String, Object>

Build a decoded row hash.

Parameters:

  • relation (Pgoutput::Messages::Relation)
  • tuple (Array<Pgoutput::Messages::TupleValue>)

Returns:

  • (Hash<String, Object>)


21
22
23
# File 'lib/pgoutput/decoder/row_builder.rb', line 21

def build(relation, tuple)
  build_columns(relation.columns, tuple)
end

#build_key(relation, tuple) ⇒ Hash<String, Object>

Build a decoded replica-key hash.

PostgreSQL may encode an old-key tuple at full relation width with placeholders for non-key columns, while compact protocol fixtures may contain only key values. Relation flags determine the exact key columns in both representations.

Parameters:

  • relation (Pgoutput::Messages::Relation)
  • tuple (Array<Pgoutput::Messages::TupleValue>)

Returns:

  • (Hash<String, Object>)


35
36
37
38
39
# File 'lib/pgoutput/decoder/row_builder.rb', line 35

def build_key(relation, tuple)
  key_columns = relation.columns.select { |column| key_column?(column) }
  columns = tuple.length == relation.columns.length ? relation.columns : key_columns
  build_columns(columns, tuple, key_only: true)
end