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 +4 -4
- data/lib/waldit/version.rb +1 -1
- data/lib/waldit/watcher.rb +32 -10
- data/rbi/waldit.rbi +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e89f236a107159502d3d667c1073d39152cee8ba5923f3ef2a7f008e6ae78814
|
|
4
|
+
data.tar.gz: 1bc36fdd5dd1580f5ebbf3bc8cbe301cc6a9be74d467c561998289fe6d38e84e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ebf0fe008ddcc05e90ec6d6931a22153a45c58d7f73f94b01af3d7a33ba23406dd99a38b265d932b764ce0db38ca36f7c2df37a74c194d97b3b1a79df78a8e21
|
|
7
|
+
data.tar.gz: 9b4abee181b3c3a04399c7e2614018c9bc9bc65026cd6c28e89e3b74a7c47a4e3262cfbea882d59cf725a26f98c6f13d6dc2419c61ab6b5c7d871e2c6c62b361
|
data/lib/waldit/version.rb
CHANGED
data/lib/waldit/watcher.rb
CHANGED
|
@@ -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}" }
|
|
56
|
-
log_old = (changes[:old] || []).map { |table| "#{table}" }
|
|
57
|
-
log_diff = (changes[:diff] || []).map { |table| "#{table}" }
|
|
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.
|
|
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
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.
|
|
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-
|
|
10
|
+
date: 2025-10-16 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: wal
|