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:35 UTC
[3/3] lens git commit: LENS-1455: Getting expression ast to generate
default expression should consider all expression contexts
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/95b91f90
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/95b91f90
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/95b91f90
Branch: refs/heads/master
Commit: 95b91f90d41a8dba2aa5d85ff170ba8d36f56b21
Parents: e977ce6
Author: Rajat Khandelwal <pr...@apache.org>
Authored: Thu Jul 20 16:11:15 2017 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Thu Jul 20 16:11:15 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/95b91f90/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/95b91f90/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/95b91f90/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;
}