From da996748491fb7fdf332d3f74d9f42907f6aeef7 Mon Sep 17 00:00:00 2001 From: JohnnyT Date: Wed, 30 Sep 2026 14:01:46 -0600 Subject: [PATCH 1/2] Corrects the reap fix's changelog fragment The fragment said the Postgres-only `= ANY(...)` form failed every reap of a SQLite host. A reap that found no row to stamp or delete never reached that form: the private stamp/3 and delete/2 answered 0 for an empty list without a statement, from 0.8.0 to 0.9.1, so that reap succeeded. The fragment now says the failure was any reap that found a row to stamp or delete, and that a reap with nothing to write sent no statement. Refs: sr-ejg1 --- changelog.d/sr-1rgb.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/changelog.d/sr-1rgb.md b/changelog.d/sr-1rgb.md index 777d2f6..26f6144 100644 --- a/changelog.d/sr-1rgb.md +++ b/changelog.d/sr-1rgb.md @@ -1,5 +1,6 @@ ### Fixed - `StatifierRouter.Addresses.reap/3` runs on SQLite: its stamp and delete - no longer use Postgres's `= ANY(...)`, which failed every reap of a - SQLite host on 0.8.0 and later, under an integer or a text key. + no longer use Postgres's `= ANY(...)`, which failed any reap of a SQLite + host on 0.8.0 and later that found a row to stamp or delete, under an + integer or a text key; a reap with nothing to write sent no statement. From 18ecd13db75e14b22194f7e1f30a998215f40863 Mon Sep 17 00:00:00 2001 From: JohnnyT Date: Wed, 30 Sep 2026 14:03:37 -0600 Subject: [PATCH 2/2] Prepares 0.9.2 The bump and the changelog promotion, and nothing else: `mix.exs`'s `@version`, which `StatifierRouter.version/0` and the docs' `source_ref` both read; the one `changelog.d/` fragment on main (sr-1rgb, as corrected by the commit before this one) assembled into a `## [0.9.2] 2026-09-30` section under a lead paragraph, and deleted in the same commit, its bullet carried over byte for byte; and the header's `changelog.d/` link moved to `blob/v0.9.2`. The README install pin stays at `~> 0.9.0`, as a patch leaves it. A patch, because nothing grows or changes a public surface: since v0.9.1, lib/ changes only `StatifierRouter.Addresses`'s private `stamp/3` and `delete/2`, which name their rows in an IN list instead of `= ANY(...)` and write more than 500 ids in batches of 500, a new private helper `in_batches/2` and a private module attribute. `reap/3`'s signature, spec, options and result are unchanged, no module, function, option or migration version is added, and a Postgres host sees the same counts. `ecto_sqlite3` is a test-only dependency and does not ship. No tag and no publish: the merge and the tag are the conductor's, the publish the operator's. `mix hex.build` builds 0.9.2; the tar it wrote was deleted before this commit. Full `mix quality` green under the repo gate lock and a machine slot on this exact tree (write-tree bd60d3ad before and after the run), held across this commit: format, compile, isolated tests, doc links, deps, docs, credo, 425 of 425 tests at 97.7% coverage, dialyzer. Refs: sr-ejg1 --- CHANGELOG.md | 13 ++++++++++++- changelog.d/sr-1rgb.md | 6 ------ mix.exs | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) delete mode 100644 changelog.d/sr-1rgb.md diff --git a/CHANGELOG.md b/CHANGELOG.md index a55399d..73de4ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,21 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Entries for unreleased work are not written here directly. Each issue drops a -fragment in [`changelog.d/`](https://github.com/riddler/statifier_router/blob/v0.9.1/changelog.d/README.md); the fragments are assembled +fragment in [`changelog.d/`](https://github.com/riddler/statifier_router/blob/v0.9.2/changelog.d/README.md); the fragments are assembled into a version section at release. See that README for the format and for when a change warrants an entry at all. +## [0.9.2] 2026-09-30 + +Patch release: `StatifierRouter.Addresses.reap/3` runs on SQLite. Its stamp and delete name their rows in an IN list both adapters take, in place of Postgres's `= ANY(...)`, and a stamp or delete of more than 500 rows is written in batches of 500, one statement each. A Postgres host sees the same counts, and no public function, option or migration version is added or changed. + +### Fixed + +- `StatifierRouter.Addresses.reap/3` runs on SQLite: its stamp and delete + no longer use Postgres's `= ANY(...)`, which failed any reap of a SQLite + host on 0.8.0 and later that found a row to stamp or delete, under an + integer or a text key; a reap with nothing to write sent no statement. + ## [0.9.1] 2026-09-30 Patch release: the package's migrations run on SQLite again. Migration V03, which renames the subscription index on Postgres, now does nothing on SQLite, where the index already holds the name V02 gave it; before this release its `ALTER INDEX` failed the migration of a SQLite host on 0.8.0 and later. A Postgres host changes nothing, and no public function, option or migration version is added or changed. diff --git a/changelog.d/sr-1rgb.md b/changelog.d/sr-1rgb.md deleted file mode 100644 index 26f6144..0000000 --- a/changelog.d/sr-1rgb.md +++ /dev/null @@ -1,6 +0,0 @@ -### Fixed - -- `StatifierRouter.Addresses.reap/3` runs on SQLite: its stamp and delete - no longer use Postgres's `= ANY(...)`, which failed any reap of a SQLite - host on 0.8.0 and later that found a row to stamp or delete, under an - integer or a text key; a reap with nothing to write sent no statement. diff --git a/mix.exs b/mix.exs index c860f3e..ba8d191 100644 --- a/mix.exs +++ b/mix.exs @@ -1,7 +1,7 @@ defmodule StatifierRouter.MixProject do use Mix.Project - @version "0.9.1" + @version "0.9.2" @source_url "https://github.com/riddler/statifier_router" def project do