Skip to content

9.34.0

Choose a tag to compare

@jeremydmiller jeremydmiller released this 24 Sep 18:26
· 58 commits to master since this release
c0dd96c

Full upgrade guide: https://weasel.jasperfx.net/release-9-34

⚠️ If you are on 9.33.0 with Weasel.SqlServer, upgrade

9.33.0 removed four public SharedLockExtensions signatures. Anything compiled against 9.32.0 or earlier — current WolverineFx.SqlServer among them — throws MissingMethodException at runtime once 9.33.0 is resolved underneath it. An application on Polecat 5.31.0 (which floors 9.33.0) plus current WolverineFx fails the moment a host boots and takes the migration lock.

Nothing catches it before runtime: restore is clean because 9.33.0 satisfies the declared 9.32.0 floor, compile is clean because the caller is already compiled, and Weasel.Postgresql was untouched — so a green Marten/Postgres suite says nothing about it.

9.34.0 restores the four signatures. No source change is needed in either direction, and lockTimeoutMs keeps working as 9.33.0 introduced it.

EF Core: an index that cannot be expressed as a typed operation now carries its own DDL

db-ef-migration translated every index into a CreateIndexOperation, whose Columns is a list of identifiers the provider quotes one at a time. That broke two ways:

  • Loudly — a Marten computed index carries its expression in Columns, so the migration died on apply with 42703: column "(data ->> 'Kind')" does not exist.
  • Quietly — CreateIndexOperation has nowhere to put an operator class, so a GinIndexJsonData() index applied without error using the default jsonb_ops instead of the declared jsonb_path_ops. A different index from the one declared, on a migration that reported success. The differ compared the same incomplete subset, so later changes to those options produced no migration at all.

Such an index is now emitted as its own CREATE INDEX, and diffed on that DDL. Only the index takes that route — the table around it stays typed, so snapshot diffing keeps working for Marten document tables. The previous workaround (ForceRawSql over the whole table) made every subsequent change to it something the differ refused.

Your first db-ef-migration add after upgrading may contain index changes you did not make. That is the correction landing — those indexes really are wrong in the database — but review it rather than assuming it is spurious. See the upgrade guide for the detail, including the one Down() edge case.

Reported with a complete repro by @Jaxter.

ITableIndex gains two members

HasProviderSpecificOptions and ToDDL(ITable), implemented by all five providers. A source break only if you implement ITableIndex yourself, which is unusual.

Issues

  • #616 — Weasel.SqlServer 9.33.0 is binary-breaking (#617)
  • #615 — db-ef-migration writes a computed index as a CreateIndex on a column named after its expression (#618)