Repository: lens Updated Branches: refs/heads/master d3e732c9f -> cb2529672
LENS-1427: ExpressionResolver is removing expressions if they are not answerable by *any* candidates Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/cb252967 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/cb252967 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/cb252967 Branch: refs/heads/master Commit: cb252967237a7e6c945a9031a3d417c18bc736cf Parents: d3e732c Author: Rajat Khandelwal <pro...@apache.org> Authored: Tue Jun 6 15:37:41 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@gmail.com> Committed: Tue Jun 6 15:37:41 2017 +0530 ---------------------------------------------------------------------- .../lens/cube/parse/ExpressionResolver.java | 37 +++++++++----------- .../test/resources/schema/cubes/base/b1cube.xml | 2 +- .../test/resources/schema/cubes/base/b2cube.xml | 2 +- .../resources/schema/cubes/base/testcube.xml | 2 +- 4 files changed, 19 insertions(+), 24 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 7cad400..f38aa54 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -518,15 +518,14 @@ class ExpressionResolver implements ContextRewriter { } // Remove expressions for which denormalized columns are no more reachable esc.getDeNormCtx().pruneReferences(cubeql); - for (String table : esc.getDeNormCtx().getTableToRefCols().keySet()) { - Set<String> nonReachableFields = esc.getDeNormCtx().getNonReachableReferenceFields(table); - if (!nonReachableFields.isEmpty()) { - log.info("Removing expression {} as columns {} are not available", esc, nonReachableFields); - iterator.remove(); - removedEsc.add(esc); - removed = true; - break; - } + if (!esc.getDeNormCtx().getTableToRefCols().isEmpty() + && esc.getDeNormCtx().getTableToRefCols().keySet().stream() + .map(esc.getDeNormCtx()::getNonReachableReferenceFields).noneMatch(Set::isEmpty)) { + log.info("Removing expression {} as all tables have non reachable fields", esc); + iterator.remove(); + removedEsc.add(esc); + removed = true; + break; } if (removed) { continue; @@ -630,19 +629,15 @@ class ExpressionResolver implements ContextRewriter { for (Map.Entry<String, Set<ExpressionContext>> ecEntry : exprCtx.allExprsQueried.entrySet()) { String expr = ecEntry.getKey(); Set<ExpressionContext> ecSet = ecEntry.getValue(); - for (ExpressionContext ec : ecSet) { - if (ec.getSrcTable().getName().equals(cubeql.getCube().getName())) { - for (Iterator<Candidate> sItr = cubeql.getCandidates().iterator(); sItr.hasNext();) { - Candidate cand = sItr.next(); - if (!cand.isExpressionEvaluable(ec)) { - log.info("Not considering Candidate :{} as {} is not evaluable", cand, ec.exprCol.getName()); - sItr.remove(); - cubeql.addCandidatePruningMsg(cand, - CandidateTablePruneCause.expressionNotEvaluable(ec.exprCol.getName())); - } - } + cubeql.getCandidates().removeIf(x-> { + if (ecSet.stream().noneMatch(x::isExpressionEvaluable)) { + log.info("Not considering Candidate :{} as {} is not evaluable", x, expr); + cubeql.addCandidatePruningMsg(x, + CandidateTablePruneCause.expressionNotEvaluable(expr)); + return true; } - } + return false; + }); } } // prune candidate dims without any valid expressions http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml b/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml index e3e9909..fd25982 100644 --- a/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml +++ b/lens-cube/src/test/resources/schema/cubes/base/b1cube.xml @@ -178,7 +178,7 @@ <expr_spec expr="cubecity.name"/> </expression> <expression _type="string" name="citysegmsr1" display_string="city segmsr1" description="city segmsr1 "> - <expr_spec expr="sum(case when cubecity.name = 'foo' then segmsr1 end)"/> + <expr_spec expr="sum(case when singlecolchainfield = 'foo' then segmsr1 end)"/> </expression> <expression _type="double" name="msr8" display_string="Sixth Msr" description="measure expression"> <expr_spec expr="msr2 + msr3"/> http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/test/resources/schema/cubes/base/b2cube.xml ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/resources/schema/cubes/base/b2cube.xml b/lens-cube/src/test/resources/schema/cubes/base/b2cube.xml index e5cf2c0..ca6bcd7 100644 --- a/lens-cube/src/test/resources/schema/cubes/base/b2cube.xml +++ b/lens-cube/src/test/resources/schema/cubes/base/b2cube.xml @@ -178,7 +178,7 @@ <expr_spec expr="cubecity.name"/> </expression> <expression _type="string" name="citysegmsr1" display_string="city segmsr1" description="city segmsr1 "> - <expr_spec expr="sum(case when cubecity.name = 'foo' then segmsr1 end)"/> + <expr_spec expr="sum(case when singlecolchainfield = 'foo' then segmsr1 end)"/> </expression> <expression _type="double" name="msr8" display_string="Sixth Msr" description="measure expression"> <expr_spec expr="msr2 + msr3"/> http://git-wip-us.apache.org/repos/asf/lens/blob/cb252967/lens-cube/src/test/resources/schema/cubes/base/testcube.xml ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/resources/schema/cubes/base/testcube.xml b/lens-cube/src/test/resources/schema/cubes/base/testcube.xml index f123341..ef13700 100644 --- a/lens-cube/src/test/resources/schema/cubes/base/testcube.xml +++ b/lens-cube/src/test/resources/schema/cubes/base/testcube.xml @@ -165,7 +165,7 @@ <expr_spec expr="cubecity.name"/> </expression> <expression _type="string" name="citysegmsr1" display_string="city segmsr1" description="city segmsr1 "> - <expr_spec expr="sum(case when cubecity.name = 'foo' then segmsr1 end)"/> + <expr_spec expr="sum(case when singlecolchainfield = 'foo' then segmsr1 end)"/> </expression> <expression _type="double" name="msr8" display_string="Sixth Msr" description="measure expression"> <expr_spec expr="msr2 + msr3"/>