Repository: lens
Updated Branches:
  refs/heads/master 8a7478d46 -> 6f86e785e


LENS-1442: Optimize algorithm of CandidateCoveringSetResolver


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/6f86e785
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/6f86e785
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/6f86e785

Branch: refs/heads/master
Commit: 6f86e785ea79cc8a3c03ceba282a0cfadb3ae3c6
Parents: 8a7478d
Author: Rajat Khandelwal <pro...@apache.org>
Authored: Tue Jun 20 16:09:32 2017 +0530
Committer: Rajat Khandelwal <rajatgupt...@gmail.com>
Committed: Tue Jun 20 16:09:32 2017 +0530

----------------------------------------------------------------------
 .../cube/parse/CandidateCoveringSetsResolver.java    | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/6f86e785/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java
 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java
index 1e9873f..61c28c6 100644
--- 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java
+++ 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateCoveringSetsResolver.java
@@ -208,21 +208,24 @@ public class CandidateCoveringSetsResolver implements 
ContextRewriter {
     List<Candidate> ucSet = new ArrayList<>(candidates);
     // Check if a single set can answer all the measures and exprsWithMeasures
     for (Iterator<Candidate> i = ucSet.iterator(); i.hasNext();) {
-      boolean evaluable = false;
+      boolean allEvaluable = true;
+      boolean anyEvaluable = false;
       Candidate uc = i.next();
       for (QueriedPhraseContext msr : msrs) {
-        evaluable = uc.isPhraseAnswerable(msr);
-        if (!evaluable) {
-          break;
-        }
+        boolean evaluable = uc.isPhraseAnswerable(msr);
+        allEvaluable &= evaluable;
+        anyEvaluable |= evaluable;
       }
-      if (evaluable) {
+      if (allEvaluable) {
         // single set can answer all the measures as an UnionCandidate
         List<Candidate> one = new ArrayList<>();
         one.add(uc);
         msrCoveringSets.add(one);
         i.remove();
       }
+      if (!anyEvaluable) { // none evaluable
+        i.remove();
+      }
     }
     // Sets that contain all measures or no measures are removed from 
iteration.
     // find other facts

Reply via email to