From a64d56ee92e87f59a8cfa422fe36d167e0497fc4 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 28 Nov 2023 10:59:44 +0100 Subject: [PATCH] [jOOQ/jOOQ#15876] Internal RecordDataType.getDataType() should be non-nullable for records consisting of all non-null fields --- jOOQ/src/main/java/org/jooq/impl/RecordDataType.java | 8 +++++++- jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java | 7 ++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/RecordDataType.java b/jOOQ/src/main/java/org/jooq/impl/RecordDataType.java index fd534be0c5..e452e82d3f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RecordDataType.java +++ b/jOOQ/src/main/java/org/jooq/impl/RecordDataType.java @@ -73,11 +73,17 @@ final class RecordDataType extends DefaultDataType { @SuppressWarnings("unchecked") RecordDataType(Row row, Class recordType, String name) { - super(null, recordType, name, name); + super(null, recordType, name, nullability(row)); this.row = (AbstractRow) row; } + static final Nullability nullability(Row row) { + return Tools.anyMatch(row.fields(), f -> f.getDataType().nullable()) + ? Nullability.NULL + : Nullability.NOT_NULL; + } + /** * [#3225] Performant constructor for creating derived types. */ diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java index 19eea78015..5594201708 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -59,11 +59,13 @@ import static org.jooq.impl.RecordDelegate.RecordLifecycleType.REFRESH; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.STORE; import static org.jooq.impl.RecordDelegate.RecordLifecycleType.UPDATE; import static org.jooq.impl.Tools.EMPTY_FIELD; +import static org.jooq.impl.Tools.EMPTY_TABLE_FIELD; import static org.jooq.impl.Tools.settings; import java.math.BigInteger; import java.sql.Timestamp; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -133,7 +135,10 @@ public class UpdatableRecordImpl> extends TableReco @Override final UniqueKey getPrimaryKey() { - return getTable().getPrimaryKey(); + if (getTable() instanceof AbstractTable t) + return t.getPrimaryKeyWithEmbeddables(); + else + return getTable().getPrimaryKey(); } @Override