You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2017/06/06 10:08:14 UTC
lens git commit: LENS-1427: ExpressionResolver is removing
expressions if they are not answerable by *any* candidates
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 <pr...@apache.org>
Authored: Tue Jun 6 15:37:41 2017 +0530
Committer: Rajat Khandelwal <ra...@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"/>