Version 3.13.0 - February 13, 2020
================================================================================
Starting with this release, we will further embrace our support for parsing,
translating, executing, and now also interpreting DDL statements. The driving
force is better code generation support, but in the future, also better
integration with database change management systems like Flyway or Liquibase.
We've added support for a very promising new dialect: CockroachDB.
We're starting to support one of SQL:2011's most interesting features: temporal
tables for system and application time versioning, and we've generally improved
the way we build and distribute jOOQ to our paying customers.
SQL Dialects
------------
We've worked together with a team of great engineers at CockroachDB to speed up
our newly added, formal CockroachDB support in the jOOQ Professional and
Enterprise Editions. While many users have successfully used the POSTGRES
dialect with CockroachDB for simple integrations, this new dialect is now fully
integration tested and supported for future jOOQ and CockroachDB versions. The
integration fixed a variety of issues and minor differences that we have
encountered in the code generator and the runtime library.
We've added support for a variety of features now available in Firebird 3.0+,
MariaDB 10.3+, MySQL 8+, and PostgreSQL 10+.
DDL interpretation
------------------
Our biggest investment has been made in the area of DDL interpretation. Since
jOOQ 3.9, we can parse more and more SQL syntax. A logical next step is to allow
for interpreting parsed (or ordinary, DSL constructed) DDL statements in order
to maintain an incremental, in-memory meta model of a database. This has a
variety of benefits, which we will take advantage of in this release and in the
future.
The main out of the box benefits in this version include:
- Being able to create a diff between two versions of a schema, programmatically
through Meta.migrateTo(Meta), on the command line through DiffCLI
- Such a diff or the meta model itself can be used for ad-hoc introspections, or
formally, for automated migrations by tools built on top of jOOQ. Future
versions will offer such migrations out of the box.
- Unfortunately, we have not yet replaced our H2 backed DDLDatabase by our new
DDL interpretation capabilities. This is a high priority for jOOQ 3.14, though
In the context of these investments, we have improved a variety of
infrastructure that were needed for these features and that users can benefit as
well. These improvements include:
- A new LiquibaseDatabase, which uses Liquibase behind the scenes to simulate a
schema migration in memory (similar to the DDLDatabase for Flyway), to reverse
engineer that for the code generator. If you're using Liquibase, chances are
that you no longer need to connect to an actual database to use jOOQ's code
generator. More info here:
- We now support the inclusion of SQL text in generated code and other parts of
the runtime meta model, including for CHECK constraints and views
- A lot of improvements to the JDBC DatabaseMetaData backed org.jooq.Meta API
have been implemented.
- A lot of additional DDL statement and syntax support has been added throughout
the API, parser, and other tooling.
- The runtime meta model has been enhanced with new information, such as
sequence flags, check constraints, table type information, and more.
Temporal table support
----------------------
Perhaps the SQL:2011 standard's most exciting "new" feature are temporal tables,
an enhancement on top of Oracle's historic flashback query feature, and much
more.
In many systems, single, or bi temporal versioning of data is essential. The two
dimensions of versioning that are now supported in jOOQ are:
- System versioning, useful for backups and auditing, where every mutating
operation results in a backup copy of the data in a managed backup table.
- Application versioning, useful for data that has a timely limited validity,
such as a price for a product, which could have a temporary discount.
jOOQ 3.13 supports org.jooq.Period and related API in Select, Update, and Delete
to manipulate and query temporal tables in dialects that ship with native
support for these features. To different degrees, these dialects include:
- DB2
- MariaDB
- Oracle
- SQL Server
Emulations of incompletely supported syntax in the above dialects, as well as in
all other dialects will be added in future jOOQ versions, making temporal
validity a problem of the past.
More details here:
This is a commercially licensed only feature.
Build improvements
------------------
We've invested a lot of time in improving our build automation using newer
Jenkins features that allow us to publish builds more frequently, especially
snapshot builds of upcoming minor releases for early adopters, as well as patch
releases for customers needing urgent fixes:
These new releases also include trial versions for Java 6, 8, 11, without the
need to register for extended trials.
In addition to the above, we've improved and continue to improve our
documentation of features per edition, in the future.
Procedural API improvement
--------------------------
In jOOQ 3.12, we've introduced support for procedural languages, which we are
improving in every new release. jOOQ 3.13 adds support for additional
procedural statements, including:
- EXECUTE for dynamic SQL execution embedded in procedural blocks
- RETURN to return from functions
- Plain SQL statement support
In the future, we're planning to support also the generation of functions,
procedures, and triggers through standard jOOQ API.
More details here:
This is a commercially licensed only feature.
jOOQ-Refaster
-------------
Some of our users have had a lot of success using our checker-framework or
ErrorProne integrations, which allow for some static API usage analysis in
client code (e.g. plain SQL / SQLi risk, dialect compatiblity, etc.)
Starting from jOOQ 3.13, we're also adding support for ErrorProne's sub project
"refaster", which allows for automatically rewriting bad API usage to something
better, such as for example:
- Migrate deprecated API usage like field.trim(), to its replacement trim(field)
- Migrate inefficient SQL usage like ctx.fetchCount(select) != 0 to
ctx.fetchExists(select)
More details here:
Features and Improvements
-------------------------
#2286 - Add LiquibaseDatabase to support interpreting the liquibase XML format in the code generator
#2370 - Add org.jooq.TableOptions to describe the various storage and other options of a table in the meta model
#3521 - Implement JDBCDatabase.loadForeignKeys()
#3676 - Treat identical UNION [ ALL ] and INTERSECT set operations as associative avoiding unnecessary parentheses
#4245 - Add support for PostgreSQL's DELETE .. USING syntax
#4454 - Implement Table.getIdentity() for tables obtained via org.jooq.Meta
#4793 - Add support for Catalog in runtime schema mapping
#5181 - Add additional runtime meta information for indexes
#5317 - Add support for ALTER TABLE .. ADD [ COLUMN ] .. [ { PRIMARY KEY | UNIQUE } ] [ REFERENCES | CHECK .. ]
#6314 - Add Meta.getIndexes()
#6412 - DSLContext.ddl() should distinguish between table types (table, temporary table, view, etc.)
#6659 - Add support for PostgreSQL 10 IDENTITY columns
#7004 - Add support for MariaDB sequences
#7006 - Add support for MariaDB 10.3 Features
#7241 - Add support for ALTER TABLE .. ADD .. [ FIRST | BEFORE | AFTER ]
#7293 - Generate OFFSET .. FETCH for Firebird 3.0
#7421 - Stop rendering "FROM dual" in MySQL 8+ and MariaDB 10.4+
#7511 - Add support [ NOT ] ENFORCED in constraints
#7629 - Add support for exporting CHECK constraints through DSLContext.ddl()
#7639 - Add code generation support for CHECK constraints
#7752 - Add support for Sequence flags in meta model
#7775 - Add support for ALTER TYPE to modify enum types in PostgreSQL
#8104 - Add support for ALTER DATABASE with DDLDatabase
#8105 - Interpreter should have an option to disable foreign key checks
#8194 - Add a Configuration.systemConnectionProvider() SPI
#8201 - Add support for EXECUTE for use in procedural blocks
#8252 - Add build integration test verifying if all pro API is annotated with the org.jooq.Pro annotation #8323 - Publish existing jOOQ-xtend project as a Maven module
#8345 - Add an org.jooq.Typed<T> marker interface
#8507 - Add a parent pom.xml for all examples
#8524 - Add support for CREATE TEMPORARY TABLE IF NOT EXISTS
#8528 - Add org.jooq.Meta implementation that is based on DDL interpretation
#8541 - Use MySQL's native derived column lists support
#8545 - Add support for CockroachDB
#8621 - Add support for exception syntax in MockFileDatabase
#8642 - Separate section for jOOQ's SQL extensions
#8755 - Make Loader(CSV|JSON|Rows)Step.fields() calls optional
#8787 - Support DSL#alterIndexIfExists() for SQL Server
#8800 - Add Settings.transformAnsiJoinToTableLists to support pre-ANSI join syntax
#8807 - Add setting to specify whether INNER and OUTER keywords should be generated in joins
#8870 - Support Scala 2.13
#8901 - Cannot use INSERT .. RETURNING in Oracle to fetch back a UDT
#8923 - Consider using jaxb2-annotate-plugin in XJC compiler
#8953 - Use Internal API for generated code of Queues and Sequences
#8995 - Add Javadoc to XJC generated with-methods
#9019 - Render DROP TEMPORARY TABLE in MySQL
#9043 - Add org.jooq.Source API
#9053 - Offer a SNAPSHOT repository
#9086 - Add tags to the manual documenting what editions support a given feature
#9096 - Document the procedural language API
#9101 - Improve method Javadoc of JAXB generated classes
#9109 - Emulate multi column COUNT (DISTINCT col1, col2) in H2 using row value expressions
#9127 - Update jOOQ-mcve dependency versions
#9130 - Support MySQL FOREIGN KEY [ index_name ] syntax
#9132 - Support parsing MySQL's USING [ BTREE | HASH ] index type syntax everywhere where it is supported
#9138 - Parser errors from DDLDatabase should hint at jOOQ's parser ignore comment syntax
#9141 - DDLDatabase should output query results to log output
#9155 - Various third party dependency updates
#9161 - Add support for parsing MySQL FULLTEXT KEY inline declaration in CREATE TABLE
#9166 - Deprecate loading settings from /jooq-settings.xml or from -Dorg.jooq.settings
#9168 - Add a DSL.execute(Query) convenience method
#9171 - Add Javadoc to DSL::execute
#9183 - Add support for DISTINCT ON in H2
#9186 - Correct various @Support annotations for MariaDB
#9192 - Add DSL.statement(String), a plain SQL procedural Statement API
#9194 - Add support for RETURN in the procedural API
#9200 - Avoid unnecessary warning when there are multiple nextval default values (not caused by serial types) in PostgreSQL
#9209 - Add support for exceptions in MockResult
#9213 - Introduce versioned MARIADB dialects
#9217 - Support parsing MySQL's USING HASH index_type in CREATE INDEX
#9221 - Postgres supports DateParts MILLISECOND and MICROSECOND
#9222 - Align @Support annotation of DatePart enum constants with DSL methods
#9233 - Use new Source API throughout the jOOQ API
#9238 - Add a new Settings.parseNameCase
#9240 - Constraint with empty name rendered as CONSTRAINT ""
#9244 - Add support for DROP TEMPORARY TABLE IF EXISTS
#9252 - H2: Omit OFFSET clause if offset is 0
#9255 - Upgrade Maven version to 3.6.2 in Travis
#9263 - Better support for fields with boolean converter
#9265 - Add JSON.data() and JSONB.data()
#9272 - Slightly improved code generation pattern
#9273 - Update Gradle example to use newer version of H2
#9276 - Java generator always uses LF line terminator for import statements
#9285 - Add a link from the dialect family to the latest dialect version in each SQLDialect
#9289 - Add Javadoc to Configuration.dsl() explaining that it is just convenience
#9294 - Add support for MariaDB FOR UPDATE .. [ WAIT n | NOWAIT ]
#9295 - Use Settings.getQueryTimeout() consistently
#9305 - Support parsing Vertica's TEMP table syntax
#9307 - Add Mock.of(SQLException)
#9312 - Add SQLDialect.supportedBy(SQLDialect...) to produce a set of supported dialects from an input
#9313 - Add SQLDialect.predecessors() to produce a set of all preceding versions of a given dialect
#9316 - Also support STRAIGHT_JOIN for MariaDB and MemSQL
#9317 - Synchronize @Support annotations on JoinType and Table methods
#9318 - H2: Support WITH clause for MERGE statement
#9320 - Add a new DataDefinitionException to be thrown by DDLInterpreter
#9325 - Add Name.empty() to check if a name consists only of the empty string ""
#9327 - Add DDLFlag.SEQUENCE to allow for exporting CREATE SEQUENCE statements from DSLContext.ddl()
#9329 - Add reactive streams in published ZIP file as a dependency, for convenience
#9344 - Fix Support annotations for CREATE SEQUENCE flags
#9352 - Only render CREATE SEQUENCE ... NO CYCLE clause where supported
#9353 - Support parsing ALTER TABLE .. ALTER .. SET DEFAULT
#9354 - Add support for ALTER TABLE .. ALTER .. DROP DEFAULT
#9358 - Add support for parsing the H2 SCHEMA() function
#9359 - Refactor common meta extensions code to new InterpretingDatabase
#9361 - Upgrade H2 dependency to 1.4.200
#9362 - Add Settings.interpreterDialect
#9364 - Add DDLFlag.INDEX to allow for exporting CREATE INDEX statements
#9371 - H2: DSL#currentTime() should render as CURRENT_TIME
#9372 - Improve SEMI / ANTI JOIN documentation
#9374 - Support various H2 ALTER .. IF EXISTS statements
#9375 - Add code generation and runtime flags to include/exclude automatic indexes on PK/UK/FK
#9380 - Add support for ALTER TABLE .. DROP CONSTRAINT .. [ CASCADE | RESTRICT ]
#9382 - Add support for Oracle's ALTER TABLE .. DROP UNIQUE (<columns>) syntax
#9384 - DataType.getDataType(Configuration) turns this on dialect specific data types
#9394 - Move DSLContext.ddl() API to Meta
#9395 - Let Meta extend Scope
#9399 - Move DSLContext.informationSchema() to Meta
#9403 - Deprecate CUBRID dialect
#9407 - Deprecate remaining Field.xyz() convenience API
#9410 - Various Firebird DDL improvements
#9413 - Add support for RDB$DESCRIPTION in Firebird code generation
#9421 - Add Firebird code generation support for indexes
#9426 - DSLContext.meta(Source...) should be able to read InformationSchema from sources
#9427 - Let Name extend Comparable
#9428 - Meta.toString() should call Meta.ddl()
#9429 - Add DSLContext.meta(Query...) as a shortcut for meta(Source...)
#9431 - Add a /diff tool to the website
#9432 - Add Queries.concat(Queries)
#9433 - Implement Meta.equals() and hashCode() based on Meta.ddl()
#9434 - Add DDLExportConfiguration.respectOrder flags
#9435 - Let Key extend Named
#9436 - Add Meta.apply(Queries)
#9437 - Add support for ALTER SEQUENCE [ sequence flags ]
#9438 - ALTER SEQUENCE .. RESTART emulation should use Sequence.startWith() flag, if available
#9441 - Add DSLContext.meta(String...) for convenience
#9442 - Add code generation support for sequence flags
#9445 - Various Sybase ASE DDL improvements
#9460 - Support additional Settings.interpreterDialects and add an InterpreterConnectionProvider SPI
#9476 - Add parser support for MySQL [ INNER ] JOIN without ON clause
#9478 - Support parsing ALTER TABLE .. ALTER COLUMN .. SET NULL syntax
#9482 - Add new internal org.jooq.impl.Names class for commonly used DSL.name() references
#9490 - Create an FAQ on the website, and link to it from the issue template
#9491 - Add 301 redirects for non-modular Javadoc
#9502 - Add Settings.renderOptionalAsKeywordForTableAliases and ...ForFieldAliases
#9504 - Add DDLExportConfiguration.createViewIfNotExists and DDLExportConfiguration.createOrReplaceView
#9505 - Add org.jooq.Version to describe a database version
#9508 - Add Settings.interpreterDelayForeignKeyDeclarations
#9511 - Avoid quoted identifiers in jOOQ-meta queries
#9514 - LiquibaseDatabase should allow for passing parameters to the Liquibase
#9520 - Log info message when a forcedType never matches
#9533 - Add support for DROP INDEX .. [ CASCADE | RESTRICT ]
#9534 - Add support ALTER TABLE .. DROP UNIQUE <name>
#9536 - Add DataType.isInteger()
#9558 - Clarify in Javadoc of selectFrom() and related methods that all Table.fields() will be fetched, not DSL.asterisk()
#9562 - Add Table.getChecks() to return a list of check constraints
#9565 - Add CheckConstraint XSD type to jooq-meta.xsd
#9570 - Generate single ADD or DROP ALTER TABLE statements when a list of length 1 is passed
#9578 - Upgrade Hibernate dependency to 5.4.9.Final
#9580 - Add DDLExportConfiguration.defaultSequenceFlags
#9584 - Add Source.readString()
#9588 - Use H2's native BITNOT()
#9589 - Use H2's native LSHIFT() and RSHIFT()
#9591 - Let DefaultRecordContext and DefaultExecuteContext extend AbstractScope
#9595 - Regenerate HSQLDB information schema against 2.5.0
#9600 - Add code generation flag <includeSystemCheckConstraints/>
#9603 - Add sequence flag support on jooq-meta.xsd
#9604 - Implement a default OrderProvider in the code generator
#9610 - Add code generation support for Derby indexes
#9611 - Add code generation support for Informix indexes
#9612 - Document JSON and JSONB NULL semantics
#9613 - Update Configuration Javadoc
#9614 - Clarify that SQL Data Warehouse = Azure Synapse Analytics
#9616 - Support parsing ALTER TABLE .. ADD, .. ADD
#9624 - Add a DiffCLI command line tool
#9629 - Add new <sequenceFlags/> flag to allow for turning off sequence flag generation
#9630 - Add more ErrorProne and Refaster checks / refactorings
#9633 - Add a new Settings.interpreterNameLookupCaseSensitivity
#9636 - Add Settings.locale() as a default for renderLocale() and other locales
#9646 - Document <generatedAnnotation/>
#9651 - Support parsing // as a single line comment token
#9657 - Publish 3.12 snapshots on website
#9660 - Update dependency to Derby 10.15
#9661 - Support parsing MySQL's unnamed constraint syntax
#9667 - Ignore changes to sun-jaxb.episode files
#9668 - Offer Java 11 and 6 trial downloads from website
#9669 - Move xjb files out of artifacts
#9670 - Make slf4j-api version backwards compatible to OSGi consumers
#9672 - Add new ConstraintDefinition type
#9675 - Postgres: Support MD5() function
#9677 - Add Settings.interpreterSearchPath
#9681 - Synchronize @Support annotations on MergeUsingStep#columns() methods
#9682 - Add SQLDialect.SQLITE_3_30
#9692 - Add InsertQuery.setSelect(Collection, Select) overload
#9696 - Add a new <generateGlobalIndexReferences/> flag
#9698 - How to alter a table to add a column of Enum/Set type in MySQL.
#9700 - Sakila/PostgreSQL: Don't fail if language plpgsql already exists
#9703 - Document the requirement of matching versions between code generator and runtime library
#9719 - Support MySQL ISNULL() function in the parser
#9727 - Add configuration/basedir to resolve relative paths in code generator
#9733 - Add <nonnullAnnotationType/> and <nullableAnnotationType/>
#9734 - Add <nonnullAnnotation/> and <nullableAnnotation/>
#9741 - Add org.jooq.Period for temporal validity
#9747 - JSON and JSONB should implement Serializable
#9762 - Add support for DB2 SET SCHEMA command
#9772 - Add SQLDialect.MYSQL_8_0_19
#9776 - Add support for MySQL 8.0.19 VALUES clause
#9777 - Add SQLDialect.supportedUntil()
#9778 - Support NULLS [ FIRST | LAST ] in SQLite 3.30
#9779 - Add native support for aggregate and window function FILTER clause in SQLite 3.30
#9780 - Add Settings.parseSetCommands
#9781 - Add DSLContext.set(Name, Param<?>) for arbitrary set commands
#9790 - Add internal functional interfaces F0, F1, F2
#9796 - Generated annotation should produce HTTPS link to jOOQ website
#9799 - Make TableOptions available through code generation
#9800 - Make TableOptions available through org.jooq.Meta
#9801 - Make TableOptions available through InformationSchema
#9805 - Generate view source code with generated views
#9806 - Add Batch.executeAsync() methods
#9807 - Apply Configuration.onError flag also to SQL errors from AbstractDatabase
#9808 - Add JooqLogger.log(Level) overloads
#9811 - Document that CustomRecord subclasses need a no-arg constructor
#9816 - Add Definition.getSource()
#9819 - Add support for INFORMATION_SCHEMA.VIEWS in jooq-meta.xsd
#9822 - Firebird support for ALTER TABLE ... ALTER ... [ DROP | SET ] NOT NULL
#9827 - Remove SQL 2 jOOQ section from the manual
Breaking changes
----------------
#4934 - Delay query execution until a Stream terminal op is called
#5714 - Change <javaTimeTypes/> default value to "true"
#9031 - Remove unnecessary AlterSequenceRestartStep
#9235 - Remove checked exceptions from LoaderSourceStep methods
#9237 - Remove checked exceptions from MockFileDatabaseConfiguration::source methods
#9241 - Change <varargSetters/> to default to false
#9283 - DefaultBinding should return null on null JSON values, instead of JSON[B].valueOf(null)
#9365 - Support H2's standard LOG() function
#9470 - FilePatter.Loader should accept Source, instead of InputStream
#9479 - Remove internal, deprecated DefaultConfiguration constructors
#9596 - Regenerate MySQL information schema against 8.0.18
#9601 - Add code generation flag <includeSystemIndexes/>
#9725 - Move org.jooq.meta.tools.FilePattern API to core library
#9732 - Change default value of <generatedAnnotation/> to "false"
#9737 - Wrong generics on DSLContext.selectFrom(Name) and similar methods
#9758 - Generated constraint names should not be table prefixed in meta data in DB2 and PostgreSQL
Bug Fixes
---------
#2967 - Impossible to inline "decimals" parameter of ROUND() function
#4856 - UNION generates bad SQL for MySQL, when UNION subqueries contain duplicate column names from JOIN operations
#6497 - Add LocalDateAsLocalDateTimeBinding to make <javaTimeTypes/> and <dateAsTimestamp/> work together
#7377 - When using org.jooq.Meta, UniqueKey.getReferences throws NPE in Firebird
#7962 - ORA-04043 on INSERT when using qualified, quoted table name and fetching generated keys
#8335 - DDLDatabase loads too many files when using relative path
#8508 - Fix Javadoc warnings
#8555 - Parser cannot handle enum literals that are invalid java identifiers
#8580 - LikeEscapeStep#escape() also supported by Teradata
#8677 - Log warning when file based databases have invalid <jdbc/> configurations
#8721 - Enum type with '-' character does not compile
#8824 - DDLDatabase can not handle multiple constraints with the same name
#8966 - Invalid SQL rendered for recursive query
#8967 - Generator outputs duplicate method (not compilable)
#8968 - An exception in ExecuteListener#start is not routed to ExecuteListener#exception
#8991 - DSL.field(Name) fields should support schema mapping
#9099 - Cannot build Javadoc in jOOQ-checker under Java 11
#9100 - Fix Javadoc links starting from jOOQ 3.12, which is built with JDK 11
#9104 - JooQ 3.12.0 codegen fails with an incorrect query where 3.11 worked correctly (PostgreSQL)
#9110 - Wrong SQL generated by DSL.countDistinct() without arguments
#9111 - Allow parsing of COUNT(DISTINCT <row-value-expression>)
#9121 - Generator does not report file in which invalid SQL was found
#9122 - java 8+ distribution of 3.12.0 broken
#9133 - 404s on /latest Javadoc
#9134 - Wrong rendering of [ FROM { FIRST | LAST } ] clause for NTH_VALUE()
#9140 - Translation of USE command should result in SET SCHEMA command in dialects that do not support catalogs
#9144 - ParserCLI "-f" flag does not work as shortcut for "--from-dialect"
#9145 - Manual page about ParserCLI misses reactive-streams in classpath
#9146 - ParserCLI --from-dialect is not case insensitive
#9147 - ParserCLI -h parameter throws a RuntimeException
#9150 - Compilation error in generated code when Oracle OBJECT type contains index_of(varchar2) member procedure
#9157 - Prevent "Illegal reflective access operation" warning in jOOQ Open Source Edition
#9158 - Review and fix a few formatting issues in the manual
#9165 - Quantified LIKE predicate (LIKE ANY) is not documented correctly
#9177 - H2: SelectLimitPercentStep#percent() not working properly
#9187 - Bad parenthesis in UNION under HSQLDB
#9193 - Consecutive RenderContext.formatSeparator() calls ignored when formatIndentStart() is called in between
#9196 - Only first value added to date time appears in rendered SQL
#9201 - Negative intervals not rendered properly for PostgreSQL
#9205 - Fix DefaultYearToMonthBinding and DefaultYearToSecondBinding for Aurora Postgres
#9214 - SQLDialect.MEMSQL lacks Pro annotation
#9219 - Regression in Extract(QUARTER) on Postgres in 3.12.1
#9223 - MySQL: Support date parts MICROSECOND and WEEK
#9224 - Regression for "= ANY(?::int[])" no longer produces array bind variable
#9225 - Postgres: FILTER clause no longer rendered
#9231 - Wrong Javadoc on org.jooq.Source
#9242 - AbstractKey#equals() assumes name is unique
#9248 - Regression: DSLContext#nextval() broken for H2
#9250 - LEFT [ ANTI | SEMI ] JOIN ... USING not implemented
#9251 - H2's WITH TIES support broken in OSS edition
#9266 - Consistently document all commercial SQLDialects
#9274 - AttributeConverterExtractor should receive custom Hibernate configuration properties
#9277 - Improve error message when AttributeConverters cannot be loaded due to NoClassDefFoundError
#9291 - Sequences are generated as tables in MariaDB
#9296 - withRenderSchema(false) does render schema in order by clause
#9311 - Incomplete @Support annotations on UpdateQuery.addValues(Row[N], Select)
#9315 - Remove unnecessary generic type variable on CreateSchemaImpl
#9324 - Name.append(Name) should not produce a QualifiedName when one of the parts is empty
#9331 - Postgres 12 exception in code generation output: "column c.consrc does not exist"
#9338 - Parse ignore comments not parsed correctly if stop comment is last token of file, prior to a newline
#9343 - Wrong SQL generation for PostgreSQL function calls having arguments with custom data types.
#9355 - LoggingConnection does not log static statements
#9368 - Outdated comment in manual about H2 supporting window functions
#9386 - RenderMapping is not applied to DSL.schema(Name)
#9389 - CREATE INDEX commands created from DSLContext.ddl() based on Meta contain illegal WHERE clause
#9411 - Firebird generated code contains "DEFAULT" keyword in default expressions
#9414 - Unable to create index with qualified index name on Oracle dialect
#9415 - Emulate RETURNING * in Firebird
#9418 - Regression in Firebird's SUBSTRING() implementation
#9420 - Incorrect emulation of unnamed indexes
#9424 - Add line breaks to a few parser grammar diagrams
#9443 - Regression in Sybase ASE source code generation: Cannot generate tables
#9457 - UDT.getQualifiedName() doesn't return schema qualification for generated tables
#9461 - Missing @PlainSQL annotation on some DSLContext#batch() methods
#9462 - Missing @Support annotations on BatchBindStep methods
#9463 - Add missing @Support annotations to methods of LoaderSourceStep
#9468 - SQLDialect.ASE cannot be used with a MockConnection
#9471 - JDBCDatabase does not order objects alphabetically
#9473 - Creating tables using DSLContext.ddl() converts VARBINARY columns to TEXT in MySQL
#9480 - CREATE SEQUENCE implementation should reuse Sequence.getDataType() in various flags
#9493 - JoinStep#crossApply() throws IllegalArgumentException
#9497 - NullPointerException when calling methods on DAO that is not attached to a Configuration
#9498 - DDLDatabase: Flyway's repatable migrations are executed to early
#9513 - Oracle: PIVOT ... FOR always rendered as quoted
#9516 - Cannot use MERGE .. DELETE WHERE without UPDATE WHERE
#9528 - Some ConstraintForeignKeyReferencesStep.references() methods are missing Support annotations
#9531 - Open Source version references dual license
#9545 - Parser cannot parse views with WITH
#9547 - Query ALL_MVIEWS instead of ALL_MVIEW_COMMENTS in Oracle
#9551 - Bad code generated when using SQL Server user defined types
#9567 - Cosmetic exceptions caused by JPADatabase when using attribute converters
#9571 - Multi column ALTER TABLE .. ADD statement shouldn't qualify column names
#9582 - Generator's <globalObjectReferences/> does not prevent the generation of Indexes.java
#9597 - DefaultRelations#getCheckConstraints() returns all checks on first call
#9598 - Static class initialisation deadlock race between DefaultDSLContext.java:388 and DefaultDSLContext.java:505
#9620 - No DiagnosticsListener.missingWasNullCall() when nullability is unknown
#9621 - NullPointerException in DefaultRecordMapperProvider when setting a new instance to a Configuration
#9648 - ArrayIndexOutOfBoundsException if query has a single or double quote char in vendor specific comment
#9653 - Meta.ddl() loses Schema and Constraint Name.quoted() information
#9658 - Parser settings repeat available flag documentation
#9659 - Missing documentation for Settings.inListPadBase
#9664 - Parser should reject duplicate identities
#9671 - Fixes #9670 to make jooq OSGi backwards compatible for slf4j and also…
#9674 - Bad SQL generated from implicit join from within subqueries
#9685 - Generate.globalTableReferences should not impact what is returned by Schema#getTables()
#9690 - All links in FAQ are broken
#9697 - Full identifier qualification in generated code when <globalObjectReferences> is turned off
#9708 - Mapping schema with RegEx generates invalid output name after upgrade to 3.12
#9718 - Wrong type returned by LoaderCSVStep#fields(LoaderFieldMapper)
#9726 - FilePattern matches too many files when wildcards are being used
#9751 - MySQL 5.7: Invalid SQL for set operations in subqueries
#9756 - Regression in IGNORE NULLS clause for DB2
#9782 - Add missing @Support annotation to PivotForStep#for_(Field)
#9791 - Meta.getTables() returns the same table for each catalog in SQL Server
#9792 - Meta doesn't produce correct data type in SQL Server for identity columns
#9793 - BLOB SUBTYPE not supported in dialect FIREBIRD when using plain SQL
#9797 - XMLDatabase cannot read INT type
#9823 - WITH TIES emulation not used for FIREBIRD dialect
#9824 - Informix check constraint and view generated SQL code is not trimmed