Repository: lens
Updated Branches:
  refs/heads/current-release-line be75e1d55 -> d3875b4e9


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/bd4b5529
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/bd4b5529
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/bd4b5529

Branch: refs/heads/current-release-line
Commit: bd4b5529ac15b51a6ef91f431b2037e63078ea34
Parents: be75e1d
Author: Rajat Khandelwal <[email protected]>
Authored: Tue Jun 6 15:37:41 2017 +0530
Committer: rajub <[email protected]>
Committed: Sat Jun 10 13:28:54 2017 +0800

----------------------------------------------------------------------
 .../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/bd4b5529/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 a2f4bb6..ea6d5c7 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
@@ -550,15 +550,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;
@@ -662,19 +661,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/bd4b5529/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/bd4b5529/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/bd4b5529/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 54e39c2..088c8de 100644
--- a/lens-cube/src/test/resources/schema/cubes/base/testcube.xml
+++ b/lens-cube/src/test/resources/schema/cubes/base/testcube.xml
@@ -166,7 +166,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"/>

Reply via email to