From deac29195125994d5ea2e5394b44b4079915e47b Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 17 Oct 2016 20:52:18 +1300 Subject: [PATCH] #835 - A query that includes a fetch() of a many that is @SoftDelete where all the rows are soft deleted returns incorrect results --- .../ebeaninternal/server/query/SqlTreeNodeBean.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeNodeBean.java b/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeNodeBean.java index c0ac1e85d..0bc652c12 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeNodeBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/query/SqlTreeNodeBean.java @@ -494,9 +494,6 @@ public class SqlTreeNodeBean implements SqlTreeNode { if (desc.isSoftDelete()) { query.addSoftDeletePredicate(desc.getSoftDeletePredicate(baseTableAlias)); } - for (int i = 0; i < children.length; i++) { - children[i].addSoftDeletePredicate(query); - } } public void addAsOfTableAlias(SpiQuery query) { @@ -522,6 +519,16 @@ public class SqlTreeNodeBean implements SqlTreeNode { */ public SqlJoinType appendFromBaseTable(DbSqlContext ctx, SqlJoinType joinType) { + SqlJoinType sqlJoinType = appendFromAsJoin(ctx, joinType); + if (desc.isSoftDelete()) { + // add the soft delete predicate to the join clause + ctx.append("and ").append(desc.getSoftDeletePredicate(ctx.getTableAlias(prefix))).append(" "); + } + return sqlJoinType; + } + + private SqlJoinType appendFromAsJoin(DbSqlContext ctx, SqlJoinType joinType) { + if (nodeBeanProp instanceof BeanPropertyAssocMany) { BeanPropertyAssocMany manyProp = (BeanPropertyAssocMany) nodeBeanProp; if (manyProp.isManyToMany()) {