Found while greening the vgi-rust SDK CI (windows-latest / http lane), 2026-07-16.
Symptom: with vgi_result_cache_pack = false, vgi_result_cache_dir + vgi_result_cache_disk_max_bytes set, and per-value memoization at its default, a correlated LATERAL over a temp table (SELECT count(*) FROM t, LATERAL ex.cached_double(t.x) after a flush) writes zero objects/*.vrc and refs/*.ref on Windows — deterministic across reruns (vgi-rust Integration run 29546814011, twice). The in-memory exchange cache works (hit/miss assertions earlier in the same file pass).
What DOES work on the same Windows runner, which narrows it down:
- the loose ref-count-cap flow later in the same file (
vgi_result_cache_per_value = false, single-row VALUES inputs) persists refs fine;
- producer-mode disk tests (cache/disk.test, cache/disk_streaming.test) persist fine;
- macOS / Linux pass the identical section.
So the failing combination is roughly: loose store + per-value default ON + multi-row temp-table LATERAL input, Windows only. VgiResultCache::PersistToDisk has a best-effort catch (...) that swallows whatever throws (src/vgi_result_cache.cpp), so the cause is invisible in logs — instrumenting that catch on a Windows box is probably the fastest route.
Mitigation in tree: 400fac7 split the assertions into test/sql/integration/cache/exchange_lateral_disk.test gated require notwindows, so SDK CIs stay green on Windows. Re-merge that file into cache/exchange_lateral.test when fixing this.
Found while greening the vgi-rust SDK CI (windows-latest / http lane), 2026-07-16.
Symptom: with
vgi_result_cache_pack = false,vgi_result_cache_dir+vgi_result_cache_disk_max_bytesset, and per-value memoization at its default, a correlated LATERAL over a temp table (SELECT count(*) FROM t, LATERAL ex.cached_double(t.x)after a flush) writes zeroobjects/*.vrcandrefs/*.refon Windows — deterministic across reruns (vgi-rust Integration run 29546814011, twice). The in-memory exchange cache works (hit/miss assertions earlier in the same file pass).What DOES work on the same Windows runner, which narrows it down:
vgi_result_cache_per_value = false, single-row VALUES inputs) persists refs fine;So the failing combination is roughly: loose store + per-value default ON + multi-row temp-table LATERAL input, Windows only.
VgiResultCache::PersistToDiskhas a best-effortcatch (...)that swallows whatever throws (src/vgi_result_cache.cpp), so the cause is invisible in logs — instrumenting that catch on a Windows box is probably the fastest route.Mitigation in tree: 400fac7 split the assertions into test/sql/integration/cache/exchange_lateral_disk.test gated
require notwindows, so SDK CIs stay green on Windows. Re-merge that file into cache/exchange_lateral.test when fixing this.