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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2071a0941e2455164373e80f84f9cd536fd7bc82d216ded50b109c01e56e8b04
4
- data.tar.gz: 9261c128b18ccb53a941fba5e880021571a40d973e8cd1294d3c9a7bd3ff9cab
3
+ metadata.gz: b48e3fb20daadf888fd4bbf448b1cd3463ec8205030cb33f05041cac725050fb
4
+ data.tar.gz: deba6c857216fc73285e4a68535a6aff8ead236849c470977e6904178497dc27
5
5
  SHA512:
6
- metadata.gz: b17ff29e64a14aefdd0df18e6bb7c998d484cedffda0669adf15c6ff068c37591e34ee0769182f91718ab4f9e508bbdf34c577cd094c9c96d172fe338d270cf2
7
- data.tar.gz: c93fc458236e81969a54fe57f4988b2f23a2f541a4c0d7fbf7849c51c0b98f67c7c5b659458de2b06da3ca47ccd0b713abc8f2f4102c43ac897456249e4e1693
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] = now
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] = now
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, mark, tables, marks) unless pure.include?(' NOW() ')
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, mark, tables, marks)
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] = stale == mark ? Time.now : stale if (stale && stale != mark) || stillborn
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
@@ -10,5 +10,5 @@ require_relative '../pgtk'
10
10
  # Copyright:: Copyright (c) 2019-2026 Yegor Bugayenko
11
11
  # License:: MIT
12
12
  module Pgtk
13
- VERSION = '0.32.0' unless defined?(VERSION)
13
+ VERSION = '0.32.2' unless defined?(VERSION)
14
14
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pgtk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.32.0
4
+ version: 0.32.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko