pg-replication-protocol 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07bd494baf2df079a175855749b79dc41460c5903a58e3cef89f7ac1304e6e9b
4
- data.tar.gz: 28ad5dced1a6a73c84a62ce6eae434dbde34883378555c8bac7674d477928627
3
+ metadata.gz: 72bf40ef6c6c482636553033a8747eec8239f4b10602486376806fd6bff59a91
4
+ data.tar.gz: 4df39c13ee3b16f7e77114c7ef061e75b33b1f112e6341ce4aeb28898096d703
5
5
  SHA512:
6
- metadata.gz: 7bd50c203eb711090bdbb0b16d745e46472d936191ac3c3653138bc9db42cecd6b1ed51a625eeae5194be3ca17c66e6f8a05dd4a860979a791d4fa54eee74139
7
- data.tar.gz: 3ddaf038c9cdfab3c05c4ac2e6eac8c1799c7a0b1d334a4657b19a9251feeac835784bbdec5a94fba43260f50b932441cd49786f1f573c7a607687a742ef8eb4
6
+ metadata.gz: 6b3a4cd7627a4d8229f88ba7d086a95a6fac1ae76fe7d856970ce1dd745272696046f18e55bb551345fa8b431691ac351d3cffcdc809f07ecba5fa78d6f4b67a
7
+ data.tar.gz: da57dba3124e0c3e8c5832d570f471b2a15ee68c2afc0fd71e0f5c5410ec61585f99dcfb1499059106cf1cb06073552335897035388b45aa884dfc0d757155e0
@@ -19,19 +19,19 @@ module PG
19
19
  end
20
20
 
21
21
  def read_int8
22
- read(1).unpack("C").first
22
+ readbyte
23
23
  end
24
24
 
25
25
  def read_int16
26
- read(2).unpack("n").first
26
+ read_bytes(2).unpack("n").first
27
27
  end
28
28
 
29
29
  def read_int32
30
- read(4).unpack("N").first
30
+ read_bytes(4).unpack("N").first
31
31
  end
32
32
 
33
33
  def read_int64
34
- read(8).unpack("Q>").first
34
+ read_bytes(8).unpack("Q>").first
35
35
  end
36
36
 
37
37
  def read_timestamp
@@ -50,6 +50,14 @@ module PG
50
50
  end
51
51
  end
52
52
  end
53
+
54
+ private
55
+
56
+ def read_bytes(n)
57
+ bytes = read(n)
58
+ raise EOFError if bytes.nil? || bytes.size < n
59
+ bytes
60
+ end
53
61
  end
54
62
  end
55
63
  end
@@ -13,7 +13,19 @@ module PG
13
13
  Update = Data.define(:oid, :key, :old, :new)
14
14
  Delete = Data.define(:oid, :key, :old)
15
15
  Truncate = Data.define(:oid)
16
- Tuple = Data.define(:type, :data)
16
+ Tuple = Data.define(:type, :data) do
17
+ def text?
18
+ type == "t"
19
+ end
20
+
21
+ def binary?
22
+ type == "b"
23
+ end
24
+
25
+ def toast?
26
+ type == "u"
27
+ end
28
+ end
17
29
  Column = Data.define(:flags, :name, :oid, :modifier) do
18
30
  def key?
19
31
  flags == 1
@@ -150,8 +162,10 @@ module PG
150
162
  end
151
163
 
152
164
  def self.read_tuple(buffer)
153
- case buffer.read_char
154
- in type if type == "n"
165
+ case (type = buffer.read_char)
166
+ in "n"
167
+ Tuple.new(type:, data: nil)
168
+ in "u"
155
169
  Tuple.new(type:, data: nil)
156
170
  in type
157
171
  size = buffer.read_int32
@@ -2,6 +2,6 @@
2
2
 
3
3
  module PG
4
4
  module Replication
5
- VERSION = "0.0.5"
5
+ VERSION = "0.0.6"
6
6
  end
7
7
  end
@@ -48,15 +48,18 @@ module PG
48
48
  case (msg = Protocol.read_message(Buffer.new(StringIO.new(data))))
49
49
  in Protocol::XLogData(lsn:, data:) if auto_keep_alive
50
50
  y << msg
51
- standby_status_update(write_lsn: lsn)
52
- @last_confirmed_lsn = lsn
51
+ standby_status_update(write_lsn: lsn) if lsn > 0
53
52
  last_keep_alive = Time.now
54
53
 
55
- in Protocol::PrimaryKeepalive(server_time:, asap: true) if auto_keep_alive
56
- standby_status_update(write_lsn: @last_confirmed_lsn)
54
+ in Protocol::PrimaryKeepalive(current_lsn:, server_time:, asap: true) if auto_keep_alive
55
+ standby_status_update(write_lsn: current_lsn)
57
56
  last_keep_alive = Time.now
58
57
  y << msg
59
58
 
59
+ in Protocol::PrimaryKeepalive(current_lsn:)
60
+ y << msg
61
+ @last_confirmed_lsn = [@last_confirmed_lsn, current_lsn].compact.max
62
+
60
63
  else
61
64
  y << msg
62
65
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg-replication-protocol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Navarro
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-06-04 00:00:00.000000000 Z
10
+ date: 2025-06-20 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: pg