diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java index 91be1e4d8..780c574e9 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java @@ -334,7 +334,7 @@ public class BeanProperty implements ElPropertyValue, Property { if (softDelete) { ScalarTypeBoolean.BooleanBase boolType = (ScalarTypeBoolean.BooleanBase) scalarType; this.softDeleteDbSet = dbColumn + "=" + boolType.getDbTrueLiteral(); - this.softDeleteDbPredicate = "." + dbColumn + "," + boolType.getDbFalseLiteral() + ")=" + boolType.getDbFalseLiteral(); + this.softDeleteDbPredicate = "." + dbColumn + " = " + boolType.getDbFalseLiteral(); } else { this.softDeleteDbSet = null; this.softDeleteDbPredicate = null; @@ -682,8 +682,7 @@ public class BeanProperty implements ElPropertyValue, Property { * Return the DB literal predicate used to filter out soft deleted rows from a query. */ public String getSoftDeleteDbPredicate(String tableAlias) { - // use coalesce to handle null values from optional relationships - return "coalesce(" + tableAlias + softDeleteDbPredicate; + return tableAlias + softDeleteDbPredicate; } /** diff --git a/src/test/java/com/avaje/tests/query/softdelete/TestSoftDeletePagingList.java b/src/test/java/com/avaje/tests/query/softdelete/TestSoftDeletePagingList.java index 2428bf0dd..6db1ac359 100644 --- a/src/test/java/com/avaje/tests/query/softdelete/TestSoftDeletePagingList.java +++ b/src/test/java/com/avaje/tests/query/softdelete/TestSoftDeletePagingList.java @@ -43,16 +43,16 @@ public class TestSoftDeletePagingList extends BaseTestCase { assertThat(sql).hasSize(2); assertThat(sql.get(0)).contains("select count(*) from cover t0 where t0.s3url like"); if (isPlatformBooleanNative()) { - assertThat(sql.get(0)).contains("and coalesce(t0.deleted,false)=false; --bind(SoftDelPaged-%)"); + assertThat(sql.get(0)).contains("and t0.deleted = false; --bind(SoftDelPaged-%)"); } else { - assertThat(sql.get(0)).contains("and coalesce(t0.deleted,0)=0; --bind(SoftDelPaged-%)"); + assertThat(sql.get(0)).contains("and t0.deleted = 0; --bind(SoftDelPaged-%)"); } assertThat(sql.get(1)).contains("where t0.s3url like "); if (isPlatformBooleanNative()) { - assertThat(sql.get(1)).contains("and coalesce(t0.deleted,false)=false order by t0.id"); + assertThat(sql.get(1)).contains("and t0.deleted = false order by t0.id"); } else { - assertThat(sql.get(1)).contains("and coalesce(t0.deleted,0)=0 order by t0.id"); + assertThat(sql.get(1)).contains("and t0.deleted = 0 order by t0.id"); } } } diff --git a/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java b/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java index 2d4f017a3..0f83b0ab7 100644 --- a/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java +++ b/src/test/java/com/avaje/tests/softdelete/TestSoftDeleteBasic.java @@ -84,8 +84,7 @@ public class TestSoftDeleteBasic extends BaseTestCase { List loggedSql = LoggedSqlCollector.stop(); assertThat(loggedSql).hasSize(1); - // usually where coalesce(t0.deleted,false)=false but false is 0 for Oracle etc - assertThat(loggedSql.get(0)).contains("where coalesce(t0.deleted,"); + assertThat(loggedSql.get(0)).contains("where t0.deleted ="); assertThat(rowCountAfter).isEqualTo(rowCountBefore - 1); @@ -182,8 +181,8 @@ public class TestSoftDeleteBasic extends BaseTestCase { String generatedSql = query1.getGeneratedSql(); // first statement is a single bulk update of the children with SoftDelete - assertThat(generatedSql).contains("coalesce(t0.deleted,"); - assertThat(generatedSql).contains("coalesce(t1.deleted,"); + assertThat(generatedSql).contains("t0.deleted = "); + assertThat(generatedSql).contains("t1.deleted = "); assertThat(fetch1.get(0).getChildren()).hasSize(2); assertThat(fetch1.get(0).getNosdChildren()).hasSize(2); @@ -224,13 +223,14 @@ public class TestSoftDeleteBasic extends BaseTestCase { String generatedSql = sqlOf(query); if (isPlatformBooleanNative()) { - assertThat(generatedSql).contains("left join ebasic_sdchild t1 on t1.owner_id = t0.id and coalesce(t1.deleted,false)=false"); - assertThat(generatedSql).contains("coalesce(t0.deleted,false)=false"); + assertThat(generatedSql).contains("left join ebasic_sdchild t1 on t1.owner_id = t0.id and t1.deleted = false"); + assertThat(generatedSql).contains("t0.deleted = false"); } else { - assertThat(generatedSql).contains("left join ebasic_sdchild t1 on t1.owner_id = t0.id and coalesce(t1.deleted,0)=0"); - assertThat(generatedSql).contains("coalesce(t0.deleted,0)=0"); + assertThat(generatedSql).contains("left join ebasic_sdchild t1 on t1.owner_id = t0.id and t1.deleted = 0"); + assertThat(generatedSql).contains("t0.deleted = 0"); } assertThat(found).isNotNull(); + assertThat(found.getChildren()).hasSize(0); } @Test