Version 3.20.12 - March 24, 2026
================================================================================
This is a 3.20 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#19661 - Add MatchersFieldType.tableMemberOverride to allow for declaring TableField properties in Kotlin interfaces
Bug Fixes
---------
#19630 - Exception when reading an enum typed array from the PostgreSQL R2DBC driver
#19633 - Add support for JSONB types in SQLDialect.AURORA_POSTGRES for update query
#19646 - Add missing MariaDB, MySQL support on JSON_ARRAYAGG clause ABSENT ON NULL
#19649 - JSON_ARRAYAGG emulation using GROUP_CONCAT doesn't properly quote string-style data types, like UUID, DATE, etc.
#19657 - DSLContext.meta(InformationSchema) does not read column identity information
#19666 - SQLite JSON bind values should be wrapped in json() or jsonb() functions
#19670 - MySQL / MariaDB JSON bind values should be wrapped JSON casts or JSON_EXTRACT()
#19674 - Inconsistent formatting of CAST() function
#19679 - DuckDB doesn't support binary type lengths
#19691 - Wrong SQL generated for Db2 CREATE TABLE statements when a DataType has a GENERATED clause and is explicitly NULL
#19697 - Bad rendering of the Geometry type for ClickHouse
#19698 - SQLDataType.LOCALDATE produces Nullable(Nullable(date)) in DDL or casts, instead of just Nullable(date)
#19701 - Upgrade Jackson dependency to mitigate GHSA-72hv-8253-57qq
#19706 - Compilation error in generated EmbeddableRecord code when foreign key matches exact column list as another primary key
#19717 - INSERT .. ON CONFLICT .. DO NOTHING .. RETURNING emulation does not return anything for Oracle
#19722 - ALTER TABLE .. ADD IF NOT EXISTS and similar is not supported by Databricks
#19725 - No support for derived column lists in Databricks MERGE .. USING
#19727 - Wrong SQL generated for Databricks BIT_XOR()
#19729 - Databricks CREATE FUNCTION returning SELECT produces invalid SQL
#19731 - Wrong TIMESTAMP WITH TIME ZONE literal generated for Databricks
#19734 - Wrong update count produced for Databricks INSERT .. SELECT statement
#19737 - An invalid parameter mapping was provided: the given data type 'NULL' for parameter 'null' is not valid in Databricks, when binding null values using SQLDataType.OTHER
#19739 - Databricks JDBC driver doesn't support Clob and Blob bindings
#19741 - Bad SQL generated for UNNEST(ARRAY...) in Databricks
#19744 - Fix WINDOW clause support in Databricks
#19750 - Databricks doesn't support CREATE TABLE AS SELECT with explicit column list
#19752 - Bad SQL generated for Databricks STRING_TO_ARRAY
#19754 - Missing COTH and ACOTH emulations for Databricks
#19756 - Implicit JOIN in DML emulation should work around Databricks limitation for correlated subqueries
#19769 - DefaultConverterProvider cannot parse shortened PostgreSQL TIMETZ formats
#19774 - Formatting of LocalTime values should always include seconds
#19779 - Oracle's CURRENT_TIME emulation should cast CURRENT_TIMESTAMP to TIMESTAMP explicitly, to avoid fetching TIMESTAMPTZ values
Version 3.19.31 - March 24, 2026
================================================================================
This is a 3.19 patch release with minor improvements and bug fixes
Bug Fixes
---------
#19631 - Exception when reading an enum typed array from the PostgreSQL R2DBC driver
#19634 - Add support for JSONB types in SQLDialect.AURORA_POSTGRES for update query
#19647 - Add missing MariaDB, MySQL support on JSON_ARRAYAGG clause ABSENT ON NULL
#19650 - JSON_ARRAYAGG emulation using GROUP_CONCAT doesn't properly quote string-style data types, like UUID, DATE, etc. #19643
#19658 - DSLContext.meta(InformationSchema) does not read column identity information
#19667 - SQLite JSON bind values should be wrapped in json() or jsonb() functions
#19671 - MySQL / MariaDB JSON bind values should be wrapped JSON casts or JSON_EXTRACT()
#19675 - Inconsistent formatting of CAST() function
#19680 - DuckDB doesn't support binary type lengths
#19692 - Wrong SQL generated for Db2 CREATE TABLE statements when a DataType has a GENERATED clause and is explicitly NULL
#19702 - Upgrade Jackson dependency to mitigate GHSA-72hv-8253-57qq
#19707 - Compilation error in generated EmbeddableRecord code when foreign key matches exact column list as another primary key
#19718 - INSERT .. ON CONFLICT .. DO NOTHING .. RETURNING emulation does not return anything for Oracle
#19770 - DefaultConverterProvider cannot parse shortened PostgreSQL TIMETZ formats
#19775 - Formatting of LocalTime values should always include seconds
#19780 - Oracle's CURRENT_TIME emulation should cast CURRENT_TIMESTAMP to TIMESTAMP explicitly, to avoid fetching TIMESTAMPTZ values
Version 3.18.38 - March 24, 2026
================================================================================
This is a 3.18 patch release with minor improvements and bug fixes
Bug Fixes
---------
#19632 - Exception when reading an enum typed array from the PostgreSQL R2DBC driver
#19635 - Add support for JSONB types in SQLDialect.AURORA_POSTGRES for update query
#19648 - Add missing MariaDB, MySQL support on JSON_ARRAYAGG clause ABSENT ON NULL
#19651 - JSON_ARRAYAGG emulation using GROUP_CONCAT doesn't properly quote string-style data types, like UUID, DATE, etc. #19643
#19659 - DSLContext.meta(InformationSchema) does not read column identity information
#19668 - SQLite JSON bind values should be wrapped in json() or jsonb() functions
#19672 - MySQL / MariaDB JSON bind values should be wrapped JSON casts or JSON_EXTRACT()
#19676 - Inconsistent formatting of CAST() function
#19693 - Wrong SQL generated for Db2 CREATE TABLE statements when a DataType has a GENERATED clause and is explicitly NULL
#19703 - Upgrade Jackson dependency to mitigate GHSA-72hv-8253-57qq
#19708 - Compilation error in generated EmbeddableRecord code when foreign key matches exact column list as another primary key
#19719 - INSERT .. ON CONFLICT .. DO NOTHING .. RETURNING emulation does not return anything for Oracle
#19781 - Oracle's CURRENT_TIME emulation should cast CURRENT_TIMESTAMP to TIMESTAMP explicitly, to avoid fetching TIMESTAMPTZ values