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

Branch: refs/heads/master
Commit: 8b4120237af9aaca3a6934650ccfeac24bc62c59
Parents: 65ca04b
Author: Rajat Khandelwal <[email protected]>
Authored: Thu Jul 20 16:10:52 2017 +0530
Committer: Rajat Khandelwal <[email protected]>
Committed: Thu Jul 20 16:13:07 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/8b412023/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;
   }

Reply via email to