You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2016/11/21 06:46:06 UTC

lens git commit: LENS-1377 : Optimize measure covering set to exclude fact covering all measures in other combinations

Repository: lens
Updated Branches:
  refs/heads/master 02cbd6bc3 -> fe66131a4


LENS-1377 : Optimize measure covering set to exclude fact covering all measures in other combinations


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

Branch: refs/heads/master
Commit: fe66131a47249afdecdacd080c115cebda2cae34
Parents: 02cbd6b
Author: Amareshwari Sriramadasu <am...@apache.org>
Authored: Mon Nov 21 12:15:55 2016 +0530
Committer: Amareshwari Sriramadasu <am...@apache.org>
Committed: Mon Nov 21 12:15:55 2016 +0530

----------------------------------------------------------------------
 .../lens/cube/parse/CandidateTableResolver.java | 41 ++++++++++++--------
 1 file changed, 24 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/fe66131a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
index 510bd8c..e7fc557 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
@@ -355,36 +355,43 @@ class CandidateTableResolver implements ContextRewriter {
     List<CandidateFact> cfacts = new ArrayList<>(cfactsPassed);
     for (Iterator<CandidateFact> i = cfacts.iterator(); i.hasNext();) {
       CandidateFact cfact = i.next();
-      i.remove();
       if (!checkForFactColumnExistsAndValidForRange(cfact, msrs, cubeql)) {
         // cfact does not contain any of msrs and none of exprsWithMeasures are evaluable.
         // ignore the fact
+        i.remove();
         continue;
       } else if (allEvaluable(cfact, msrs, cubeql)) {
         // return single set
         Set<CandidateFact> one = new LinkedHashSet<>();
         one.add(cfact);
         cfactset.add(one);
-      } else {
-        // find the remaining measures in other facts
-        if (i.hasNext()) {
-          Set<QueriedPhraseContext> remainingMsrs = new HashSet<>(msrs);
-          Set<QueriedPhraseContext> coveredMsrs  = coveredMeasures(cfact, msrs, cubeql);
-          remainingMsrs.removeAll(coveredMsrs);
-
-          Set<Set<CandidateFact>> coveringSets = findCoveringSets(cubeql, cfacts, remainingMsrs);
-          if (!coveringSets.isEmpty()) {
-            for (Set<CandidateFact> set : coveringSets) {
-              set.add(cfact);
-              cfactset.add(set);
-            }
-          } else {
-            log.info("Couldnt find any set containing remaining measures:{} {} in {}", remainingMsrs,
-              cfactsPassed);
+        i.remove();
+      }
+    }
+    // facts that contain all measures or no measures are removed from iteration.
+    // find other facts
+    for (Iterator<CandidateFact> i = cfacts.iterator(); i.hasNext();) {
+      CandidateFact cfact = i.next();
+      i.remove();
+      // find the remaining measures in other facts
+      if (i.hasNext()) {
+        Set<QueriedPhraseContext> remainingMsrs = new HashSet<>(msrs);
+        Set<QueriedPhraseContext> coveredMsrs  = coveredMeasures(cfact, msrs, cubeql);
+        remainingMsrs.removeAll(coveredMsrs);
+
+        Set<Set<CandidateFact>> coveringSets = findCoveringSets(cubeql, cfacts, remainingMsrs);
+        if (!coveringSets.isEmpty()) {
+          for (Set<CandidateFact> set : coveringSets) {
+            set.add(cfact);
+            cfactset.add(set);
           }
+        } else {
+          log.info("Couldnt find any set containing remaining measures:{} {} in {}", remainingMsrs,
+            cfactsPassed);
         }
       }
     }
+    log.info("Covering set {} for measures {} with factsPassed {}", cfactset, msrs, cfactsPassed);
     return cfactset;
   }