From 2936124b630832b2d4bc6ae2a6dd9ff1771806bd Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 18 Dec 2011 18:31:56 +0000 Subject: [PATCH] [#1002] TableRecord.storeUsing() doesn't update IDENTITY column values, if the column is not part of the main unique key --- .../src/org/jooq/test/jOOQAbstractTest.java | 5 ++--- .../java/org/jooq/impl/TableRecordImpl.java | 19 ++++++++++++++----- .../org/jooq/impl/UpdatableRecordImpl.java | 18 ++++-------------- 3 files changed, 20 insertions(+), 22 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 35431c4b36..cf750ade83 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -765,9 +765,8 @@ public abstract class jOOQAbstractTest< } // TODO [#1002] Fix this - // R r5 = create().fetchOne(table, id.equal(5)); - // assertEquals(r5, r4); - + R r5 = create().fetchOne(table, id.equal(5)); + assertEquals(r5, r4); } } diff --git a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java index 84c0c3e726..287e83fba3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java @@ -35,12 +35,13 @@ */ package org.jooq.impl; -import java.util.Collections; -import java.util.List; +import java.util.Collection; +import java.util.LinkedHashSet; import org.jooq.ConditionProvider; import org.jooq.DeleteQuery; import org.jooq.Field; +import org.jooq.Identity; import org.jooq.InsertQuery; import org.jooq.SimpleSelectQuery; import org.jooq.StoreQuery; @@ -121,7 +122,8 @@ public class TableRecordImpl> extends TypeRecord> key = getKey(); + // [#1002] Consider also identity columns of non-updatable records + Collection> key = getReturning(); insert.setReturning(key); int result = insert.execute(); @@ -140,8 +142,15 @@ public class TableRecordImpl> extends TypeRecord> getKey() { - return Collections.emptyList(); + Collection> getReturning() { + Collection> result = new LinkedHashSet>(); + + Identity identity = getTable().getIdentity(); + if (identity != null) { + result.add(identity.getField()); + } + + return result; } @SuppressWarnings("unchecked") diff --git a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java index 6dd6cf5dbb..aa6df5deb1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -35,13 +35,9 @@ */ package org.jooq.impl; -import java.util.ArrayList; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Set; +import java.util.Collection; import org.jooq.Field; -import org.jooq.Identity; import org.jooq.Record; import org.jooq.UniqueKey; import org.jooq.UpdatableRecord; @@ -91,16 +87,10 @@ public class UpdatableRecordImpl> extends TableReco } @Override - List> getKey() { - Set> result = new LinkedHashSet>(); - - Identity identity = getTable().getIdentity(); - if (identity != null) { - result.add(identity.getField()); - } - + Collection> getReturning() { + Collection> result = super.getReturning(); result.addAll(getMainKey().getFields()); - return new ArrayList>(result); + return result; } @Override