Version 3.18.32 - August 12, 2025
================================================================================
This is a 3.18 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18627 - BlobBinding and ClobBinding should fall back to byte[] and String binding if unavailable
#18735 - Add DataType::isQualifiedRecord and DataType::isUDTRecord
#18848 - Add a warning to the Query::bind Javadoc about the method not being very useful in general
Bug Fixes
---------
#18590 - Upgrade pgjdbc dependency to 42.7.7 to mitigate CVE-2025-49146
#18597 - Ad-hoc compilation of code generator shouldn't require adding jooq-codegen dependency to project, explicitly
#18602 - Wrong list of supported dialects on various IF [ NOT ] EXISTS methods
#18612 - NClobBinding doesn't correctly bind NULL values
#18615 - Inlining of large SQLDataType.NCLOB values doesn't use TO_NCLOB() in Oracle, like for large CLOB values
#18621 - NClobBinding should revert to ordinary String usage when JDBC driver doesn't support NClob
#18624 - MetaImpl doesn't return Db2 GLOBAL TEMPORARY tables
#18637 - JDBC backed MetaImpl reports Oracle GLOBAL TEMPORARY tables as ordinary tables
#18646 - Slash in name results in invalid identifier being generated using KotlinGenerator
#18649 - KotlinGenerator produces bad code when table / column identifier disambiguation clashes with special character escaping
#18652 - Bad file names generated on Windows in KotlinGenerator and ScalaGenerator when using special characters
#18657 - Compilation error in Kotlin generated code when table name contains special characters and paths are generated
#18675 - Parser cannot parse Oracle style IN, OUT modifier in procedure declarations
#18691 - PostgreSQL UDT not deserialized correctly when embedded in multiset
#18696 - Function parameter references aren't rendered with @ prefix in SQL Server, in function body
#18699 - Generated CREATE FUNCTION statement renders extra BEGIN .. END block in SQL Server
#18705 - MetaImpl should support DataType::generatedAlwaysAs property if JDBC DatabaseMetaData::getColumns can report it
#18712 - DataType.generationOption(null) shouldn't store null value, but DEFAULT value
#18721 - Bad formatting in PostgreSQL IF [ NOT ] EXISTS emulation when nested in more blocks
#18725 - Cannot place Oracle UDT in MULTISET with JSON emulation
#18731 - Settings.renderQuotedNames shouldn't affect xsi:nil attribute rending in MULTISET XML emulation
#18741 - Code generator does not apply DataType.GEOMETRY to PostgreSQL materialized view
#18752 - Formatting problem in generated Kotlin UDTs
#18756 - Insert::$updateSet doesn't replace the SET clause, but appends to it
#18765 - Parser fails to parse T-SQL query with TOP and quoted identifiers, when Settings.parseDialect is set to DEFAULT
#18790 - XMLDatabase has O(N^2) complexity in column / attribute / parameter lookups
#18811 - Procedural IF a = b is emulated incorrectly in H2
#18835 - Avoid unnecessary StringReader and StringWriter allocations and data transfer in MULTISET deserialisation
#18839 - <dateAsTimestamp/> deprecation notice should mention DateAsTimestampBinding alternative explicitly
#18844 - JSONParser::parseStringLiteral should omit StringBuilder copy if no escape sequence is found
Version 3.19.25 - August 12, 2025
================================================================================
This is a 3.19 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18734 - Add DataType::isQualifiedRecord and DataType::isUDTRecord
#18847 - Add a warning to the Query::bind Javadoc about the method not being very useful in general
Bug Fixes
---------
#18589 - Upgrade pgjdbc dependency to 42.7.7 to mitigate CVE-2025-49146
#18596 - Ad-hoc compilation of code generator shouldn't require adding jooq-codegen dependency to project, explicitly
#18601 - Wrong list of supported dialects on various IF [ NOT ] EXISTS methods
#18611 - NClobBinding doesn't correctly bind NULL values
#18614 - Inlining of large SQLDataType.NCLOB values doesn't use TO_NCLOB() in Oracle, like for large CLOB values
#18620 - NClobBinding should revert to ordinary String usage when JDBC driver doesn't support NClob
#18623 - MetaImpl doesn't return Db2 GLOBAL TEMPORARY tables
#18636 - JDBC backed MetaImpl reports Oracle GLOBAL TEMPORARY tables as ordinary tables
#18645 - Slash in name results in invalid identifier being generated using KotlinGenerator
#18648 - KotlinGenerator produces bad code when table / column identifier disambiguation clashes with special character escaping
#18651 - Bad file names generated on Windows in KotlinGenerator and ScalaGenerator when using special characters
#18656 - Compilation error in Kotlin generated code when table name contains special characters and paths are generated
#18659 - org.jooq.codegen.gradle.MetaExtensions classes should adhere to JavaBeans convention to avoid deprecation warning in Gradle 8.x
#18665 - Bad types generated in Informix UDT classes for informix.boolean, informix.blob, and informix.lvarchar types
#18668 - Informix generated code contains extra "_0" attribute in generated UDTs
#18672 - Work around Informix JDBC driver java.lang.IllegalMonitorStateException bug when reading UDT out parameters
#18674 - Parser cannot parse Oracle style IN, OUT modifier in procedure declarations
#18690 - PostgreSQL UDT not deserialized correctly when embedded in multiset
#18695 - Function parameter references aren't rendered with @ prefix in SQL Server, in function body
#18698 - Generated CREATE FUNCTION statement renders extra BEGIN .. END block in SQL Server
#18704 - MetaImpl should support DataType::generatedAlwaysAs property if JDBC DatabaseMetaData::getColumns can report it
#18711 - DataType.generationOption(null) shouldn't store null value, but DEFAULT value
#18720 - Bad formatting in PostgreSQL IF [ NOT ] EXISTS emulation when nested in more blocks
#18724 - Cannot place Oracle UDT in MULTISET with JSON emulation
#18730 - Settings.renderQuotedNames shouldn't affect xsi:nil attribute rending in MULTISET XML emulation
#18740 - Code generator does not apply DataType.GEOMETRY to PostgreSQL materialized view
#18751 - Formatting problem in generated Kotlin UDTs
#18755 - Insert::$updateSet doesn't replace the SET clause, but appends to it
#18764 - Parser fails to parse T-SQL query with TOP and quoted identifiers, when Settings.parseDialect is set to DEFAULT
#18775 - Bad rendering of UDTPathField in PL/SQL contexts
#18789 - XMLDatabase has O(N^2) complexity in column / attribute / parameter lookups
#18810 - Procedural IF a = b is emulated incorrectly in H2
#18834 - Avoid unnecessary StringReader and StringWriter allocations and data transfer in MULTISET deserialisation
#18838 - <dateAsTimestamp/> deprecation notice should mention DateAsTimestampBinding alternative explicitly
#18843 - JSONParser::parseStringLiteral should omit StringBuilder copy if no escape sequence is found
Version 3.20.6 - August 12, 2025
================================================================================
This is a 3.20 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18733 - Add DataType::isQualifiedRecord and DataType::isUDTRecord
#18826 - Add Meta and DDL catalog support for Databricks
#18846 - Add a warning to the Query::bind Javadoc about the method not being very useful in general
Bug Fixes
---------
#18588 - Upgrade pgjdbc dependency to 42.7.7 to mitigate CVE-2025-49146
#18594 - Meta.getSchemas() produces schema multiple times across catalogs in DuckDB
#18595 - Ad-hoc compilation of code generator shouldn't require adding jooq-codegen dependency to project, explicitly
#18600 - Wrong list of supported dialects on various IF [ NOT ] EXISTS methods
#18610 - NClobBinding doesn't correctly bind NULL values
#18613 - Inlining of large SQLDataType.NCLOB values doesn't use TO_NCLOB() in Oracle, like for large CLOB values
#18619 - NClobBinding should revert to ordinary String usage when JDBC driver doesn't support NClob
#18622 - MetaImpl doesn't return Db2 GLOBAL TEMPORARY tables
#18635 - JDBC backed MetaImpl reports Oracle GLOBAL TEMPORARY tables as ordinary tables
#18644 - Slash in name results in invalid identifier being generated using KotlinGenerator
#18647 - KotlinGenerator produces bad code when table / column identifier disambiguation clashes with special character escaping
#18650 - Bad file names generated on Windows in KotlinGenerator and ScalaGenerator when using special characters
#18655 - Compilation error in Kotlin generated code when table name contains special characters and paths are generated
#18658 - org.jooq.codegen.gradle.MetaExtensions classes should adhere to JavaBeans convention to avoid deprecation warning in Gradle 8.x
#18664 - Bad types generated in Informix UDT classes for informix.boolean, informix.blob, and informix.lvarchar types
#18667 - Informix generated code contains extra "_0" attribute in generated UDTs
#18671 - Work around Informix JDBC driver java.lang.IllegalMonitorStateException bug when reading UDT out parameters
#18673 - Parser cannot parse Oracle style IN, OUT modifier in procedure declarations
#18688 - PostgresDatabase and subtypes may still produce wrong table comments in presence of stored functions
#18689 - PostgreSQL UDT not deserialized correctly when embedded in multiset
#18694 - Function parameter references aren't rendered with @ prefix in SQL Server, in function body
#18697 - Generated CREATE FUNCTION statement renders extra BEGIN .. END block in SQL Server
#18703 - MetaImpl should support DataType::generatedAlwaysAs property if JDBC DatabaseMetaData::getColumns can report it
#18708 - MetaDataFieldProvider debug logs warnings about Nullable(xyz) types not being supported for ClickHouse
#18710 - DataType.generationOption(null) shouldn't store null value, but DEFAULT value
#18719 - Bad formatting in PostgreSQL IF [ NOT ] EXISTS emulation when nested in more blocks
#18723 - Cannot place Oracle UDT in MULTISET with JSON emulation
#18729 - Settings.renderQuotedNames shouldn't affect xsi:nil attribute rending in MULTISET XML emulation
#18737 - Typo in DataType::hidden Javadoc
#18739 - Code generator does not apply DataType.GEOMETRY to PostgreSQL materialized view
#18750 - Formatting problem in generated Kotlin UDTs
#18754 - Insert::$updateSet doesn't replace the SET clause, but appends to it
#18763 - Parser fails to parse T-SQL query with TOP and quoted identifiers, when Settings.parseDialect is set to DEFAULT
#18774 - Bad rendering of UDTPathField in PL/SQL contexts
#18788 - XMLDatabase has O(N^2) complexity in column / attribute / parameter lookups
#18809 - Procedural IF a = b is emulated incorrectly in H2
#18828 - Missing VARCHAR lengths in Databricks generated code
#18830 - MetaImpl reports wrong array component length for Databricks
#18833 - Avoid unnecessary StringReader and StringWriter allocations and data transfer in MULTISET deserialisation
#18837 - <dateAsTimestamp/> deprecation notice should mention DateAsTimestampBinding alternative explicitly
#18842 - JSONParser::parseStringLiteral should omit StringBuilder copy if no escape sequence is found