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 <pro...@apache.org> Authored: Thu Jul 20 16:10:52 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@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; }