Skip to content

chore(release): 0.4.0 - #70

Merged
lbguilherme merged 1 commit into
mainfrom
release/0.4.0
Oct 4, 2026
Merged

lbguilherme merged 1 commit into
mainfrom
release/0.4.0

Conversation

@lbguilherme

Copy link
Copy Markdown
Member

Version bump for 0.4.0: workspace version, internal dependency requirements and README.

Since 0.3.0:

  • Nullability narrowing.
    • The analyzer now proves NOT NULL from several sources:
      • the conditions a value is read under (WHERE / ON / CASE / FILTER facts, outer-join reduction);
      • foreign keys and CHECK constraints, including partition bounds;
      • row guarantees of joins and subqueries;
      • builtins, set-returning functions and aggregates;
      • what INSERT / UPDATE / ON CONFLICT / MERGE write, for RETURNING.
    • Declared constraints are trusted. The exceptions are documented in CLAUDE.md.
  • Soundness.
    • A pg_sanity oracle now executes every accepted query over adversarial data and fails when a value inferred NOT NULL comes back NULL. A dedicated review then closed the holes it and the fuzzer found: DML, functions and aggregates, joins and row guarantees, core typing (cast functions in coercions), and condition facts and CHECK reasoning.
  • Diagnostics.
    • Errors are positioned where PG reports them, with PG's hints and name suggestions.
    • Migration errors are located in their file.
    • Parameter errors name the parameter.
    • fetch_*_as::<T>() is checked against the query's columns at compile time.
  • Literal validation and conformance.
    • Literals are checked by PG's input grammar for many more types.
    • Type modifiers are read as typenameTypeMod does.
    • No-op casts are dropped where PG's equal() compares expressions (GROUP BY, DISTINCT, DISTINCT ON).
  • Migrations and CLI.
    • The runner checks drift before applying, creates the tracking table under the lock and runs non-transactional migrations one statement at a time.
    • sslmode is honored as libpq does.
    • Unknown [package.metadata.typedpg] keys are rejected.
  • MSRV raised to Rust 1.89.

This is a minor bump because 0.4 rejects or retypes code that built on 0.3. Columns can change between T and Option<T>, in both directions. Configurations with unknown keys and some queries now fail to compile. The MSRV is higher.

cargo publish --workspace --dry-run packages and builds all six crates.

@lbguilherme
lbguilherme merged commit 3056093 into main Oct 4, 2026
5 checks passed
@lbguilherme
lbguilherme deleted the release/0.4.0 branch October 4, 2026 01:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant