From 89dac3820be5df501fe0a20596ea26bdefea83bc Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 30 Oct 2017 22:06:57 +1300 Subject: [PATCH] #1182 - Error when applied disjunction to filterMany --- .../expression/DefaultExpressionList.java | 2 +- .../expression/FilterExpressionList.java | 8 ++++++++ .../org/tests/query/TestQueryFilterMany.java | 20 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index 26ec84885..cb31c5008 100644 --- a/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -995,7 +995,7 @@ public class DefaultExpressionList implements SpiExpressionList { return this; } - private Junction junction(Junction.Type type) { + protected Junction junction(Junction.Type type) { Junction junction = expr.junction(type, query, this); add(junction); return junction; diff --git a/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java b/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java index 1eeeb56ea..bd6f4c704 100644 --- a/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java +++ b/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java @@ -5,6 +5,7 @@ import io.ebean.ExpressionList; import io.ebean.FutureIds; import io.ebean.FutureList; import io.ebean.FutureRowCount; +import io.ebean.Junction; import io.ebean.OrderBy; import io.ebean.Query; import io.ebeaninternal.api.SpiExpressionList; @@ -36,6 +37,13 @@ public class FilterExpressionList extends DefaultExpressionList { this.rootQuery = rootQuery; } + @Override + protected Junction junction(Junction.Type type) { + Junction junction = expr.junction(type, rootQuery, this); + add(junction); + return junction; + } + @Override public SpiExpressionList trimPath(int prefixTrim) { return new FilterExpressionList<>(pathPrefix.trimPath(prefixTrim), this); diff --git a/src/test/java/org/tests/query/TestQueryFilterMany.java b/src/test/java/org/tests/query/TestQueryFilterMany.java index 5104ede47..f34a275e0 100644 --- a/src/test/java/org/tests/query/TestQueryFilterMany.java +++ b/src/test/java/org/tests/query/TestQueryFilterMany.java @@ -9,6 +9,7 @@ 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; @@ -42,6 +43,25 @@ public class TestQueryFilterMany extends BaseTestCase { } + @Test + public void testDisjunction() { + + ResetBasicData.reset(); + + LoggedSqlCollector.start(); + + Ebean.find(Customer.class) + .filterMany("orders") + .or() + .eq("status", Order.Status.NEW) + .eq("orderDate", LocalDate.now()) + .findList(); + + List sql = LoggedSqlCollector.stop(); + assertEquals(2, sql.size()); + assertThat(sql.get(1)).contains("and (t0.status = ? or t0.order_date = ?"); + } + @Test public void testNestedFilterMany() {