pgoutput-parser 0.1.1 → 0.2.0

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.
data/sig/pgoutput.rbs CHANGED
@@ -3,10 +3,14 @@ module Pgoutput
3
3
 
4
4
  type message =
5
5
  Messages::Begin |
6
+ Messages::Message |
7
+ Messages::Origin |
6
8
  Messages::Relation |
9
+ Messages::Type |
7
10
  Messages::Insert |
8
11
  Messages::Update |
9
12
  Messages::Delete |
13
+ Messages::Truncate |
10
14
  Messages::Commit
11
15
 
12
16
  class Error < StandardError
@@ -21,6 +25,10 @@ module Pgoutput
21
25
  class UnknownRelationError < Error
22
26
  end
23
27
 
28
+ class TupleArityError < Error
29
+ end
30
+
31
+ # Immutable message model classes for the PostgreSQL pgoutput protocol.
24
32
  module Messages
25
33
  class Begin < Data
26
34
  attr_reader final_lsn: Integer
@@ -39,6 +47,22 @@ module Pgoutput
39
47
  def self.new: (Integer flags, String name, Integer oid, Integer type_modifier) -> Column
40
48
  end
41
49
 
50
+ class Message < Data
51
+ attr_reader flags: Integer
52
+ attr_reader lsn: Integer
53
+ attr_reader prefix: String
54
+ attr_reader content: String
55
+
56
+ def self.new: (Integer flags, Integer lsn, String prefix, String content) -> Message
57
+ end
58
+
59
+ class Origin < Data
60
+ attr_reader origin_lsn: Integer
61
+ attr_reader name: String
62
+
63
+ def self.new: (Integer origin_lsn, String name) -> Origin
64
+ end
65
+
42
66
  class Relation < Data
43
67
  attr_reader relation_id: Integer
44
68
  attr_reader schema: String
@@ -46,13 +70,15 @@ module Pgoutput
46
70
  attr_reader replica_identity: Integer
47
71
  attr_reader columns: Array[Column]
48
72
 
49
- def self.new: (
50
- Integer relation_id,
51
- String schema,
52
- String table,
53
- Integer replica_identity,
54
- Array[Column] columns
55
- ) -> Relation
73
+ def self.new: (Integer relation_id, String schema, String table, Integer replica_identity, Array[Column] columns) -> Relation
74
+ end
75
+
76
+ class Type < Data
77
+ attr_reader oid: Integer
78
+ attr_reader schema: String
79
+ attr_reader name: String
80
+
81
+ def self.new: (Integer oid, String schema, String name) -> Type
56
82
  end
57
83
 
58
84
  class TupleValue < Data
@@ -60,11 +86,7 @@ module Pgoutput
60
86
  attr_reader raw: String?
61
87
  attr_reader oid: Integer?
62
88
 
63
- def self.new: (
64
- :null | :unchanged_toast | :text | :binary format,
65
- String? raw,
66
- Integer? oid
67
- ) -> TupleValue
89
+ def self.new: (:null | :unchanged_toast | :text | :binary format, String? raw, Integer? oid) -> TupleValue
68
90
  end
69
91
 
70
92
  class Insert < Data
@@ -80,12 +102,7 @@ module Pgoutput
80
102
  attr_reader old_tuple: Array[TupleValue]?
81
103
  attr_reader new_tuple: Array[TupleValue]
82
104
 
83
- def self.new: (
84
- Integer relation_id,
85
- Array[TupleValue]? old_key_tuple,
86
- Array[TupleValue]? old_tuple,
87
- Array[TupleValue] new_tuple
88
- ) -> Update
105
+ def self.new: (Integer relation_id, Array[TupleValue]? old_key_tuple, Array[TupleValue]? old_tuple, Array[TupleValue] new_tuple) -> Update
89
106
  end
90
107
 
91
108
  class Delete < Data
@@ -93,11 +110,14 @@ module Pgoutput
93
110
  attr_reader old_key_tuple: Array[TupleValue]?
94
111
  attr_reader old_tuple: Array[TupleValue]?
95
112
 
96
- def self.new: (
97
- Integer relation_id,
98
- Array[TupleValue]? old_key_tuple,
99
- Array[TupleValue]? old_tuple
100
- ) -> Delete
113
+ def self.new: (Integer relation_id, Array[TupleValue]? old_key_tuple, Array[TupleValue]? old_tuple) -> Delete
114
+ end
115
+
116
+ class Truncate < Data
117
+ attr_reader relation_ids: Array[Integer]
118
+ attr_reader options: Integer
119
+
120
+ def self.new: (Array[Integer] relation_ids, Integer options) -> Truncate
101
121
  end
102
122
 
103
123
  class Commit < Data
@@ -106,24 +126,59 @@ module Pgoutput
106
126
  attr_reader transaction_end_lsn: Integer
107
127
  attr_reader commit_timestamp: Integer
108
128
 
109
- def self.new: (
110
- Integer flags,
111
- Integer commit_lsn,
112
- Integer transaction_end_lsn,
113
- Integer commit_timestamp
114
- ) -> Commit
129
+ def self.new: (Integer flags, Integer commit_lsn, Integer transaction_end_lsn, Integer commit_timestamp) -> Commit
115
130
  end
116
131
  end
117
132
 
118
133
  class BinaryParser
134
+ @payload: String
135
+ @offset: Integer
136
+
119
137
  def initialize: (String payload) -> void
120
138
 
121
139
  def parse: () -> message
140
+
141
+ private
142
+
143
+ def parse_begin: () -> Messages::Begin
144
+ def parse_message: () -> Messages::Message
145
+ def parse_origin: () -> Messages::Origin
146
+ def parse_relation: () -> Messages::Relation
147
+ def parse_type: () -> Messages::Type
148
+ def parse_insert: () -> Messages::Insert
149
+ def parse_update: () -> Messages::Update
150
+ def parse_delete: () -> Messages::Delete
151
+ def parse_truncate: () -> Messages::Truncate
152
+ def parse_commit: () -> Messages::Commit
153
+ def parse_tuple_data: () -> Array[Messages::TupleValue]
154
+ def read_uint8: () -> Integer
155
+ def read_uint16: () -> Integer
156
+ def read_uint32: () -> Integer
157
+ def read_int32: () -> Integer
158
+ def read_uint64: () -> Integer
159
+ def read_byte_chr: () -> String
160
+ def read_cstring: () -> String
161
+ def read_bytes: (Integer length) -> String
162
+ def share: [T < message] (T message) -> T
122
163
  end
123
164
 
124
165
  class RelationTracker
125
- def initialize: () -> void
166
+ @relations: Hash[Integer, Messages::Relation]
167
+
168
+ def initialize: (?relation_cache: untyped) -> void
126
169
 
127
170
  def process: (String payload) -> message
171
+
172
+ def decode: (String payload) -> message
173
+
174
+ private
175
+
176
+ def annotate_insert: (Messages::Insert message) -> Messages::Insert
177
+ def annotate_update: (Messages::Update message) -> Messages::Update
178
+ def annotate_delete: (Messages::Delete message) -> Messages::Delete
179
+ def annotate_optional_tuple: (Array[Messages::TupleValue]? tuple, Messages::Relation relation) -> Array[Messages::TupleValue]?
180
+ def annotate_tuple: (Array[Messages::TupleValue] tuple, Messages::Relation relation) -> Array[Messages::TupleValue]
181
+ def validate_tuple_arity!: (Array[Messages::TupleValue] tuple, Messages::Relation relation) -> void
182
+ def relation_for: (Integer relation_id) -> Messages::Relation
128
183
  end
129
184
  end
metadata CHANGED
@@ -1,112 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgoutput-parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken C. Demanawa
8
8
  bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: minitest
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: '5.27'
19
- type: :development
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: '5.27'
26
- - !ruby/object:Gem::Dependency
27
- name: pry
28
- requirement: !ruby/object:Gem::Requirement
29
- requirements:
30
- - - "~>"
31
- - !ruby/object:Gem::Version
32
- version: 0.16.0
33
- type: :development
34
- prerelease: false
35
- version_requirements: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: 0.16.0
40
- - !ruby/object:Gem::Dependency
41
- name: rake
42
- requirement: !ruby/object:Gem::Requirement
43
- requirements:
44
- - - "~>"
45
- - !ruby/object:Gem::Version
46
- version: '13.4'
47
- type: :development
48
- prerelease: false
49
- version_requirements: !ruby/object:Gem::Requirement
50
- requirements:
51
- - - "~>"
52
- - !ruby/object:Gem::Version
53
- version: '13.4'
54
- - !ruby/object:Gem::Dependency
55
- name: rubocop
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: '1.87'
61
- type: :development
62
- prerelease: false
63
- version_requirements: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '1.87'
68
- - !ruby/object:Gem::Dependency
69
- name: simplecov
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '0.22'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.22'
82
- - !ruby/object:Gem::Dependency
83
- name: steep
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '1.10'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '1.10'
96
- - !ruby/object:Gem::Dependency
97
- name: yard
98
- requirement: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: 0.9.44
103
- type: :development
104
- prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- requirements:
107
- - - "~>"
108
- - !ruby/object:Gem::Version
109
- version: 0.9.44
11
+ dependencies: []
110
12
  description: A pure Ruby parser for PostgreSQL pgoutput logical replication CopyData
111
13
  payloads.
112
14
  email:
@@ -118,6 +20,9 @@ files:
118
20
  - CHANGELOG.md
119
21
  - LICENSE.txt
120
22
  - README.md
23
+ - docs/glossary.md
24
+ - docs/index.md
25
+ - docs/relation_tracker.md
121
26
  - lib/pgoutput.rb
122
27
  - lib/pgoutput/binary_parser.rb
123
28
  - lib/pgoutput/errors.rb
@@ -140,14 +45,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
140
45
  requirements:
141
46
  - - ">="
142
47
  - !ruby/object:Gem::Version
143
- version: '3.4'
48
+ version: '4.0'
144
49
  required_rubygems_version: !ruby/object:Gem::Requirement
145
50
  requirements:
146
51
  - - ">="
147
52
  - !ruby/object:Gem::Version
148
53
  version: '0'
149
54
  requirements: []
150
- rubygems_version: 3.6.9
55
+ rubygems_version: 4.0.10
151
56
  specification_version: 4
152
57
  summary: Ractor-safe PostgreSQL pgoutput logical replication protocol parser.
153
58
  test_files: []