pgtk 0.32.0 → 0.32.2
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/pgtk/stash.rb +13 -7
- data/lib/pgtk/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b48e3fb20daadf888fd4bbf448b1cd3463ec8205030cb33f05041cac725050fb
|
|
4
|
+
data.tar.gz: deba6c857216fc73285e4a68535a6aff8ead236849c470977e6904178497dc27
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dcf47d0d6145eba4cea340dbdc69bba939c84afad4da5a7aa9af2026cfc36d4b7a0dc29528e1a5cf5ed73ed45afaaaf1b1b64b6c52e36346c7a879cf8f13e77c
|
|
7
|
+
data.tar.gz: ea608bf12ae7334187830312d04d6954dc7f6071d49b9e6796a4a2b5b6fbbe219a836445ba208873f95d16bb31c7c9d866cf0fb20c1af92fa7ffbbd9d8b128ad
|
data/lib/pgtk/stash.rb
CHANGED
|
@@ -222,10 +222,12 @@ class Pgtk::Stash
|
|
|
222
222
|
affected = (tables + tables.flat_map { |t| @cascades&.fetch(t, []) || [] }).uniq
|
|
223
223
|
@entrance.with_write_lock do
|
|
224
224
|
affected.each do |t|
|
|
225
|
-
@stash[:table_mod][t]
|
|
225
|
+
old = @stash[:table_mod][t]
|
|
226
|
+
stamp = old && old > now ? old : now
|
|
227
|
+
@stash[:table_mod][t] = stamp
|
|
226
228
|
@stash[:tables][t]&.each do |q|
|
|
227
229
|
@stash[:queries][q]&.each_key do |key|
|
|
228
|
-
@stash[:queries][q][key][:stale] =
|
|
230
|
+
@stash[:queries][q][key][:stale] = stamp
|
|
229
231
|
end
|
|
230
232
|
end
|
|
231
233
|
end
|
|
@@ -237,18 +239,17 @@ class Pgtk::Stash
|
|
|
237
239
|
key = params.join(SEPARATOR)
|
|
238
240
|
ret = @stash.dig(:queries, pure, key, :ret)
|
|
239
241
|
if ret.nil? || @stash.dig(:queries, pure, key, :stale)
|
|
240
|
-
mark = @stash.dig(:queries, pure, key, :stale)
|
|
241
242
|
tables = pure.scan(/(?<=^|\s)(?:FROM|JOIN) ([a-z_]+)(?=\s|;|$)/).flatten
|
|
242
243
|
tables.uniq!
|
|
243
244
|
marks = tables.to_h { |t| [t, @stash[:table_mod][t]] }
|
|
244
245
|
ret = @pool.exec(pure, params, result)
|
|
245
|
-
cache(pure, key, params, result, ret,
|
|
246
|
+
cache(pure, key, params, result, ret, tables, marks) unless pure.include?(' NOW() ')
|
|
246
247
|
end
|
|
247
248
|
bump(pure, key) if @stash.dig(:queries, pure, key)
|
|
248
249
|
ret
|
|
249
250
|
end
|
|
250
251
|
|
|
251
|
-
def cache(pure, key, params, result, ret,
|
|
252
|
+
def cache(pure, key, params, result, ret, tables, marks)
|
|
252
253
|
raise(ArgumentError, "No tables at #{pure.inspect}") if tables.empty?
|
|
253
254
|
@entrance.with_write_lock do
|
|
254
255
|
tables.each do |t|
|
|
@@ -257,10 +258,15 @@ class Pgtk::Stash
|
|
|
257
258
|
end
|
|
258
259
|
@stash[:queries][pure] ||= {}
|
|
259
260
|
existing = @stash[:queries][pure][key]
|
|
260
|
-
stale = existing && existing[:stale]
|
|
261
261
|
stillborn = tables.any? { |t| (cur = @stash[:table_mod][t]) && cur != marks[t] }
|
|
262
262
|
entry = { ret:, params:, result:, used: Time.now }
|
|
263
|
-
entry[:stale] =
|
|
263
|
+
entry[:stale] =
|
|
264
|
+
if existing && existing[:stale]
|
|
265
|
+
existing[:stale]
|
|
266
|
+
elsif stillborn
|
|
267
|
+
Time.now
|
|
268
|
+
end
|
|
269
|
+
entry.delete(:stale) if entry[:stale].nil?
|
|
264
270
|
@stash[:queries][pure][key] = entry
|
|
265
271
|
end
|
|
266
272
|
end
|
data/lib/pgtk/version.rb
CHANGED