From 834b42ffe36e9863ee1fc885bb3a265ba7e1b016 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 15 Oct 2024 10:09:36 +0200 Subject: [PATCH] [jOOQ/jOOQ#17433] Cannot call Record.reset(Field), Record.original(Field), Record.changed(Field), Record.touched(Field), Record.modified(Field) with embeddable field arguments --- .../java/org/jooq/impl/AbstractRecord.java | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java index 3d5d7fe417..7853608bec 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRecord.java @@ -43,11 +43,13 @@ import static java.util.Collections.emptyList; import static org.jooq.ContextConverter.scoped; import static org.jooq.conf.SettingsTools.updatablePrimaryKeys; import static org.jooq.impl.Tools.EMPTY_FIELD; +import static org.jooq.impl.Tools.anyMatch; import static org.jooq.impl.Tools.converterOrFail; import static org.jooq.impl.Tools.converterContext; import static org.jooq.impl.Tools.embeddedFields; import static org.jooq.impl.Tools.indexFail; import static org.jooq.impl.Tools.indexOrFail; +import static org.jooq.impl.Tools.nonReplacingEmbeddable; import static org.jooq.impl.Tools.settings; import java.io.Writer; @@ -204,7 +206,7 @@ implements if (index >= 0) return (T) get(index); - else if (Tools.nonReplacingEmbeddable(field)) + else if (nonReplacingEmbeddable(field)) return (T) Tools .newRecord(fetched, ((EmbeddableTableField) field).recordType) .operate(new TransferRecordState<>(embeddedFields(field))); @@ -294,7 +296,7 @@ implements final void set(Field field, int index, T value) { if (index >= 0) set(index, field, value); - else if (Tools.nonReplacingEmbeddable(field)) { + else if (nonReplacingEmbeddable(field)) { Field[] f = embeddedFields(field); Object[] v = value instanceof EmbeddableRecord e ? e.intoArray() @@ -411,7 +413,16 @@ implements @Override public final T original(Field field) { - return (T) original(indexOrFail(fields, field)); + int index = fields.indexOf(field); + + if (index >= 0) + return (T) original(index); + else if (nonReplacingEmbeddable(field)) + return (T) Tools + .newRecord(fetched, ((EmbeddableTableField) field).recordType) + .operate(((AbstractRecord) original()).new TransferRecordState<>(embeddedFields(field))); + else + throw Tools.indexFail(fields, field); } @Override @@ -496,7 +507,14 @@ implements @Override public final boolean touched(Field field) { - return touched(indexOrFail(fields, field)); + int index = fields.indexOf(field); + + if (index >= 0) + return touched(index); + else if (nonReplacingEmbeddable(field)) + return anyMatch(embeddedFields(field), f -> touched(f)); + else + throw Tools.indexFail(fields, field); } @Override @@ -526,7 +544,15 @@ implements @Override public final void touched(Field field, boolean c) { - touched(indexOrFail(fields, field), c); + int index = fields.indexOf(field); + + if (index >= 0) + touched(index, c); + else if (nonReplacingEmbeddable(field)) + for (Field f : embeddedFields(field)) + touched(f, c); + else + throw Tools.indexFail(fields, field); } @Override @@ -563,7 +589,14 @@ implements @Override public final boolean modified(Field field) { - return modified(indexOrFail(fields, field)); + int index = fields.indexOf(field); + + if (index >= 0) + return modified(index); + else if (nonReplacingEmbeddable(field)) + return anyMatch(embeddedFields(field), f -> modified(f)); + else + throw Tools.indexFail(fields, field); } @Override @@ -591,7 +624,15 @@ implements @Override public final void reset(Field field) { - reset(indexOrFail(fields, field)); + int index = fields.indexOf(field); + + if (index >= 0) + reset(index); + else if (nonReplacingEmbeddable(field)) + for (Field f : embeddedFields(field)) + reset(f); + else + throw Tools.indexFail(fields, field); } @Override