diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 27c5a9b6d6..8d1ba8da7a 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -3576,8 +3576,13 @@ public abstract class jOOQAbstractTest< return; } + // Non-DSL querying + // ---------------- + InsertQuery query; + int ID = 0; + // Without RETURNING clause query = create().insertQuery(TTriggers()); query.addValue(TTriggers_COUNTER(), 0); @@ -3586,8 +3591,8 @@ public abstract class jOOQAbstractTest< // Check if the trigger works correctly assertEquals(1, create().selectFrom(TTriggers()).fetch().size()); - assertEquals(1, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_ID())); - assertEquals(2, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_COUNTER())); + assertEquals(++ID, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_ID())); + assertEquals(2*ID, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_COUNTER())); // Returning all fields query = create().insertQuery(TTriggers()); @@ -3595,8 +3600,8 @@ public abstract class jOOQAbstractTest< query.setReturning(); assertEquals(1, query.execute()); assertNotNull(query.getReturned()); - assertEquals(2, (int) query.getReturned().getValue(TTriggers_ID())); - assertEquals(4, (int) query.getReturned().getValue(TTriggers_COUNTER())); + assertEquals(++ID, (int) query.getReturned().getValue(TTriggers_ID())); + assertEquals(2*ID, (int) query.getReturned().getValue(TTriggers_COUNTER())); // Returning only the ID field query = create().insertQuery(TTriggers()); @@ -3604,11 +3609,23 @@ public abstract class jOOQAbstractTest< query.setReturning(TTriggers_ID()); assertEquals(1, query.execute()); assertNotNull(query.getReturned()); - assertEquals(3, (int) query.getReturned().getValue(TTriggers_ID())); + assertEquals(++ID, (int) query.getReturned().getValue(TTriggers_ID())); assertNull(query.getReturned().getValue(TTriggers_COUNTER())); query.getReturned().refresh(); - assertEquals(6, (int) query.getReturned().getValue(TTriggers_COUNTER())); + assertEquals(2*ID, (int) query.getReturned().getValue(TTriggers_COUNTER())); + + // TODO [#813] DSL querying + // ------------------------ + + // store() and similar methods + T triggered = create().newRecord(TTriggers()); + triggered.setValue(TTriggers_COUNTER(), 0); + assertEquals(1, triggered.store()); + assertEquals(++ID, (int) triggered.getValue(TTriggers_ID())); + assertEquals(0, (int) triggered.getValue(TTriggers_COUNTER())); + triggered.refresh(); + assertEquals(2*ID, (int) triggered.getValue(TTriggers_COUNTER())); } @Test diff --git a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java index 0c00148a74..0447c928a7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableRecordImpl.java @@ -36,12 +36,13 @@ package org.jooq.impl; import java.sql.SQLException; +import java.util.Collections; +import java.util.List; import org.jooq.ConditionProvider; import org.jooq.Configuration; import org.jooq.DeleteQuery; import org.jooq.Field; -import org.jooq.Identity; import org.jooq.InsertQuery; import org.jooq.SimpleSelectQuery; import org.jooq.StoreQuery; @@ -130,20 +131,17 @@ public class TableRecordImpl> extends TypeRecord identity = identity(); - insert.setReturning(identity); + // [#814] Refresh identity and/or main unique key values + List> key = getKey(); + insert.setReturning(key); int result = insert.execute(); // If an insert was successful try fetching the generated IDENTITY value - if (identity != null && result > 0) { + if (!key.isEmpty() && result > 0) { if (insert.getReturned() != null) { - setValue0(identity.getField(), new Value(insert.getReturned().getValue(identity.getField()))); - } - else { - setValue0(identity.getField(), new Value(create().lastID(identity))); + for (Field field : key) { + setValue0(field, new Value(insert.getReturned().getValue(field))); + } } } @@ -153,8 +151,8 @@ public class TableRecordImpl> extends TypeRecord identity() { - return null; + List> getKey() { + return Collections.emptyList(); } @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 1b11dca0df..f3b568818a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/UpdatableRecordImpl.java @@ -36,6 +36,10 @@ package org.jooq.impl; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; import org.jooq.Configuration; import org.jooq.Field; @@ -110,8 +114,16 @@ public class UpdatableRecordImpl> extends TableRecordIm } @Override - final Identity identity() { - return getTable().getIdentity(); + List> getKey() { + Set> result = new LinkedHashSet>(); + + Identity identity = getTable().getIdentity(); + if (identity != null) { + result.add(identity.getField()); + } + + result.addAll(getMainKey().getFields()); + return new ArrayList>(result); } @Override