You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by nn...@apache.org on 2017/05/23 21:07:48 UTC

geode git commit: GEODE-2961: Fixed distinct multiple OR query returning partial results

Repository: geode
Updated Branches:
  refs/heads/develop 9c4086813 -> 456ee1576


GEODE-2961: Fixed distinct multiple OR query returning partial results


Project: http://git-wip-us.apache.org/repos/asf/geode/repo
Commit: http://git-wip-us.apache.org/repos/asf/geode/commit/456ee157
Tree: http://git-wip-us.apache.org/repos/asf/geode/tree/456ee157
Diff: http://git-wip-us.apache.org/repos/asf/geode/diff/456ee157

Branch: refs/heads/develop
Commit: 456ee15768fb08c8e1c8c5836479d27e1bc61835
Parents: 9c40868
Author: David Anuta <da...@gmail.com>
Authored: Tue May 23 13:53:19 2017 -0700
Committer: nabarun <nn...@pivotal.io>
Committed: Tue May 23 14:05:41 2017 -0700

----------------------------------------------------------------------
 .../internal/AbstractGroupOrRangeJunction.java      |  2 +-
 .../query/internal/index/IndexUseJUnitTest.java     | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/geode/blob/456ee157/geode-core/src/main/java/org/apache/geode/cache/query/internal/AbstractGroupOrRangeJunction.java
----------------------------------------------------------------------
diff --git a/geode-core/src/main/java/org/apache/geode/cache/query/internal/AbstractGroupOrRangeJunction.java b/geode-core/src/main/java/org/apache/geode/cache/query/internal/AbstractGroupOrRangeJunction.java
index 5ed4d86..35f0290 100644
--- a/geode-core/src/main/java/org/apache/geode/cache/query/internal/AbstractGroupOrRangeJunction.java
+++ b/geode-core/src/main/java/org/apache/geode/cache/query/internal/AbstractGroupOrRangeJunction.java
@@ -325,7 +325,7 @@ public abstract class AbstractGroupOrRangeJunction extends AbstractCompiledValue
         if (intermediateResults == null) {
           intermediateResults = filterResults;
         } else if (isDistinct && !isConditioningNeeded) {
-          intermediateResults = filterResults;
+          intermediateResults.addAll(filterResults);
         } else {
           intermediateResults = QueryUtils.union(intermediateResults, filterResults, context);
         }

http://git-wip-us.apache.org/repos/asf/geode/blob/456ee157/geode-core/src/test/java/org/apache/geode/cache/query/internal/index/IndexUseJUnitTest.java
----------------------------------------------------------------------
diff --git a/geode-core/src/test/java/org/apache/geode/cache/query/internal/index/IndexUseJUnitTest.java b/geode-core/src/test/java/org/apache/geode/cache/query/internal/index/IndexUseJUnitTest.java
index c55f3f3..9c8756c 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/query/internal/index/IndexUseJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/query/internal/index/IndexUseJUnitTest.java
@@ -1366,6 +1366,22 @@ public class IndexUseJUnitTest {
   }
 
   @Test
+  public void queryWithOrClauseShouldReturnCorrectResultSet() throws Exception {
+    String query =
+        "SELECT DISTINCT p1.ID FROM /pos p1 where p1.ID IN SET (0,1) OR p1.status = 'active'";
+
+    Query q = qs.newQuery(query);
+    QueryObserverImpl observer = new QueryObserverImpl();
+    QueryObserverHolder.setInstance(observer);
+    SelectResults sr = (SelectResults) q.execute();
+    if (!observer.isIndexesUsed)
+      fail("Index should have been used for query '" + q.getQueryString() + "'");
+
+    assertEquals(sr.size(), 3);
+    qs.removeIndexes();
+  }
+
+  @Test
   public void testIndexUseSelfJoin() throws Exception {
     String[] queries = {"SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.status = p1.status",
         "SELECT DISTINCT * FROM /pos p1, /pos p2 where p1.ID = p2.ID",