Hi David,

Thanks for your additional details. I'm not sure if this is really a
regression, I'm surprised it worked before. The problem is your cast here:

      public void insertStart(RecordContext ctx) {
        Arrays.stream(ctx.record().fields())
            .filter(f -> shouldAssign(f, ctx, columName, type))
            .forEach(o -> ctx.record().setValue(o.cast(type),
initialValue.get()));
      }

You're probably casting things to get around type safety issues. But a
Field.cast() call creates a completely different Field expression, which
has nothing to do with the original field. In particular, your Record does
not actually contain that field expression, so throwing an exception is a
sensible thing to do here, because your intent might have been to
distinguish between two distinct expressions o and o.cast(type) (in case
both were inside the record).

Regrettably, Java does not allow for using local generic types, so you
might need to resort to unsafe casting (in Java, not using jOOQ API!) or an
auxiliary method, or you could use Field::coerce, whose purpose is to
change a field's type without any effect on the underlying SQL.

I recommend using casting, though:

     public void insertStart(RecordContext ctx) {
        Arrays.stream(ctx.record().fields())
            .filter(f -> shouldAssign(f, ctx, columName, type))
            .forEach(o -> ctx.record().setValue((Field<T>) o, (T)
initialValue.get()));
      }

I hope this helps,
Lukas

On Tue, Sep 3, 2019 at 9:44 AM David Karlsen <da...@davidkarlsen.com> wrote:

> I looked closer into the code and found out where the issue is.
>
> I have a class:
>
> public class InitialValueOnCreateListener {
>
>   private InitialValueOnCreateListener() {}
>
>   public static <T> RecordListener create(
>       String columName, Class<? super T> type, Supplier<T> initialValue) {
>     return new DefaultRecordListener() {
>       @Override
>       public void insertStart(RecordContext ctx) {
>         Arrays.stream(ctx.record().fields())
>             .filter(f -> shouldAssign(f, ctx, columName, type))
>             .forEach(o -> ctx.record().setValue(o.cast(type), 
> initialValue.get()));
>       }
>     };
>   }
>
>   private static boolean shouldAssign(
>       Field<?> f, RecordContext recordContext, String columnName, Class type) 
> {
>     return f.getValue(recordContext.record()) == null
>         && f.getName().equalsIgnoreCase(columnName)
>         && f.getType().isAssignableFrom(type);
>   }
> }
>
>
> and in my config:
>
> @Bean
> public RecordListenerProvider[] recordListenerProviders() {
>   return DefaultRecordListenerProvider.providers(
>       // InitialValueOnCreateListener.create("VERSION", BigInteger.class, () 
> -> BigInteger.ZERO),
>       InitialValueOnCreateListener.create("CREATED_DT", LocalDateTime.class, 
> LocalDateTime::now));
> }
>
>
> and get the stack-trace:
>
>
> java.lang.IllegalArgumentException: Field
> (cast("APPDATA"."T_ADDRESS"."CREATED_DT" as timestamp)) is not contained in
> Row ("APPDATA"."T_ADDRESS"."ID", "APPDATA"."T_ADDRESS"."VERSION",
> "APPDATA"."T_ADDRESS"."ADDRESSLINE1", "APPDATA"."T_ADDRESS"."ADDRESSLINE2",
> "APPDATA"."T_ADDRESS"."ADDRESSTYPE", "APPDATA"."T_ADDRESS"."CITY",
> "APPDATA"."T_ADDRESS"."ISOCOUNTRYCODE", "APPDATA"."T_ADDRESS"."ZIPCODE",
> "APPDATA"."T_ADDRESS"."CUSTOMER_ID", "APPDATA"."T_ADDRESS"."CREATED_DT",
> "APPDATA"."T_ADDRESS"."UPDATED_DT")
>
> at org.jooq.impl.Tools.indexOrFail(Tools.java:1814)
> at org.jooq.impl.AbstractRecord.set(AbstractRecord.java:338)
> at org.jooq.impl.AbstractRecord.setValue(AbstractRecord.java:1312)
> at
> com.edb.fs.tac.jfr.srv.dao.InitialValueOnCreateListener$1.lambda$insertStart$1(InitialValueOnCreateListener.java:25)
> at
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
> at
> java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177)
> at
> java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:948)
> at
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
> at
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
> at
> java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
> at
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
> at
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
> at
> java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497)
> at
> com.edb.fs.tac.jfr.srv.dao.InitialValueOnCreateListener$1.insertStart(InitialValueOnCreateListener.java:25)
> at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:115)
> at org.jooq.impl.TableRecordImpl.storeInsert(TableRecordImpl.java:173)
> at org.jooq.impl.TableRecordImpl.insert(TableRecordImpl.java:161)
> at org.jooq.impl.TableRecordImpl.insert(TableRecordImpl.java:156)
> at org.jooq.impl.BatchCRUD.executeAction(BatchCRUD.java:210)
> at org.jooq.impl.BatchCRUD.executePrepared(BatchCRUD.java:121)
> at org.jooq.impl.BatchCRUD.execute(BatchCRUD.java:96)
> at
> com.edb.fs.tac.jfr.srv.dao.customer.CustomerDaoJooqImpl.createCustomer(CustomerDaoJooqImpl.kt:88)
> at
> com.edb.fs.tac.jfr.srv.dao.customer.CustomerDaoJooqImpl$$FastClassBySpringCGLIB$$f13bda37.invoke(<generated>)
> at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
> at
> org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
> at
> org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:119)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
> at
> org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)
> at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
> at
> org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
> at
> com.edb.fs.tac.jfr.srv.dao.customer.CustomerDaoJooqImpl$$EnhancerBySpringCGLIB$$a63bc9e5.createCustomer(<generated>)
> at
> com.edb.fs.tac.jfr.srv.service.customer.CustomerServiceImpl.createCustomer(CustomerServiceImpl.kt:32)
> at
> com.edb.fs.tac.jfr.srv.service.customer.CustomerServiceImpl$$FastClassBySpringCGLIB$$6b3d1210.invoke(<generate
>
>
> which is a regression from 3.11.x
>
> fredag 30. august 2019 13.38.03 UTC+2 skrev Lukas Eder følgende:
>>
>> Hi David,
>>
>> Thank you very much for your message.
>>
>> Where does this cast come from? I cannot see it in your Kotlin code. Is
>> this jOOQ's Record::with method, or a Kotlin extension method? Also, do
>> note that the stack trace fragment you've posted is from
>> createDuplicateCustomer(), but you posted the code of updateCustomer().
>>
>> Thanks,
>> Lukas
>>
>> On Fri, Aug 30, 2019 at 1:32 PM David Karlsen <davidk...@gmail.com>
>> wrote:
>>
>> I started seeing
>>
>> java.lang.IllegalArgumentException: Field 
>> (cast("APPDATA"."T_ADDRESS"."CREATED_DT" as timestamp)) is not contained in 
>> Row ("APPDATA"."T_ADDRESS"."ID", "APPDATA"."T_ADDRESS"."VERSION", 
>> "APPDATA"."T_ADDRESS"."ADDRESSLINE1", "APPDATA"."T_ADDRESS"."ADDRESSLINE2", 
>> "APPDATA"."T_ADDRESS"."ADDRESSTYPE", "APPDATA"."T_ADDRESS"."CITY", 
>> "APPDATA"."T_ADDRESS"."ISOCOUNTRYCODE", "APPDATA"."T_ADDRESS"."ZIPCODE", 
>> "APPDATA"."T_ADDRESS"."CUSTOMER_ID", "APPDATA"."T_ADDRESS"."CREATED_DT", 
>> "APPDATA"."T_ADDRESS"."UPDATED_DT")
>>      at 
>> com.edb.fs.tac.jfr.srv.service.customer.CustomerServiceIntegrationTest.createDuplicateCustomer(CustomerServiceIntegrationTest.kt:178)
>>
>>
>> with 3.12.0 (upgrade from 3.11.12).
>>
>>
>> code in question:
>>
>>
>> override fun updateCustomer(customer: Customer): Customer {
>>     this.dslContext.newRecord(T_CUSTOMER, customer)
>>             .with(T_CUSTOMER.ID, BigInteger.valueOf(customer.id!!))
>>             .with(T_CUSTOMER.VERSION, BigInteger.valueOf(customer.version ?: 
>> 0L))
>>             .with(T_CUSTOMER.UPDATED_DT, customer.updatedTimestamp ?: 
>> LocalDateTime.now())
>>             .with(T_CUSTOMER.CREATED_DT, customer.createdTimestamp ?: 
>> LocalDateTime.now())
>>             .with(T_CUSTOMER.FIRSTNAME, customer.firstName)
>>             .with(T_CUSTOMER.LASTNAME, customer.lastName)
>>             .update()
>>     return getCustomer(customer.orgId, customer.customerId) ?: throw 
>> IllegalStateException()
>> }
>>
>>
>> fre. 30. aug. 2019 kl. 08:57 skrev Lukas Eder <luka...@gmail.com>:
>>
>> Dear group,
>>
>> We have noticed a significant regression in the jOOQ 3.12 Open Source
>> Edition's code generator when using it with PostgreSQL. The regression has
>> been fixed on jOOQ 3.13 and backported to jOOQ 3.12.1:
>> https://github.com/jOOQ/jOOQ/issues/9104
>>
>> We will publish 3.12.1 early next week to address this issue.
>>
>> Thank you very much for your understanding
>> Lukas
>>
>> On Thu, Aug 29, 2019 at 4:33 PM Lukas Eder <luka...@gmail.com> wrote:
>>
>> Version 3.12.0 - August 29, 2019
>>
>> ================================================================================
>>
>> In this release, we've focused on a lot of minor infrastructure tasks,
>> greatly
>> improving the overall quality of jOOQ. We've reworked some of our
>> automated
>> integration tests, which has helped us fix a big number of not yet
>> discovered
>> issues, including a much better coverage of our 26 supported RDBMS
>> dialects.
>>
>> We're excited about these internal changes, as they will help us
>> implement a lot
>> of features that have been requested by many for a long time, including an
>> immutable query object model, with all the secondary benefits like
>> caching of
>> generated SQL, and much more powerful dynamic SQL construction and
>> transformation in the future.
>>
>> Major new features include the new procedural language API shipped with
>> our
>> commercial distributions, new data types including native JSON support,
>> MemSQL
>> support, formal Java 11+ support, a much better parser, and reactive
>> stream API
>> support.
>>
>>
>> Procedural languages
>> --------------------
>>
>> Following up on jOOQ 3.11's support for anonymous blocks, the jOOQ 3.12
>> Professional and Enterprise Editions now include support for a variety of
>> procedural language features, including
>>
>> - Variable declarations
>> - Variable assignments
>> - Loops (WHILE, REPEAT, FOR, LOOP)
>> - If Then Else
>> - Labels
>> - Exit, Continue, Goto
>> - Execute
>>
>> This feature set is part of our ongoing efforts to continue supporting
>> more
>> advanced vendor specific functionality, including our planned definition
>> and
>> translation of stored procedures, triggers, and other, ad-hoc procedural
>> logic
>> that helps move data processing logic into the database server.
>>
>>
>> New Databases Supported
>> -----------------------
>>
>> The jOOQ Professional Edition now supports the MemSQL dialect. MemSQL is
>> derived
>> from MySQL, although our integration tests have shown that there are
>> numerous
>> differences, such that supporting MemSQL formally will add a lot of value
>> to our
>> customers by providing much increased syntactic correctness.
>>
>>
>> Reactive streams
>> ----------------
>>
>> The reactive programming model is gaining traction in some environments
>> as new,
>> useful streaming APIs emerge, such as e.g. Reactor. These APIs have
>> agreed to
>> work with a common SPI: reactive streams, and since JDK 9 the new
>> java.util.concurrent.Flow SPI. jOOQ 3.12 now implements these paradigms
>> on an
>> API level, such that an integration with APIs like Reactor becomes much
>> more
>> easy. The implementation still binds to JDBC, and is thus blocking. Future
>> versions of jOOQ will abstract over JDBC to allow for running queries
>> against
>> ADBA (by Oracle) or R2DBC (by Spring)
>>
>>
>> New data types
>> --------------
>>
>> We've introduced native support for a few new data types, which are often
>> very
>> useful in specific situations. These include:
>>
>> - JSON / JSONB: A native string wrapper for textual and binary JSON data.
>> While
>>   users will still want to bind more specific JSON to maps and lists using
>>   custom data type Bindings, in a lot of cases, being able to just
>> serialise and
>>   deserialise JSON content as strings is sufficient. jOOQ now provides
>> out of
>>   the box support for this approach for various SQL dialects.
>> - INSTANT: RDBMS do not agree on the meaning of the SQL standard
>> TIMESTAMP WITH
>>   TIME ZONE. PostgreSQL, for example, interprets it as a unix timestamp,
>> just
>>   like java.time.Instant. For an optimal PostgreSQL experience, this new
>> INSTANT
>>   type will be much more useful than the standard JDBC
>> java.time.OffsetDateTime
>>   binding.
>> - ROWID: Most RDBMS have a native ROWID / OID / CTID / physloc identity
>>   value that physically identifies a row on the underlying storage system,
>>   irrespective of any logical primary key. These ROWIDs can be leveraged
>> to run
>>   more performant, vendor specific queries. Supporting this type allows
>> for
>>   easily using this feature in arbitrary queries.
>>
>>
>> Parser
>> ------
>>
>> Our parser is seeing a lot of continued improvements over the releases as
>> we
>> gather feedback from our users. Our main drivers for feedback are:
>>
>> - The DDLDatabase which allows for generating code from DDL scripts
>> rather than
>>   live JDBC connections to your database
>> - The https://www.jooq.org/translate website, which translates any kind
>> of SQL
>>   between database dialects.
>>
>> SQL dialect translation will evolve into an independent product in the
>> future.
>> DDL parsing is already very powerful, and a lot of customers rely on it
>> for
>> their production systems.
>>
>> In the next versions, we will be able to simulate DDL on our own, without
>> H2,
>> which will open up a variety of possible use cases, including better
>> schema
>> management.
>>
>> Specific jOOQ 3.12 parser improvements include:
>>
>> - Being able to access schema meta information (column types,
>> constraints) to
>>   better emulate SQL features / translate SQL syntax between dialects
>> - A parse search path, similar to PostgreSQL's search_path, or other
>> dialects'
>>   current_schema, allowing support for unqualified object references.
>> - The DDL simulation from the DDLDatabase is now moved into the core
>> library,
>>   supporting it also out of the box as a DDL script based meta data source
>> - A new special comment syntax that helps ignoring SQL fragments in the
>> jOOQ
>>   parser only, while executing it in your ordinary SQL execution.
>> - A new interactive mode in the ParserCLI
>> - Support for nested block comments
>> - And much more
>>
>>
>> Formal Java 11 Support
>> ----------------------
>>
>> While we have been supporting Java 11 for a while through our integration
>> tests,
>> jOOQ 3.12 now fully supports Java 11 to help improve the experience
>> around the
>> transitive JAXB dependency, which we now removed entirely out of jOOQ.
>>
>> The commercial editions ship with a Java 11+ supporting distribution,
>> which
>> includes more optimal API usage, depending on new Java 9-11 APIs. All
>> editions,
>> including the jOOQ Open Source Edition, have a Java 8+ distribution that
>> supports any Java version starting from Java 8.
>>
>>
>> Commercial Editions
>> -------------------
>>
>> Dual licensing is at the core of our business, helping us to provide
>> continued
>> value to our customers.
>>
>> In the past, the main distinction between the different jOOQ editions was
>> the
>> number of database products each edition supported. In the future, we
>> want to
>> provide even more value to our customers with commercial subscriptions.
>> This is
>> why, starting from jOOQ 3.12, we are now offering some new, advanced
>> features
>> only in our commercial distributions. Such features include:
>>
>> - The procedural language API, which is available with the jOOQ
>> Professional
>>   and Enterprise Editions
>> - While the jOOQ 3.12 Open Source Edition supports Java 8+, the jOOQ 3.12
>>   Professional Edition also ships with a Java 11+ distribution,
>> leveraging some
>>   newer JDK APIs, and the jOOQ 3.12 Enterprise Edition continues
>> supporting
>>   Java 6 and 7.
>> - Since Java 8 still sees very substantial market adoption, compared to
>> Java 11,
>>   we still support Java 8 in the jOOQ 3.12 Open Source Edition.
>> - Starting from jOOQ 3.12, formal support for older RDBMS dialect
>> versions in
>>   the runtime libraries is reserved to the jOOQ Professional and
>> Enterprise
>>   Editions. The jOOQ Open Source Edition will ship with support for the
>> latest
>>   version of an RDBMS dialect, only. The code generator is not affected
>> by this
>>   change.
>>
>> By offering more value to our paying customers, we believe that we can
>> continue
>> our successful business model, which in turn allows us to continue the
>> free
>> jOOQ Open Source Edition for free. Our strategy is:
>>
>> - To implement new, advanced, commercial only features.
>> - To offer legacy support (legacy Java versions, legacy database
>> versions) to
>>   paying customers only.
>> - To continue supporting a rich set of features to Open Source Edition
>> users.
>>
>>
>> H2 and SQLite integration
>> -------------------------
>>
>> Over the past year, both H2 and SQLite have seen a lot of improvements,
>> which we
>> have now supported in jOOQ as well. Specifically, H2 is moving at a very
>> fast
>> pace, and our traditional close cooperation got even better as we're
>> helping
>> the H2 team with our insights into the SQL standards, while the H2 team is
>> helping us with our own implementations.
>>
>>
>> Other improvements
>> ------------------
>>
>> The complete list of changes can be found on our website:
>> https://www.jooq.org/notes
>>
>> A few improvements are worth summarising here explicitly
>>
>> - We've added support for a few new SQL predicates, such as the standard
>>   UNIQUE and SIMILAR TO predicates, as well as the synthetic, but very
>> useful
>>   LIKE ANY predicate.
>> - The JAXB implementation dependency has been removed and replaced by our
>> own
>>   simplified implementation for a better Java 9+ experience.
>> - The historic log4j (1.x) dependency has been removed. We're now logging
>> only
>>   via the optional slf4j dependency (which supports log4j bridges), or
>>   java.util.logging, if slf4j cannot be found on the classpath.
>> - The shaded jOOR dependency has been upgraded to 0.9.12.
>> - We've greatly improved our @Support annotation usage for better use with
>>   jOOQ-checker.
>> - jOOQ-checker can now run with ErrorProne as well as with the checker
>> framework
>>   as the latter still does not support Java 9+.
>> - We've added support for a lot of new DDL statements and clauses.
>> - There is now a synthetic PRODUCT() aggregate and window function.
>> - We added support for the very useful window functions GROUPS mode.
>> - Formatting CSV, JSON, XML now supports nested formatting.
>> - UPDATE / DELETE statements now support (and emulate) ORDER BY and LIMIT.
>> - When constructing advanced code generation configuration, users had to
>> resort
>>   to using programmatic configuration. It is now possible to use SQL
>> statements
>>   to dynamically construct regular expression matching tables, columns,
>> etc.
>> - Configuration has a new UnwrapperProvider SPI.
>> - MockFileDatabase can now handle regular expressions and update
>> statements.
>> - Settings can cleanly separate the configuration of name case and
>> quotation.
>> - MySQL DDL character sets are now supported, just like collations.
>> - A new Table.where() API simplifies the construction of simple derived
>> tables.
>>   This feature will be very useful in the future, for improved row level
>>   security support.
>> - A nice BigQuery and H2 feature is the "* EXCEPT (...)" syntax, which
>> allows
>>   for removing columns from an asterisked expression. We now have
>>   Asterisk.except() and QualifiedAsterisk.except().
>> - A lot of improvements in date time arithmetic were added, including
>> support
>>   for vendor specific DateParts, like WEEK.
>>
>>
>>
>>
>> Features and Improvements
>> -------------------------
>>
>> #714 - Add support for non-standard ORDER BY .. LIMIT clauses in UPDATE,
>> DELETE statements
>> #1699 - Add support for the SQL standard UNIQUE predicate
>> #1725 - Add support for SQL standard SIMILAR TO predicate
>> #2026 - Add a new @Internal annotation to annotate API parts that are not
>> supposed to be used
>> #2059 - Add support for the MemSQL database for the jOOQ Professional
>> Edition
>> #2132 - Add support for non-standard date-time fields in the EXTRACT()
>> function
>> #2208 - Implement a MockFileDatabase
>> #2233 - Add Result<?> DSLContext.fetchFromXML() to allow for loading
>> results that were exported using Result.formatXML()
>> #2731 - Add some sections to the manual helping users migrate from other
>> popular ORMs
>> #3606 - Emulate INSERT/UPDATE/DELETE (SELECT ...) by WITH v AS (SELECT
>> ...) INSERT/UPDATE/DELETE v on SQL Server
>> #3607 - Allow for emitting common table expression declarations to
>> RenderContext
>> #4371 - Let ResultQuery<R> extend Publisher<R>
>> #4473 - Add ResultQuery<R1>.coerce(Field<?>[]), coerce(Table<R>), that
>> coerce a new Record type on a ResultQuery
>> #4498 - Emulate INSERT .. RETURNING via SQL Server OUTPUT clause
>> #5110 - Add support for Derby's MERGE statement
>> #5576 - Add support for SQLite 3.15's row value expression support
>> #5601 - IN list padding setting should also apply to row IN predicates
>> #5640 - MockFileDatabase should support all jOOQ import formats,
>> including JSON, XML
>> #5700 - Add support for Oracle's STATS_MODE() aggregate function
>> #5781 - Add support for ALTER TABLE .. RENAME COLUMN in MySQL 8
>> #5895 - Add support for TIME[STAMP] WITH TIME ZONE in HSQLDB
>> #5899 - jOOQ-checker should provide both checker-framework and ErrorProne
>> checks
>> #5909 - Deprecate RenderNameStyle.QUOTED and replace feature by
>> renderQuotedNames
>> #5939 - Add PRODUCT() aggregate and window function
>> #5966 - Add support for NATURAL FULL [ OUTER ] JOIN
>> #5969 - Add <includeInvisibleColumns/> to code generator configuration to
>> allow for hiding Oracle's and H2's INVISIBLE columns
>> #6234 - Add newline configuration to code generator
>> #6260 - Support loading multiple files in XMLDatabase
>> #6450 - Javadoc should reference JDK 11 Javadoc
>> #6475 - Add procedural language abstraction API
>> #6486 - Add a JDK 11 build
>> #6548 - Support multiple external configuration files through
>> <configurationFiles/>
>> #6583 - Work around MySQL's self-reference-in-DML-subquery restriction
>> #6709 - Support custom Hibernate properties in JPADatabase
>> #6778 - Support parsing PostgreSQL's dollar quoted string constants
>> #6944 - Add a way to specify what object type a <forcedType/> should match
>> #6971 - Allow Maven plugin to succeed in absence of valid DB connection
>> if schema is up to date
>> #7005 - Add support for MariaDB INTERSECT and EXCEPT
>> #7048 - Document the FILTER clause
>> #7143 - Support merging external <configurationFile/> into Maven
>> configuration
>> #7153 - Allow for configuring a locale to be used for upper/lower casing
>> inside of jOOQ
>> #7163 - Add Settings.parseWithMetaLookups
>> #7216 - Add RecordN<T1, ..., TN> fetchSingle(Field<T1>, ..., Field<TN>)
>> #7235 - DDLDatabase fails with ParserException on JSON field
>> #7268 - Add support for MySQL's UNIQUE [ index_name ] syntax
>> #7297 - Support deriving a WindowDefinition from another WindowDefinition
>> #7305 - Add support for DECLARE statements inside of statement blocks
>> #7306 - Add support for the SET command to assign values to variables
>> #7331 - Add reference to <forcedType/> configuration in DataType,
>> Converter, Binding
>> #7336 - Add new flags to Settings to govern parser behaviour
>> #7337 - Add Settings.parseDialect
>> #7361 - Improve formatting of nested joins
>> #7397 - Add a section to the manual about SELECT *
>> #7426 - Add support for Teradata QUALIFY
>> #7445 - Support parsing PostgreSQL-specific interval literals
>> #7470 - Add indexOf() methods to all TableLike types
>> #7485 - Document jOOQ's auto-conversion utility
>> #7490 - Upgrade jOOQ-meta-extensions dependency to Hibernate 5.4
>> #7545 - ForcedType configurations should have include / exclude
>> expressions
>> #7570 - Add support for CREATE TYPE .. AS ENUM
>> #7587 - Use --release flag in JDK 9+ based builds
>> #7591 - Add new ResourceManagingScope which allows for Binding
>> implementations to register resources which are freed after execution
>> #7595 - Add support for Java 11
>> #7598 - Add search box to Javadocs
>> #7599 - Print row count in LoggerListener for ResultQuery
>> #7602 - Upgrade jOOR dependency's Java 9 functionality
>> #7609 - Add Setting to turn off ORDER BY clause in emulated OFFSET ..
>> FETCH pagination
>> #7612 - Add configuration to DDLDatabase to indicate whether unquoted
>> names are reported in lower case, upper case or as-is
>> #7619 - Don't ship old XSDs in binaries
>> #7628 - Add support for PostgreSQL 11
>> #7633 - ALTER TABLE .. ADD FOREIGN KEY .. REFERENCES references
>> unqualified table name
>> #7646 - Support for window functions GROUPS mode
>> #7647 - Support window function EXCLUDE clause
>> #7678 - Mention more ways to inline parameters in manual
>> #7705 - Add support for PostgreSQL FOR NO KEY UPDATE and FOR KEY SHARE
>> #7712 - Add support for Catalogs in JDBCDatabase
>> #7719 - Add code generation flag to treat MySQL TINYINT(1) as BOOLEAN
>> #7727 - Support parsing DEGREES() as a synonym for DEGREE() and DEG(),
>> and RADIANS() for RADIAN(), RAD()
>> #7734 - Make the JAXB implementation dependency optional with a custom
>> fallback implementation
>> #7748 - Add support for CREATE SEQUENCE flags
>> #7749 - Support parsing CREATE INDEX .. ON .. USING btree (..)
>> #7751 - Add support for ALTER TABLE ONLY
>> #7755 - Add an integration test to discover all DSL API that is not
>> covered by the parser
>> #7756 - Improve SQLite repeat() emulation
>> #7757 - Improve SQLite LPAD() and RPAD() emulation
>> #7759 - Add DDLDatabase property unqualifiedSchema to specify what the
>> unqualifiedSchema is
>> #7760 - Upgrade SybDriver version in JDBCUtils.driver(String)
>> #7774 - Add support for DROP TYPE
>> #7776 - Add support for parsing custom data types
>> #7782 - Record.formatJSON() should format nested records recursively
>> #7788 - Support Java 6 and 7 only in Enterprise Edition
>> #7792 - Support DatePart.DAY_OF_WEEK and DatePart.ISO_DAY_OF_WEEK
>> #7793 - Support DatePart.DAY_OF_YEAR
>> #7794 - Support DatePart.EPOCH
>> #7796 - Support DatePart.QUARTER
>> #7799 - jOOQ manual about Gradle code generation should not make explicit
>> use of JAXB
>> #7800 - Let Record extend Formattable
>> #7801 - Record.formatXML() should format nested records recursively
>> #7802 -  Record.formatCSV() should format nested records recursively
>> #7809 - Generate overridden Table.fieldsRow() method in generated tables
>> #7810 - Add DSL.rowField(RowN)
>> #7839 - Emulate { UPDATE | DELETE } ORDER BY and LIMIT
>> #7856 - Upgrade maven-scala-plugin to scala-maven-plugin
>> #7862 - Add SQLDialect.ORACLE18C
>> #7865 - Add support for SQLite window functions
>> #7866 - Add support for SQLite ALTER TABLE .. RENAME COLUMN
>> #7870 - Add support for Java 11
>> #7872 - Add support for HSQLDB EXPLAIN PLAN FOR
>> #7873 - Add HSQLDB support for Sequence.currval()
>> #7882 - Add Field.startsWithIgnoreCase() and Field.endsWithIgnoreCase()
>> #7885 - Add Table.rowid()
>> #7902 - Add parser support for negative numeric scales
>> #7904 - Apply optimistic locking logic also for non-updatable
>> TableRecords on insert()
>> #7905 - Add a new org.jooq.RowId type that corresponds to java.sql.RowId
>> #7906 - Add support for H2 window functions
>> #7907 - Support parsing vendor-specific RESPECT NULLS / IGNORE NULLS
>> syntax
>> #7909 - ExecuteContext.sqlException(SQLException) should accept null
>> #7913 - Add support for H2 standard MERGE statement
>> #7914 - Overload fetchXYZ(T, Collection<? extends Condition>) and
>> fetchXYZ(T, Condition...)
>> #7915 - Add Query.poolable(boolean) to govern the JDBC
>> Statement.setPoolable() behaviour
>> #7921 - Add support for Asterisk.except(Field...) and
>> QualifiedAsterisk.except(Field...)
>> #7922 - Upgrade org.checkerframework:checker dependency in jOOQ-checker
>> #7924 - Add a CompileOptions argument object to pass annotation
>> processors and other things to Reflect.compile()
>> #7947 - Let code generation patterns match also partially qualified
>> object names
>> #7948 - Use the new H2 1.4.198 INFORMATION_SCHEMA.COLUMNS.IS_VISIBLE
>> column
>> #7952 - Add SQLDataType.INSTANT
>> #7954 - Document in Javadoc that JDBCUtils.dialect() and similar methods
>> return DEFAULT, not null
>> #7956 - Deprecate DSL.groupConcat(Field<?>, String)
>> #7966 - Add Setting to turn off fetching generated keys from
>> UpdatableRecord
>> #7971 - Add delegation support to JDBC 4.3 methods in DefaultConnection
>> and similar types
>> #7974 - Add Reflect.initValue(Class)
>> #7999 - Overload AbstractTable.createField(Name, ...) methods
>> #8000 - Deprecate AbstractTable.createField(String, ...) methods
>> #8001 - Overload all date time arithmetic API with Instant arguments
>> #8004 - Handle edgecase with Kotlin boolean types
>> #8005 - Improve the manual's section about serializability to disclaim
>> any backwards compatible format
>> #8010 - Add Table.where(Condition) and overloads
>> #8022 - Support passing java.util.Date as a Field<Object> bind value
>> #8030 - Remove the unnecessary Schema.getComment() override
>> #8034 - Add DataType.isDate()
>> #8036 - Add DataType.isTime()
>> #8041 - Add support for DataType.characterSet()
>> #8061 - Add functions xyz(date) for each extract(xyz from date) datepart
>> #8074 - Support parsing nested block comments
>> #8075 - Support parsing nested block comments in plain SQL
>> #8076 - Allow for chaining DataType.asConvertedDataType(Converter) calls
>> #8077 - Add org.jooq.types.YearToSecond to support PostgreSQL mixed
>> interval values
>> #8083 - Add Interval.toDuration()
>> #8087 - Add support for overloaded functions in H2
>> #8093 - Add support for result less statements in MockFileDatabase
>> #8102 - Add RenderNameCase.LOWER_IF_UNQUOTED and UPPER_IF_UNQUOTED
>> #8103 - Add RenderQuotedNames.EXPLICIT_DEFAULT_QUOTED and
>> EXPLICIT_DEFAULT_UNQUOTED
>> #8107 - Add Name.Quoted Name.quoted()
>> #8108 - Add a CriteriaQuery vs jOOQ Example
>> #8109 - Add org.jooq.tools.jdbc.LoggingConnection
>> #8114 - [#8004] Handle edgecase for Kotlin boolean type
>> #8115 - XMLDatabase configuration properties should be in camel case for
>> consistency
>> #8124 - Support regular expressions in MockFileDatabase
>> #8126 - Add an external MockFileDatabaseConfiguration object
>> #8135 - Add support for IF statements inside of statement blocks
>> #8138 - Add indentation configuration to code generator
>> #8145 - Add an UnwrapProvider SPI that allows for unwrapping underlying
>> JDBC types through proprietary APIs
>> #8163 - Deprecate synonym keywords and use suffix underscore instead
>> #8168 - Add support for procedural blocks that do not generate BEGIN ..
>> END
>> #8174 - Add support for WHILE loops in procedural blocks
>> #8175 - Add support for LOOP in procedural blocks
>> #8176 - Add support for indexed FOR loops in procedural blocks
>> #8179 - Provide empty base implementation for QueryPartInternal.clauses()
>> #8186 - Add support for EXIT [ WHEN ] in procedural blocks
>> #8187 - Add support for CONTINUE [ WHEN ] in procedural blocks
>> #8188 - Add support for labels in procedural blocks
>> #8189 - Add support for GOTO in procedural blocks
>> #8190 - Remove private DSL.field(Row[N]) methods
>> #8206 - Add new Settings.inlineThreshold
>> #8213 - Move some DataKey values to a new BooleanDataKey enum
>> #8217 - Add an annotation for commercial only API
>> #8219 - Add additional documentation that explains
>> DefaultGeneratorStrategy's role in disambiguating names
>> #8233 - YearToSecond should be equal to YearToMonth or DayToSecond, if
>> same interval is represented
>> #8235 - Improve Sakila database example scripts
>> #8236 - Add DataType.isTimestamp()
>> #8238 - Add DSL.convert(DataType<?>, Field<?>, int) to support SQL Server
>> CONVERT() function
>> #8240 - Add a Javadoc link from all org.jooq.XYZ types to their
>> respective DSL.xyz() constructor method
>> #8247 - Add DSL.truncate(String) overload for consistency
>> #8249 - Support configuring ParamType in /translate service
>> #8255 - Add more Javadoc to common org.jooq.XYZ types
>> #8256 - DefaultExecuteContext should contain only a single ThreadLocal
>> list with resources
>> #8261 - Add trim(String, char), rtrim(String, char), ltrim(String, char)
>> #8262 - Add support for SQL Server 2017 TRIM()
>> #8264 - Expose new Settings.parseDialect in ParserCLI
>> #8275 - Improve SQLite's CEIL and FLOOR emulation
>> #8276 - Add overloads CreateTableColumnStep.columns(Name...) and
>> columns(String...)
>> #8280 - Add CTE support for SQLite
>> #8285 - Add support for REPEAT statements in procedural blocks
>> #8290 - Add Parser.parseStatement() to parse procedural code
>> #8291 - Create bug report / feature request / question issue templates
>> #8294 - Add interactive mode to ParserCLI
>> #8297 - Support inverse distribution functions in H2
>> #8298 - Support hypothetical set functions in H2
>> #8299 - Support FILTER clause on aggregate functions in H2
>> #8300 - Support MODE() and MEDIAN() in H2
>> #8302 - Emulate procedural languages in H2
>> #8308 - Support ALTER TABLE .. ADD with multiple columns in PostgreSQL
>> #8309 - Add parser support for declaring multiple variables in one
>> procedural statement
>> #8317 - Improve manual railroad diagrams for repetitions with comma
>> #8324 - Parser should ignore { CREATE | DROP } EXTENSION statement
>> #8325 - Add a special comment syntax to the Parser and DDLDatabase that
>> allows for ignoring certain statements
>> #8331 - Add DSLContext.truncateTable() as an alias for truncate()
>> #8333 - Support INSERT .. ON ( DUPLICATE KEY | CONFLICT ) in Derby
>> #8346 - Improve Javadoc on DSLContext.meta(Table...) etc.
>> #8360 - Add new MatcherTransformType.LOWER_FIRST_LETTER and
>> UPPER_FIRST_LETTER
>> #8383 - Emulate { UPDATE | DELETE } table AS alias in SQL Server
>> #8386 - Support inline constraint names in CREATE TABLE statements
>> #8390 - Add support for unmapping Iterable
>> #8391 - DSLContext.fetchFromJSON() should be able to read JSON without
>> header information
>> #8407 - Add code generation configuration flag to set
>> Connection.setAutoCommit()
>> #8409 - Add support for plain SQL CREATE VIEW statements
>> #8412 - Add DSL.neg(Field<?>) as an alias for Field.neg()
>> #8415 - Support PERCENT and WITH TIES in H2
>> #8421 - Support various DDL statements in Informix
>> #8424 - Better VALUES() emulation in Informix using TABLE(MULTISET)
>> #8430 - Ignore ON { DELETE | UPDATE } NO ACTION in dialects that do not
>> support the syntax
>> #8433 - Add support for SQLite ON CONFLICT
>> #8438 - Add support for CREATE SCHEMA in MySQL
>> #8446 - Add <sql> to <forcedType> to allow for matching columns with SQL
>> #8447 - Add <sqlMatchesPartialQualification>
>> #8451 - Add SQL parser support for PostgreSQL ILIKE
>> #8463 - Add <includeCheckConstraints/> flag to code generator
>> #8464 - Log slow result set fetching in code generator
>> #8465 - Add a new <logSlowResultsAfterSeconds/> code generation flag
>> #8471 - Add a link in the manual from simple-crud to
>> settings-return-all-on-store
>> #8477 - Support views with renamed columns in SQLite's CREATE VIEW
>> statement
>> #8479 - Emulate INSERT .. ON DUPLICATE KEY UPDATE .. WHERE on MySQL
>> #8486 - Add Settings.renderNamedParamPrefix to support dialect specific
>> named parameter placeholders
>> #8498 - Add more documentation to the RETURNING clause
>> #8504 - Remove manual from OSS repository
>> #8505 - Modules should reference managed H2 dependency
>> #8522 - Emulate the PL/SQL BOOLEAN type in SQL functions in Oracle 12c
>> #8529 - Improve documentation of INSERT ... ON CONFLICT related APIs
>> #8539 - Add alias DSL.default_() for DSL.defaultValue()
>> #8542 - Add support for LATERAL to MySQL
>> #8547 - Add SQLDialect.SQLITE_3_28 and SQLDialect.SQLITE_3_25
>> #8551 - Support old SQLDialects only in commercial distributions
>> #8552 - Add SQLDialect.supports(Collection<SQLDialect>)
>> #8556 - Support GROUP BY ROLLUP on SQL Data Warehouse
>> #8560 - Add support for calling stored functions with defaulted
>> parameters from SQL in Oracle
>> #8577 - Add synthetic [NOT] LIKE ANY and [NOT] LIKE ALL operators
>> #8579 - Support parsing the UNIQUE predicate
>> #8588 - Add support for SQLite partial indexes
>> #8590 - Add support for SQLite EXPLAIN
>> #8591 - DSL#table(Object[]) calls DSL#table(Field) with incompatible
>> @Support annotation
>> #8595 - Support more DDL for MySQL
>> #8596 - Support more DML for MySQL
>> #8600 - Emulate CREATE TABLE (...) COMMENT syntax in DB2
>> #8601 - Add code generator support for DB2 table and column comments
>> #8602 - Add support for DB2 translate
>> #8604 - Add support for DB2 multi ALTER TABLE ADD / DROP statements
>> #8616 - Add Settings.parseSearchPath
>> #8619 - Let Query subtypes extends RowCountQuery, which extends
>> Publisher<Integer>
>> #8620 - Replace Query references by RowCountQuery where appropriate
>> #8623 - Add parser support for TOP (n) in DML
>> #8639 - Improve documentation about custom syntax elements
>> #8646 - Apply Settings.fetchSize also to other statements than ResultQuery
>> #8649 - Add support for MySQL's ALTER TABLE .. DROP FOREIGN KEY syntax
>> #8650 - Add support for MySQL's ALTER TABLE .. DROP PRIMARY KEY syntax
>> #8656 - Add org.jooq.DDLExportConfiguration
>> #8657 - Add DDLExportConfiguration.createSchemaIfNotExists and
>> createTableIfNotExists flags
>> #8658 - Improve manual's parser grammar and make better reuse of keywords
>> in DDL
>> #8660 - Add support for synthetic ALTER TABLE .. DROP PRIMARY KEY <name>
>> syntax
>> #8671 - Some @Support annotations have duplicated dialects
>> #8674 - Complete parser test suite with tests for all supported built-in
>> functions
>> #8675 - Parse CONNECT_BY_ROOT expressions
>> #8678 - Enable Settings.parseUnknownFunctions in DDLDatabase
>> #8685 - Avoid generating unnecessary {@inheritDoc}
>> #8689 - Generate LN function in H2, instead of LOG
>> #8693 - Add support for generation of comments on HSQLDB schema objects
>> #8695 - Use Configuration#family() convenience
>> #8696 - Use SQL Server 2012's LOG() with base parameter
>> #8703 - Add DSL#log(Field, Field) overload
>> #8704 - Add support for MERGE in Vertica
>> #8710 - Add support for generating comments on tables in Vertica
>> #8716 - Support DSL#md5() for SQL Server
>> #8724 - Add UpdateSetStep.setNull(Field<?>) for convenience
>> #8728 - Parser cannot handle double quoted string literals in dialects
>> that support them
>> #8735 - Support DSL#offset[Date]Time() and DSL#instant() for SQLite
>> #8736 - Avoid catching NumberFormatException when parsing potential
>> numbers
>> #8739 - H2: Support ALTER SCHEMA
>> #8742 - H2: Support DROP SCHEMA ... [CASCADE | RESTRICT]
>> #8744 - H2: Support INSERT ... ON CONFLICT DO UPDATE
>> #8745 - Add Guava to the documented list of shaded dependencies
>> #8746 - Add
>> Settings.(execute|record|transaction|visit)Listener(Start|End)InvocationOrder
>> to support REVERSE ordering on end() events
>> #8751 - Improve rendering performance of SQL templates
>> #8753 - Add additional Context.sql(long), sql(float), sql(double)
>> #8754 - Avoid using plain SQL templating, internally
>> #8759 - Add support for SET SCHEMA in Teradata
>> #8764 - Add comments in old manual versions about the jooq-meta and
>> jooq-codegen package renames
>> #8766 - Add missing dialects to DSLContext#mergeInto(Table)
>> #8767 - Complete @Support annotation on DSL#alterView() to include `DB2`
>> and `FIREBIRD`
>> #8768 - Complete @Support annotation on DSL#alterIndexIfExists() to
>> include SQLDATAWAREHOUSE and TERADATA
>> #8769 - Methods on TableOuterJoinStep should for now only support ORACLE
>> #8770 - Align @Support annotations of SelectLimitAfterOffsetStep#limit()
>> methods
>> #8771 - Add LIMIT ... OFFSET ... WITH TIES support for Redshift
>> #8772 - Fix @Support annotations of CreateIndexIncludeStep
>> #8774 - Remove SQLITE from @Support annotations on AlterTableAlterStep
>> #8780 - SQL Server: Support AlterIndexStep#renameTo()
>> #8781 - Improve error message when org.jooq.util class cannot be found in
>> code generator configuration
>> #8782 - WindowRowsAndStep methods should declare VERTICA support
>> #8783 - MergeNotMatchedSetStep methods should declare VERTICA support
>> #8784 - MergeValuesStepN methods should declare MARIADB and AURORA_MYSQL
>> support
>> #8789 - Add support for parsing MySQL numeric interval literals
>> #8793 - Add missing dialects to MergeValuesStepN#values()
>> #8794 - Add missing dialects to OrderedAggregateFunction
>> #8795 - Support AlterTableAlterStep#set() with SQLDATAWAREHOUSE
>> #8796 - Implement InsertOnDuplicateSetStep#set() for FIREBIRD_3_0
>> #8797 - Add Javadoc to StopWatchListener explaining that it should be
>> wrapped in an ExecuteListenerProvider
>> #8803 - Improve performance of StringUtils#replace()
>> #8825 - Add support for additional DB2 and SQLDATAWAREHOUSE DateParts
>> #8827 - SQLServerDatabase should read tables also from sys.all_objects
>> #8833 - Oracle: Support DatePart WEEK
>> #8837 - Add missing @Support annotations to Operator enum
>> #8850 - Informix: Support LikeEscapeStep#escape()
>> #8852 - Support parsing empty IN lists
>> #8853 - Add support for [NOT] LIKE ANY (subquery) and [NOT] LIKE ALL
>> (subquery)
>> #8854 - Add more internal type safety by making Tools.fields() methods
>> generic
>> #8856 - Generate empty IN lists in SQL for H2 and SQLite
>> #8857 - Spring Boot example should reference custom jOOQ version
>> #8863 - Use imported class name in Tables.java to dereference singleton
>> table instance
>> #8867 - Add SQLDialect.supported()
>> #8883 - Use noCondition() in fetchXYZ(Table), fetchXYZ(Table, Condition)
>> overloads
>> #8887 - Add SQLDataType.DECIMAL_INTEGER(int) as a shortcut for
>> DataType.precision(int)
>> #8889 - Upgrade scala 2.12 dependency to 2.12.8
>> #8899 - Implement specialised emulation for Oracle single row INSERT ..
>> RETURNING with expressions
>> #8900 - Release 3.12: Make current master branch Java 6 compatible
>> #8903 - Add Support annotations to DataType methods
>> #8905 - GeneratorWriter should check the file size prior to opening
>> existing files to compare contents
>> #8909 - Upgrade jOOR dependency to 0.9.12
>> #8912 - Add reference to noCondition(), trueCondition(), and
>> falseCondition()
>> #8914 - Always use MiniJAXB
>> #8918 - MiniJAXB should warn about unknown XML elements
>> #8919 - MiniJAXB#marshal() should output formatted XML
>> #8920 - Implement UPDATE / DELETE .. RETURNING in SQL Server using OUTPUT
>> #8924 - Add Settings.updateRecordVersion and
>> Settings.updateRecordTimestamp
>> #8925 - Add DAO.fetchRangeOf(Field<Z>, Z, Z)
>> #8932 - Use diamond operat
>>
>> ...
>
> --
> You received this message because you are subscribed to the Google Groups
> "jOOQ User Group" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to jooq-user+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/jooq-user/f098db1e-0bed-4133-b150-f11372684f6e%40googlegroups.com
> <https://groups.google.com/d/msgid/jooq-user/f098db1e-0bed-4133-b150-f11372684f6e%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to jooq-user+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jooq-user/CAB4ELO5QdGNR7hFZHk1mBbPEVU_FBZq3X_ii--C4fF6oG54VBA%40mail.gmail.com.

Reply via email to