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/9da5b40e Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/9da5b40e Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/9da5b40e Branch: refs/heads/master Commit: 9da5b40e3afbe966256a601bae6204afd5d3e992 Parents: c2a9c93 Author: Rajat Khandelwal <pro...@apache.org> Authored: Tue Jun 20 16:09:32 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@gmail.com> Committed: Thu Jul 13 14:42:49 2017 +0530 ---------------------------------------------------------------------- .../cube/parse/CandidateCoveringSetsResolver.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/9da5b40e/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