[ ANNOUNCEMENT ] 3.16.0 release with a new public query object model API, spatial support, YugabyteDB support and much more

342 views
Skip to first unread message

Lukas Eder

unread,
Jan 5, 2022, 9:56:01 AM1/5/22
to jOOQ User Group
Version 3.16.0 - January 5, 2022
================================================================================

This release tackles two long standing and complex feature requests that users
have asked us to offer for a long time: a public API for manipulating jOOQ's
query object model (QOM), and spatial support.


New Query Object Model (QOM)
----------------------------

Every jOOQ query is modeled as an expression tree constructed via our intuitive
DSL. For some use-cases there exist historic model API versions (e.g.
SelectQuery), but those models aren't readable or transformable. We're now
starting to offer most of our expression tree model as a public API for users to
consume and manipulate. Every expression tree element has a corresponding type
in org.jooq.impl.QOM. Every type provides access to its components using "$"
prefixed method names, e.g.:


// Create an expression using the DSL API:
Field<String> field = substring(BOOK.TITLE, 2, 4);
// Access the expression's internals using the model API
if (field instanceof QOM.Substring substring) {
    Field<String> string = substring.$string();
    Field<? extends Number> startingPosition = substring.$startingPosition();
    Field<? extends Number> length = substring.$length();
}


The new API is experimental and might change in the next minor release.

Licensed power users will get auxiliary APIs to traverse and transform the
expression tree, e.g. traversal:


// Contains 7 query parts
long count2 = BOOK.ID.eq(1).or(BOOK.ID.eq(2))
    .$traverse(Traversers.collecting(Collectors.counting());


Or replacement:


// Contains redundant operators
Condition c = not(not(BOOK.ID.eq(1)));
System.out.println(c.$replace(q ->
    q instanceof QOM.Not n1 && n1.$arg1() instanceof QOM.Not n2
        ? n2.$arg1()
        : q
));


The above prints the following, having removed the redundant NOT operators:


"BOOK"."ID" = 1


This new API is very powerful for even more sophisticated dynamic SQL use-cases,
such as:

- Optimising SQL expressions as the above NOT NOT example
- Row level security
- Soft deletion
- Shared schema multi tenancy
- Audit column support
- And much more (stay tuned for future blogs and out-of-the-box transformations)

For more info, see:

- https://www.jooq.org/doc/dev/manual/sql-building/model-api/model-api-design/
- https://www.jooq.org/doc/dev/manual/sql-building/model-api/model-api-traversal/
- https://www.jooq.org/doc/dev/manual/sql-building/model-api/model-api-replacement/


Spatial support
---------------

A long awaited feature that starts shipping to our commercially licensed
customers is spatial support. Many dialects support the ISO/IEC 13249-3:2016 SQL
standard extension, and finally, so do we.

jOOQ introduces new auxiliary data types for GEOMETRY and GEOGRAPHY data to use
as standardised bind variables, containing WKB or WKT data, as well as a
variety of out of the box functions and predicates.

Future versions will add more support for other functions and dialects.


New dialect and versions
------------------------

Another new officially supported SQL dialect has been added to all jOOQ editions
including the jOOQ Open Source Edition: YugabyteDB. This was a sponsored
integration, thank you very much Yugabyte!

Other dialects have upgraded versions, meaning:

- We support this version in all editions now
- The jOOQ Open Source Edition now requires this version if applicable

The versions are:

- Firebird 4.0
- H2 2.0.202
- MariaDB 10.6
- PostgreSQL 14
- Oracle 21c


Computed and readonly columns including ROWID
---------------------------------------------

A lot of dialects support computed columns ("generated" columns), and we now
support those as well in jOOQ. For most use-cases, this does not affect jOOQ
usage, but especially when writing CRUD code, the new readonly column feature
can be very helpful to avoid having to exclude computed columns manually from
the CRUD operation.

This also includes a new, improved ROWID support, where users can choose to work
with a synthetic ROWID column instead of the primary key, when performing CRUD
operations.

All of these features are available in the commercial jOOQ editions.


Jakarta EE
----------

We've moved on from Java EE to Jakarta EE dependencies. This change is
currently backwards incompatible because:

- It greatly facilitates maintaining the related code
- It prevents tons of user problems resulting from having both dependencies
- We're not actually integrating tightly with Java EE / Jakarta EE

The following Jakarta EE modules are affected:

- JAXB, which we're using to load our configuration objects.
- Validation, whose annotations can be generated by the code generator.
- JPA, which is used by the DefaultRecordMapper and the JPADatabase

If this breaking change causes issues, please get in touch at
https://github.com/jOOQ/jOOQ/issues/9641


Various improvements
--------------------

As with every minor release, a lot of smaller improvements have been
implemented. Some highlights include:

- PostgreSQL procedures are now supported in code generation and at runtime.
- SQLite JSON support has been added, which includes the MULTISET emulation!
- A lot of MULTISET / ROW improvements have been implemented
- R2DBC 0.9 has been released, and we've upgraded our dependency
- The Java 17 distribution now requires Java 17 instead of Java 16
- Pre jOOQ 3.6 deprecations have been removed




API Diff:
---------

See what's changed in terms of an API diff here:
https://www.jooq.org/api-diff/3.15-3.16


Features and Improvements
-------------------------        
#982 - Add support for spatial extensions
#4764 - Reduce log level of most DefaultRelations messages from INFO to DEBUG
#4845 - Add support for additional Firebird 3.0 features
#5306 - Add support for the standard SQL <data change delta table>
#6492 - Add support for computed columns
#7425 - Integration test jOOQ also on the module path
#7965 - Review manual for places to explain that in jOOQ, views = tables
#8388 - Add code generation option to generate a synthetic, readonly ROWID column
#8431 - Add support for PostgreSQL 11 procedures
#8543 - Support FILTER for GROUP_CONCAT
#9310 - Add support for MariaDB 10.3 PERCENTILE_DISC, PERCENTILE_CONT, MEDIAN functions
#9367 - Create a SQL dialect version support manual page
#9542 - Remove deprecated reference to org.sonatype.oss:oss-parent
#9609 - Add SQLDialect.H2_2_0_202
#9864 - Add support for readonly columns
#9931 - Add a new DSL.systemName type
#10022 - Remove Alias.SUPPORT_DERIVED_COLUMN_NAMES_SPECIAL3 on SQLDialect.H2_2_0_202
#10039 - Add support for the Oracle 21c WINDOW clause
#10051 - UpdatableRecord.merge() should support fetching generated keys, where possible
#10149 - Modularise jOOQ-meta, jOOQ-codegen and others
#10710 - Make org.jooq.impl.CombinedCondition a binary expression
#10881 - Enum literals should be defined by generator strategies
#10935 - Add documentation for formatChart()
#11109 - Add SQLDialect.ORACLE21C
#11120 - Add DSLContext.fetchMap(ResultQuery<? extends Record2<K, V>>) and fetchGroups(ResultQuery<? extends Record2<K, V>>)
#11415 - Support parsing the JDBC escape syntax { call ... }
#11465 - Add JSON support for SQLite via the JSON1 extension
#11627 - Add ParseListener.parseStart() and parseEnd() events
#11670 - Add support for GROUP BY DISTINCT
#11834 - Let Table<?> extend GroupField
#11864 - Add more startup tips to be logged with the jOOQ logo
#12005 - Emulate DML in WITH using data change delta tables
#12021 - Address known limitations of MULTISET support
#12102 - Add support for MariaDB 10.6
#12116 - Support nesting ROW in MULTISET
#12120 - Spring Boot example should use `@SpringBootApplication(exclude = { R2dbcAutoConfiguration.class })`
#12128 - Document lack of correlated MULTISET support in Db2, H2, MariaDB, MySQL 5.7
#12146 - Split MCVE template into 3 modules for Java, Scala, and Kotlin
#12151 - Add a cache for Tools.fieldName() and fieldNameString()
#12163 - Add support for TO_CHAR in Db2
#12177 - Remove "These are currently generated" from single page manual and PDF manual
#12193 - Upgrade R2DBC dependency to 0.9.0.RELEASE
#12195 - Improve formatting of XMLELEMENT()
#12206 - Add an R2DBC example project to our examples
#12222 - Avoid reflection with ParserImpl.IGNORE
#12231 - Add support for enums in PostgreSQL R2DBC
#12235 - Avoid maven per-execution configuration in manual, if unnecessary
#12236 - Add missing DSL.dateSub() overloads
#12249 - Support parsing Oracle 21c's JSON construction convenience syntax
#12255 - Let RowIdImpl implement toString(), equals(), hashCode()
#12304 - Add Configuration::formattingProvider to offer various formatting related SPIs
#12305 - Add missing @NotNull annotations to TXTFormat, CSVFormat, JSONFormat, XMLFormat, ChartFormat
#12322 - Add support for SQLDialect.POSTGRES_14
#12344 - Add DMLQuery<R> as a common super type for Insert<R>, Update<R>, Delete<R>, Merge<R>
#12348 - Add parser support for DML in CTEs
#12367 - Add another jOOQ testcontainers example that includes using Flyway
#12371 - Add ParseContext.characters() to access and replace the SQL char[]
#12385 - Upgrade ojdbc dependency to 21.3.0.0 and require its module name com.oracle.database.jdbc
#12394 - Parser should accept 1 and 0 as boolean literals in MySQL
#12405 - CLI programs should set java.util.loggin.SimpleFormatter.format if not already set
#12407 - Add a SQLDialect.YUGABYTEDB dialect
#12408 - Make the OSGi imports for jackson and gson modules optional
#12415 - Add native support for BIT_AND_AGG() and BIT_OR_AGG() in PostgreSQL
#12423 - Offer alternative EnumConverter constructor accepting Function<U, T> as a Converter::to implementation
#12425 - Add public query object model API draft
#12427 - Extract bitwise operations into their own classes
#12431 - Extract arithmetic operations into their own classes
#12432 - Extract CompareCondition and CombinedCondition into their own classes
#12457 - Generate some Javadoc on implicit join path navigation methods
#12470 - Add better Javadoc documentation about what Class<T> literals can be passed to DSL.val(Object, Class), etc.
#12476 - Change source, target, and release level to 17 for Java 17 distribution
#12484 - Manual should point to JDK 17 Javadoc
#12488 - Log warning in code generator when wrong runtime version is used
#12501 - Offer more Settings flag in ParserCLI and TranslationService
#12506 - SQLDialect.supportedBy() and supportedUntil() should specify that they're inclusive in their Javadoc
#12507 - Improve some internal Nullable / NotNull annotation usage
#12509 - DefaultConverterProvider should be able to convert from JSON(B) to the usual JSON types and back
#12513 - Add new Functions.nullOnAllNull(FunctionN) and nullOnAnyNull(FunctionN)
#12528 - Add ExecuteScope, a Scope that knows about an ExecuteContext
#12529 - Add nullability annotations to BindingXYZContext types
#12530 - Let Function1 <: Function and Function2 <: BiFunction
#12538 - Add Settings.parseRetainCommentsBetweenQueries
#12539 - Better seek clause examples
#12566 - JDBCUtils::safeClose methods should debug log stack traces
#12574 - Add ExecuteContext::resultLevel and ::recordLevel to indicate the Result and Record nesting level
#12582 - ControlFlowSignal should use Throwable(String, Throwable, boolean, boolean) super constructor
#12583 - Add DAO.findOptionalById()
#12585 - Use INFO level instead of WARNING level for routines with more than 254 parameters
#12592 - JPADatabase should log a WARNING message if it cannot find any entities on the classpath
#12601 - Produce compilation error if code generator version doesn't match runtime version
#12604 - Add SQLDialect.FIREBIRD_4_0
#12620 - Document that the asterisk may lead to column order mismatches
#12625 - Manual examples shouldn't re-create Gson or ObjectMapper instances all the time
#12630 - The JavaGenerator.printDeprecationIfUnknownType should hint at a UDT being in a different schema
#12644 - Upgrade Spring Boot example to Spring Boot 2.6
#12658 - Add HANA support for ON DUPLICATE KEY UPDATE et al
#12662 - Add H2 support for ON CONFLICT ON CONSTRAINT
#12663 - Add EnumType.<E extends EnumType>lookupLiteral(Class<E>, String) and generate E.lookupLiteral(String) methods
#12664 - Support distinguishing between STORED and VIRTUAL computed columns
#12667 - Add Source.of(InputStream, int) and Source.of(Reader, int) to create length limited sources
#12681 - Add JooqLogger.getLogger(Class<?>, int) to create a logger whose number of messages are limited to some number
#12691 - Support parsing single element IN predicate without parentheses
#12692 - Development version of the manual should include a disclaimer in the header
#12720 - Split manual section about CREATE TABLE into multiple subsections
#12725 - Manual section "daos" should link to "codegen-daos"
#12728 - Add support for Informix stored procedures
#12737 - Add DataType.isSpatial()
#12758 - Bump log4j-core from 2.16.0 to 2.17.0
#12759 - Additional SQL statements after JDBC connection
#12766 - Mention fetchSingle() in the manual section about fetching


Breaking changes
----------------
#9641 - Migrate Java EE dependencies to Jakarta EE
#9676 - Add support for H2's data change delta tables
#12109 - Remove pre 3.6 deprecated API and pre 3.6 documentation
#12127 - R2DBC execution should wrap R2dbcException in DataAccessException
#12212 - Unnecessary generic type parameter in localDateAdd and other date time arithmetic functions
#12586 - Remove DB2DataType.ROWID
#12633 - Move XSDs from jOOQ and jOOQ-meta to subpackages to avoid split xsd packages
#12757 - Experiment with sealed classes


Deprecations
----------------
#12238 - Deprecate Internal.fieldsRow(TableField)
#12420 - Deprecate PostgresDSL.oid() and replace its usage by actual OID columns
#12465 - Deprecate IGNITE dialect again


Bug Fixes
---------
#3035 - INSERT .. RETURNING does not return any value in H2, when no AUTO_INCREMENT column is involved
#3398 - Avoid generating new SQL statements for every bind variable length in Firebird 3
#4311 - Usage of jOOQ API inside of ConnectionProvider.acquire() causes issues with Oracle cross-schema OBJECT type bindings
#8205 - Use JDK 9 Matcher.replaceAll(Function) instead of Matcher.replaceAll(String) where possible
#9129 - Support parsing ALTER TABLE ... ADD ... AUTO_INCREMENT
#9136 - Wrong SQL generated in DB2's NTH_VALUE() IGNORE NULLS window function
#9162 - Parser missing type information for Enum fields
#9917 - Codegeneration fails with case sensitive data types in postgres 9.0 or less
#10423 - Bad translation of identity to CockroachDB
#10866 - Generator produces an invalid enum with an underscore "_" as the name
#11386 - Avoid streaming SQL Server FOR JSON or FOR XML in chunked results
#11401 - Improve JSON_VALUE formatting
#11659 - Upgrade Liquibase dependency of jooq-meta-extensions-liquibase to 4.x
#11703 - Parser can't parse functions receiving operator based string expressions
#12025 - Parsed DATE_ADD and DATE_SUB don't translate correctly when lacking column meta data
#12104 - R2DBC nested subscription loops forever when nesting or sequencing INSERT .. RETURNING run on r2dbc-pool
#12108 - Operator called default onErrorDropped: PostgresConnectionClosedException when chaining queries
#12117 - ORA-06550 when calling a PL/SQL procedure with a %ROWTYPE parameter that has DATE fields when dateAsTimestamp=true and javaTimeTypes=true
#12118 - Regression in SQLite code generation for unnamed composite pkeys on JDK 9+ with the jOOQ Open Source Edition
#12123 - Regression in ResultQuery.fetchMap(Field, Field) with null values
#12125 - Wrong Support annotation: HSQLDB doesn't support MULTISET or MULTISET_AGG
#12130 - Wrong deserialisation of temporal data types in MULTISET XML emulation
#12131 - DefaultConverterProvider should be able to convert both ISO timestamp formats to Timestamp and LocalDateTime
#12135 - MULTISET emulation doesn't correctly deserialise single column record containing only a NULL value in SQL Server
#12136 - IndexOutOfBoundsException when deserialising MULTISET as XML emulation with NULLs
#12139 - MULTISET as JSON emulation using JSON_ARRAY must use NULL ON NULL clause
#12141 - Data conversion error converting "TIMESTAMP to JSON" in H2
#12144 - Regression when binding JSONB value containing a JSONB string in PostgreSQL
#12148 - Setter return type must be Unit & '@set:' annotations could be applied only to mutable properties
#12149 - DSL.using(String, String, String) based R2DBC Connection does not use provided username and password
#12150 - [jOOQ/jOOQ#12149] Use username and password properties for r2dbc connection
#12155 - Nested multiset record mapping fails at the 3rd level of nesting
#12158 - MULTISET/JSON emulation can't read TIME type in Db2
#12160 - Error when embedding a timestamp in Db2 XMLELEMENT
#12168 - Deeply nested MULTISET produce quoted JSON in MariaDB
#12174 - Unnecessary finalizer registration in DefaultConnectionProvider
#12181 - SQL Server doesn't correctly serialize TIME bind values in FOR XML and FOR JSON usage
#12183 - An R2dbcException wrapping DataAccessException should properly produce sqlState() and other properties
#12187 - The XML MULTISET_AGG emulation doesn't work with unnamed bind values in Db2
#12189 - Db2 cannot handle scalar subqueries in JSON_OBJECT in the presence of a MULTISET ad-hoc converter
#12192 - INSERT .. RETURNING doesn't work in H2 when a composite key does not have the identity as its first column
#12194 - MySQL DELETE .. USING with JOIN produces duplicate table declarations in USING clause
#12197 - The DataKey.DATA_PREPEND_SQL and DATA_APPEND_SQL feature must work on Query only, not other QueryParts
#12200 - SelectOnStep::onKey returns wrong type, preventing combinations of join predicates
#12201 - Error when embedding a timestamp in Db2 XMLATTRIBUTES
#12208 - Deeply nested MULTISET mappings with ad-hoc conversion doesn't work when using reflection
#12210 - Aliasing implicit join paths produces invalid queries
#12216 - Remove references to javax.annotation.Generated from jooq-codegen Javadoc
#12225 - DefaultConverterProvider truncates timestamps to milliseconds precision when converting from Timestamp to LocalDateTime
#12237 - Embeddables cannot be placed in MULTISET
#12240 - NullPointerException in MetaImpl.MetaTable.getReferences() when there are catalog conflicts in SQL Server
#12244 - Inconsistent formatting of table list when using generated or non-generated aliased tables
#12247 - Replace remaining reflective call to OracleConnection.createARRAY from DefaultBinding
#12253 - Long lists are no longer wrapped when rendering formatted SQL
#12260 - NullPointerException when reading empty results for MULTISET_AGG / JSON emulation
#12262 - Delay initialisation of Jackson, Gson, JAXB classes in Convert
#12265 - Custom data type binding example in manual works only on JDBC, not R2DBC
#12267 - jOOQ 3.15.0 XSD is not published?
#12277 - Wrong method name used in manual section schema-diff
#12278 - Empty subsection in manual section codegen-config-generator
#12281 - IllegalArgumentException: Minimum abbreviation width is 4 when TXTFormat::minColWidth is less than 4
#12286 - java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema when running examples from manual tutorial
#12289 - In manual section jooq-in-7-steps-step3, fix multi line shell syntax
#12291 - Reference to database and/or server name in 'master.sys.schemas' is not supported in this version of SQL Server.
#12306 - Wrong table list to ANSI join transformation when tables are qualified and aliased
#12307 - Wrong result for Table or Field.getQualifiedName() on aliased table(Name) or field(Name)
#12308 - MockDataProvider cannot handle MULTISET fields
#12315 - Wrong procedure declaration generated in MySQL when using IN parameters with VARCHAR(length) types
#12316 - ParseListener example doesn't compile, should use onParseCondition(), not onParseField()
#12324 - Wrong (+) to LEFT JOIN transformation in join tree A⟕B, A⟕C, A⋈D
#12327 - ImmutablePOJOMapper cannot map more than one nested POJO on the same level
#12328 - Empty select() should not project asterisk if unknown table is used with leftSemiJoin() or leftAntiJoin()
#12332 - Result.formatChart() produces bad default formatting for Display.HUNDRED_PERCENT_STACKED
#12333 - IndexOutOfBoundsException when calling Result.formatChart() on an empty result
#12340 - Improve <dialects/> to display correct number of dialects for operators
#12345 - Inline floating point formatting shouldn't depend on default Locale
#12357 - Wrong SQL example in manual section multiset-value-constructor
#12363 - Nested Block generates top-level anonymous block behaviour when top level Statement is not a Block
#12364 - Spelling mistake in manual section "jooq-with-flyway"
#12373 - ClassCastException when using returning() with R2DBC
#12375 - NullPointerException in OracleDatabase.getArrays0()
#12379 - Wrong type documented in INSERT .. RETURNING section of the manual
#12381 - DSLContext.explain(Query) doesn't work with bind values in Oracle
#12386 - Positional window functions without ORDER BY should generate ORDER BY 1 in Oracle
#12399 - FOR JSON emulation must use RETURNING CLOB in Oracle
#12413 - DataTypeException in multiset with a mapped nested row
#12417 - BIT_AND_AGG(), BIT_OR_AGG() emulations shouldn't use bind values
#12434 - CVE-2021-26291 via maven-core-3.6.3 dependency
#12437 - Avoid generating overloaded table valued functions with compilation errors, until they are supported
#12440 - Compilation error in KotlinGenerator generated code when @set:JvmName is applied to overriding property
#12441 - Fix generating multi-key DAOs with Java records
#12442 - Compilation errors in generated code when using <daos/> with <pojosAsJavaRecordClasses/>
#12446 - Unnecessary cast in Db2 when comparing value with concatenation
#12459 - KotlinGenerator setter return type must be Unit also for records
#12463 - H2 enum values which contain brackets are not generated as Java literals
#12468 - MockFileDatabase example doesn't compile
#12469 - InlineDerivedTable shouldn't inline when used in outer joins
#12480 - DSL.arrayGet() does not generate required parentheses
#12491 - api-diff generates wrong nested class Javadoc links
#12492 - Clarify whether .offset(..) starts from 0 or 1
#12495 - Ignored COMMENT ON CONSTRAINT syntax should support qualified object identifiers
#12498 - Meta does not produce correct DataType::nullable information when data type isn't supported
#12499 - Wrong documentation in section "codegen-database-regex-flags"
#12500 - Unable to fetch Instant field within a multiset
#12502 - NPE in Query.equals() when Query isn't attached
#12508 - Cannot map JSON(B) in MULTISET when mapping with Jackson from DefaultConverterProvider
#12516 - Field with Converter<String, Boolean> inside multiset causes JSON parsing error on Oracle  
#12520 - Parser should support PERCENTILE_CONT / PERCENTILE_DISC with expressions as percentiles
#12527 - DefaultExecuteContext.LOCAL_SCOPE is reset to null when nesting lazy executions
#12537 - ParserCLI interactive mode ignores setting booleans to false
#12543 - ParserCLI interactive mode can't handle leading /* comment block
#12544 - Field<Instant>.div(int) regression for Instant fields that have a converter
#12545 - Lenient support for H2's time zone format when using the Instant type
#12549 - Wrong JSON_MERGE_PRESERVE function generated when embedding JSON in MULTISET in MariaDB and MySQL
#12557 - Add support for unwrapping Optional types in DefaultConverterProvider
#12561 - ROWNUM transformation doesn't work when projecting an expression containing ROWNUM
#12564 - Exception in LoggerListener when projecting top level row(...).mapping()
#12568 - Connection leak when ExecuteListener::fetchEnd throws an exception
#12589 - CockroachDB IDENTITY column recognition is broken
#12596 - ParamType.INLINED produces wrong behaviour for Settings.cacheParsingConnection
#12599 - Incorrect MERGE statement syntax generated in FIREBIRD when aliasing USING derived table
#12602 - Parser cannot parse INSERT .. SELECT without column list
#12611 - SQLDataType.null generated when using XMLDatabase with lower case array type
#12612 - Generated column in table valued function of type TIMESTAMP without precision is generated using precision zero
#12638 - OracleDatabase::sequences produces query that doesn't work on older ojdbc driver versions
#12639 - typo in jOOQ-academy setup script
#12640 - OracleDatabase doesn't produce correct CYCLE sequence flag information in code generation
#12645 - Parser should support PostgreSQL date part syntaxes with explicit type casts
#12649 - Parser parses and ignores NOT keyword after column expression
#12655 - Fix Firebird Support annotations on INSERT .. ON DUPLICATE KEY UPDATE as well as UpdatableRecord.merge
#12659 - Wrong SQL generated for PostgreSQL functions returning single UDT OUT parameters
#12666 - Restore streaming bind value method behaviour on ParsingStatement
#12669 - Blob.length() and Clob.length() calls shouldn't be silently downcast to int
#12674 - HanaTableDefinition reports all computed columns as identities
#12675 - MariaDBDatabase no longer generates check constraints
#12678 - Potential resource leak in SettingsTools static initialiser
#12683 - Regression in code generation catalog mapping
#12697 - Mapped JSON in multiset causes multiple ad-hoc conversions
#12700 - Single element IN predicate without parentheses uses wrong operator precedence
#12704 - DefaultRecordUnmapper.IterableUnmapper uses name based field access instead of index based ones, leading to ambiguities
#12706 - Cannot nest MULTISET in top level ROW in PostgreSQL
#12712 - Parser mis-interprets KEY columns as MySQL KEY (INDEX) specification if unquoted and of type VARCHAR(n)
#12713 - Debug log output causes exceptions when data type converter is re-applied incompatibly
#12718 - Some manual "previous" and "next" links use wrong URL
#12731 - DB2Database should order routine overloads by signature, not specificname
#12733 - Update log4j to 2.15.0 because of CVE-2021-44228
#12741 - Loader.onDuplicateKeyIgnore doesn't work on tables that don't have a PRIMARY KEY
#12742 - ListAgg not working with filter clause.
#12751 - Bump h2 from 1.4.199 to 2.0.202 in /jOOQ-examples/jOOQ-javafx-example
#12752 - DDLDatabase defaultNameCase property shouldn't affect built in functions in view definitions
#12753 - SQLDialect.JAVA produces wrong output for quotedName()
#12755 - DSL.unquotedName() has wrong Javadoc
#12776 - Compilation errors in generated code when enabling <pojosAsJavaRecordClasses> and <embeddables>
#12780 - Support generating the PostGIS GEOMETRY type as SQLDataType.GEOMETRY

Reply all
Reply to author
Forward
0 new messages