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"/>