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>