jOOQ

jOOQ is the best way to write SQL in Java

OTHER License

Stars
5.9K
Committers
107

Bot releases are hidden (Show)

jOOQ - 3.17.24 Latest Release

Published by lukaseder 6 months ago

Version 3.17.24 - May 2, 2024

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#16550 - Auto wrap Field arguments to a Routine's Object typed parameter in Field
#16555 - Work around lack of support for INSERT .. SELECT .. UNION [ ALL ] SELECT in SingleStore
#16574 - DELETE .. ORDER BY .. LIMIT on partitioned tables without unique constraint uses non-unique ctid for self joins
#16584 - Time zone information lost when fetching TIMETZ[] value in PostgreSQL
#16588 - Work around HSQLDB bug where wrong LocalTime value is fetched when using bind values of type LocalTime[]
#16605 - Wrong cast type name when casting value to NCLOB in Firebird
#16619 - Fix order of NOT NULL and DEFAULT clauses in BigQuery CREATE TABLE statements

jOOQ - 3.18.15

Published by lukaseder 6 months ago

Version 3.18.15 - May 2, 2024

This is a 3.18 patch release with minor improvements and bug fixes

Bug Fixes

#16549 - Auto wrap Field arguments to a Routine's Object typed parameter in Field
#16554 - Work around lack of support for INSERT .. SELECT .. UNION [ ALL ] SELECT in SingleStore
#16573 - DELETE .. ORDER BY .. LIMIT on partitioned tables without unique constraint uses non-unique ctid for self joins
#16583 - Time zone information lost when fetching TIMETZ[] value in PostgreSQL
#16587 - Work around HSQLDB bug where wrong LocalTime value is fetched when using bind values of type LocalTime[]
#16604 - Wrong cast type name when casting value to NCLOB in Firebird
#16618 - Fix order of NOT NULL and DEFAULT clauses in BigQuery CREATE TABLE statements

jOOQ - 3.19.8

Published by lukaseder 6 months ago

Version 3.19.8 - May 2, 2024

This is a 3.19 patch release with minor improvements and bug fixes

Bug Fixes

#16548 - Auto wrap Field arguments to a Routine's Object typed parameter in Field
#16553 - Work around lack of support for INSERT .. SELECT .. UNION [ ALL ] SELECT in SingleStore
#16572 - DELETE .. ORDER BY .. LIMIT on partitioned tables without unique constraint uses non-unique ctid for self joins
#16575 - Cannot configure matchers using jOOQ-codegen-gradle plugin
#16577 - SAXParseException warnings when using jOOQ-codegen-gradle or any other MiniJAXB.unmarshal() usage
#16582 - Time zone information lost when fetching TIMETZ[] value in PostgreSQL
#16586 - Work around HSQLDB bug where wrong LocalTime value is fetched when using bind values of type LocalTime[]
#16603 - Wrong cast type name when casting value to NCLOB in Firebird
#16617 - Fix order of NOT NULL and DEFAULT clauses in BigQuery CREATE TABLE statements

jOOQ - 3.17.23

Published by lukaseder 7 months ago

Version 3.17.23 - April 4, 2024

This is a 3.17 patch release with minor improvements and bug fixes

Features and Improvements

#16491 - Add DataType.isFloat()

Bug Fixes

#16464 - SEEK doesn't work correctly when there are multiple noField() arguments and ORDER BY is uniform and Settings.renderRowConditionForSeekClause is true
#16473 - Work around CockroachDB's lack of support for the POWER() function accepting integer arguments
#16476 - jOOQ parser parses indexed parameters as named
#16482 - SQL Server's CREATE cannot fully qualify a sequence name
#16497 - Intercept SQLFeatureNotSupportedException caused by DatabaseMetaData::getImportedKeys and other calls
#16506 - Improve compilation speeds of generated QOM types
#16513 - Avoid PostgreSQL empty array cast when explicit cast is given
#16538 - Parser fails to parse TIME[STAMP] WITH TIME ZONE literals
#16542 - Incorrect conversion of LocalDateTime to LocalDate during daylight saving time

jOOQ - 3.18.14

Published by lukaseder 7 months ago

Version 3.18.14 - April 4, 2024

This is a 3.18 patch release with minor improvements and bug fixes

Features and Improvements

#16438 - Document DSL.jsonGetElement() index being 0 based

Bug Fixes

#16441 - QuantifiedSelect wrapping array doesn't correctly convert array component types
#16454 - Fix other cases where org.jooq.impl.Val uses "inferred data type," but cannot actually lazily infer the type
#16458 - ParsingConnection should not rely on org.jooq.impl.Val identity to match user bind value indexes with rendered indexes
#16463 - SEEK doesn't work correctly when there are multiple noField() arguments and ORDER BY is uniform and Settings.renderRowConditionForSeekClause is true
#16472 - Work around CockroachDB's lack of support for the POWER() function accepting integer arguments
#16475 - jOOQ parser parses indexed parameters as named
#16481 - SQL Server's CREATE cannot fully qualify a sequence name
#16496 - Intercept SQLFeatureNotSupportedException caused by DatabaseMetaData::getImportedKeys and other calls
#16505 - Improve compilation speeds of generated QOM types
#16512 - Avoid PostgreSQL empty array cast when explicit cast is given
#16517 - Row[N].eq(Row[N]) should apply data type bindings if necessary
#16537 - Parser fails to parse TIME[STAMP] WITH TIME ZONE literals
#16541 - Incorrect conversion of LocalDateTime to LocalDate during daylight saving time

jOOQ - 3.19.7

Published by lukaseder 7 months ago

Version 3.19.7 - April 4, 2024

This is a 3.19 patch release with minor improvements and bug fixes

Features and Improvements

#16437 - Document DSL.jsonGetElement() index being 0 based

Bug Fixes

#16428 - DefaultDataType.getDataType logger should add more details about how to fix the problem
#16429 - Row[N].eq(Row[N]) should apply data type bindings if necessary
#16430 - Unnecessary static type registry warning when inlining custom converted enum value
#16431 - Static type registry deprecation warning shouldn't appear when using the INSERT valuesOfRows() clause with converted data types
#16440 - QuantifiedSelect wrapping array doesn't correctly convert array component types
#16453 - Fix other cases where org.jooq.impl.Val uses "inferred data type," but cannot actually lazily infer the type
#16457 - ParsingConnection should not rely on org.jooq.impl.Val identity to match user bind value indexes with rendered indexes
#16462 - SEEK doesn't work correctly when there are multiple noField() arguments and ORDER BY is uniform and Settings.renderRowConditionForSeekClause is true
#16471 - Work around CockroachDB's lack of support for the POWER() function accepting integer arguments
#16474 - jOOQ parser parses indexed parameters as named
#16480 - SQL Server's CREATE cannot fully qualify a sequence name
#16495 - Intercept SQLFeatureNotSupportedException caused by DatabaseMetaData::getImportedKeys and other calls
#16504 - Improve compilation speeds of generated QOM types
#16511 - Avoid PostgreSQL empty array cast when explicit cast is given
#16536 - Parser fails to parse TIME[STAMP] WITH TIME ZONE literals
#16540 - Incorrect conversion of LocalDateTime to LocalDate during daylight saving time

jOOQ - 3.17.22

Published by lukaseder 8 months ago

Version 3.17.22 - March 8, 2024

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#16350 - Parser fails with StringIndexOutOfBoundsException when encountering invalid PostgreSQL unicode literal
#16353 - Parser shouldn't fail with NumberFormatException
#16359 - ParsingConnection doesn't correctly execute batches when using ParamType.INLINED or StatementType.STATIC_STATEMENT
#16366 - UUID bind values should be auto-cast to avoid issues with lack of auto-conversion support in PostgreSQL
#16373 - Parser always parses NULL literal of type BOOLEAN
#16384 - DataType should cache null_() and notNull() variants
#16388 - Add some WARN logs when synthetic key objects aren't matched
#16391 - Add arity check to synthetic foreign key configuration to avoid wrong generated code when FK / UK columns mismatch
#16396 - Empty derived column lists generate wrong SQL syntax
#16399 - Regression in fetchCount execution when argument query uses plain SQL tables
#16408 - Parser doesn't support GROUPING SETS with specification
#16413 - Code generator and MetaImpl return CREATE DEFAULT statement instead of just the default expression

jOOQ - 3.18.13

Published by lukaseder 8 months ago

Version 3.18.13 - March 8, 2024

This is a 3.18 patch release with minor improvements and bug fixes

Bug Fixes

#16349 - Parser fails with StringIndexOutOfBoundsException when encountering invalid PostgreSQL unicode literal
#16352 - Parser shouldn't fail with NumberFormatException
#16358 - ParsingConnection doesn't correctly execute batches when using ParamType.INLINED or StatementType.STATIC_STATEMENT
#16365 - UUID bind values should be auto-cast to avoid issues with lack of auto-conversion support in PostgreSQL
#16372 - Parser always parses NULL literal of type BOOLEAN
#16383 - DataType should cache null_() and notNull() variants
#16387 - Add some WARN logs when synthetic key objects aren't matched
#16390 - Add arity check to synthetic foreign key configuration to avoid wrong generated code when FK / UK columns mismatch
#16395 - Empty derived column lists generate wrong SQL syntax
#16398 - Regression in fetchCount execution when argument query uses plain SQL tables
#16407 - Parser doesn't support GROUPING SETS with specification
#16412 - Code generator and MetaImpl return CREATE DEFAULT statement instead of just the default expression

jOOQ - 3.19.6

Published by lukaseder 8 months ago

Version 3.19.6 - March 8, 2024

This is a 3.19 patch release with minor improvements and bug fixes

Bug Fixes

#16348 - Parser fails with StringIndexOutOfBoundsException when encountering invalid PostgreSQL unicode literal
#16351 - Parser shouldn't fail with NumberFormatException
#16357 - ParsingConnection doesn't correctly execute batches when using ParamType.INLINED or StatementType.STATIC_STATEMENT
#16364 - UUID bind values should be auto-cast to avoid issues with lack of auto-conversion support in PostgreSQL
#16371 - Parser always parses NULL literal of type BOOLEAN
#16374 - Cast NULL literal in subquery SELECT projection in PostgreSQL
#16382 - DataType should cache null_() and notNull() variants
#16386 - Add some WARN logs when synthetic key objects aren't matched
#16389 - Add arity check to synthetic foreign key configuration to avoid wrong generated code when FK / UK columns mismatch
#16394 - Empty derived column lists generate wrong SQL syntax
#16397 - Regression in fetchCount execution when argument query uses plain SQL tables
#16400 - jOOQ-codegen-gradle should lazily evaluate its configuration
#16406 - Parser doesn't support GROUPING SETS with specification
#16411 - Code generator and MetaImpl return CREATE DEFAULT statement instead of just the default expression

jOOQ - 3.17.21

Published by lukaseder 8 months ago

Version 3.17.21 - February 27, 2024

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#16322 - Wrong SQL generated when nesting predicates on subqueries projecting embeddables within MULTISET
#16325 - SelectIsNull renders invalid SQL when SELECT projection is embeddable
#16329 - DSLContext.fetchCount(Select) produces wrong SQL when query projects embeddables
#16339 - NumberFormatException in parser when encountering double value with implicit 0 exponent
#16343 - DefaultRenderContext::peekIndex doesn't contain correct bind index

jOOQ - 3.18.12

Published by lukaseder 8 months ago

Version 3.18.12 - February 27, 2024

This is a 3.18 patch release with minor improvements and bug fixes

Bug Fixes

#16321 - Wrong SQL generated when nesting predicates on subqueries projecting embeddables within MULTISET
#16324 - SelectIsNull renders invalid SQL when SELECT projection is embeddable
#16328 - DSLContext.fetchCount(Select) produces wrong SQL when query projects embeddables
#16338 - NumberFormatException in parser when encountering double value with implicit 0 exponent
#16342 - DefaultRenderContext::peekIndex doesn't contain correct bind index

jOOQ - 3.19.5

Published by lukaseder 8 months ago

Version 3.19.5 - February 27, 2024

This is a 3.19 patch release with minor improvements and bug fixes

Bug Fixes

#16317 - Regression: Gradle plugin thinks it's up to date when it's not
#16320 - Wrong SQL generated when nesting predicates on subqueries projecting embeddables within MULTISET
#16323 - SelectIsNull renders invalid SQL when SELECT projection is embeddable
#16327 - DSLContext.fetchCount(Select) produces wrong SQL when query projects embeddables
#16337 - NumberFormatException in parser when encountering double value with implicit 0 exponent
#16341 - DefaultRenderContext::peekIndex doesn't contain correct bind index

jOOQ - 3.17.20

Published by lukaseder 8 months ago

Version 3.17.20 - February 20, 2024

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#16131 - Maximum consumed results reached when Hikari close a SQL Server connection, leading to excessive logging
#16183 - %ROWTYPE UDT types generate invalid system columns when underlying table references object types
#16198 - Overall performance improvement in AbstractNamed.hashCode() specialisations by avoiding Name::append
#16206 - Remove internal AbstractContext::toggle utilities
#16212 - AbstractScope::dsl, ::settings, ::dialect, and ::family should avoid unnecessary null-checks on Configuration
#16235 - Wrong Support annotation on CREATE TRIGGER for INFORMIX
#16240 - IndexOutOfBoundsException in DerbyDatabase when excludes a column from an index
#16249 - Avoid allocating DataMap in short lived Scope implementations
#16252 - Cache TableRecord Constructor in TableImpl for use in Tools.recordFactory()
#16261 - Avoid allocating Collections.nCopies in ScopeStack
#16265 - Avoid allocating JoinNode in scope registration of tables if unnecessary
#16269 - Avoid constructing DSL.name() for constant internal names
#16273 - Refactor QualifiedName to improve performance
#16278 - name(null, "") should equal to name("")
#16282 - Result::formatXML should omit type attribute on columns whose type is unknown
#16286 - Meta::ddl generates incorrect queries for SQL Server (max) lengths
#16305 - Can't parse MySQL ALTER TABLE .. DROP .., DROP .. syntax

jOOQ - 3.18.11

Published by lukaseder 8 months ago

Version 3.18.11 - February 20, 2024

This is a 3.18 patch release with minor improvements and bug fixes

Features and Improvements

#16123 - Add Context.scopeParts(Class): Iterable to allow for iterating over the values that are currently in scope

Bug Fixes

#16125 - RenderTable.WHEN_AMBIGUOUS_COLUMNS doesn't cover all ambiguous column name cases
#16127 - RenderTable.WHEN_MULTIPLE_TABLES doesn't work correctly in correlated subqueries
#16130 - Maximum consumed results reached when Hikari close a SQL Server connection, leading to excessive logging
#16182 - %ROWTYPE UDT types generate invalid system columns when underlying table references object types
#16186 - Settings.returnDefaultOnUpdatableRecord and Settings.returnComputedOnUpdatableRecord don't work for replacing embeddables
#16197 - Overall performance improvement in AbstractNamed.hashCode() specialisations by avoiding Name::append
#16205 - Remove internal AbstractContext::toggle utilities
#16211 - AbstractScope::dsl, ::settings, ::dialect, and ::family should avoid unnecessary null-checks on Configuration
#16224 - BatchCRUD implementation should extract bind values with SQL string in one go
#16234 - Wrong Support annotation on CREATE TRIGGER for INFORMIX
#16239 - IndexOutOfBoundsException in DerbyDatabase when excludes a column from an index
#16248 - Avoid allocating DataMap in short lived Scope implementations
#16251 - Cache TableRecord Constructor in TableImpl for use in Tools.recordFactory()
#16260 - Avoid allocating Collections.nCopies in ScopeStack
#16264 - Avoid allocating JoinNode in scope registration of tables if unnecessary
#16268 - Avoid constructing DSL.name() for constant internal names
#16272 - Refactor QualifiedName to improve performance
#16277 - name(null, "") should equal to name("")
#16281 - Result::formatXML should omit type attribute on columns whose type is unknown
#16285 - Meta::ddl generates incorrect queries for SQL Server (max) lengths
#16299 - MULTISET equality is ORDER dependent in dialects without support for correlated derived tables
#16304 - Can't parse MySQL ALTER TABLE .. DROP .., DROP .. syntax

jOOQ - 3.19.4

Published by lukaseder 8 months ago

Version 3.19.4 - February 20, 2024

This is a 3.19 patch release with minor improvements and bug fixes

Features and Improvements

#16122 - Add Context.scopeParts(Class): Iterable to allow for iterating over the values that are currently in scope

Bug Fixes

#16115 - jOOQ-codegen-gradle fails with UnknownDomainObjectException when java plugin isn't applied first
#16116 - Generated implicit join alias collision when child table foreign keys share the same name
#16124 - RenderTable.WHEN_AMBIGUOUS_COLUMNS doesn't cover all ambiguous column name cases
#16126 - RenderTable.WHEN_MULTIPLE_TABLES doesn't work correctly in correlated subqueries
#16129 - Maximum consumed results reached when Hikari close a SQL Server connection, leading to excessive logging
#16134 - jOOQ-codegen-gradle doesn't consider basedir property for its OutputDirectory
#16181 - %ROWTYPE UDT types generate invalid system columns when underlying table references object types
#16185 - Settings.returnDefaultOnUpdatableRecord and Settings.returnComputedOnUpdatableRecord don't work for replacing embeddables
#16196 - Overall performance improvement in AbstractNamed.hashCode() specialisations by avoiding Name::append
#16204 - Remove internal AbstractContext::toggle utilities
#16210 - AbstractScope::dsl, ::settings, ::dialect, and ::family should avoid unnecessary null-checks on Configuration
#16223 - BatchCRUD implementation should extract bind values with SQL string in one go
#16230 - Emulate LIMIT 0 where not supported
#16233 - Wrong Support annotation on CREATE TRIGGER for INFORMIX
#16238 - IndexOutOfBoundsException in DerbyDatabase when excludes a column from an index
#16247 - Avoid allocating DataMap in short lived Scope implementations
#16250 - Cache TableRecord Constructor in TableImpl for use in Tools.recordFactory()
#16256 - JavaGenerator doesn't generate serialVersionUID in Path classes
#16259 - Avoid allocating Collections.nCopies in ScopeStack
#16263 - Avoid allocating JoinNode in scope registration of tables if unnecessary
#16267 - Avoid constructing DSL.name() for constant internal names
#16271 - Refactor QualifiedName to improve performance
#16276 - name(null, "") should equal to name("")
#16280 - Result::formatXML should omit type attribute on columns whose type is unknown
#16284 - Meta::ddl generates incorrect queries for SQL Server (max) lengths
#16294 - Remove unnecessary up-to-date prevention in jOOQ-codegen-gradle plugin
#16295 - Wrong SQL generated for CREATE TABLE in non-default schemas for DuckDB
#16298 - MULTISET equality is ORDER dependent in dialects without support for correlated derived tables
#16303 - Can't parse MySQL ALTER TABLE .. DROP .., DROP .. syntax

jOOQ - 3.17.0

Published by lukaseder 9 months ago

Version 3.17.0 - June 22, 2022

Client side computed columns

A ground breaking new core feature available in all commercial distributions is
the new client side computed columns feature, building on top of jOOQ 3.16's
commercial support for readonly columns and server side computed columns.

Not all RDBMS support computed columns (e.g. using the standard SQL syntax
GENERATED ALWAYS AS), and if they do, they might not support them
in both STORED (computed on write) and VIRTUAL
(computed on read) variants. jOOQ can now emulate both features at the client
side, by transforming your SQL queries:

  • STORED affects INSERT, UPDATE,
    DELETE, and MERGE
  • VIRTUAL affects SELECT and the
    RETURNING clause of DML statements. To make use of these,
    combine them with the new synthetic column generation feature.

Unlike their server side counterparts, these client side features can produce
arbitrary expressions, including:

  • Implicit joins
  • Scalar subqueries
  • MULTISET subqueries
  • Much more

Think of this as "views" written in jOOQ, on a per-column basis. An expecially
useful feature combination is to combine these computed columns with the new
visibility modifier that allows for keeping computed columns (or the underlying
base columns) private and thus invisible to user code.

More about this feature here:

Audit columns

A special case of STORED client side computed columns are audit
columns, whose most basic implementation comes in the form of:

  • CREATED_AT
  • CREATED_BY
  • MODIFIED_AT
  • MODIFIED_BY

Other approaches to auditing exist, including soft deletion, additional meta
data, (bi)temporal versioning, but these columns are among the most popular
approaches, making this commercial only convenience feature very useful to a lot
of customers.

More about this feature here:

Java 17 baseline for the jOOQ Open Source Edition

Java 17 has been the latest LTS, and it includes a lot of really cool features,
including:

  • sealed types (essential for pattern matching)
  • records
  • instanceof pattern matching
  • text blocks
  • switch expressions

jOOQ 3.16's experimental new Query Object Model (QOM) API experiments with
sealed types, which will be adopted more generally once the QOM API is
finalized.

To get broader user feedback on these improvements, as well as to embrace Java's
new LTS update cadence, we've decided to make Java 17 the baseline for the jOOQ
3.17 Open Source Edition, continuing our Java 8 and 11 support in the commercial
jOOQ distributions.

The following older jOOQ releases will continue to receive upgrades for a while:

  • jOOQ 3.14: The last release with Java 8 support in the jOOQ Open Source
    Edition and Java 6 support in the jOOQ Enterprise Edition
  • jOOQ 3.15 and 3.16: The last releases with Java 11 support in the jOOQ Open
    Source Edition.

PostgreSQL data type support

The jooq-postgres-extensions module, which contained support for the
HSTORE type, now has a lot more support for PostgreSQL specific
data types, including array types of each of:

  • CIDR
  • CITEXT
  • LTREE
  • HSTORE
  • INET
  • RANGE (including all the specialisations for INT4,
    INT8, etc.)

In order to profit from these data types, just add the
org.jooq:jooq-postgres-extensions module to your code generation
and runtime dependencies, and the types are generated automatically.

Implicit JOIN improvements

In this release, we experimented with a few new implicit JOIN features,
including support for implicit JOIN in DML statements. The current
implementation produces correlated subqueries where JOIN isn't supported in DML
statements.

We've also experimented with creating a "convenience syntax" for other commonly
used correlated subqueries, such as EXISTS(...) subqueries or
MULTISET(...) subqueries. The experiment has been very interesting.
The prototype, however, was rejected. See the discussions here:

Future jOOQ versions will implement the desired convenience in the form of more
implicit JOIN functionality, offering the feature also as an implicit to-many
JOIN.

A leftover from the prototype is the fact that you can now more easily project
expressions other than classic Field in your SELECT
clause, namely:

  • Table now extends SelectField
  • Condition now extends Field

This means you can write a query like this:

Pattern matching SQL Transformations

SQL transformations have been a strategic feature set to recent jOOQ releases,
offering additional compatibility between SQL dialects to commercial customers,
such as, for example:

  • Transforming Oracle's ROWNUM into equivalent window functions or
    LIMIT clauses.
  • Turning table lists including Oracle's (+) operator into ANSI
    JOIN syntax.

This release ships with a new commercial only feature that directly transforms
the new Query Object Model (QOM)'s expression tree prior to rendering. It does
so by applying pattern matching to the expression tree. Some assorted examples
include:

  • LTRIM(RTRIM(x)) into TRIM(x)
  • x != a AND x != b into x NOT IN (a, b)
  • x IN (a, b, c) AND x IN (b, c, d) into x IN (b, c)
  • NOT (NOT (x = 1)) into x = 1
  • NOT (x = 1) into x != 1

And much more. The primary use-cases for this functionality are:

  • SQL linting, e.g. as part of an ExecuteListener
  • SQL auto cleanup, including in a ParsingConnection
  • Dialect migration, when upgrading database versions, or moving between dialects
  • Patching specific SQL features

For more information about the feature, see:

Note that this feature is also available for free online:

Reactive and kotlin coroutine support

A lot of minor improvements have been implemented. A few more significant ones
include:

  • R2DBC 0.9.1.RELEASE is now supported
  • A new reactive transaction API has been added, which offers the same nested
    transaction semantics as the existing blocking transaction API, see also:
    https://blog.jooq.org/nested-transactions-in-jooq/
  • jOOQ's reactive streams bindings via the Publisher SPI are now
    bridged automatically to kotlin coroutines in the new
    org.jooq:jooq-kotlin-coroutines module using the usual utilites
    org.jetbrains.kotlinx:kotlinx-coroutines-core and
    org.jetbrains.kotlinx:kotlinx-coroutines-reactor
  • The org.jooq:jooq-kotlin extensions module now has additional
    extension functions for more MULTISET and other nesting related
    convenience.
  • The entire blocking execution API is now annotated with
    org.jetbrains.annotations.Blocking to help reactive jOOQ users
    avoid accidentally blocking on a query, when using IntelliJ. In addition, we
    now annotate experimental and internal API with the ApiStatus
    annotation from the same package.

For a complete list other, minor improvements, see the below change notes.

Features and Improvements

#1592 - Add formal support for "audit" fields, such as CREATED_AT, CREATED_BY, MODIFIED_AT, MODIFIED_BY
#2092 - Add support for the Postgres INET data type (java.net.InetAddress)
#2333 - Add DSL.noField() for "conditional" LIMIT, OFFSET, GROUP BY, ORDER BY support when creating dynamic SQL
#2968 - Add support for PostgreSQL RANGE types
#3497 - Add methods to Context to distinguish between derived tables and other types of subqueries
#4727 - Let Table extend SelectField
#5214 - Add support for PostgreSQL's EXCLUDED table
#5641 - Support overriding code generation configuration via system properties
#5695 - Allow for expressions to be put in LIMIT / OFFSET
#5934 - Add support for the Postgres CITEXT type
#5970 - Add Setting to auto-inline all bind variables that participate in predicates on certain fields
#6454 - Support converting from java.sql.Array to Object[] types
#6489 - Code generator should support SQL-generated "dynamic regular expressions"
#7284 - Replace common patterns in query object model
#7508 - Add support for path expressions ("implicit joins") in DML
#7803 - Let ArrayRecord extend Formattable
#7912 - Add InsertOnDuplicateSetStep::setAllToExcluded to auto-set all insert column list columns to their EXCLUDED value
#8653 - Add support for parsing VALUES , ...
#8997 - Remove jOOQ-spring-example and documentation
#9335 - Add a jooq-kotlin-coroutines module to support transactional coroutines based on reactive streams Publishers
#9347 - DataType#getCastTypeName() does not respect rendering settings
#9425 - Add Meta.migrateTo(Meta):Queries to generate a migration script between two Meta versions
#9768 - Support MySQL inline INDEX specifications in DDLDatabase
#9817 - Add support for text blocks in generated code
#9879 - Add support for VIRTUAL and STORED client side computed columns
#10120 - Add some more aliasing examples to the manual
#10132 - Cast NULL literal to known type in Derby
#10407 - Add support for FIREBIRD 4 RETURNING * syntax
#10521 - Push down derived column list aliases to derived table's SELECT clause instead of using UNION ALL emulation, if possible
#10523 - Emulate UPDATE .. SET row = (SELECT ...) for dialects with no native support
#10537 - Split manual section about forcedTypes into different subsections
#10677 - Add to code generation configuration to specify behaviour when encountering unused objects
#10756 - Generate @Transactional on DAOImpl and generated DAOs query-methods
#10763 - Official jOOQ-postgres-extensions bindings should register themselves as low priority bindings if found on the code generation classpath
#10832 - Review our Nullable and NotNull annotation usage
#11232 - Parser should parse all Names.* values at least once
#11331 - Support SQLDataType.XML in DDL
#11467 - LoggerListener should log batch sizes for BatchSingle and BatchMultiple
#11575 - Replace internal dialect switches by Set
#11717 - Known limitations of the R2DBC integration
#11731 - Emulate Oracle INSERT .. SELECT.. RETURNING
#11770 - UpdatableRecord::merge should use new EXCLUDED semantics to avoid repeating bind values
#11823 - Investigate whether read-only converters really require the Class reference
#11969 - Let Condition extend Field
#12481 - ParsingConnection's PreparedStatement.getMetaData should be able to produce ResultSetMetaData prior to execution
#12515 - Support for RowN.mapping()
#12533 - Use org.jetbrains.annotations.ApiStatus
#12608 - Support referencing the same embeddable type multiple times per table
#12688 - Add support for H2's BIT_NAND_AGG, BIT_NOR_AGG, BIT_XNOR_AGG aggregate functions
#12721 - Add more startup tips to be logged with the jOOQ logo
#12734 - Address known limitations of MULTISET support
#12779 - Add support for MySQL COMMENT syntax in DDLDatabase's CREATE TABLE statements
#12782 - Add DiagnosticsContext.message(): String to give access to a text message
#12785 - Add DiagnosticsListener::exception to handle exceptions encountered while running diagnostics
#12807 - Parse and ignore Teradata's COMPRESS DDL clauses
#12829 - Support parsing H2's undocumented DROP TABLE .. CASCADE CONSTRAINTS syntax
#12830 - Support DROP TABLE .. CASCADE in Oracle
#12832 - Improve parser error message when encountering unterminated quoted identifier
#12834 - Support parsing empty column lists in INSERT statements
#12836 - Parser should support VALUES constructor in FROM clause without parentheses
#12838 - Support parsing DATABASE() as synonym for CURRENT_CATALOG() or CURRENT_DATABASE()
#12840 - Parser improvements thanks to the sqlancer team related test cases
#12843 - Support parsing LOG(n) without explicit base, based on input dialect
#12846 - Support parsing alternative H2 and HSQLDB DROP CONSTRAINT c IF EXISTS clause
#12848 - Support parsing HSQLDB's inline FOREIGN KEY syntax
#12862 - Upgrade all relevant R2DBC dependencies to 0.9.0.RELEASE
#12874 - Upgrade org.jetbrains:annotations dependency to 23.0.0
#12875 - Annotate all blocking execution methods with org.jetbrains.annotations.Blocking
#12877 - Improve blocking call error message when trying to run Query.execute(), etc. with R2DBC
#12883 - Add DSL.nullCondition(), a condition that correctly represents the NULL / UNKNOWN predicate value
#12893 - Add an Replacers.listening(Replacer, BiConsumer<QueryPart, QueryPart>) to allow for listening to QueryPart.$replace() events
#12894 - Add accessors for Select::$limit, ::$limitPercent, $limitWithTies, ::$offset
#12896 - Add Settings.renderOptionalAssociativityParentheses
#12905 - Emulate expressions in LIMIT .. OFFSET where not natively supported
#12906 - Add a QOM.UCommutativeOperator utility with methods like $swap()
#12911 - QOM type accessors should accept Collection when they return UnmodifiableList
#12912 - Add missing Select.$groupBy(), $orderBy(), setter accessors
#12914 - Document QOM API outside of the QOM type, and annotate it as @Experimental
#12920 - Add Traversers.recursing()
#12921 - Replace internal org.jooq.impl.Finder utility by Traverser API usage
#12945 - Add Field<Result<Record[N]>>.mapping(Function[N]<T[N], E>): Field<List> kotlin extension functions
#12959 - Gradle examples should list the usual commercial groupIds
#12973 - Add Traversers.containing(Predicate)
#12989 - Update R2DBC dependency to 0.9.1.RELEASE
#13000 - Add Replacers.decomposing(): Replacer to decompose a compound statement into equivalent individual statements
#13001 - Refine Replacer Javadoc
#13004 - Add a TableElement type, a super type of Field<?> | Constraint | Index
#13014 - Add support for providing a --schema to the ParserCLI
#13031 - Add a rootPath property to the LiquibaseDatabase configuration for the FileSystemResourceAccessor
#13037 - Add documentation for the new FormattingProvider
#13070 - Change Function[N] to be non-experimental
#13072 - Remove experimental status on Row[N].mapping(Function[N])
#13077 - Bump postgresql from 42.3.2 to 42.3.3
#13078 - Add internal Tools.CONFIG as a convenience for Tools.CTX.configuration()
#13093 - Remove a few redundant null checks in jOOQ's internals
#13097 - Add Converters.forArrayComponents(Converter<T[], U[]>): Converter<T, U>
#13104 - Reimplement SQL Server RETURNING emulation using QueryPart.$replace instead of SchemaMapping
#13109 - Add Settings.parseIgnoreCommercialOnlyFeatures
#13118 - Pull up Field::convert, ::convertFrom, ::convertTo methods to SelectField
#13129 - Add Context::predicandSubquery
#13131 - Add sections to the manual about using Table references as GroupField, SelectField
#13132 - DSLContext.fetchValue(SelectField) should work with Table
#13135 - Generate mapping() deconstruction convenience methods on generated Tables if is set
#13137 - Change default for code generation option to true
#13142 - Add JSONFormat.mutable(), XMLFormat.mutable()
#13143 - Add code generation flags to turn off the recognition of jOOQ-specific types
#13157 - Remove Oracle work around for JSON_ARRAYAGG causing ORA-40590: invalid format in Oracle 21c
#13161 - Add support for array bindings for the PostgreSQL HSTORE, INET, and CIDR types
#13162 - SchemaVersionProvider etc should be looked up using context classloader, too
#13183 - Add Javadoc warnings to UpdatableRecord::fetchChildren, and TableRecord::fetchParent about the N+1 problem
#13188 - Add support for the LTREE data type in the jooq-postgres-extensions module
#13192 - Add SQLDialect.MARIADB_10_7
#13194 - Various third party dependency updates
#13195 - Add a SQLDialect.SQLITE_3_38 dialect
#13201 - Add SQL Server JSON_ARRAY support via JSON_MODIFY
#13223 - Emulate inline indexes in CockroachDB
#13224 - Document declaration vs reference rendering mode of Field, Table, WindowDefinition, Parameter, CommonTableExpression
#13244 - Upgrade kotlin dependency to 1.6
#13246 - Add more examples to manual section "codegen-database-version-providers"
#13248 - Amend manual sections about data types (XML, Spatial, JSON)
#13255 - Support casting VARCHAR to XML / XMLTYPE in Oracle
#13260 - Add DAO.deleteById(T) overload
#13264 - Manual anchors should be generated from text, not from XSL generated ID
#13267 - Make QOM::unmodifiable public, internal
#13271 - Add support for SQLite 3.33 UPDATE .. FROM
#13272 - Add support for SQLite 3.35 ALTER TABLE DROP COLUMN
#13275 - Add SQLite 3.35 support for CTE MATERIALIZED hint
#13277 - Add support for SQLite 3.35's built-in math functions
#13278 - Add support for inverse hyperbolic functions ASINH, ACOSH, ATANH, ACOTH
#13281 - Add more explicit links to Record::from and RecordUnmapper wherever this applies
#13284 - Add support for T-SQL FOR XML EXPLICIT clause
#13286 - Emulate SQL/XML XMLELEMENT and XMLATTRIBUTES in SQL Server using FOR XML EXPLICIT
#13287 - Emulate SQL/XML XMLCOMMENT in T-SQL
#13288 - Emluate SQL/XML XMLCONCAT in T-SQL
#13289 - Support XMLQUERY() and XMLEXISTS() also in SQL Server
#13306 - Separate QOM.Ln (natural logarithm) from QOM.Log (logarithm with base)
#13324 - Code generation output shouldn't print table mapping output, if it's the same as the input
#13325 - Refactor internal FieldMapForUpdate to support the row assignments, too
#13326 - Emulate UPDATE .. FROM with MERGE, where available
#13329 - Add a FieldOrRowOrSelect nominal union type
#13334 - Add native support for MySQL's derived column lists starting from SQLDialect.MYSQL8_0_19
#13335 - Add Table::as and TableLike::asTable overloads accepting Collection<? extends X> for derived column lists
#13336 - Generate covariant overrides for Table.rename(Table) and Table.as(Table) methods
#13342 - Refactor Multiset::jsonxArrayaggEmulation
#13391 - Add support for the FOR XML BINARY BASE64 clause
#13393 - Replace internal usage of DatatypeConverter::parseBase64Binary by java.util.Base64
#13399 - jOOQ-checker should system property defaults that apply to the entire checked code
#13400 - Add native Informix MULTISET and nested ROW support
#13410 - Add a "Don't Do This" page to the manual
#13417 - Add native EXASOL ROWNUM support
#13432 - Add code generation option to
#13434 - Add to to generate synthetic columns
#13437 - Add Definition.isSynthetic() to indicate that a jOOQ-meta object has been created synthetically
#13446 - Add H2_2_0_202 support for UPDATE .. RETURNING and DELETE .. RETURNING
#13457 - New configuration to generate implicit join definitions ALWAYS from foreign key name
#13458 - PI() emulation should be ACOS(-1) rather than ASIN(1) * 2
#13461 - ResultQueryTrait::getFields should accept Supplier instead of ResultSetMetaData
#13467 - KotlinGenerator should generate open properties in generated records
#13471 - Add Scope.creationTime() and make it available through GeneratorContext.renderTime()
#13482 - Upgrade H2 dependency to 2.1.212
#13485 - Add a QOM.UOpaque marker interface for non-traversable QueryPart types
#13486 - Replace internal ConstantSortField by noField()
#13496 - Specify the various Scope subtype's lifecycle in their Javadoc
#13497 - Add BindingScope, a common super type of the various BindingXYZContext types
#13502 - Add a reactive transaction API
#13508 - Add MySQL support for INSERT .. ON DUPLICATE KEY UPDATE .. WHERE
#13516 - KotlinGenerator should generate implicit joins path accessors as properties
#13523 - Add support for parsing ! (bang) as equivalent to . (dot) in MS Access identifiers
#13525 - Improve Documentation for DSLContext.fetchStream() and related methods
#13528 - Document flag
#13534 - Avoid rendering PostgreSQL native cast operator :: which cannot be used in Hibernate native queries
#13538 - Add a <T, E> Field<Result>.collecting(Collector<R, ?, E>) kotlin extension function, and similar
#13540 - Remove "inline" and "reified" keywords from jOOQ-kotlin extensions where unnecessary
#13544 - Remove EXPERIMENTAL remark from ad-hoc converter and MULTISET construction API
#13546 - Stop aligning generated POJO members and constructor arguments in columns
#13552 - Change DSL.multiset(Select) into DSL.multiset(TableLike)
#13553 - Add TableLike.asMultiset(): Field<Result>
#13556 - Consistently use org.jooq Maven groupId across the manual
#13558 - Add a PrefixSuffixGeneratorStrategy to jOOQ-codegen
#13571 - Emulate the PostgreSQL ON CONFLICT .. EXCLUDED pseudo table in MERGE emulation
#13572 - Add SQLDialect.MYSQL_8_0_20
#13573 - Add parser support for the PostgreSQL EXCLUDED pseudo table and MySQL VALUES() syntax
#13578 - Add native support for BITXNOR in H2
#13579 - Add documentation to the manual for bitwise aggregate functions
#13582 - DefaultRecordMapper should check whether user is attempting to map into an inner class
#13591 - Add a new ColumnElement type
#13594 - Change the Java 17 distribution to --release 17
#13599 - Let Context extends ExecuteScope
#13605 - Add JSONtoJacksonConverter, JSONBtoJacksonConverter, XMLtoJAXBConverter implementations
#13607 - Add JSONtoJacksonConverter, JSONBtoJacksonConverter, XMLtoJAXBConverter forcedType configuration convenience
#13616 - Scala extensions should have some multiset convenience
#13618 - Document EnumType::lookupLiteral's nullable result
#13631 - Add Context.topLevel() and Context.topLevelForLanguageContext() to give access to the top level QueryPart type that is being rendered
#13632 - DDLDatabase should have a sql property, as an alternative to scripts
#13634 - Add Field<Record[N]>.mapping(Function[N]<T[N], E>): Field kotlin extension functions, and the Scala equivalent
#13642 - Add a section about security to the manual's reference section
#13650 - Settings.emulateMultiset should have NestedCollectionEmulation.JSON as default in PostgreSQL
#13657 - Ability to download OSS edition snapshot
#13666 - Support Oracle JSON data type in DDL
#13670 - Add support for Oracle SYS.XMLTYPE in plain SQL templates
#13679 - Upgrade HSQLDB to 2.6.1
#13693 - JPA code examples should produce a jakarta.persistence.* import

Breaking changes

#12430 - Make Java 17 the baseline for the jOOQ Open Source Edition
#12772 - Continue work on public query object model API
#12781 - Remove pre 3.7 deprecated API and pre 3.7 documentation
#12895 - Rename QOM.UOperator[N]::constructor to ::$constructor
#12904 - Remove redundant limit(int) and offset(int) overloads
#12910 - Add DSL.emptyGroupingSet(): GroupField for explicit empty grouping sets
#13028 - Generated DAOs should use an embeddable's referencingName, not name for the fetchByXYZ() and fetchRangeOfXYZ() methods
#13053 - java.lang.NoClassDefFoundError: org/postgresql/util/PGInterval when rendering SQL without the pgjdbc dependency
#13068 - Change selectFrom(Table) methods to selectFrom(TableLike)
#13080 - Standard SQL MULTISET emulation using XML produces a null Result
#13082 - SQL Server MULTISET as JSON emulation of empty subquery produces NULL instead of empty Result
#13094 - Throw an exception when calling ConvertedDataType.getArrayDataType() when the type has a custom Binding
#13114 - SelectField.as() should return SelectField, not Field
#13115 - Change Table::getType to Table::getTableType
#13116 - Rename QOM.RowField to QOM.RowAsField
#13149 - Let Query.keepStatement() return CloseableQuery and ResultQuery.keepStatement() return CloseableResultQuery
#13181 - MULTISET emulation using SQL/XML doesn't correctly distinguish between NULL and ''
#13208 - SQL Server JSON_OBJECT should implement NULL ON NULL semantics by default
#13307 - Change $number() arguments in experimental QOM function types to $value()
#13426 - DSLContext::fetchFromJSON and ::fetchFromXML wrongly assume dialect specific data types in header

Deprecations

#13005 - Deprecate FieldOrConstraint
#13071 - Deprecate the org.jooq.Internal annotation
#13542 - Replace SPI default implementation class (e.g. DefaultExecuteListener) by default methods in interface

Bug Fixes

#1049 - Better GREATEST() and LEAST() emulations for SQL Server using MAX() or MIN() with VALUES() correlated derived table
#5612 - Inline enum values should be cast to their enum type just like inline bind variables
#6133 - Cannot combine CREATE TEMPORARY TABLE .. AS .. with ON COMMIT ..
#7362 - Excess parentheses generated in NOT operator
#7783 - Nested row value expressions produce String column types when concrete type information should be available
#8614 - Passing arrays of generated tableRecords to a stored procedure generates SQL that won't parse due to cast ::any[]
#8681 - Wrong SQL generated for connectByRoot(minus(one()))
#9981 - Some BooleanDataKey values should be reset when entering a new scope
#10277 - CAST to PostgreSQL enum type lacks type qualification
#10304 - Unnecessary parentheses generated in ConditionAsField
#11114 - CAST should generate qualified type when casting to Table::getDataType or UDT::getDataType
#11424 - Improve the alignment of GenerationTool INFO log
#11441 - Inlining PostgreSQL CHAR(len)[] types produces VARCHAR[] instead
#11509 - batchStore(), batchInsert(), etc. with StatementType.STATIC_STATEMENT throws java.sql.BatchUpdateException
#11552 - UpdatableRecord::merge doesn't work in the presence of a unique constraint and in the absence of a primary key value
#11637 - FilePattern cannot load classpath resource from within jar file
#11722 - Code generator cannot handle tables from other schemas than PUBLIC referencing H2 enum domain types
#12036 - Timestamp Arithmetic fails with ConvertedDataType
#12134 - Support deserialising binary data in MULTISET emulations
#12269 - Records detached when converting nested multiset
#12287 - Replace calls to System.currentTimeMillis() by Clock usage
#12428 - DDL export no longer exports INDEX WHERE clause
#12525 - Nesting of converters causes unexpected Exception
#12783 - Feature Comparison on website is different from docs
#12788 - Support SQLite columns having no data type declaration
#12794 - Parser and code generator does not recognise H2 2.0's BINARY VARYING and other standard SQL data type synonyms
#12795 - Upgrade H2 dependency to 2.0.206
#12801 - GroupConcat renders string_agg separator argument within wrong parentheses
#12804 - Add parser support for Teradata's { UPDATE | DELETE } .. ALL syntax
#12811 - DAOImpl.findOptionalById shouldn't be final
#12818 - GROUP_CONCAT doesn't work as window function
#12820 - Parser doesn't support Derby's FOR BIT DATA data type modifier
#12824 - Parser cannot handle 1. decimal syntax in SELECT
#12825 - Parser shouldn't parse Teradata cast syntax based on Settings.parseAppendMissingTableReferences, but only based on the parseDialect()
#12852 - Parser can't handle TRIM (FROM ) syntax
#12854 - jOOQ Open Source Edition code generation doesn't work PostgreSQL 11 or less because of ERROR: column pg_attribute.attgenerated does not exist
#12855 - Bump spring-core from 5.3.13 to 5.3.14
#12858 - Computed column related support annotations claim SQLDialect.POSTGRES instead of SQLDialect.POSTGRES_12
#12864 - OSS Edition H2 INSERT .. RETURNING no longer works if columns are qualified with a schema
#12868 - The DATA_RENDERING_DATA_CHANGE_DELTA_TABLE qualification omission doesn't work correctly in the presence of scalar subqueries
#12884 - Upgrade jOOQ-checker's error_prone_core's transitive protobuf dependency to mitigate CVE-2021-22569
#12888 - Parser should treat AS optional in CREATE TABLE AS SELECT
#12890 - Parser fails to parse SET SCHEMA 'string-literal'
#12908 - Select::$replace loses GROUP BY clause
#12916 - Select.$where(), $having, $qualify(), $connectBy(), $connectByStartWith() don't actually return null in the absence of a predicate
#12917 - Wrong SQL generated when InlineDerivedTable is transformed using $replace()
#12922 - Bump h2 from 2.0.206 to 2.1.210
#12923 - Upgrade H2 to 2.1.210
#12925 - Work around H2 issue 3398 which hangs the process when using FINAL TABLE (MERGE ...)
#12929 - NullPointerException when mapping NULL nested ROW from scalar subquery
#12930 - Nested ROW projection emulation doesn't work in scalar subqueries
#12931 - DAOImpl#deleteById(Collection) ignores Converter
#12938 - Outdated implementation examples in manual's MULTISET section
#12939 - maven-deploy.sh should have same description in --repository flag as maven-deploy.bat
#12944 - Consider improving invalid JDBC URL error messages in class generation
#12951 - GenerationTool should handle JDBC driver returning null Connection on Driver::connect
#12954 - Typo in manual section "codegen-ddl"
#12955 - Wrong code generated for identity columns in H2 1.4
#12956 - Can no longer store/retrieve blob data exceeding 1M in H2 2.0
#12966 - NullPointerException in MetaDataFieldProvider when reading plain SQL column without a name in MySQL
#12970 - jOOQ Open Source Edition does not generate routine with long name
#12976 - Bump postgresql from 42.3.0 to 42.3.2
#12977 - Jooq holds onto connections when using r2dbc
#12979 - Upgrade the pgjdbc dependency to 42.3.2 due to CVE-2022-21724
#12982 - Bump postgresql from 42.2.8 to 42.2.25 in /jOOQ-examples/jOOQ-spark-chart-example
#12983 - Outdated JAXB dependency in manual tutorial
#12991 - Typo in manual section "codegen-tables"
#12992 - Code generation flag should turn on as a dependency
#12993 - [jOOQ/jOOQ#12992] Automatically enable table generation if indexes are enabled
#12994 - Typo in manual section "fetching"
#13008 - Compilation error in KotlinGenerator output when implicit join path cache conflicts with keyword
#13010 - [#13008] Unquote keyword when mapping one to many relation
#13013 - Interpreter does not correctly interpret CREATE INDEX .. WHERE
#13023 - Record.formatJSON(Writer) and Record.formatXML(Writer) should flush the writer
#13029 - SQLDataType.XYZ.getArrayDataType().getTypeName() and getCastTypeName() should produce standard SQL XYZ ARRAY type
#13033 - DSL.function not replacing schema for function call in generated SQL
#13034 - SchemaMapping should apply Settings.defaultCatalog even if Settings.defaultSchema doesn't apply
#13035 - SchemaMapping should cache result of Settings.defaultCatalog or Settings.defaultSchema application
#13040 - AbstractRecord.from(String[], TableField[]) no longer works as expected
#13043 - Avoid generating H2 NUMBER type alias for NUMERIC types
#13048 - Settings.parseRetainCommentsBetweenQueries doesn't work for the last comment
#13054 - java.lang.IllegalArgumentException: Cannot create a VALUES() constructor with an empty set of rows when using JSON_ARRAY(ABSENT ON NULL) in PostgreSQL
#13058 - NullPointerException when using CAST(x AS user-defined-type) with SQLDialect.JAVA
#13060 - Typo in Records.intoArray(Class) Javadoc
#13073 - Order of calling DataType.asConvertedDataType(Converter) and DataType.getArrayDataType() should not matter
#13076 - Bump postgresql from 42.2.25 to 42.3.3 in /jOOQ-examples/jOOQ-spark-chart-example
#13081 - Cannot use H2 enum values in JSON documents
#13085 - Field.sortAsc() should not hard wire NULLS FIRST behaviour
#13089 - MySQL's BIT(1) type doesn't map correctly in MULTISET subqueries
#13107 - Register array types of built-in types in internal static type registry
#13113 - Manual dialects translations for nested records emulations is wrong
#13117 - Bad deserialisation of UDT TIMESTAMP value in the presence of a Converter in PostgreSQL
#13119 - Nested record projection should generate ROW constructor keyword for rows of degree 1 in PostgreSQL's RETURNING clauses
#13120 - Cannot use RETURNING with 2-level nested ROW expressions in SQL Server
#13124 - Sequence.nextvals() doesn't work with DSLContext.selectFrom()
#13138 - Bad JSONFormat rendering of nested records
#13144 - ClobBinding shouldn't call Clob.length() in Firebird
#13147 - Context::scopeMapping should return @NotNull QueryPart
#13148 - Prevent Context::scopeMapping to apply when wrapperFor(X) is equal to X
#13156 - Work around Oracle / ojdbc bug where JSON_ARRAY() can't combine bind parameter marker with FORMAT JSON
#13163 - Compilation error when PostgreSQL stored function has an ANY[] data type reference
#13169 - Incorrect parsing of (NULL) row literal in PostgreSQL for nested records, UDTs, etc.
#13170 - NPE in INSERT .. ON DUPLICATE KEY emulation when defaulted PRIMARY KEY value isn't supplied in Oracle
#13174 - ERROR: could not determine data type of parameter when projecting PostgreSQL UDT bind value
#13184 - UNNEST table expression does not maintain derived column list
#13189 - Feedback about manual section "codegen-ddl"
#13196 - Db2 RowAsField emulation using JSON_OBJECT is lacking RETURNING BLOB when using the JSONB emulation
#13200 - MULTISET nested record as JSON_OBJECT() emulation (Db2, SQL Server) doesn't work for records with more than 10 fields
#13202 - SQL Server CREATE TABLE statement should generate VARBINARY(MAX) for BLOB
#13204 - Boolean values aren't serialised correctly in SQL Server JSON documents
#13211 - KotlinGenerator cannot read existing catalog/schema version
#13212 - [#13211] Use square brackets for KotlinGenerator
#13216 - Change Sakila database such that all ID types are INTEGER
#13217 - Work around xerial SQLite driver's Clob behaviour when data is null
#13220 - SQLite's JSON operators don't retain boolean three-valued logic
#13226 - Wrong escaping of string literals in doubly nested EXECUTE IMMEDIATE blocks for DDL emulations
#13230 - UNNEST with array argument doesn't work in Oracle when used with derived column list
#13237 - ORA-03001: unimplemented feature when nested row emulation produces double quotes in Oracle identifiers
#13240 - Code generation fails with H2 2.1.210 when using MySQL execution mode
#13245 - Bump liquibase-core from 4.4.3 to 4.8.0
#13251 - Error when nesting ROW() expressions with values instead of with fields, with degree > 22
#13252 - Cannot insert data into PostgreSQL XML column due to missing cast
#13273 - INSERT .. ON DUPLICATE KEY { IGNORE | UPDATE } emulation should consider all UNIQUE keys on SQLite
#13276 - Wrong code generated for SQLite table with unnamed primary key and unique constraints
#13290 - NullPointerException in Result.formatJSON(), formatXML(), formatCSV(), formatHTML() when a Record is null
#13302 - H2TableDefinition with H2 2.0+ produces wrong code generation output when the run mode is Oracle
#13311 - QOM API mutators on Select type don't copy OFFSET .. LIMIT and a few other clauses
#13315 - Compilation error in generated UDTRecord's POJO constructor if the UDT contains arrays of table records
#13319 - Generated records shouldn't have a @ConstructorProperties annotation on their POJO constructor
#13340 - Wrong precision documented in forceIntegerTypesOnZeroScaleDecimals manual section
#13341 - jOOQ internals shouldn't create unnamed derived tables
#13348 - Internal deprecation note on FieldsTrait::field leaks into generated code
#13349 - Select.asTable() should delay slow call to Tools::autoAlias
#13355 - Invalid code generated when pojosEqualsAndHashCode option is enabled and column name is 'other'
#13364 - Result::formatXML does not escape type names
#13379 - Generated SQL Server code uses sp_executeSQL, which fails for binary (case sensitive) collations
#13383 - Invalid SQL generated in Oracle 11g when query has LIMIT clause and scalar subqueries without explicit aliases
#13392 - Generated column name for binary bind values shouldn't use Java's byte[].toString()
#13395 - Bump spring-core from 5.3.16 to 5.3.18
#13396 - Update spring-core dependency to 5.3.18 to mitigate CVE-2022-22965
#13403 - MULTISET and ROW generated nested records should not have their changed flags set to true
#13415 - GroupConcat renders string_agg separator argument within wrong parentheses in EXASOL
#13422 - Dead links in manual for nested class Javadocs
#13424 - Duplicate headers in manual where there exist redirects
#13429 - DSL.noCondition() isn't applied correctly to aggregate FILTER WHERE clause
#13439 - No warning is logged when readonly columns or rowids are not used
#13447 - Upgrade to org.postgresql:postgresql:42.3.3 to mitigate CVE-2022-26520
#13454 - ARRAY_AGG cannot aggregate array columns in H2
#13465 - Expressions based on computed columns must not retain computation reference
#13468 - Work around SQLite INSERT .. SELECT .. ON CONFLICT bug
#13473 - SQLException when calling oracle.jdbc.driver.ArrayDataResultSet.getMetaData()
#13479 - Bump spring-core from 5.3.18 to 5.3.19
#13488 - org.jooq.SQL and manual should document plain SQL templating's capability of recognising :named parameters
#13489 - ArrayIndexOutOfBoundsException when rendering PostgreSQL plain SQL template containing ?@
#13499 - Improve implementation of QualifiedName.hashCode()
#13503 - Parser meta lookups don't work for INSERT .. SELECT .. RETURNING
#13509 - MariaDB, MySQL, Oracle, SQL Server may ignore MULTISET subquery ORDER BY clause
#13513 - LoaderLoadStep.execute() shouldn't have @CheckReturnValue annotation
#13536 - Wrong documentation for
#13543 - NullPointerException when rendering CTE without a top level context
#13545 - DSL.quotedName(String[]) should produce QualifiedName only if argument array length != 1
#13555 - Field::likeIgnoreCase should cast lhs operand just like Field::like and Field::similarTo
#13557 - MySQL / MariaDB generated columns with enum type are not generated as readonly
#13560 - Invalid SQL generated for Oracle when selecting multiple unaliased rows
#13563 - INSERT .. RETURNING emulations shouldn't acquire multiple connections from ConnectionProvider when using ThreadLocalTransactionProvider
#13574 - UpdatableRecord::merge might produce wrong update count if generated keys can't be fetched
#13581 - Excess parentheses generated in unary ~ (QOM.BitNot) or - (QOM.Neg) operators
#13600 - Bump spring-core from 5.3.19 to 5.3.20
#13601 - Derby boolean expressions have to be wrapped in parentheses when passed to COALESCE
#13608 - Distribute jOOQ-postgres-extensions also with the commercial distributions
#13611 - UnsupportedOperationException when selecting single nested row with JSON column
#13624 - Manual documents wrong artifactId for
#13625 - Wrong code generated for Oracle package procedure SYS.DBMS_STATS.GATHER_DATABASE_STATS
#13635 - Test container does not close in example
#13636 - Close testcontainer in example
#13643 - Wrong result column type for requested conversion when reading JSONB_ARRAY and JSONB_OBJECT nested in ROW in DB2
#13647 - DefaultRecordUnmapper should cache AbstractRow and record type
#13660 - PostgreSQL ON CONFLICT .. WHERE .. DO NOTHING generates not valid SQL
#13663 - Remove the "modern IDEs" section from the manual
#13664 - Avoid ambiguous reference when using Table as SelectField for table conflicting with column
#13667 - Link.$schema() is Nullable
#13671 - Oracle doesn't support ORDER BY in UPDATE .. SET correlated subquery
#13673 - Settings.returnAllOnUpdatableRecord doesn't work for UPDATE queries in HSQLDB
#13676 - Improve warning message in code generator
#13681 - Cannot use scalar subquery originating from MULTISET in JSON_OBJECT() VALUE clause in Db2
#13691 - Manual should link JDBC types to Javadoc

jOOQ - 3.17.1

Published by lukaseder 9 months ago

Version 3.17.1 - June 27, 2022

This is a 3.17 patch release with minor improvements and bug fixes

Features and Improvements

#13707 - OnError.FAIL should log a message about the user's option how to handle the problem
#13719 - Log warning should show jOOQ-meta type to help disambiguate objects that share the same name

Bug Fixes

#13710 - Ill formatted Javadoc in DSLContext
#13714 - Cannot parse computed columns in the presence of identity column
#13724 - Regression: Zero-length delimited identifier is generated for enum columns when using
#13726 - Regression: Client code no longer compiles when calling DSLContext.fetchSingle(Table, Condition...)

jOOQ - 3.17.2

Published by lukaseder 9 months ago

Version 3.17.2 - July 7, 2022

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#13731 - Generated sources emits "reference not accessible" warning for org.jooq.impl.AbstractTable#convertFrom
#13733 - Wrong Javadoc in generated AbstractSpringDAOImpl
#13735 - Work around JDK-8289221, where javadoc aren't allowed to contain ellipses in a code tag in a method header
#13739 - Reactive transactions don't call Connection::close
#13740 - Connection::close call is skipped when R2DBC query fails
#13743 - R2DBC implementation may hang when there's an exception in the rendering logic
#13754 - GROUP BY does not use table alias
#13757 - Returning null from transactionCoroutine throws NoSuchElementException
#13765 - DefaultRecordBinding.pgRenderRecordCast and others don't apply schema mapping
#13767 - Upgrade log4j to 2.18.0 to mitigate CVE-2022-33915
#13772 - Parser doesn't support parsing parenthesised GROUP BY expression
#13777 - maven-deploy and maven-install bash and batch scripts should terminate on mvn command error
#13782 - ERROR: unknown function: nameconcatoid() in CockroachDBDatabase on CockroachDB 22

jOOQ - 3.17.3

Published by lukaseder 9 months ago

Version 3.17.3 - August 16, 2022

This is a 3.17 patch release with minor improvements and bug fixes

Bug Fixes

#13792 - Data type rewrites to BOOLEAN don't work in Oracle JSON_OBJECT
#13797 - Virtual client side computed columns must be excluded from generated DDL statements
#13799 - GenerationOption.DEFAULT should act as STORED in client side computed columns
#13819 - MySQL DEFAULT CURRENT_TIMESTAMP column is generated as computed column
#13831 - NullPointerException when calling DBMS_AQ.dequeue
#13852 - Wrong DDL generated for computed columns in MEMSQL
#13855 - Syntax error in MemSQL code generation
#13858 - Upgrade pgjdbc to mitigate CVE-2022-31197
#13861 - Fix typo in code generation log message
#13863 - AbstractSpringDAOImpl imported from wrong package when generating multiple schemas
#13864 - Wrong kotlin code generated for SQL Server stored procedures
#13868 - MemSQL doesn't support the SET @@var = @other_var syntax

jOOQ - 3.17.4

Published by lukaseder 9 months ago

Version 3.17.4 - September 6, 2022

This is a 3.17 patch release with minor improvements and bug fixes

Features and Improvements

#13886 - Parse length on unknown data types
#13888 - Parse and ignore SQLite DDL conflict-clause
#13931 - Show deprecation warning for javax.persistence annotations also for method and field annotations

Bug Fixes

#13874 - PostgreSQL arrays don't deserialise correctly when using XML MULTISET emulation
#13877 - ArrayGet should not produce parentheses when used as a store assignment target, e.g. in UPDATE
#13883 - Parser should parse and ignore PRIMARY KEY UNIQUE
#13899 - The maven codegen plugin does not load syntheticObjects from external configurationFile
#13908 - Logger name repeated twice
#13909 - Code generation fails with H2 2.1.214 when using CASE_INSENSITIVE_IDENTIFIERS
#13921 - PostgreSQL generated code doesn't maintain precision / scale on NUMERIC or TIME, TIMETZ, TIMESTAMP, TIMESTAMPTZ types
#13923 - Convert truncates microseconds from OffsetDateTime when converting to Instant
#13929 - NullPointerException thrown instead of DetachedException, when executing detached query
#13943 - Cannot use Table as SelectField from derived table where nesting records is supported natively
#13953 - IsNotDistinctFrom predicate doesn't declare non-nullability