Class: Pgoutput::RelationTracker

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

Overview

Stateful relation tracker for pgoutput message sequences.

The relation tracker remembers Relation (‘R`) messages so DML tuple values can be annotated with PostgreSQL type OIDs. It does not decode or convert values. It only adds protocol metadata to tuple values while keeping returned objects deeply shareable.

The instance contains mutable relation-cache state and should not be shared across Ractors. Returned message objects are Ractor-safe.

Instance Method Summary collapse

Constructor Details

#initializevoid



17
18
19
# File 'lib/pgoutput/relation_tracker.rb', line 17

def initialize
  @relations = {}
end

Instance Method Details

#decode(payload) ⇒ Pgoutput::Messages::Begin, ...

Backwards-compatible alias for callers migrating from RelationTracker.

Parameters:

  • payload (String)

    one pgoutput logical replication message payload.

Returns:



52
53
54
# File 'lib/pgoutput/relation_tracker.rb', line 52

def decode(payload)
  process(payload)
end

#process(payload) ⇒ Pgoutput::Messages::Begin, ...

Process one pgoutput payload in stream order.

Parameters:

  • payload (String)

    one pgoutput logical replication message payload.

Returns:

Raises:



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/pgoutput/relation_tracker.rb', line 28

def process(payload)
  message = BinaryParser.new(payload).parse

  case message
  when Messages::Relation
    @relations[message.relation_id] = message
    message
  when Messages::Insert
    annotate_insert(message)
  when Messages::Update
    annotate_update(message)
  when Messages::Delete
    annotate_delete(message)
  else
    message
  end
end