diff --git a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java index 966ca0543..f5a558607 100644 --- a/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java +++ b/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java @@ -4,13 +4,13 @@ import io.ebean.ExpressionFactory; import io.ebean.FetchConfig; import io.ebean.OrderBy; import io.ebean.Query; +import io.ebean.util.SplitName; import io.ebeaninternal.api.SpiExpression; import io.ebeaninternal.api.SpiExpressionFactory; import io.ebeaninternal.api.SpiExpressionList; import io.ebeaninternal.api.SpiQuery; import io.ebeaninternal.server.expression.FilterExprPath; import io.ebeaninternal.server.expression.FilterExpressionList; -import io.ebean.util.SplitName; import java.io.Serializable; import java.util.ArrayList; @@ -75,7 +75,7 @@ public class OrmQueryProperties implements Serializable { * Construct for root so path (and parentPath) are null. */ public OrmQueryProperties() { - this((String) null); + this(null); } /** @@ -157,6 +157,7 @@ public class OrmQueryProperties implements Serializable { this.cache = source.cache; this.readOnly = source.readOnly; this.filterMany = source.filterMany; + this.markForQueryJoin = source.markForQueryJoin; this.included = (source.included == null) ? null : new LinkedHashSet<>(source.included); } diff --git a/src/test/java/org/tests/query/TestQueryFilterMany.java b/src/test/java/org/tests/query/TestQueryFilterMany.java index dc03f4982..f0c21fd21 100644 --- a/src/test/java/org/tests/query/TestQueryFilterMany.java +++ b/src/test/java/org/tests/query/TestQueryFilterMany.java @@ -3,18 +3,18 @@ package org.tests.query; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.FetchConfig; +import io.ebean.Query; +import org.ebeantest.LoggedSqlCollector; +import org.junit.Test; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; import org.tests.model.basic.ResetBasicData; -import org.ebeantest.LoggedSqlCollector; -import org.junit.Test; import java.time.LocalDate; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; public class TestQueryFilterMany extends BaseTestCase { @@ -36,13 +36,52 @@ public class TestQueryFilterMany extends BaseTestCase { List sqlList = LoggedSqlCollector.stop(); assertEquals(2, sqlList.size()); - assertTrue(sqlList.get(1).contains("status = ?")); + assertThat(sqlList.get(1)).contains("status = ?"); // Currently this does not include the query filter Ebean.refreshMany(customer, "orders"); } + @Test + public void test_filterMany_in_findCount() { + + ResetBasicData.reset(); + + LoggedSqlCollector.start(); + + Query query = Ebean.find(Customer.class) + .fetch("orders") + .filterMany("orders").in("status", Order.Status.NEW) + .order().asc("id"); + + query.findCount(); + + List sqlList = LoggedSqlCollector.stop(); + assertEquals(1, sqlList.size()); + assertThat(sqlList.get(0)).contains("select count(*) from o_customer"); + } + + @Test + public void test_filterMany_copy_findList() { + + ResetBasicData.reset(); + + LoggedSqlCollector.start(); + + Query query = Ebean.find(Customer.class) + .fetch("orders") + .filterMany("orders").in("status", Order.Status.NEW) + .order().asc("id"); + + query.copy().findList(); + + List sqlList = LoggedSqlCollector.stop(); + assertEquals(2, sqlList.size()); + assertThat(sqlList.get(0)).contains("from o_customer t0"); + assertThat(sqlList.get(1)).contains("from o_order t0 join o_customer t1"); + } + @Test public void testDisjunction() { @@ -52,9 +91,9 @@ public class TestQueryFilterMany extends BaseTestCase { Ebean.find(Customer.class) .filterMany("orders") - .or() - .eq("status", Order.Status.NEW) - .eq("orderDate", LocalDate.now()) + .or() + .eq("status", Order.Status.NEW) + .eq("orderDate", LocalDate.now()) .findList(); List sql = LoggedSqlCollector.stop();