[ ANNOUNCEMENT ] jOOQ 3.21.0 with Databricks, Spanner support, cloud dialect upgrades, redacted columns, meta dependencies, many UDT and DDL improvements, and much more

51 views
Skip to first unread message

Lukas Eder

unread,
Mar 24, 2026, 5:50:32 AM (6 days ago) Mar 24
to jOOQ User Group


Version 3.21.0 - March 24, 2026
================================================================================


New dialects:
-------------

jOOQ 3.20 ships with 2 new dialects:

- Databricks in the jOOQ Enterprise Edition (no longer experimental)
- Spanner in the jOOQ Enterprise Edition

Databricks offers a very promising SQL dialect with a lot of functionality,
which we're going to cover in full with the next version jOOQ 3.21. An initial
version of the dialect is shipped already in 3.20 as an experimental dialect.
3.20 will continue to receive bug fixes and Databricks improvements as we work
with early adopting customers.

Spanner is Google SQL's second variant after BigQuery. The new Spanner dialect
support has also greatly contributed to jOOQ's BigQuery dialect quality, as
the dialects are very similar.


Dialect upgrades:
-----------------

Cloud dialects were improved by adding support for a lot of new features that
they're offering. Affected dialects include:

- BigQuery
- Databricks
- Redshift
- Snowflake


Redacted columns:
-----------------

Redacted columns are a new code generation feature in jOOQ that allow for
certain columns to be redacted when debug logging their contents in your
log files:

- https://www.jooq.org/doc/latest/manual/reference/security/security-debug-logging/

This is a commercial only feature.


Meta dependencies:
------------------

The new org.jooq.Dependencies type that is available from
Meta::dependencies allows for introspecting the transitive
dependencies between views and their referenced tables. In the future, it will
allow for navigating many more types of objects and their meta data
dependencies, e.g. to help decide in what order objects need to be dropped,
etc.

This is a commercial only feature.


Equi join diagnostic:
---------------------

A new diagnostic checks if equi joins use all the known columns from the
respective keys. This is very useful to check for correctness when manually
joining on composite keys without using join paths or the ON KEY syntax:

- https://www.jooq.org/doc/3.21/manual/sql-execution/diagnostics/diagnostics-incomplete-equi-join/

Diagnostics are a commercial only feature.


Many UDT improvements:
----------------------

UDTs are a powerful feature of ORDBMS, with increasing dialects supporting
them. When using jOOQ's code generator, they become native to Java code as
well, while jOOQ's runtime takes care of the complexities of binding them.

Among the many improvements to UDTs in this release are:

- UDTs are now available from runtime Meta data
- UDT path emulation where this isn't supported natively.
- UDTs in MULTISET support
- UDT path expressions can be parsed
- UDTs are imported and exported to the InformationSchema XML format


All column embeddables:
-----------------------

Embeddables are a very useful feature in jOOQ that allow for attaching UDT
like semantics to individual columns or column sets.

A new configuration allows for specifying a regular expression matching all
columns for which an automatic embeddable should be generated, to greatly
simplify the configuration of the embeddable feature:

- https://www.jooq.org/doc/3.21/manual/code-generation/codegen-embeddable-types/codegen-embedded-columns/

Diagnostics are a commercial only feature.


Many DDL improvements:
----------------------

This version adds a lot of additional DDL support including:

- More IF EXISTS support
- SET GENERATED and DROP GENERATED support for computed columns
- SET IDENTITY and DROP IDENTITY support
- MySQL CHANGE COLUMN syntax support
- GENERATED ALWAYS AS IDENTITY (as opposed to GENERATED BY DEFAULT)
- LOCAL TEMPORARY vs GLOBAL TEMPORARY support
- COMMENT ON FUNCTION and COMMENT ON PROCEDURE support
- CREATE FUNCTION with DEFAULT parameter support
- ... and much more


Large upgrade counts:
---------------------

JDBC 4.2 introduced a way for JDBC drivers to return large update counts,
which jOOQ now reflects as well through methods like
Query::executeLarge. At the same time, countLarge()
and similar aggregate functions have been introduced to help count rows of
tables with more than Integer.MAX_VALUE rows.





For a complete list other, minor improvements, see the below change notes.
https://www.jooq.org/notes

Reply all
Reply to author
Forward
0 new messages