waldit 0.0.17 → 0.0.20

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: 6c66dca1c2f51bdaa3f85e6f3f13930536e9352e6d5958f8b8eab140a108cab4
4
- data.tar.gz: 43d8b34c506b98f5213372e624ab35d19f586570c47cf3abc5e692ec85ead638
3
+ metadata.gz: e89f236a107159502d3d667c1073d39152cee8ba5923f3ef2a7f008e6ae78814
4
+ data.tar.gz: 1bc36fdd5dd1580f5ebbf3bc8cbe301cc6a9be74d467c561998289fe6d38e84e
5
5
  SHA512:
6
- metadata.gz: 261e9f0b9bf6948c6fa6ac2f2bfd3dc2baf15541aa7ef18818b9aef76af08925427cf90a195bc32008c17bd674991687ac24cb1fe95b65d7cef08574c57aee08
7
- data.tar.gz: 3a3dbf1982be4498d393f6ff10ce5be88835c34cdc0272be8d692db1ed5886ff66af1ea41f3e2f1dd79eab24a1ddf2d695c1a93ae74b38117d54de38e85695a0
6
+ metadata.gz: ebf0fe008ddcc05e90ec6d6931a22153a45c58d7f73f94b01af3d7a33ba23406dd99a38b265d932b764ce0db38ca36f7c2df37a74c194d97b3b1a79df78a8e21
7
+ data.tar.gz: 9b4abee181b3c3a04399c7e2614018c9bc9bc65026cd6c28e89e3b74a7c47a4e3262cfbea882d59cf725a26f98c6f13d6dc2419c61ab6b5c7d871e2c6c62b361
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Waldit
4
- VERSION = "0.0.17"
4
+ VERSION = "0.0.20"
5
5
  end
@@ -52,16 +52,22 @@ module Waldit
52
52
  .map { |diff| [diff, tables.filter { |table| Waldit.store_changes.call(table).include? diff }] }
53
53
  .to_h
54
54
 
55
- log_new = (changes[:new] || []).map { |table| "#{table}" }.join(",")
56
- log_old = (changes[:old] || []).map { |table| "#{table}" }.join(",")
57
- log_diff = (changes[:diff] || []).map { |table| "#{table}" }.join(",")
55
+ log_new = (changes[:new] || []).map { |table| "#{table}" }
56
+ log_old = (changes[:old] || []).map { |table| "#{table}" }
57
+ log_diff = (changes[:diff] || []).map { |table| "#{table}" }
58
58
 
59
59
  @connection.exec_prepared("waldit_finish", [
60
60
  event.transaction_id,
61
61
  event.timestamp,
62
- "{#{log_new}}",
63
- "{#{log_old}}",
64
- "{#{log_diff}}",
62
+ "{#{log_new.join(",")}}",
63
+ "{#{log_old.join(",")}}",
64
+ "{#{log_diff.join(",")}}",
65
+ ])
66
+
67
+ @connection.exec_prepared("waldit_cleanup", [
68
+ event.transaction_id,
69
+ "{#{(log_new + log_old).join(",")}}",
70
+ "{#{log_diff.join(",")}}",
65
71
  ])
66
72
 
67
73
  # We sucessful retried a connection, let's reset our retry state
@@ -112,12 +118,13 @@ module Waldit
112
118
  private
113
119
 
114
120
  def initialize_connection
115
- @connection = record.connection.raw_connection
121
+ @connection = record.connection_pool.checkout.raw_connection
116
122
  prepare_insert
117
123
  prepare_update
118
124
  prepare_delete
119
125
  prepare_delete_cleanup
120
126
  prepare_finish
127
+ prepare_cleanup
121
128
  end
122
129
 
123
130
  def prepare_insert
@@ -168,10 +175,10 @@ module Waldit
168
175
  UPDATE #{record.table_name}
169
176
  SET
170
177
  committed_at = $2,
171
- new = CASE WHEN table_name = ANY ($3::varchar[]) THEN new ELSE null END,
172
- old = CASE WHEN table_name = ANY ($4::varchar[]) THEN old ELSE null END,
178
+ new = CASE WHEN action = 'insert' OR table_name = ANY ($3::varchar[]) THEN new ELSE null END,
179
+ old = CASE WHEN action = 'delete' OR table_name = ANY ($4::varchar[]) THEN old ELSE null END,
173
180
  diff =
174
- CASE WHEN table_name = ANY ($5::varchar[]) THEN (
181
+ CASE WHEN action = 'update' AND table_name = ANY ($5::varchar[]) THEN (
175
182
  SELECT
176
183
  jsonb_object_agg(
177
184
  coalesce(old_kv.key, new_kv.key),
@@ -187,5 +194,20 @@ module Waldit
187
194
  SQL
188
195
  rescue PG::DuplicatePstatement
189
196
  end
197
+
198
+ def prepare_cleanup
199
+ @connection.prepare("waldit_cleanup", <<~SQL)
200
+ DELETE FROM #{record.table_name}
201
+ WHERE
202
+ transaction_id = $1
203
+ AND action = 'update'::waldit_action
204
+ AND (
205
+ (diff IS NULL AND table_name = ANY ($3::varchar[]))
206
+ OR
207
+ (new = old AND table_name = ANY ($2::varchar[]))
208
+ )
209
+ SQL
210
+ rescue PG::DuplicatePstatement
211
+ end
190
212
  end
191
213
  end
data/rbi/waldit.rbi CHANGED
@@ -2,7 +2,7 @@
2
2
  module Waldit
3
3
  extend T::Sig
4
4
  extend Waldit::Context
5
- VERSION = "0.0.17"
5
+ VERSION = "0.0.19"
6
6
 
7
7
  class << self
8
8
  sig { returns(String) }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waldit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.17
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Navarro
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-09-08 00:00:00.000000000 Z
10
+ date: 2025-10-16 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: wal