Version 3.18.33 - September 11, 2025
================================================================================
This is a 3.18 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18900 - Add information about the lack of thread safety in Meta implementations to Meta Javadoc
#18954 - Add Javadoc to various SPIs about an expectation for them to be side-effect free and thus cacheable
#18981 - Improve DSLContext.meta(Catalog...) and similar Javadoc to explain that these are intended to be used with generated code
Bug Fixes
---------
#18861 - Meta.getSequences() only lists sequences of current catalog in SQL Server
#18885 - HTML encoding issue in DataType Javadoc
#18890 - Bad routine code generated when using array types in H2 stored functions
#18904 - NullPointerException in various locations when another thread cancels a blocking, JDBC backed Subscription
#18908 - Base64 error when using multiset, binary column, and custom converter in MySQL
#18913 - Parser cannot handle Long.MIN_VALUE signed integer literal in rare contexts
#18916 - KotlinGenerator produces bad code when sequences reference Long.MIN_VALUE with their flags
#18921 - Cannot use Parser::parseSignedIntegerLiteral to parse BigInteger sequence flag values
#18924 - KotlinGenerator generates invalid code for sequences with BigInteger MINVALUE or MAXVALUE flags
#18930 - Avoid allocating StringBuilder in PostgresUtils::toPGObjectOrArray if not necessary
#18934 - Avoid DefaultDSLContext allocation in AbstractQueryPart::equals
#18938 - Revert to using classes instead of records for Cache.Key2 and Cache.Key3 objects
#18944 - Override FieldAlias::equals and hashCode to improve reflection cache performance
#18958 - Bad result in MariaDB when MULTISET contents contain binary data
#18964 - Wrong data type generated in DDL for VARBINARY converted as UUID type
#18968 - Bad DDL generated when attempting to CREATE TABLE with UUID column in Oracle and other dialects
#18973 - ORA-01790 when projecting NULL bind value of type BLOB in UNION ALL query
#18977 - Bad rendering of unsupported OffsetTime type in Oracle
#18986 - Avoid calling Stream::collect in Result::collect and Cursor::collect
#18997 - QOM generated equals() methods shouldn't use StringUtils::equals, but Objects::equals
#19007 - Make DefaultExecuteContext available to internals via ThreadLocal
#19012 - Change AbstractParseContext to be an AbstractLazyScope
#19021 - Regression: Wrong DDL exported by MetaImpl for MySQL DEFAULT CURRENT_TIMESTAMP columns
#19024 - Adding a DDL comment to aliased columns produces wrong SQL, or does not maintain comment after execution
#19029 - DDLDatabase and H2Database shouldn't generate VARCHAR(1000000000) for VARCHAR types without explicit length
#19038 - ALTER TABLE .. ADD FOREIGN KEY .. REFERENCES references unqualified table name when column is also added
#19042 - Correctly handle NULLS FIRST | NULLS LAST in SEEK method
Version 3.19.26 - September 11, 2025
================================================================================
This is a 3.19 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18899 - Add information about the lack of thread safety in Meta implementations to Meta Javadoc
#18953 - Add Javadoc to various SPIs about an expectation for them to be side-effect free and thus cacheable
#18980 - Improve DSLContext.meta(Catalog...) and similar Javadoc to explain that these are intended to be used with generated code
Bug Fixes
---------
#18860 - Meta.getSequences() only lists sequences of current catalog in SQL Server
#18864 - DuckDB code generation can't generate sequences for multiple catalogs
#18867 - DuckDB DSL.currentTime() returns NULL
#18873 - DuckDB doesn't support TIME precision
#18884 - HTML encoding issue in DataType Javadoc
#18889 - Bad routine code generated when using array types in H2 stored functions
#18903 - NullPointerException in various locations when another thread cancels a blocking, JDBC backed Subscription
#18907 - Base64 error when using multiset, binary column, and custom converter in MySQL
#18912 - Parser cannot handle Long.MIN_VALUE signed integer literal in rare contexts
#18915 - KotlinGenerator produces bad code when sequences reference Long.MIN_VALUE with their flags
#18920 - Cannot use Parser::parseSignedIntegerLiteral to parse BigInteger sequence flag values
#18923 - KotlinGenerator generates invalid code for sequences with BigInteger MINVALUE or MAXVALUE flags
#18929 - Avoid allocating StringBuilder in PostgresUtils::toPGObjectOrArray if not necessary
#18933 - Avoid DefaultDSLContext allocation in AbstractQueryPart::equals
#18937 - Revert to using classes instead of records for Cache.Key2 and Cache.Key3 objects
#18943 - Override FieldAlias::equals and hashCode to improve reflection cache performance
#18957 - Bad result in MariaDB when MULTISET contents contain binary data
#18963 - Wrong data type generated in DDL for VARBINARY converted as UUID type
#18967 - Bad DDL generated when attempting to CREATE TABLE with UUID column in Oracle and other dialects
#18972 - ORA-01790 when projecting NULL bind value of type BLOB in UNION ALL query
#18976 - Bad rendering of unsupported OffsetTime type in Oracle
#18985 - Avoid calling Stream::collect in Result::collect and Cursor::collect
#18993 - Race condition in JooqLogger leads to too many identical messages being logged, where only one is requested
#18996 - QOM generated equals() methods shouldn't use StringUtils::equals, but Objects::equals
#19006 - Make DefaultExecuteContext available to internals via ThreadLocal
#19011 - Change AbstractParseContext to be an AbstractLazyScope
#19020 - Regression: Wrong DDL exported by MetaImpl for MySQL DEFAULT CURRENT_TIMESTAMP columns
#19023 - Adding a DDL comment to aliased columns produces wrong SQL, or does not maintain comment after execution
#19028 - DDLDatabase and H2Database shouldn't generate VARCHAR(1000000000) for VARCHAR types without explicit length
#19037 - ALTER TABLE .. ADD FOREIGN KEY .. REFERENCES references unqualified table name when column is also added
#19041 - Correctly handle NULLS FIRST | NULLS LAST in SEEK method
Version 3.20.7 - September 11, 2025
================================================================================
This is a 3.20 patch release with minor improvements and bug fixes
Features and Improvements
-------------------------
#18898 - Add information about the lack of thread safety in Meta implementations to Meta Javadoc
#18947 - Add catalog support for Databricks in MetaImpl
#18952 - Add Javadoc to various SPIs about an expectation for them to be side-effect free and thus cacheable
#18979 - Improve DSLContext.meta(Catalog...) and similar Javadoc to explain that these are intended to be used with generated code
#19034 - Support ClickHouse ALTER TABLE .. ADD INDEX / DROP INDEX syntax
Bug Fixes
---------
#18859 - Meta.getSequences() only lists sequences of current catalog in SQL Server
#18863 - DuckDB code generation can't generate sequences for multiple catalogs
#18866 - DuckDB DSL.currentTime() returns NULL
#18869 - Fix throwing IntegrityConstraintViolationException in DuckDB
#18872 - DuckDB doesn't support TIME precision
#18875 - DuckDB doesn't support TIMESTAMPTZ precision
#18883 - HTML encoding issue in DataType Javadoc
#18888 - Bad routine code generated when using array types in H2 stored functions
#18896 - Invalid Require-Capability OSGi MANIFEST header in JDK 21 built artifacts
#18902 - NullPointerException in various locations when another thread cancels a blocking, JDBC backed Subscription
#18906 - Base64 error when using multiset, binary column, and custom converter in MySQL
#18911 - Parser cannot handle Long.MIN_VALUE signed integer literal in rare contexts
#18914 - KotlinGenerator produces bad code when sequences reference Long.MIN_VALUE with their flags
#18919 - Cannot use Parser::parseSignedIntegerLiteral to parse BigInteger sequence flag values
#18922 - KotlinGenerator generates invalid code for sequences with BigInteger MINVALUE or MAXVALUE flags
#18925 - PostgreSQL UDT array not deserialized correctly when embedded in multiset
#18928 - Avoid allocating StringBuilder in PostgresUtils::toPGObjectOrArray if not necessary
#18932 - Avoid DefaultDSLContext allocation in AbstractQueryPart::equals
#18936 - Revert to using classes instead of records for Cache.Key2 and Cache.Key3 objects
#18942 - Override FieldAlias::equals and hashCode to improve reflection cache performance
#18950 - Cached RecordMapper instances should cache also ConverterProvider results
#18951 - Cannot convert from user type to UnknownType error when converting nested, mapped type to itself
#18956 - Bad result in MariaDB when MULTISET contents contain binary data
#18962 - Wrong data type generated in DDL for VARBINARY converted as UUID type
#18966 - Bad DDL generated when attempting to CREATE TABLE with UUID column in Oracle and other dialects
#18969 - Wrong encoding of JSONB document contained in MULTISET using XML emulation in Db2
#18971 - ORA-01790 when projecting NULL bind value of type BLOB in UNION ALL query
#18975 - Bad rendering of unsupported OffsetTime type in Oracle
#18984 - Avoid calling Stream::collect in Result::collect and Cursor::collect
#18990 - Cache Method::getParameterTypes and Method::getGenericParameterTypes in reflection cache
#18992 - Race condition in JooqLogger leads to too many identical messages being logged, where only one is requested
#18994 - Avoid unnecessary ConverterContext allocations in jOOQ internals
#18995 - QOM generated equals() methods shouldn't use StringUtils::equals, but Objects::equals
#19005 - Make DefaultExecuteContext available to internals via ThreadLocal
#19010 - Change AbstractParseContext to be an AbstractLazyScope
#19014 - Change some AbstractLazyScope implementations to inherit their Scope::creationTime from the parent scope
#19019 - Regression: Wrong DDL exported by MetaImpl for MySQL DEFAULT CURRENT_TIMESTAMP columns
#19022 - Adding a DDL comment to aliased columns produces wrong SQL, or does not maintain comment after execution
#19027 - DDLDatabase and H2Database shouldn't generate VARCHAR(1000000000) for VARCHAR types without explicit length
#19031 - Various code generator queries fail with more recent ClickHouse server or client versions
#19036 - ALTER TABLE .. ADD FOREIGN KEY .. REFERENCES references unqualified table name when column is also added
#19040 - Correctly handle NULLS FIRST | NULLS LAST in SEEK method