From 740f8f84fe114217d4bf24414bb16acd89888fc8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 5 Apr 2013 13:30:54 +0200 Subject: [PATCH] [#2374] INSERT .. RETURNING always returns null for dynamically created tables - Added an integration test --- .../test/_/testcases/InsertUpdateTests.java | 60 ++++++++++++++----- .../src/org/jooq/test/jOOQAbstractTest.java | 5 ++ 2 files changed, 50 insertions(+), 15 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java index 5ebe75176f..8f4e81c7b8 100644 --- a/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java +++ b/jOOQ-test/src/org/jooq/test/_/testcases/InsertUpdateTests.java @@ -57,11 +57,13 @@ import static org.jooq.impl.Factory.castNull; import static org.jooq.impl.Factory.count; import static org.jooq.impl.Factory.decode; import static org.jooq.impl.Factory.falseCondition; +import static org.jooq.impl.Factory.fieldByName; import static org.jooq.impl.Factory.inline; import static org.jooq.impl.Factory.max; import static org.jooq.impl.Factory.row; import static org.jooq.impl.Factory.select; import static org.jooq.impl.Factory.selectOne; +import static org.jooq.impl.Factory.tableByName; import static org.jooq.impl.Factory.trueCondition; import static org.jooq.impl.Factory.val; @@ -74,6 +76,7 @@ import org.jooq.Field; import org.jooq.Insert; import org.jooq.InsertQuery; import org.jooq.MergeFinalStep; +import org.jooq.Record; import org.jooq.Record1; import org.jooq.Record2; import org.jooq.Record3; @@ -566,26 +569,14 @@ extends BaseTest query; + // Create a dummy record, generating the original ID + int ID = testInsertReturningCreateDummyRecord(); - int ID = 0; - - // Without RETURNING clause - query = create().insertQuery(TTriggers()); - query.addValue(TTriggers_ID(), null); - query.addValue(TTriggers_COUNTER(), 0); - assertEquals(1, query.execute()); - assertNull(query.getReturnedRecord()); - - // Check if the trigger works correctly - assertEquals(1, create().selectFrom(TTriggers()).fetch().size()); - - // Other test cases may have influenced this value - ID = create().selectFrom(TTriggers()).fetchOne(TTriggers_ID_GENERATED()); assertEquals( ID, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_ID())); assertEquals(2*ID, (int) create().selectFrom(TTriggers()).fetchOne(TTriggers_COUNTER())); // Returning all fields + InsertQuery query; query = create().insertQuery(TTriggers()); query.addValue(TTriggers_COUNTER(), null); query.addValue(TTriggers_COUNTER(), 0); @@ -698,6 +689,45 @@ extends BaseTest query; + + // Without RETURNING clause + query = create().insertQuery(TTriggers()); + query.addValue(TTriggers_ID(), null); + query.addValue(TTriggers_COUNTER(), 0); + assertEquals(1, query.execute()); + assertNull(query.getReturnedRecord()); + + // Check if the trigger works correctly + assertEquals(1, create().selectFrom(TTriggers()).fetch().size()); + + // Other test cases may have influenced this value + return create().selectFrom(TTriggers()).fetchOne(TTriggers_ID_GENERATED()); + } + + @Test + public void testInsertReturningWithPlainSQL() throws Exception { + if (TTriggers() == null) { + log.info("SKIPPING", "INSERT RETURNING tests"); + return; + } + + jOOQAbstractTest.reset = false; + + // Create a dummy record, generating the original ID + int ID = testInsertReturningCreateDummyRecord(); + + Record returned = create() + .insertInto(tableByName(TTriggers().getName())) + .set(fieldByName(TTriggers_COUNTER().getName()), 0) + .returning(fieldByName(TTriggers_ID_GENERATED().getName())) + .fetchOne(); + + assertNotNull(returned); + assertEquals(++ID, (int) returned.getValue(0, int.class)); + } + @Test public void testUpdateReturning() throws Exception { switch (getDialect()) { diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index 3ff4d74aa8..155ed34c69 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -1475,6 +1475,11 @@ public abstract class jOOQAbstractTest< new InsertUpdateTests(this).testInsertReturning(); } + @Test + public void testInsertReturningWithPlainSQL() throws Exception { + new InsertUpdateTests(this).testInsertReturningWithPlainSQL(); + } + @Test public void testUpdateReturning() throws Exception { new InsertUpdateTests(this).testUpdateReturning();