Repository: lens
Updated Branches:
  refs/heads/master d5e923e25 -> 1b475f2ea


LENS-851 : Fix aliasing for non-aggregate functions in multi fact union query


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

Branch: refs/heads/master
Commit: 1b475f2ea67a275b22248f677a08d5caec7f959a
Parents: d5e923e
Author: Rajat Khandelwal <pro...@apache.org>
Authored: Fri Jan 8 14:53:17 2016 +0530
Committer: Amareshwari Sriramadasu <amareshw...@apache.org>
Committed: Fri Jan 8 14:53:17 2016 +0530

----------------------------------------------------------------------
 .../java/org/apache/lens/cube/parse/HQLParser.java   | 15 +++++++++++++++
 .../cube/parse/SingleFactMultiStorageHQLContext.java |  2 +-
 .../org/apache/lens/cube/parse/TestCubeRewriter.java | 15 +++++++++++++++
 3 files changed, 31 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/1b475f2e/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
index 6c3d4c3..bfb65c7 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/HQLParser.java
@@ -732,6 +732,21 @@ public final class HQLParser {
     return false;
   }
 
+  public static boolean isNonAggregateFunctionAST(ASTNode node) {
+    int exprTokenType = node.getToken().getType();
+    if (exprTokenType == HiveParser.TOK_FUNCTION || exprTokenType == 
HiveParser.TOK_FUNCTIONDI
+      || exprTokenType == HiveParser.TOK_FUNCTIONSTAR) {
+      assert (node.getChildCount() != 0);
+      if (node.getChild(0).getType() == HiveParser.Identifier) {
+        String functionName = 
BaseSemanticAnalyzer.unescapeIdentifier(node.getChild(0).getText());
+        if (FunctionRegistry.getGenericUDAFResolver(functionName) == null) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
   /**
    * @param node an ASTNode
    * @return true when input node is a SELECT AST Node. Otherwise, false.

http://git-wip-us.apache.org/repos/asf/lens/blob/1b475f2e/lens-cube/src/main/java/org/apache/lens/cube/parse/SingleFactMultiStorageHQLContext.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/SingleFactMultiStorageHQLContext.java
 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/SingleFactMultiStorageHQLContext.java
index e531e6b..ac56328 100644
--- 
a/lens-cube/src/main/java/org/apache/lens/cube/parse/SingleFactMultiStorageHQLContext.java
+++ 
b/lens-cube/src/main/java/org/apache/lens/cube/parse/SingleFactMultiStorageHQLContext.java
@@ -185,7 +185,7 @@ public class SingleFactMultiStorageHQLContext extends 
UnionHQLContext {
       outerAST.addChild(dotAST);
       innerToOuterASTs.put(new HashableASTNode(innerSelectASTWithoutAlias), 
outerAST);
       return outerAST;
-    } else if (isTableColumnAST(astNode)) {
+    } else if (isTableColumnAST(astNode) || 
isNonAggregateFunctionAST(astNode)) {
       if (innerToOuterASTs.containsKey(new HashableASTNode(astNode))) {
         return innerToOuterASTs.get(new HashableASTNode(astNode));
       }

http://git-wip-us.apache.org/repos/asf/lens/blob/1b475f2e/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
index f02cdb0..61fb73c 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java
@@ -417,6 +417,21 @@ public class TestCubeRewriter extends TestQueryRewrite {
       }
       conf.setBoolean(CubeQueryConfUtil.ENABLE_STORAGES_UNION, true);
 
+      hqlQuery = rewrite("select ascii(cityid) as `City ID`, msr8, msr7 as 
`Third measure` "
+        + "from testCube where cityid = 'a' and zipcode = 'b' and " + 
TWO_MONTHS_RANGE_UPTO_HOURS, conf);
+
+      expected = getExpectedUnionQuery(TEST_CUBE_NAME, storages, provider,
+        "SELECT testcube.alias0 as `City ID`, sum(testcube.alias1) + 
max(testcube.alias2), "
+          + "case when sum(testcube.alias1) = 0 then 0 else 
sum(testcube.alias3)/sum(testcube.alias1) end "
+          + "as `Third Measure`",
+        null, "group by testcube.alias0",
+        "select ascii(testcube.cityid) as `alias0`, sum(testcube.msr2) as 
`alias1`, "
+          + "max(testcube.msr3) as `alias2`, "
+          + "sum(case when testcube.cityid = 'x' then testcube.msr21 else 
testcube.msr22 end) as `alias3`",
+        "testcube.cityid = 'a' and testcube.zipcode = 'b'", "group by 
ascii(testcube.cityid)");
+
+      compareQueries(hqlQuery, expected);
+
       hqlQuery = rewrite("select cityid as `City ID`, msr8, msr7 as `Third 
measure` "
         + "from testCube where cityid = 'a' and zipcode = 'b' and " + 
TWO_MONTHS_RANGE_UPTO_HOURS, conf);
 

Reply via email to