From 91c4eca528dafddcbc26175c0319b614952ae0fd Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Tue, 12 Jun 2018 22:08:17 +1200 Subject: [PATCH] #1419 - Refactor - saveAll() and deleteAll() ... when collections are empty skip transaction init check --- .../server/core/DefaultServer.java | 33 ++++++++++--------- .../io/ebean/EbeanServer_saveAllTest.java | 20 +++++++++++ 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index 779cb3982..3032a343d 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -1734,7 +1734,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (beans == null || beans.isEmpty()) { return; } - executeInTrans((txn) -> { for (Object bean : beans) { update(checkEntityBean(bean), txn); @@ -1776,7 +1775,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { if (beans == null || beans.isEmpty()) { return; } - executeInTrans((txn) -> { for (Object bean : beans) { persister.insert(checkEntityBean(bean), txn); @@ -1845,24 +1843,27 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int saveAll(Collection beans, Transaction transaction) throws OptimisticLockException { - return saveAllInternal(beans.iterator(), transaction); + return saveAllInternal(beans, transaction); } @Override public int saveAll(Collection beans) throws OptimisticLockException { - return saveAllInternal(beans.iterator(), null); + return saveAllInternal(beans, null); } /** * Save all beans in the iterator with an explicit transaction. */ - private int saveAllInternal(Iterator it, Transaction transaction) { + private int saveAllInternal(Collection beans, Transaction transaction) { + if (beans == null || beans.isEmpty()) { + return 0; + } return executeInTrans((txn) -> { txn.checkBatchEscalationOnCollection(); int saveCount = 0; - while (it.hasNext()) { - persister.save(checkEntityBean(it.next()), txn); + for (Object bean : beans) { + persister.save(checkEntityBean(bean), txn); saveCount++; } @@ -1950,12 +1951,12 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Override public int deleteAllPermanent(Collection beans) { - return deleteAllInternal(beans.iterator(), null, true); + return deleteAllInternal(beans, null, true); } @Override public int deleteAllPermanent(Collection beans, Transaction t) { - return deleteAllInternal(beans.iterator(), t, true); + return deleteAllInternal(beans, t, true); } /** @@ -1963,7 +1964,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public int deleteAll(Collection beans) { - return deleteAllInternal(beans.iterator(), null, false); + return deleteAllInternal(beans, null, false); } /** @@ -1971,21 +1972,23 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ @Override public int deleteAll(Collection beans, Transaction t) { - return deleteAllInternal(beans.iterator(), t, false); + return deleteAllInternal(beans, t, false); } /** * Delete all the beans in the iterator with an explicit transaction. */ - private int deleteAllInternal(Iterator it, Transaction transaction, boolean permanent) { + private int deleteAllInternal(Collection beans, Transaction transaction, boolean permanent) { + if (beans == null || beans.isEmpty()) { + return 0; + } return executeInTrans((txn) -> { txn.checkBatchEscalationOnCollection(); int deleteCount = 0; - while (it.hasNext()) { - EntityBean bean = checkEntityBean(it.next()); - persister.delete(bean, txn, permanent); + for (Object bean : beans) { + persister.delete(checkEntityBean(bean), txn, permanent); deleteCount++; } diff --git a/src/test/java/io/ebean/EbeanServer_saveAllTest.java b/src/test/java/io/ebean/EbeanServer_saveAllTest.java index 69bc95753..53a3b4ccb 100644 --- a/src/test/java/io/ebean/EbeanServer_saveAllTest.java +++ b/src/test/java/io/ebean/EbeanServer_saveAllTest.java @@ -94,6 +94,26 @@ public class EbeanServer_saveAllTest extends BaseTestCase { } + @Test + public void deleteAll_withNull() { + Ebean.deleteAll(null); + } + + @Test + public void deleteAll_withEmpty() { + Ebean.saveAll(beans(0)); + } + + @Test + public void saveAll_withNull() { + Ebean.saveAll(null); + } + + @Test + public void saveAll_withEmpty() { + Ebean.saveAll(beans(0)); + } + @Test public void saveAll_withTransaction() {