Repository: lens
Updated Branches:
  refs/heads/master de8f2ec6f -> 7f3731ef4


LENS-1411: Queries not rewritten correctly when aggregate expression used 
inside "case when..."


Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/7f3731ef
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/7f3731ef
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/7f3731ef

Branch: refs/heads/master
Commit: 7f3731ef49e7cc309620dd75bd679d7e8e29776e
Parents: de8f2ec
Author: Sushil Mohanty <sushil.k.moha...@gmail.com>
Authored: Mon Apr 24 14:56:29 2017 +0530
Committer: Rajat Khandelwal <rajatgupt...@gmail.com>
Committed: Mon Apr 24 14:56:29 2017 +0530

----------------------------------------------------------------------
 .../apache/lens/cube/parse/UnionQueryWriter.java | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/7f3731ef/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java
index 3ee817f..267d85b 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/UnionQueryWriter.java
@@ -53,6 +53,7 @@ public class UnionQueryWriter {
   private CubeQueryContext cubeql;
   Collection<StorageCandidate> storageCandidates;
   public static final String DEFAULT_MEASURE = "0.0";
+  public static final String DUPLICATE_EXPRESSION_PREFIX = "D";
 
   public UnionQueryWriter(Collection<StorageCandidate> storageCandidates, 
CubeQueryContext cubeql) {
     if (storageCandidates == null || storageCandidates.size()<=1) {
@@ -353,15 +354,25 @@ public class UnionQueryWriter {
       if (phraseCountMap.get(col).size() > 1) {
         List<Integer> childenToDelete = phraseCountMap.get(col).
             subList(1, phraseCountMap.get(col).size());
-        int counter = 0;
         for (int i : childenToDelete) {
           for (StorageCandidate sc : storageCandidates) {
-            sc.getQueryAst().getSelectAST().deleteChild(i - counter);
+            sc.getQueryAst().getSelectAST().setChild(i,
+                new ASTNode(new CommonToken(HiveParser.Identifier, 
DUPLICATE_EXPRESSION_PREFIX)));
           }
-          counter++;
         }
       }
     }
+
+    for (StorageCandidate sc : storageCandidates) {
+      for (Node node : sc.getQueryAst().getSelectAST().getChildren()) {
+        ASTNode selectNode = (ASTNode) node;
+        if (selectNode.getToken().getType() == HiveParser.Identifier
+            && selectNode.getText().equals(DUPLICATE_EXPRESSION_PREFIX)) {
+          
sc.getQueryAst().getSelectAST().deleteChild(selectNode.getChildIndex());
+        }
+      }
+    }
+
     updateOuterASTDuplicateAliases(queryAst.getSelectAST(), aliasMap);
     if (queryAst.getHavingAST() != null) {
       updateOuterASTDuplicateAliases(queryAst.getHavingAST(), aliasMap);
@@ -719,7 +730,7 @@ public class UnionQueryWriter {
         ASTNode column = (ASTNode) selectExpr.getChild(0);
         if (HQLParser.isAggregateAST(column)
             && column.getChildCount() == 2) {
-          if (HQLParser.getString((ASTNode) column.getChild(1)).equals("0.0")) 
{
+          if (HQLParser.getString((ASTNode) 
column.getChild(1)).equals(DEFAULT_MEASURE)) {
             selectExpr.getParent().setChild(i, getSelectExpr(null, (ASTNode) 
selectExpr.getChild(1), true));
           }
         }

Reply via email to