From 55aeb5538754e143921e550a09ccc15550b7357e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 2 Dec 2024 09:29:42 +0100 Subject: [PATCH] [jOOQ/jOOQ#17708] Wrong SQL syntax generated for empty inserts of fetched records without any touched values --- jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java index 189699c28f..aa95643eae 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java @@ -183,7 +183,12 @@ implements InsertQuery insert = create.insertQuery(getTable()); List> changedFields = addTouchedValues(storeFields, insert, false); - if (changedFields.isEmpty()) { + // [#1596] Set timestamp and/or version columns to appropriate values + BigInteger version = addRecordVersion(insert, false); + Timestamp timestamp = addRecordTimestamp(insert, false); + + // [#17708] DEFAULT VALUES applies only if we're not generating timestamp and/or version values! + if (changedFields.isEmpty() && version == null && timestamp == null) { // Don't store records if no value was set by client code if (FALSE.equals(create.settings().isInsertUnchangedRecords())) { @@ -197,10 +202,6 @@ implements insert.setDefaultValues(); } - // [#1596] Set timestamp and/or version columns to appropriate values - BigInteger version = addRecordVersion(insert, false); - Timestamp timestamp = addRecordTimestamp(insert, false); - // [#814] Refresh identity and/or main unique key values // [#1002] Consider also identity columns of non-updatable records // [#1537] Avoid refreshing identity columns on batch inserts