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;
   }