Immutable
release. Only release title and notes can be modified.
0.5.0 (2026-09-08)
Features
- add EXPLAIN (FORMAT JSON)-based MERGE side-nullability detection (Stage 2) (a34d2e3)
- add prosqlbody-based nullability probe alongside CREATE VIEW, prove parity (Stage 1) (bdd11e4)
- resolve @property provenance from the PostgreSQL node tree (462b039)
- route DML/CTE/MERGE nullability through prosqlbody in production (59a9b45)
- route plain SELECT through prosqlbody and sweep dead DML-conversion code (5de7a61)
Bug Fixes
- analyze nullability for MERGE fed by a CTE source (f32a8d6)
- analyze view expressions instead of trusting source column names (fcb25bf), closes #256
- apply any-nullable-source-wins reduction to view nullability by name (bef131e)
- ask KotlinPoet whether a @property name needs backticks (bd42334)
- attribute a MERGE's join by locating its own ModifyTable node, not the first join found (18c09f0)
- bail conservatively on a Unicode-escape identifier in referencesAnyName (51fce48)
- bail instead of clamping when a lexical scan's bracket depth goes negative (845720f)
- bound-check truncated \u escapes in JsonValue parser (1aad12f)
- correct SUBLINK_TYPE_ALL's enum value and prove ALL_SUBLINK non-null (3c62130)
- correctly decode quoted identifiers in referencesAnyName's sibling-name scan (c3b92df)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.10.1 (69e44fb)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.10.2 (9259edf)
- deps: update dependency com.squareup:kotlinpoet to v2.4.0 (34e12af)
- deps: update dependency io.micronaut.data:micronaut-data-processor to v5.1.3 (8fdc2a7)
- deps: update dependency io.micronaut.sql:micronaut-jdbc-hikari to v7.1.2 (187e75d)
- deps: update dependency org.commonmark:commonmark to v0.30.0 (1bdb28b)
- deps: update kotlin monorepo to v2.4.20 (465b61a)
- deps: update micronaut to v5.1.13 (d43c6e9)
- derive JSON constructor nullability from its arguments (c83f2f5)
- drop the per-assignment parameter-trust gate for the whole-statement one (513af56)
- fail safe on an unanalyzable branch or a non-converged pass limit in the recursive-CTE fixpoint (c00e20c)
- flip PgNodeTreeParser's CONST/FUNCEXPR field defaults to the safe direction (7158f96)
- generate compilable CRUD SQL for quoted column names (57b01b7)
- guard parseSelectItems against a shifted item-to-column mapping (8e435bd)
- handle comments and whitespace after the alias in a RETURNING WITH (OLD AS ...) prologue (b250c33)
- iterate recursive CTE nullability to a fixpoint instead of one pass (69f66f7)
- make extractFieldExpression depth-one-aware, closing a wrong-subquery hazard in nested CASE/JSONEXPR parsing (6ce3856)
- make prosqlbody's parameter-trust gate per-assignment, not per-statement (1e91900)
- order Flyway migrations globally across schemas entries, not per-directory (e30ad16)
- prove ANY_SUBLINK non-null only under three-valued-logic-safe conditions (e679d19), closes #239
- read a domain's UUID base type through the class-hinted getObject overload (138aeb6)
- recover column comments lost to folding and IS DISTINCT FROM (935c22c)
- recover GROUPING SETS columns PostgreSQL never nulls (6fa1f7c), closes #240
- recurse into JsonExpr's children in containsVarOutsideRelation (444f26b)
- render KDoc that survives Markdown and KotlinPoet escaping (3e1e96c)
- replace evaluateJsonExpr's JsonBehaviorType deny-list with a verified allow-list (8f69da7)
- report nullable, not NOT NULL, when the unconvertible-DML probe can't prove a column (de988db)
- resolve JDBC types for every domain base type resolveBaseType accepts (e4fc6d3)
- resolve PostgreSQL 18 GROUP RTE vars to their group expressions (8dbc7da)
- resolve sublink subselects against derived tables and enclosing CTEs (9d5fe1b), closes #257
- restore original comments in the four frozen embed scenarios (4a0cdff)
- separate the nullability probe's function body from its terminator with a newline (8d4fd24)
- source resolveCteOutputExpression's reserved-word set from the live server, not a hardcoded snapshot (c0983fc)
- spell out abbreviated JDBC/expression identifiers introduced by this branch (c60a441)
- stop aliasing a mutable task list for IDE-sync dependency wiring (2b6b61d)
- stop inferring JSON_VALUE/JSON_QUERY non-null from ON EMPTY/ON ERROR codes alone (c86b06d)
- strip the PG18 RETURNING WITH (OLD/NEW alias) prologue before parsing output items (110bfdc)
- truncate identifiers to PostgreSQL's 63-byte limit (cc0e1f7), closes #245