Repository: lens Updated Branches: refs/heads/current-release-line 6dca44661 -> cdd7b0999
LENS-1455: Getting expression ast to generate default expression should consider all expression contexts Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/cdd7b099 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/cdd7b099 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/cdd7b099 Branch: refs/heads/current-release-line Commit: cdd7b09995b765783867812e5b981c27f4938371 Parents: 8b41202 Author: Rajat Khandelwal <pro...@apache.org> Authored: Thu Jul 20 16:11:15 2017 +0530 Committer: Rajat Khandelwal <rajatgupt...@gmail.com> Committed: Thu Jul 20 16:13:07 2017 +0530 ---------------------------------------------------------------------- .../cube/parse/CandidateCoveringSetsResolver.java | 3 +++ .../apache/lens/cube/parse/ExpressionResolver.java | 17 ++++++++++++----- .../lens/cube/parse/SegmentationCandidate.java | 5 +++++ 3 files changed, 20 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/cdd7b099/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 4066cf7..de30703 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 @@ -255,6 +255,9 @@ public class CandidateCoveringSetsResolver implements ContextRewriter { i.remove(); } } + // sorting will make sure storage candidates come before complex candidates. + // ensuring maximum columns get selected from simpler candidates. + ucSet.sort(Comparator.comparing(Candidate::getChildrenCount)); // Sets that contain all measures or no measures are removed from iteration. // find other facts for (Iterator<Candidate> i = ucSet.iterator(); i.hasNext();) { http://git-wip-us.apache.org/repos/asf/lens/blob/cdd7b099/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java index 66b043e..4680766 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java @@ -32,6 +32,7 @@ import org.apache.hadoop.hive.ql.parse.HiveParser; import org.antlr.runtime.CommonToken; +import com.google.common.collect.Sets; import lombok.*; import lombok.extern.slf4j.Slf4j; @@ -501,15 +502,21 @@ class ExpressionResolver implements ContextRewriter { } } - private ASTNode getExprAst(ExpressionContext ec) { + private ASTNode getExprAst(ExpressionContext expressionContext) { Set<StorageCandidate> scSet = CandidateUtil.getStorageCandidates(cubeql.getCandidates()); - Set<String> storageTableNames = new HashSet<String>(); + Set<String> storageTableNames = new HashSet<>(); + Set<ExpressionContext> expressionContexts = Sets.newLinkedHashSet(); + expressionContexts.add(expressionContext); for (StorageCandidate sc : scSet) { storageTableNames.add(sc.getStorageTable()); + expressionContexts.add(sc.getCubeQueryContext().getExprCtx() + .getExpressionContext(expressionContext.getExprCol().getName(), expressionContext.getSrcAlias())); } - for (CandidateTable table : ec.evaluableExpressions.keySet()) { - if (storageTableNames.contains(table.getStorageTable())) { - return MetastoreUtil.copyAST(ec.evaluableExpressions.get(table).iterator().next().finalAST); + for (ExpressionContext ec : expressionContexts) { + for (CandidateTable table : ec.evaluableExpressions.keySet()) { + if (storageTableNames.contains(table.getStorageTable())) { + return MetastoreUtil.copyAST(ec.evaluableExpressions.get(table).iterator().next().finalAST); + } } } return null; http://git-wip-us.apache.org/repos/asf/lens/blob/cdd7b099/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java index 35638f3..055d6ef 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/SegmentationCandidate.java @@ -273,6 +273,11 @@ public class SegmentationCandidate implements Candidate { } @Override + public int getChildrenCount() { + return segmentation.getSegments().size(); + } + + @Override public boolean isTimeRangeCoverable(TimeRange timeRange) throws LensException { return true; }