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/07/20 10:41:34 UTC

[2/3] lens git commit: LENS-1454: Time Covering set algorithm is skipping some combinations

LENS-1454: Time Covering set algorithm is skipping some combinations


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

Branch: refs/heads/master
Commit: e977ce6e5a97015fedf24520d0632cd981a0cc5f
Parents: 0b265c8
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Thu Jul 20 16:10:52 2017 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Thu Jul 20 16:10:52 2017 +0530

----------------------------------------------------------------------
 .../lens/cube/parse/CandidateCoveringSetsResolver.java  | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/e977ce6e/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 69d9562..4066cf7 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
@@ -209,21 +209,23 @@ public class CandidateCoveringSetsResolver implements ContextRewriter {
   private List<UnionCandidate> getCombinationTailIterative(List<Candidate> candidates, CubeQueryContext cubeql) {
     LinkedList<Candidate> candidateLinkedList = Lists.newLinkedList(candidates);
     List<List<Candidate>> incompleteCombinations = Lists.newArrayList();
+    incompleteCombinations.add(Lists.newArrayList());
     List<UnionCandidate> unionCandidates = Lists.newArrayList();
 
     while(!candidateLinkedList.isEmpty()) {
+      List<List<Candidate>> moreIncomplete = Lists.newArrayList();
       Candidate candidate = candidateLinkedList.remove();
-      incompleteCombinations.add(Lists.newArrayList());
-      Iterator<List<Candidate>> iter = incompleteCombinations.iterator();
-      while(iter.hasNext()) {
-        List<Candidate> incompleteCombination = iter.next();
+      for (List<Candidate> combination : incompleteCombinations) {
+        List<Candidate> incompleteCombination = Lists.newArrayList(combination);
         incompleteCombination.add(candidate);
         UnionCandidate unionCandidate = new UnionCandidate(incompleteCombination, cubeql);
         if (isCandidateCoveringTimeRanges(unionCandidate, cubeql.getTimeRanges())) {
           unionCandidates.add(unionCandidate);
-          iter.remove();
+        } else {
+          moreIncomplete.add(incompleteCombination);
         }
       }
+      incompleteCombinations.addAll(moreIncomplete);
     }
     return unionCandidates;
   }