Releases: pkware/norm
Releases · pkware/norm
Release list
v0.5.0
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
v0.4.2
Immutable
release. Only release title and notes can be modified.
0.4.2 (2026-08-22)
Bug Fixes
- analyze chained data-modifying CTEs (#202) (f98bdd9)
- analyze data-modifying CTE bodies via join-preserving SELECT conversion, not isolated metadata probes (#203) (d588645)
- bind and read plain array columns correctly (#190, #192) (af98e41)
- bind plain jsonb parameters with setObject(Types.OTHER) (0de21d2), closes #187
- classify a CTE body by the statement its own nested WITH introduces (#205) (9650729)
- close the sibling-CTE and grouping-set nullability gaps (#208) (9c5398d)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.10.0 (75938c8)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.9.0 (81b32c2)
- deps: update dependency dev.detekt:dev.detekt.gradle.plugin to v2.0.0-alpha.6 (350a1b4)
- deps: update dependency io.micronaut.test:micronaut-test-junit5 to v5.1.0 (3930c77)
- deps: update dependency io.micronaut.test:micronaut-test-junit5 to v5.1.1 (de70baf)
- deps: update dependency org.junit.jupiter:junit-jupiter-params to v6.1.2 (917f597)
- deps: update dependency org.junit.jupiter:junit-jupiter-params to v6.1.3 (437e632)
- deps: update dependency org.springframework.boot:spring-boot-dependencies to v4.1.1 (3656cf4)
- deps: update kotlin monorepo to v2.4.10 (f1675bb)
- deps: update micronaut to v5.1.10 (170349e)
- deps: update micronaut to v5.1.11 (db2275b)
- deps: update micronaut to v5.1.12 (3bb4816)
- deps: update micronaut to v5.1.8 (a82d811)
- deps: update micronaut to v5.1.9 (1ee3cc4)
- deps: update micronautdata to v5.1.0 (c3cf86c)
- deps: update micronautdata to v5.1.1 (ef93391)
- deps: update micronautdata to v5.1.2 (ca9e7ac)
- e2e-tests-micronaut: declare kspTest so @MicronautTest bean definitions generate (b13b6ec)
- give the SQL scanners lexical awareness of strings, comments, and brackets (cb1300e)
- give top-level DML RETURNING the same nullability safety net as CTE bodies (909a11f), closes #207
- locate the main query's output clause, not the first SELECT anywhere (#212) (406f4d9)
- map oid[] to Array<Long?> rather than Array<Blob?> (#196) (1a8bfc5)
- map Postgres json alongside jsonb (#191) (941d89a)
- match PostgreSQL's identifier character classes per lexical position (#219) (e0ac252)
- narrow result nullability using WHERE-clause predicates (58f9029), closes #186
- order schema replay the way Flyway orders migrations (22f6657)
- quote the nullability stub's column aliases (#204) (01286ad)
- recognize a star by its trailing alias, not by enumerating what may precede it (#215) (e500f3c)
- resolve @property provenance through CTE bodies, correct-or-silent (b41b813), closes #229
- resolve RETURNING nullability against SET-assigned values (#228) (431126b)
- resolve unknown-nullability RETURNING columns by probing the target relation (#226) (0769c9a)
- return a correctly sized array from batch overloads (#189) (db3d420)
v0.4.1
0.4.1 (2026-07-09)
Bug Fixes
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.8.0 (6494b3d)
- deps: update dependency io.micronaut.sql:micronaut-jdbc-hikari to v7.0.2 (f0b2e87)
- deps: update dependency io.micronaut.sql:micronaut-jdbc-hikari to v7.1.0 (b35c1f9)
- deps: update dependency org.junit.jupiter:junit-jupiter-params to v6.1.1 (c43f3ad)
- deps: update dependency org.postgresql:postgresql to v42.7.12 (cb4bcd4)
- deps: update dependency org.postgresql:postgresql to v42.7.13 (c887ea3)
- deps: update micronaut to v5.1.3 (9e7aae9)
- deps: update micronaut to v5.1.5 (9f8b69a)
- deps: update micronautdata to v5.0.5 (d6297ff)
- pin codegen session zone to UTC instead of inheriting the host zone (6a62c0c)
v0.4.0
0.4.0 (2026-06-25)
Features
- add Framework.MICRONAUT DI-only mode (8dde298), closes #137
- Queries interface extends Transactable in no-framework mode (e082428), closes #136
- Switch to targeting Java 25 (fa935db)
Bug Fixes
- deps: split micronautTest version from micronaut core (9e38fe7)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.7.0 (717e9ee)
- deps: update dependency io.micronaut.sql:micronaut-jdbc-hikari to v7.0.1 (fa67872)
- deps: update dependency io.micronaut.test:micronaut-test-junit5 to v5 (3197dab)
- deps: update micronaut (6ed664e)
- deps: update micronaut to v4.10.24 (d2c6c65)
- deps: update micronaut to v4.10.25 (df7470c)
- deps: update micronaut to v5 (e108b66)
- deps: update micronaut to v5.1.0 (e8b6281)
- deps: update micronaut to v5.1.1 (5f46b7d)
- deps: update micronaut to v5.1.2 (454ffe0)
- deps: update micronautdata to v5 (bdc0fbd)
v0.3.0
0.3.0 (2026-05-28)
⚠ BREAKING CHANGES
- Generated code for timestamptz columns now uses java.time.Instant instead of java.time.OffsetDateTime.
Features
- map timestamptz to Instant instead of OffsetDateTime (a62b221)
- support directories for schema and query paths (84c910a)
Bug Fixes
- deduplicate reused named parameters in generated code (379cb75), closes #102
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.5.1 (94bcf86)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.6.0 (9ca4508)
- deps: update dependency org.junit.jupiter:junit-jupiter-params to v6.1.0 (98bcc37)
- disable parallel test execution for Micronaut e2e tests (02573b1)
- resolve compiler warning (12b0be0)
- stop closing transaction-bound connection in Micronaut e2e tests (4a934c1)
- stop dumping raw pg_node_tree text to Gradle output (bc5d3c7), closes #74
- use a fixed version of Norm (2a98340)
- use regular function types instead of extension functions in batch extractors (c66517c)
v0.2.1
v0.2.0
0.2.0 (2026-05-15)
Features
- add explicit transaction management for standalone (non-framework) use (fc233e1)
- determine result column nullability from PostgreSQL query parse trees (#66) (6638cd7)
- generate batch INSERT with RETURNING for CRUD-synthesized queries (d7317c3)
- Improve code generation (600cf86)
- speed up generation container with tmpfs and no-durability flags (1652374)
- stop pushing postgresql driver onto consumers; document JDBC driver requirement (01bec9a), closes #49
Bug Fixes
- apply column() type mappings to aliased columns in RETURNING clauses (0b29124)
- ci: move extra-files into package config so release-please updates gradle.properties (335c87b)
- ci: SNAPSHOT bump runs in release-please job, not separate workflow (fe8e183), closes #78
- ci: use x-release-please-version annotation; remove unused search/replace (a321779)
- correct GROUPING SETS/CUBE/ROLLUP nullability on PostgreSQL 16 and 17 (bf9f976)
- deps: update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.5.0 (f539456)
- deps: update dependency dev.detekt:dev.detekt.gradle.plugin to v2.0.0-alpha.3 (#47) (47c9a35)
- deps: update dependency org.postgresql:postgresql to v42.7.11 (828c793)
- deps: update micronaut to v4.10.22 (8eb7126)
- deps: update micronaut to v4.10.23 (2902805)
- deps: update micronautdata to v4.14.4 (e631255)
- deps: update wire to v6.3.0 (2711d3b)
- deps: update wire to v6.4.0 (39b3f19)
- parseTargetEntry extracted fields from nested TARGETENTRY scope (bfa4fb7)
- require Postgres ready log before accepting connections in e2e tests (169d235)
- resolve 17 nullability analysis gaps found by end-to-end tests (1787410)
- UPDATE SET nullable columns now generate nullable parameter types (cd0d57a)
- UPDATE without WHERE now correctly inherits column nullability (4226c4b)
- use PostgreSQL query trees for accurate outer join nullability (763dfe8)