From 84d3578e33e16e4f6200d8a93f58bbab34727bc0 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Sat, 9 Sep 2017 14:14:57 +1200 Subject: [PATCH] No effective change - add a test for saveAll() with existing batch mode on Assert that it does not flush the batch. We want the batch to continue and flush normally. --- .../io/ebean/EbeanServer_saveAllTest.java | 39 +++++++++++++++++++ .../org/ebeantest/LoggedSqlCollector.java | 13 +++++++ 2 files changed, 52 insertions(+) diff --git a/src/test/java/io/ebean/EbeanServer_saveAllTest.java b/src/test/java/io/ebean/EbeanServer_saveAllTest.java index 6d98ac47d..eca4bd7a0 100644 --- a/src/test/java/io/ebean/EbeanServer_saveAllTest.java +++ b/src/test/java/io/ebean/EbeanServer_saveAllTest.java @@ -53,6 +53,45 @@ public class EbeanServer_saveAllTest extends BaseTestCase { } + @Test + public void saveAll_withExistingBatch_doesNotTriggerFlush() { + + EbeanServer server = Ebean.getDefaultServer(); + + Transaction transaction = server.beginTransaction(); + transaction.setBatch(PersistBatch.ALL); + try { + LoggedSqlCollector.start(); + + for (EBasicVer bean : beans(2)) { + server.save(bean); + } + + // jdbc batch, no sql yet + assertThat(LoggedSqlCollector.current()).isEmpty(); + + server.saveAll(beans(3)); + + // still batch, no sql yet + assertThat(LoggedSqlCollector.current()).isEmpty(); + + for (EBasicVer bean : beans(2)) { + server.save(bean); + } + // still batch, no sql yet + assertThat(LoggedSqlCollector.current()).isEmpty(); + + // flush now + transaction.commit(); + + // and we have our SQL from jdbc batch flush + assertThat(LoggedSqlCollector.stop()).isNotEmpty(); + + } finally { + transaction.end(); + } + + } @Test public void saveAll_withTransaction() { diff --git a/src/test/java/org/ebeantest/LoggedSqlCollector.java b/src/test/java/org/ebeantest/LoggedSqlCollector.java index 9825a55b0..a3d50127b 100644 --- a/src/test/java/org/ebeantest/LoggedSqlCollector.java +++ b/src/test/java/org/ebeantest/LoggedSqlCollector.java @@ -52,6 +52,10 @@ public class LoggedSqlCollector { return basicAppender.collectEnd(); } + public static List current() { + return basicAppender.collectContinue(); + } + private static class BasicAppender extends UnsynchronizedAppenderBase { List messages = new ArrayList<>(); @@ -85,5 +89,14 @@ public class LoggedSqlCollector { return tempMessages; } + /** + * Return the collected SQL and continue. + */ + List collectContinue() { + List tempMessages = messages; + messages = new ArrayList<>(); + return tempMessages; + } + } }