Repository: lens
Updated Branches:
  refs/heads/master b4cc2ed8a -> a8d23df80


LENS-1439: Having clause getting skipped if query goes to a segmentation 
containing single segment


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

Branch: refs/heads/master
Commit: a8d23df80dcfc22b3d67938f8f522bbd33072466
Parents: b4cc2ed
Author: Rajat Khandelwal <pro...@apache.org>
Authored: Mon Sep 4 10:29:02 2017 +0530
Committer: Rajat Khandelwal <rajatgupt...@gmail.com>
Committed: Mon Sep 4 10:29:02 2017 +0530

----------------------------------------------------------------------
 .../lens/cube/parse/StorageCandidateHQLContext.java    | 13 ++++++++++++-
 .../lens/cube/parse/TestCubeSegmentationRewriter.java  |  6 +++---
 .../schema/cubes/derived/union_join_ctx_der1.xml       |  1 +
 3 files changed, 16 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/a8d23df8/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidateHQLContext.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidateHQLContext.java
 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidateHQLContext.java
index 21cdb61..432c0e4 100644
--- 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidateHQLContext.java
+++ 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/StorageCandidateHQLContext.java
@@ -21,6 +21,7 @@ package org.apache.lens.cube.parse;
 
 import static 
org.apache.lens.cube.metadata.MetastoreConstants.VIRTUAL_FACT_FILTER;
 
+import java.util.Collection;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
@@ -50,7 +51,17 @@ public class StorageCandidateHQLContext extends 
DimHQLContext {
     this.storageCandidate = storageCandidate;
     this.rootCubeQueryContext = rootCubeQueryContext;
     getCubeQueryContext().addRangeClauses(this);
-    if (!Objects.equals(getStorageCandidate(), 
rootCubeQueryContext.getPickedCandidate())) {
+    boolean setNullHaving = true;
+    if (Objects.equals(getStorageCandidate(), 
rootCubeQueryContext.getPickedCandidate())) {
+      setNullHaving = false;
+    } else {
+      Collection<? extends Candidate> children = 
rootCubeQueryContext.getPickedCandidate().getChildren();
+      // children should not be null. Not checking for null here.
+      if (children.size() == 1 && Objects.equals(getStorageCandidate(), 
children.iterator().next())) {
+        setNullHaving = false;
+      }
+    }
+    if (setNullHaving) {
       getQueryAst().setHavingAST(null);
     }
   }

http://git-wip-us.apache.org/repos/asf/lens/blob/a8d23df8/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeSegmentationRewriter.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeSegmentationRewriter.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeSegmentationRewriter.java
index 7e1714b..8a76f4a 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeSegmentationRewriter.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeSegmentationRewriter.java
@@ -316,11 +316,11 @@ public class TestCubeSegmentationRewriter extends 
TestQueryRewrite {
 
   @Test
   public void testSegmentationWithSingleSegment() throws LensException {
-    String userQuery = "select segmsr1 from basecube where " + TWO_DAYS_RANGE;
+    String userQuery = "select zipcode, segmsr1 from basecube where " + 
TWO_DAYS_RANGE + " having segmsr1 > 10";
     String actual = rewrite(userQuery, getConf());
     String expected = getExpectedQuery("basecube",
-      "select sum(basecube.segmsr1) FROM ", null,
-      null,
+      "select basecube.zipcode, sum(basecube.segmsr1) FROM ", null,
+      "group by basecube.zipcode having sum(basecube.segmsr1) > 10",
       getWhereForDailyAndHourly2days("basecube", "c1_b1fact1"));
     compareQueries(actual, expected);
   }

http://git-wip-us.apache.org/repos/asf/lens/blob/a8d23df8/lens-cube/src/test/resources/schema/cubes/derived/union_join_ctx_der1.xml
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/resources/schema/cubes/derived/union_join_ctx_der1.xml 
b/lens-cube/src/test/resources/schema/cubes/derived/union_join_ctx_der1.xml
index c23a029..5a600ae 100644
--- a/lens-cube/src/test/resources/schema/cubes/derived/union_join_ctx_der1.xml
+++ b/lens-cube/src/test/resources/schema/cubes/derived/union_join_ctx_der1.xml
@@ -45,5 +45,6 @@
     <attr_name>union_join_ctx_dup_cityname</attr_name>
     <attr_name>d_time</attr_name>
     <attr_name>union_join_ctx_cityid</attr_name>
+    <attr_name>zipcode</attr_name>
   </dim_attr_names>
 </x_derived_cube>

Reply via email to