Skip to content

9.29.0 - #547

Merged
jeremydmiller merged 1 commit into
masterfrom
release/9.29.0
Sep 2, 2026
Merged

9.29.0#547
jeremydmiller merged 1 commit into
masterfrom
release/9.29.0

Conversation

@jeremydmiller

Copy link
Copy Markdown
Member

Version bump to 9.29.0, plus the upgrade guide.

Clears 9.28's known upgrade break, makes the SQLite table rebuild safe against a database
that has foreign keys, and adds two capabilities.

PR
#542 AssertPatchingIsValid no longer refuses a delta that can rebuild in place — closes #538
#539 The SQLite table rebuild is atomic
#540 Mutually referencing tables can be created from scratch
#543 Index a pre-built tsvector — closes #541
#545 SQLite delete-all no longer clears the wrong schema's table

Minor rather than patch. #543 and #540 add API, and #539 and #542 change what an
existing migration does.

Worth knowing before merging

9.28's break is gone. Anyone who stayed on 9.27 because a numeric or decimal
SQLite column made the first migration throw can upgrade straight to 9.29 — no pass
through 9.28, no run with AutoCreate.All.

Two of these can turn a quiet migration into a throwing one, both deliberately. A
SQLite rebuild that would leave a dangling reference is now refused and rolled back
rather than committing the damage; and a custom IMigrationLogger that declines to
rethrow no longer lets a failed rebuild continue past COMMIT. Both are documented in
the guide.

#539 and #540 did not compile together. Both restructure SqliteMigrator.executeDelta,
and #539 gave executeCommand a failureIsFatal argument. Git auto-merged them with no
conflict and the result failed to build — neither PR's CI could see it, since each
compiles alone. Fixed on #540 before merge; noting it because it is the same shape as
#532+#533.

Known issue

#546: on SQLite, resetting identity
against a schema with no AUTOINCREMENT table fails with
no such table: <schema>.sqlite_sequence. The single-schema form predates 9.29; the
multi-schema form is new with #545 and is the price of that fix being correct. Documented
in the guide with the workaround.

🤖 Generated with Claude Code

Clears 9.28's known upgrade break, makes the SQLite table rebuild safe against a
database that has foreign keys, and adds two capabilities.

- #542 closes #538. AssertPatchingIsValid no longer refuses a delta that can rebuild in
  place, which is what made a numeric or decimal SQLite column throw on 9.28 under every
  AutoCreate except All. CreateOrUpdate permits a rebuild; CreateOnly still refuses.
- #539. The SQLite rebuild runs the way SQLite documents it -- enforcement suspended, one
  transaction, foreign_key_check before the commit -- instead of four autocommitting
  statements that wedged the database when the table was referenced. Also fixes an
  AUTOINCREMENT table reissuing a used id, and a view breaking the rename.
- #540. Mutually referencing tables can be created from scratch. A migration holds back
  only the keys whose target it creates later, so a schema that never had the problem
  generates byte-for-byte identical DDL.
- #543 closes #541. FullTextIndexDefinition can index a pre-built tsvector, making
  setweight() weighting reachable for JasperFx/marten#5298.
- #545. SQLite delete-all names the schema instead of letting SQLite resolve by search
  order, which put temp first.

Minor rather than patch: #543 and #540 add API, and #539 and #542 change what an existing
migration does.

Ships with one known issue, #546: on SQLite, resetting identity against a schema that has
no AUTOINCREMENT table fails with "no such table: <schema>.sqlite_sequence". The
single-schema form of this predates 9.29.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@jeremydmiller
jeremydmiller merged commit fbc2c44 into master Sep 2, 2026
18 checks passed
@jeremydmiller
jeremydmiller deleted the release/9.29.0 branch September 2, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant