From 80ce4bf157cbb05376428782ac95f5b9ad8086a1 Mon Sep 17 00:00:00 2001 From: Adrian Nistor Date: Wed, 9 Sep 2015 19:00:49 +0300 Subject: [PATCH] ISPN-5737 Cannot use both 'where' and 'having' filtering in the same query --- .../embeddedquery/QueryDslConditionsTest.java | 21 ++++++++++++++++--- .../query/dsl/impl/BaseQueryBuilder.java | 2 ++ .../dsl/embedded/QueryDslConditionsTest.java | 16 +++++++++++++- 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/integrationtests/all-embedded-query-it/src/test/java/org/infinispan/all/embeddedquery/QueryDslConditionsTest.java b/integrationtests/all-embedded-query-it/src/test/java/org/infinispan/all/embeddedquery/QueryDslConditionsTest.java index f06510cf66fd..2b5f93b41fdf 100644 --- a/integrationtests/all-embedded-query-it/src/test/java/org/infinispan/all/embeddedquery/QueryDslConditionsTest.java +++ b/integrationtests/all-embedded-query-it/src/test/java/org/infinispan/all/embeddedquery/QueryDslConditionsTest.java @@ -280,7 +280,7 @@ public void testEqHybridQuery() throws Exception { Query q = qf.from(getModelFactory().getUserImplClass()) .having("notes").eq("Lorem ipsum dolor sit amet") - .and().having("surname").eq("Doe") + .and().having("surname").eq("Doe") .toBuilder().build(); List list = q.list(); @@ -1570,8 +1570,8 @@ public void testSampleDomainQuery26() throws Exception { QueryFactory qf = getQueryFactory(); Query q = qf.from(getModelFactory().getAccountImplClass()) - .having("creationDate").eq(makeDate("2013-01-20")) - .toBuilder().build(); + .having("creationDate").eq(makeDate("2013-01-20")) + .toBuilder().build(); List list = q.list(); assertEquals(1, list.size()); @@ -2052,6 +2052,21 @@ public void testOrderBySum() { assertEquals(22, list.get(0)[0]); } + @Test + public void testGroupingWithFilter() { + QueryFactory qf = getQueryFactory(); + Query q = qf.from(getModelFactory().getUserImplClass()) + .select("name") + .having("name").eq("John").toBuilder() + .groupBy("name") + .having("name").eq("John").toBuilder() + .build(); + List list = q.list(); + assertEquals(1, list.size()); + assertEquals(1, list.get(0).length); + assertEquals("John", list.get(0)[0]); + } + @Test public void testCountNull() { QueryFactory qf = getQueryFactory(); diff --git a/query-dsl/src/main/java/org/infinispan/query/dsl/impl/BaseQueryBuilder.java b/query-dsl/src/main/java/org/infinispan/query/dsl/impl/BaseQueryBuilder.java index 1cc72356718b..b4eb89339c1c 100644 --- a/query-dsl/src/main/java/org/infinispan/query/dsl/impl/BaseQueryBuilder.java +++ b/query-dsl/src/main/java/org/infinispan/query/dsl/impl/BaseQueryBuilder.java @@ -139,6 +139,8 @@ public QueryBuilder groupBy(String... groupBy) { throw new IllegalStateException("Grouping can be specified only once"); } this.groupBy = groupBy; + // reset this so we can start a new filter for havingFilterCondition + filterCondition = null; return this; } diff --git a/query/src/test/java/org/infinispan/query/dsl/embedded/QueryDslConditionsTest.java b/query/src/test/java/org/infinispan/query/dsl/embedded/QueryDslConditionsTest.java index 8a97a3b07dd9..2f892801395d 100644 --- a/query/src/test/java/org/infinispan/query/dsl/embedded/QueryDslConditionsTest.java +++ b/query/src/test/java/org/infinispan/query/dsl/embedded/QueryDslConditionsTest.java @@ -1331,7 +1331,7 @@ public void testSampleDomainQuery18() throws Exception { .orderBy("description", SortOrder.ASC) .having("accountId").eq(1) .and(qf.having("amount").gt(1600) - .or().having("description").like("%rent%")).toBuilder().build(); + .or().having("description").like("%rent%")).toBuilder().build(); List list = q.list(); assertEquals(2, list.size()); @@ -1932,6 +1932,20 @@ public void testOrderBySum() { assertEquals(22, list.get(0)[0]); } + public void testGroupingWithFilter() { + QueryFactory qf = getQueryFactory(); + Query q = qf.from(getModelFactory().getUserImplClass()) + .select("name") + .having("name").eq("John").toBuilder() + .groupBy("name") + .having("name").eq("John").toBuilder() + .build(); + List list = q.list(); + assertEquals(1, list.size()); + assertEquals(1, list.get(0).length); + assertEquals("John", list.get(0)[0]); + } + public void testCountNull() { QueryFactory qf = getQueryFactory(); Query q = qf.from(getModelFactory().getUserImplClass())