From e57ce7a6c4ea2eb09ec5a4f3f7af3a0db71ec720 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 22 Mar 2016 10:35:20 +1300 Subject: [PATCH] #611 - findRowCount ignores @SoftDelete, does not add predicate --- .../server/query/CQueryBuilder.java | 4 +++ .../server/querydefn/DefaultOrmQuery.java | 5 +--- .../tests/softdelete/TestSoftDeleteBasic.java | 26 ++++++++++++++++++- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryBuilder.java b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryBuilder.java index da774c79a..06a08486c 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/CQueryBuilder.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/CQueryBuilder.java @@ -234,6 +234,10 @@ public class CQueryBuilder { predicates.prepare(true); SqlTree sqlTree = createSqlTree(request, predicates, getHistorySupport(query), getDraftSupport(query)); + if (SpiQuery.TemporalMode.CURRENT == query.getTemporalMode()) { + sqlTree.addSoftDeletePredicate(query); + } + SqlLimitResponse s = buildSql(sqlSelect, request, predicates, sqlTree); String sql = s.getSql(); if (hasMany || query.isRawSql()) { diff --git a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java index b646f4d56..5165329dc 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/src/main/java/com/avaje/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -600,10 +600,7 @@ public class DefaultOrmQuery implements SpiQuery { if (detail != null) { copy.detail = detail.copy(); } - if (temporalMode == TemporalMode.DRAFT) { - copy.temporalMode = TemporalMode.DRAFT; - } - + copy.temporalMode = temporalMode; copy.firstRow = firstRow; copy.maxRows = maxRows; copy.rawWhereClause = rawWhereClause; diff --git a/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java b/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java index 719b986ad..402499171 100644 --- a/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java +++ b/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java @@ -44,13 +44,37 @@ public class TestSoftDeleteBasic extends BaseTestCase { } @Test - public void testDeleteById() { + public void testDeleteById_and_findRowCount() { EBasicSoftDelete bean = new EBasicSoftDelete(); bean.setName("two"); Ebean.save(bean); + int rowCountBefore = Ebean.find(EBasicSoftDelete.class).findRowCount(); + Ebean.delete(EBasicSoftDelete.class, bean.getId()); + + + // -- test .findRowCount() + + LoggedSqlCollector.start(); + int rowCountAfter = Ebean.find(EBasicSoftDelete.class).findRowCount(); + + List loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(1); + assertThat(loggedSql.get(0)).contains("where coalesce(t0.deleted,false)=false"); + + assertThat(rowCountAfter).isEqualTo(rowCountBefore - 1); + + // -- test includeSoftDeletes().findRowCount() + + LoggedSqlCollector.start(); + int rowCountFull = Ebean.find(EBasicSoftDelete.class).includeSoftDeletes().findRowCount(); + assertThat(rowCountFull).isGreaterThan(rowCountAfter); + + loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(1); + assertThat(loggedSql.get(0)).doesNotContain("where coalesce(t0.deleted,false)=false"); } @Test