http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionResolver.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionResolver.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionResolver.java
index 5d4e87f..1db3712 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionResolver.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestExpressionResolver.java
@@ -71,7 +71,7 @@ public class TestExpressionResolver extends TestQueryRewrite {
     // select with expression
     String hqlQuery = rewrite("select avgmsr from testCube where " + 
TWO_DAYS_RANGE, conf);
     String expected =
-      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2) 
FROM ", null, null,
+      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2) as 
`avgmsr` FROM ", null, null,
         getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -80,8 +80,8 @@ public class TestExpressionResolver extends TestQueryRewrite {
   public void testCubeQueryExpressionSelectionAlongWithColumn() throws 
Exception {
     String hqlQuery = rewrite("select dim1, roundedmsr2 from testCube" + " 
where " + TWO_DAYS_RANGE, conf);
     String expected =
-      getExpectedQuery(cubeName, "select testcube.dim1, 
round(sum(testcube.msr2)/1000) FROM ", null,
-        " group by testcube.dim1", getWhereForDailyAndHourly2days(cubeName, 
"c1_summary1"));
+      getExpectedQuery(cubeName, "select testcube.dim1 as `dim1`, 
round(sum(testcube.msr2)/1000) as `roundedmsr2` "
+          + "FROM ", null, " group by testcube.dim1", 
getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
   }
@@ -91,7 +91,8 @@ public class TestExpressionResolver extends TestQueryRewrite {
     String hqlQuery = rewrite("select msr2 from testCube" + " where " + 
TWO_DAYS_RANGE + " and substrexpr != 'XYZ'",
       conf);
     String expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, " 
and substr(testCube.dim1, 3) != 'XYZ'",
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `msr2` FROM ", 
null,
+          " and substr(testCube.dim1, 3) != 'XYZ'",
         getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -100,8 +101,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where 
substrexpr != 'XYZ' and " + TWO_DAYS_RANGE,
       conf);
     String expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", 
"substr(testCube.dim1, 3) != 'XYZ'", null,
-        getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `sum(msr2)` 
FROM ", "substr(testCube.dim1, 3) != 'XYZ'",
+          null, getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
   @Test
@@ -110,7 +111,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     String hqlQuery = rewrite("select avgmsr from testCube" + " where " + 
TWO_DAYS_RANGE + " and substrexpr != 'XYZ'",
       conf);
     String expected =
-      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2) 
FROM ", null,
+      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2) as 
`avgmsr` FROM ", null,
         " and substr(testCube.dim1, 3) != 'XYZ'", 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -119,7 +120,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     String hqlQuery = rewrite("select avgmsr from testCube" + " where " + 
TWO_DAYS_RANGE + " and indiasubstr = true",
       conf);
     String expected =
-      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2) 
FROM ", null,
+      getExpectedQuery(cubeName, "select avg(testCube.msr1 + testCube.msr2)  
as `avgmsr` FROM ", null,
         " and (substr(testCube.dim1, 3) = 'INDIA') = true", 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
@@ -130,8 +131,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     String hqlQuery =
       rewrite("select TC.avgmsr from testCube TC" + " where " + TWO_DAYS_RANGE 
+ " and TC.substrexpr != 'XYZ'", conf);
     String expected =
-      getExpectedQuery("tc", "select avg(tc.msr1 + tc.msr2) FROM ", null, " 
and substr(tc.dim1, 3) != 'XYZ'",
-        getWhereForHourly2days("tc", "C1_testfact2_raw"));
+      getExpectedQuery("tc", "select avg(tc.msr1 + tc.msr2) as `avgmsr` FROM ",
+          null, " and substr(tc.dim1, 3) != 'XYZ'", 
getWhereForHourly2days("tc", "C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
   }
@@ -142,7 +143,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select TC.substrexpr as subdim1, TC.avgmsr from testCube TC" + 
" where " + TWO_DAYS_RANGE
         + " and subdim1 != 'XYZ'", conf);
     String expected =
-      getExpectedQuery("tc", "select substr(tc.dim1, 3) as `subdim1`, 
avg(tc.msr1 + tc.msr2) FROM ", null,
+      getExpectedQuery("tc", "select substr(tc.dim1, 3) as `subdim1`, 
avg(tc.msr1 + tc.msr2) as `avgmsr` FROM ", null,
         " and subdim1 != 'XYZ' group by substr(tc.dim1, 3)", 
getWhereForHourly2days("tc", "C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -164,8 +165,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select avgmsr from testCube" + " where " + TWO_DAYS_RANGE
         + " and substrexpr != 'XYZ' group by booleancut", conf);
     String expected =
-      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 ,"
-        + " avg(testCube.msr1 + testCube.msr2) FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ'"
+      getExpectedQuery(cubeName, "SELECT (((testcube.dim1) != 'x') and 
((testcube.dim2) != 10)) as `booleancut`, "
+          + "avg(((testcube.msr1) + (testcube.msr2))) as `avgmsr` FROM ", 
null, " and substr(testCube.dim1, 3) != 'XYZ'"
           + " group by testCube.dim1 != 'x' AND testCube.dim2 != 10", 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -176,8 +177,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select booleancut, avgmsr from testCube" + " where " + 
TWO_DAYS_RANGE + " and substrexpr != 'XYZ'",
         conf);
     String expected =
-      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 ,"
-        + " avg(testCube.msr1 + testCube.msr2) FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
+      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 as `booleancut`,"
+        + " avg(testCube.msr1 + testCube.msr2) as `avgmsr` FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
           + "group by testCube.dim1 != 'x' AND testCube.dim2 != 10", 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
@@ -189,8 +190,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select booleancut, summsrs from testCube" + " where " + 
TWO_DAYS_RANGE + " and substrexpr != 'XYZ'",
         conf);
     String expected =
-      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 ,"
-        + " ((1000 + sum(testCube.msr1) + sum(testCube.msr2))/100) FROM ", 
null,
+      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 as `booleancut`,"
+        + " ((1000 + sum(testCube.msr1) + sum(testCube.msr2))/100) `summsrs` 
FROM ", null,
         " and substr(testCube.dim1, 3) != 'XYZ' group by testCube.dim1 != 'x' 
AND testCube.dim2 != 10",
         getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -210,9 +211,10 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       + "c1_statetable cubestate on" + " testcube.stateid = cubestate.id and 
(cubestate.dt = 'latest')";
 
     String expected =
-      getExpectedQuery(cubeName, "select concat(cubecity.name, \":\", 
cubestate.name),"
-        + " avg(testcube.msr1 + testcube.msr2) FROM ", join2 + join1, null, " 
and substr(testcube.dim1, 3) != 'XYZ'"
-          + " group by concat(cubecity.name, \":\", cubestate.name)", null, 
getWhereForHourly2days("C1_testfact2_raw"));
+      getExpectedQuery(cubeName, "select concat(cubecity.name, \":\", 
cubestate.name)  as `cityandstate`,"
+        + " avg(testcube.msr1 + testcube.msr2) as `avgmsr` FROM ", join2 + 
join1, null,
+          " and substr(testcube.dim1, 3) != 'XYZ' group by 
concat(cubecity.name, \":\", cubestate.name)",
+          null, getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
 
@@ -224,8 +226,9 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
         conf);
 
     String expected =
-      getExpectedQuery(cubeName, "select substr(testcube.concatedcitystate, 
10)"
-        + " avg(testcube.msr1 + testcube.msr2) FROM ", null, null, " and 
substr(testcube.dim1, 3) != 'XYZ'"
+      getExpectedQuery(cubeName, "select substr(testcube.concatedcitystate, 
10) AS `cityandstatenew`, "
+        + " avg(testcube.msr1 + testcube.msr2)  AS `avgmsr` FROM ", null, null,
+        " and substr(testcube.dim1, 3) != 'XYZ'"
         + " group by substr(testcube.concatedcitystate, 10)", null, 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -250,8 +253,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select booleancut, avgmsr from testCube" + " where " + 
TWO_DAYS_RANGE + " and substrexpr != 'XYZ'"
         + " having msr6 > 100.0", conf);
     String expected =
-      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 ,"
-        + " avg(testCube.msr1 + testCube.msr2) FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
+      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 as `booleancut`,"
+        + " avg(testCube.msr1 + testCube.msr2) as `avgmsr` FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
           + " group by testCube.dim1 != 'x' AND testCube.dim2 != 10"
           + " having (sum(testCube.msr2) + max(testCube.msr3))/ 
count(testcube.msr4) > 100.0",
           getWhereForHourly2days("C1_testfact2_raw"));
@@ -265,11 +268,12 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
       rewrite("select avgmsr from testCube " + " where " + TWO_DAYS_RANGE + " 
and substrexpr != 'XYZ'"
         + " group by booleancut having msr6 > 100.0 order by booleancut", 
conf);
     String expected =
-      getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 ,"
-        + " avg(testCube.msr1 + testCube.msr2) FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
+      getExpectedQuery(cubeName, "SELECT (((testcube.dim1) != 'x') and 
((testcube.dim2) != 10)) as `booleancut`, "
+          + "avg(((testcube.msr1) + (testcube.msr2))) as `avgmsr` FROM ", null,
+          " and substr(testCube.dim1, 3) != 'XYZ' "
           + " group by testCube.dim1 != 'x' AND testCube.dim2 != 10"
           + " having (sum(testCube.msr2) + max(testCube.msr3))/ 
count(testcube.msr4) > 100.0"
-          + " order by testCube.dim1 != 'x' AND testCube.dim2 != 10 asc", 
getWhereForHourly2days("C1_testfact2_raw"));
+          + " order by booleancut asc", 
getWhereForHourly2days("C1_testfact2_raw"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
   @Test
@@ -279,7 +283,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
         + " having msr6 > 100.0 order by bc", conf);
     String expected =
       getExpectedQuery(cubeName, "select testCube.dim1 != 'x' AND 
testCube.dim2 != 10 as `bc`,"
-        + " sum(testCube.msr2) FROM ", null, " and substr(testCube.dim1, 3) != 
'XYZ' "
+        + " sum(testCube.msr2) as `msr2` FROM ", null, " and 
substr(testCube.dim1, 3) != 'XYZ' "
           + " group by testCube.dim1 != 'x' AND testCube.dim2 != 10"
           + " having (sum(testCube.msr2) + max(testCube.msr3))/ 
count(testcube.msr4) > 100.0" + " order by bc asc",
           getWhereForDailyAndHourly2days(cubeName, "c1_summary2"));
@@ -293,7 +297,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     newConf.set(CubeQueryConfUtil.getValidFactTablesKey(cubeName), "testFact");
     String hqlQuery = rewrite("select equalsums from testCube where " + 
TWO_DAYS_RANGE, newConf);
     String expected =
-      getExpectedQuery(cubeName, "select max(testcube.msr3) + 
count(testcube.msr4) FROM ", null, null,
+      getExpectedQuery(cubeName, "select max(testcube.msr3) + 
count(testcube.msr4) as `equalsums` FROM ", null, null,
         getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -301,8 +305,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
   @Test
   public void testMultipleExpressionsPickingSecondExpression() throws 
Exception {
     String hqlQuery = rewrite("select equalsums from testCube where " + 
TWO_DAYS_RANGE, conf);
-    String expected = getExpectedQuery(cubeName, "select (max(testCube.msr3) + 
sum(testCube.msr2))/100 FROM ", null,
-      null, getWhereForHourly2days(cubeName, "C1_testfact2"));
+    String expected = getExpectedQuery(cubeName, "select (max(testCube.msr3) + 
sum(testCube.msr2))/100 "
+        + "as `equalsums` FROM ", null, null, getWhereForHourly2days(cubeName, 
"C1_testfact2"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
 
@@ -310,8 +314,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
   public void testMaterializedExpressionPickingExpression() throws Exception {
     // select with expression
     String hqlQuery = rewrite("select msr5 from testCube where " + 
TWO_DAYS_RANGE, conf);
-    String expected = getExpectedQuery(cubeName, "select sum(testCube.msr2) + 
max(testCube.msr3) FROM ", null, null,
-      getWhereForHourly2days(cubeName, "C1_testfact2"));
+    String expected = getExpectedQuery(cubeName, "select (sum(testCube.msr2) + 
max(testCube.msr3)) as `msr5` FROM ",
+      null, null, getWhereForHourly2days(cubeName, "C1_testfact2"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
 
@@ -333,7 +337,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     newConf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
     newConf.set(CubeQueryConfUtil.getValidFactTablesKey(cubeName), "testFact");
     String hqlQuery = rewrite("select msr5 from testCube where " + 
TWO_DAYS_RANGE, newConf);
-    String expected = getExpectedQuery(cubeName, "select testcube.msr5 FROM ", 
null, null,
+    String expected = getExpectedQuery(cubeName, "select testcube.msr5 as 
`msr5` FROM ", null, null,
       getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -342,8 +346,8 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
   public void testExprDimAttribute() throws Exception {
     // select with expression
     String hqlQuery = rewrite("select substrexpr from testCube where " + 
TWO_DAYS_RANGE, conf);
-    String expected = getExpectedQuery(cubeName, "select distinct 
substr(testCube.dim1, 3) FROM ", null, null,
-      getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
+    String expected = getExpectedQuery(cubeName, "select distinct 
substr(testCube.dim1, 3) as `substrexpr` "
+        + "FROM ", null, null, getWhereForDailyAndHourly2days(cubeName, 
"c1_summary1"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
 
@@ -462,7 +466,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecolmsr2expr from testCube where " + 
TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as 
`singlecolmsr2expr` FROM ", null, null,
         getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }
@@ -474,7 +478,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecoldim1expr from testCube where " + 
TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select distinct testcube.dim1 FROM ", null, 
null,
+      getExpectedQuery(cubeName, "select distinct testcube.dim1 as 
`singlecoldim1expr` FROM ", null, null,
         getWhereForDailyAndHourly2days(cubeName, "c1_summary1"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }
@@ -498,7 +502,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecoldim1qualifiedexpr from testCube where " + 
TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select distinct testcube.dim1 FROM ", null, 
null,
+      getExpectedQuery(cubeName, "select distinct testcube.dim1 as 
`singlecoldim1qualifiedexpr` FROM ", null, null,
         getWhereForDailyAndHourly2days(cubeName, "C1_summary1"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }
@@ -508,9 +512,10 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     Configuration tconf = new Configuration(conf);
     tconf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
     CubeQueryContext rewrittenQuery =
-      rewriteCtx("select singlecolchainid from testCube where " + 
TWO_DAYS_RANGE_IT, tconf);
+      rewriteCtx("select singlecolchainid from testCube where "
+          + TWO_DAYS_RANGE_IT, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select distinct dim3chain.id FROM ",
+      getExpectedQuery(cubeName, "select distinct dim3chain.id as 
`singlecolchainid` FROM ",
         " join " + getDbName() + "c2_testdim3tbl dim3chain on 
testcube.testdim3id = dim3chain.id",
         null, null, null,
         getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", 
"C2_summary1"));
@@ -524,7 +529,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecolchainrefexpr from testCube where " + 
TWO_DAYS_RANGE_IT, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select distinct testcube.testdim3id FROM ", 
null, null,
+      getExpectedQuery(cubeName, "select distinct testcube.testdim3id as 
`singlecolchainrefexpr` FROM ", null, null,
         getWhereForDailyAndHourly2daysWithTimeDim(cubeName, "it", 
"C2_summary1"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }
@@ -536,7 +541,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecolchainfield from testCube where " + 
TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select distinct cubecity.name FROM ",
+      getExpectedQuery(cubeName, "select distinct cubecity.name as 
`singlecolchainfield` FROM ",
         " join " + getDbName() + "c2_citytable cubecity ON testcube.cityid = 
cubecity.id",
         null, null, null, getWhereForDailyAndHourly2days(cubeName, 
"C2_testfact"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
@@ -574,7 +579,7 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     CubeQueryContext rewrittenQuery =
       rewriteCtx("select singlecolmsr2qualifiedexpr from testCube where " + 
TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as 
`singlecolmsr2qualifiedexpr` FROM ", null, null,
         getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }
@@ -584,9 +589,10 @@ public class TestExpressionResolver extends 
TestQueryRewrite {
     Configuration tconf = new Configuration(conf);
     tconf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
     CubeQueryContext rewrittenQuery =
-      rewriteCtx("select singlecolmsr2qualifiedexpr from testCube tc where " + 
TWO_DAYS_RANGE, tconf);
+      rewriteCtx("select singlecolmsr2qualifiedexpr as 
`singlecolmsr2qualifiedexpr` from testCube tc where "
+          + TWO_DAYS_RANGE, tconf);
     String expected =
-      getExpectedQuery("tc", "select sum(tc.msr2) FROM ", null, null,
+      getExpectedQuery("tc", "select sum(tc.msr2) as 
`singlecolmsr2qualifiedexpr` FROM ", null, null,
         getWhereForDailyAndHourly2days("tc", "C2_testfact"));
     TestCubeRewriter.compareQueries(rewrittenQuery.toHQL(), expected);
   }

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestJoinResolver.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestJoinResolver.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestJoinResolver.java
index 677d641..f5ddf7b 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestJoinResolver.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestJoinResolver.java
@@ -19,16 +19,18 @@
 
 package org.apache.lens.cube.parse;
 
-import static org.apache.lens.cube.metadata.DateFactory.*;
+import static org.apache.lens.cube.metadata.DateFactory.TWO_DAYS_RANGE;
 import static org.apache.lens.cube.parse.CubeTestSetup.*;
 import static org.apache.lens.cube.parse.TestCubeRewriter.compareQueries;
 
-import static org.testng.Assert.*;
-
-import java.util.*;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 import org.apache.lens.cube.error.LensCubeErrorCode;
-import org.apache.lens.cube.metadata.*;
+import org.apache.lens.cube.metadata.CubeMetastoreClient;
+import org.apache.lens.cube.metadata.Dimension;
 import org.apache.lens.server.api.error.LensException;
 
 import org.apache.commons.lang.StringUtils;
@@ -61,7 +63,15 @@ public class TestJoinResolver extends TestQueryRewrite {
   }
 
   private String getAutoResolvedFromString(CubeQueryContext query) throws 
LensException {
-    return query.getHqlContext().getFrom();
+    String from = null;
+    if (query.getPickedCandidate() instanceof StorageCandidate) {
+      StorageCandidate sc = (StorageCandidate) query.getPickedCandidate();
+      from =  sc.getFromString();
+      // Dim only query
+    } else if (query.getPickedCandidate() == null) {
+      from = query.getHqlContext().getFrom();
+    }
+    return from;
   }
 
   @Test
@@ -133,8 +143,9 @@ public class TestJoinResolver extends TestQueryRewrite {
         + " right outer join testDim4 on testdim3.testdim4id = testdim4.id and 
testDim4.name='TESTDIM4NAME'"
         + " WHERE " + TWO_DAYS_RANGE;
     String hqlQuery = rewrite(query, hconf);
-    String expected = getExpectedQuery("testcube", "select citydim.name, 
testDim4.name, sum(testcube.msr2) FROM ",
-      " left outer JOIN " + getDbName() + "c1_citytable citydim on 
testcube.cityid = citydim.id +"
+    String expected = getExpectedQuery("testcube", "SELECT (citydim.name) as 
`name`, (testdim4.name) as `name`, "
+        + "sum((testcube.msr2)) as `msr2` FROM ",
+        " left outer JOIN " + getDbName() + "c1_citytable citydim on 
testcube.cityid = citydim.id +"
         + " and (( citydim . name ) =  'FOOBAR' ) and (citydim.dt = 'latest')"
         + " right outer join " + getDbName()
         + "c1_testdim2tbl testdim2 on testcube.dim2 = testdim2.id and 
(testdim2.dt = 'latest')"
@@ -175,8 +186,8 @@ public class TestJoinResolver extends TestQueryRewrite {
     String query = "select cubecity.name, msr2 FROM testCube WHERE " + 
TWO_DAYS_RANGE;
     String hqlQuery = rewrite(query, tConf);
     // Check that aliases are preserved in the join clause
-    String expected = getExpectedQuery("testcube", "select cubecity.name, 
sum(testcube.msr2) FROM ",
-      " left outer join " + getDbName()
+    String expected = getExpectedQuery("testcube", "SELECT (cubecity.name) as 
`name`, sum((testcube.msr2)) "
+        + "as `msr2` FROM ", " left outer join " + getDbName()
         + "c1_citytable cubecity ON testcube.cityid = cubecity.id and 
(cubecity.dt = 'latest')",
       null, " group by cubecity.name", null, 
getWhereForHourly2days("testcube", "c1_testfact2"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -184,7 +195,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     tConf.set(CubeQueryConfUtil.JOIN_TYPE_KEY, "FULLOUTER");
     hqlQuery = rewrite(query, tConf);
     // Check that aliases are preserved in the join clause
-    expected = getExpectedQuery("testcube", "select cubecity.name, 
sum(testcube.msr2) FROM ",
+    expected = getExpectedQuery("testcube", "select cubecity.name as `name`, 
sum(testcube.msr2) as `msr2` FROM ",
       " full outer join " + getDbName()
         + "c1_citytable cubecity ON testcube.cityid = cubecity.id and 
(cubecity.dt = 'latest')",
       null, " group by cubecity.name", null, 
getWhereForHourly2days("testcube", "c1_testfact2"));
@@ -193,7 +204,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     tConf.set(CubeQueryConfUtil.JOIN_TYPE_KEY, "RIGHTOUTER");
     hqlQuery = rewrite(query, tConf);
     // Check that aliases are preserved in the join clause
-    expected = getExpectedQuery("testcube", "select cubecity.name, 
sum(testcube.msr2) FROM ",
+    expected = getExpectedQuery("testcube", "select cubecity.name as `name`, 
sum(testcube.msr2) as `msr2` FROM ",
       " right outer join " + getDbName()
         + "c1_citytable cubecity ON testcube.cityid = cubecity.id",
       null, " and (cubecity.dt = 'latest') group by cubecity.name", null,
@@ -209,7 +220,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     String hqlQuery = rewrite(query, tConf);
     // Check that aliases are preserved in the join clause
     // Conf will be ignored in this case since user has specified the join 
condition
-    String expected = getExpectedQuery("t", "select c.name, sum(t.msr2) FROM ",
+    String expected = getExpectedQuery("t", "select c.name as `name`, 
sum(t.msr2) as `msr2` FROM ",
       " inner join " + getDbName() + "c1_citytable c ON t.cityid = c.id and 
c.dt = 'latest'",
       null, " group by c.name", null, getWhereForHourly2days("t", 
"c1_testfact2"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -222,7 +233,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     String query = "select cubecity.name, t.msr2 FROM testCube t WHERE " + 
TWO_DAYS_RANGE;
     String hqlQuery = rewrite(query, tConf);
     // Check that aliases are preserved in the join clause
-    String expected = getExpectedQuery("t", "select cubecity.name, sum(t.msr2) 
FROM ",
+    String expected = getExpectedQuery("t", "select cubecity.name as `name`, 
sum(t.msr2) as `msr2` FROM ",
       " left outer join " + getDbName()
         + "c1_citytable cubecity ON t.cityid = cubecity.id and (cubecity.dt = 
'latest')",
       null, " group by cubecity.name", null, getWhereForHourly2days("t", 
"c1_testfact2"));
@@ -324,7 +335,8 @@ public class TestJoinResolver extends TestQueryRewrite {
     // Single joinchain with direct link
     query = "select cubestate.name, sum(msr2) from basecube where " + 
TWO_DAYS_RANGE + " group by cubestate.name";
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select cubestate.name, 
sum(basecube.msr2) FROM ",
+    expected = getExpectedQuery("basecube", "SELECT (cubestate.name) as 
`name`, sum((basecube.msr2)) "
+        + "as `sum(msr2)` FROM ",
       " join " + getDbName() + "c1_statetable cubestate ON 
basecube.stateid=cubeState.id and cubeState.dt= 'latest'",
       null, "group by cubestate.name",
       null, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base"));
@@ -333,8 +345,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // Single joinchain with two chains
     query = "select citystate.name, sum(msr2) from basecube where " + 
TWO_DAYS_RANGE + " group by citystate.name";
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select citystate.name, 
sum(basecube.msr2) FROM ",
-      " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
+    expected = getExpectedQuery("basecube", "SELECT (citystate.name) as 
`name`, sum((basecube.msr2)) "
+        + "as `sum(msr2)` FROM ",
+        " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable cityState ON 
citydim.stateid=cityState.id and cityState.dt= 'latest'",
       null, "group by citystate.name",
       null, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base"));
@@ -343,9 +356,11 @@ public class TestJoinResolver extends TestQueryRewrite {
     // Single joinchain with two chains, accessed as refcolumn
     query = "select cityStateCapital, sum(msr2) from basecube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select citystate.capital, 
sum(basecube.msr2) FROM ",
-      " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
-        + " join " + getDbName() + "c1_statetable cityState ON 
citydim.stateid=cityState.id and cityState.dt= 'latest'",
+    expected = getExpectedQuery("basecube", "SELECT (citystate.capital) as 
`citystatecapital`, "
+        + "sum((basecube.msr2)) as `sum(msr2)` FROM ",
+        " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
+        + " join " + getDbName() + "c1_statetable cityState ON 
citydim.stateid=cityState.id "
+        + "and cityState.dt= 'latest'",
       null, "group by citystate.capital",
       null, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -358,18 +373,20 @@ public class TestJoinResolver extends TestQueryRewrite {
     // Adding Order by
     query = "select cityStateCapital, sum(msr2) from basecube where " + 
TWO_DAYS_RANGE + " order by cityStateCapital";
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select citystate.capital, 
sum(basecube.msr2) FROM ",
-      " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
+    expected = getExpectedQuery("basecube", "SELECT (citystate.capital) as 
`citystatecapital`, "
+        + "sum((basecube.msr2)) as `sum(msr2)` FROM ", " join "
+        + getDbName() + "c1_citytable citydim ON baseCube.cityid = citydim.id 
and citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable cityState ON 
citydim.stateid=cityState.id and cityState.dt= 'latest'",
-      null, "group by citystate.capital order by citystate.capital asc",
+      null, "group by citystate.capital order by citystatecapital",
       null, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base"));
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
     // Single joinchain, but one column accessed as refcol and another as 
chain.column
     query = "select citystate.name, cityStateCapital, sum(msr2) from basecube 
where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select citystate.name, 
citystate.capital, sum(basecube.msr2) FROM ",
-      " join " + getDbName() + "c1_citytable citydim ON baseCube.cityid = 
citydim.id and citydim.dt = 'latest'"
+    expected = getExpectedQuery("basecube", "SELECT (citystate.name) as 
`name`, (citystate.capital) "
+        + "as `citystatecapital`, sum((basecube.msr2)) as `sum(msr2)` FROM ", 
" join "
+        + getDbName() + "c1_citytable citydim ON baseCube.cityid = citydim.id 
and citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable cityState ON 
citydim.stateid=cityState.id and cityState.dt= 'latest'",
       null, "group by citystate.name, citystate.capital",
       null, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base"));
@@ -379,7 +396,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     query = "select cubeState.name, cubecity.name, sum(msr2) from basecube 
where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
     expected = getExpectedQuery("basecube",
-      "select cubestate.name, cubecity.name, sum(basecube.msr2) FROM ",
+      "SELECT (cubestate.name) as `name`, (cubecity.name) as `name`, 
sum((basecube.msr2)) as `sum(msr2)` FROM ",
       " join " + getDbName() + "c1_statetable cubestate on basecube.stateid = 
cubestate.id and cubestate.dt = 'latest'"
         + " join " + getDbName() + "c1_citytable cubecity on basecube.cityid = 
cubecity.id and cubecity.dt = 'latest'",
       null, "group by cubestate.name,cubecity.name", null,
@@ -390,8 +407,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // Multiple join chains with same destination table
     query = "select cityState.name, cubeState.name, sum(msr2) from basecube 
where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("basecube", "select citystate.name, 
cubestate.name, sum(basecube.msr2) FROM ",
-      " join " + getDbName() + "c1_statetable cubestate on 
basecube.stateid=cubestate.id and cubestate.dt='latest'"
+    expected = getExpectedQuery("basecube", "SELECT (citystate.name) as 
`name`, (cubestate.name) "
+        + "as `name`, sum((basecube.msr2)) as `sum(msr2)` FROM ", " join " + 
getDbName()
+        + "c1_statetable cubestate on basecube.stateid=cubestate.id and 
cubestate.dt='latest'"
         + " join " + getDbName() + "c1_citytable citydim on basecube.cityid = 
citydim.id and "
         + "citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable citystate on citydim.stateid 
= citystate.id and "
@@ -405,8 +423,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     query = "select cubestate.name, cityStateCapital, sum(msr2) from basecube 
where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
     expected = getExpectedQuery("basecube",
-      "select cubestate.name, citystate.capital, sum(basecube.msr2) FROM ",
-      ""
+      "SELECT (cubestate.name) as `name`, (citystate.capital) as 
`citystatecapital`, "
+          + "sum((basecube.msr2)) as `sum(msr2)` FROM ",
+        ""
         + " join " + getDbName() + "c1_statetable cubestate on 
basecube.stateid=cubestate.id and cubestate.dt='latest'"
         + " join " + getDbName() + "c1_citytable citydim on basecube.cityid = 
citydim.id and citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable citystate on 
citydim.stateid=citystate.id and citystate.dt='latest'"
@@ -420,7 +439,7 @@ public class TestJoinResolver extends TestQueryRewrite {
     query = "select cityState.name, cityZip.f1, sum(msr2) from basecube where 
" + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
     expected = getExpectedQuery("basecube",
-      "select citystate.name, cityzip.f1, sum(basecube.msr2) FROM ",
+      "SELECT (citystate.name) as `name`, (cityzip.f1) as `f1`, 
sum((basecube.msr2)) as `sum(msr2)` FROM ",
       " join " + getDbName() + "c1_citytable citydim on basecube.cityid = 
citydim.id and "
         + "citydim.dt = 'latest'"
         + " join " + getDbName() + "c1_statetable citystate on citydim.stateid 
= citystate.id and "
@@ -437,8 +456,8 @@ public class TestJoinResolver extends TestQueryRewrite {
     query = "select cubeStateCountry.name, cubeCityStateCountry.name, 
sum(msr2) from basecube where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
     expected = getExpectedQuery("basecube",
-      "select cubestatecountry.name, cubecitystatecountry.name, 
sum(basecube.msr2) FROM ",
-      ""
+      "SELECT (cubestatecountry.name) as `name`, (cubecitystatecountry.name) 
as `name`, sum((basecube.msr2)) "
+        + "as `sum(msr2)` FROM ", ""
         + " join " + getDbName() + "c1_citytable citydim on basecube.cityid = 
citydim.id and (citydim.dt = 'latest')"
         + " join " + getDbName()
         + "c1_statetable statedim_0 on citydim.stateid=statedim_0.id and 
statedim_0.dt='latest'"
@@ -554,7 +573,8 @@ public class TestJoinResolver extends TestQueryRewrite {
 
     query = "select dim3chain.name, sum(msr2) from testcube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim3chain.name, 
sum(testcube.msr2) FROM ",
+    expected = getExpectedQuery("testcube", "SELECT (dim3chain.name) as 
`name`, sum((testcube.msr2)) "
+        + "as `sum(msr2)` FROM ",
       " join " + getDbName() + "c1_testdim3tbl dim3chain ON 
testcube.testdim3id=dim3chain.id and dim3chain.dt='latest'",
       null, "group by dim3chain.name",
       null, getWhereForDailyAndHourly2days("testcube", "c1_summary1"));
@@ -563,8 +583,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // hit a fact where there is no direct path
     query = "select dim3chain.name, avg(msr2) from testcube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim3chain.name, 
avg(testcube.msr2) FROM ",
-      " join " + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
+    expected = getExpectedQuery("testcube", "SELECT (dim3chain.name) as 
`name`, avg((testcube.msr2)) "
+        + "as `avg(msr2)` FROM ", " join "
+        + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
         + " join " + getDbName() + "c1_testdim3tbl dim3chain "
         + "ON testdim2.testdim3id = dim3chain.id and dim3chain.dt = 'latest'",
       null, "group by dim3chain.name",
@@ -574,8 +595,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // resolve denorm variable through multi hop chain paths
     query = "select testdim3id, avg(msr2) from testcube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim3chain.id, 
avg(testcube.msr2) FROM ",
-      " join " + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
+    expected = getExpectedQuery("testcube", "SELECT (dim3chain.id) as 
`testdim3id`, avg((testcube.msr2)) "
+        + "as `avg(msr2)` FROM", " join "
+        + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
         + " join " + getDbName() + "c1_testdim3tbl dim3chain "
         + "ON testdim2.testdim3id = dim3chain.id and dim3chain.dt = 'latest'",
       null, "group by dim3chain.id",
@@ -585,8 +607,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // tests from multiple different chains
     query = "select dim4chain.name, testdim3id, avg(msr2) from testcube where 
" + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim4chain.name, 
dim3chain.id, avg(testcube.msr2) FROM ",
-      " join " + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
+    expected = getExpectedQuery("testcube", "select dim4chain.name as `name`, 
dim3chain.id as `testdim3id`, "
+        + "avg(testcube.msr2) as `avg(msr2)` FROM ", " join "
+        + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
         + " join " + getDbName()
         + "c1_testdim3tbl dim3chain ON testdim2.testdim3id=dim3chain.id and 
dim3chain.dt='latest'"
         + " join " + getDbName() + "c1_testdim4tbl dim4chain ON 
dim3chain.testDim4id = dim4chain.id and"
@@ -596,9 +619,10 @@ public class TestJoinResolver extends TestQueryRewrite {
 
     query = "select cubecity.name, dim4chain.name, testdim3id, avg(msr2) from 
testcube where " + TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select cubecity.name, 
dim4chain.name, dim3chain.id, avg(testcube.msr2) "
-        + "FROM ",
-      " join " + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
+    expected = getExpectedQuery("testcube", "select cubecity.name as `name`, 
dim4chain.name as `name`, "
+        + "dim3chain.id as `testdim3id`, avg(testcube.msr2) as `avg(msr2)`"
+        + "FROM ", " join "
+        + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
         + " join " + getDbName()
         + "c1_testdim3tbl dim3chain ON testdim2.testdim3id=dim3chain.id and 
dim3chain.dt='latest'"
         + " join " + getDbName() + "c1_testdim4tbl dim4chain ON 
dim3chain.testDim4id = dim4chain.id and"
@@ -611,8 +635,9 @@ public class TestJoinResolver extends TestQueryRewrite {
     // test multi hops
     query = "select dim4chain.name, avg(msr2) from testcube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim4chain.name, 
avg(testcube.msr2) FROM ",
-      " join " + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
+    expected = getExpectedQuery("testcube", "select dim4chain.name as `name`, 
avg(testcube.msr2) "
+        + "as `avg(msr2)` FROM ", " join "
+        + getDbName() + "c1_testdim2tbl testdim2 ON testcube.dim2 = 
testdim2.id and testdim2.dt = 'latest'"
         + " join " + getDbName() + "c1_testdim3tbl testdim3 ON 
testdim2.testdim3id=testdim3.id and testdim3.dt='latest'"
         + " join " + getDbName() + "c1_testdim4tbl dim4chain ON 
testdim3.testDim4id = dim4chain.id and"
         + " dim4chain.dt = 'latest'", null, "group by dim4chain.name", null,
@@ -621,7 +646,7 @@ public class TestJoinResolver extends TestQueryRewrite {
 
     query = "select dim4chain.name, sum(msr2) from testcube where " + 
TWO_DAYS_RANGE;
     hqlQuery = rewrite(query, hconf);
-    expected = getExpectedQuery("testcube", "select dim4chain.name, 
sum(testcube.msr2) FROM ",
+    expected = getExpectedQuery("testcube", "select dim4chain.name as `name`, 
sum(testcube.msr2) as `sum(msr2)` FROM ",
       " join " + getDbName() + "c1_testdim3tbl testdim3 ON testcube.testdim3id 
= testdim3.id and testdim3.dt = 'latest'"
         + " join " + getDbName() + "c1_testdim4tbl dim4chain ON 
testdim3.testDim4id = dim4chain.id and"
         + " dim4chain.dt = 'latest'", null, "group by dim4chain.name", null,

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
index 27a18f4..3883bee 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQueryMetrics.java
@@ -21,8 +21,6 @@ package org.apache.lens.cube.parse;
 
 import static org.apache.lens.cube.metadata.DateFactory.TWO_DAYS_RANGE;
 
-import java.util.Arrays;
-
 import org.apache.lens.server.api.LensConfConstants;
 import org.apache.lens.server.api.metrics.LensMetricsRegistry;
 
@@ -32,6 +30,7 @@ import org.testng.Assert;
 import org.testng.annotations.Test;
 
 import com.codahale.metrics.MetricRegistry;
+import jersey.repackaged.com.google.common.collect.Sets;
 
 public class TestQueryMetrics extends TestQueryRewrite {
 
@@ -44,28 +43,30 @@ public class TestQueryMetrics extends TestQueryRewrite {
     rewriteCtx("select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, 
conf);
     MetricRegistry reg = LensMetricsRegistry.getStaticRegistry();
 
-    Assert.assertTrue(reg.getGauges().keySet().containsAll(Arrays.asList(
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AggregateResolver-ITER-6",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AliasReplacer-ITER-1",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-11",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-5",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnResolver-ITER-0",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-16",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-3",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-17",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-2",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.FieldValidator-ITER-8",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.GroupbyResolver-ITER-7",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.JoinResolver-ITER-9",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-19",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-20",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-18",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.MaxCoveringFactResolver-ITER-14",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-12",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-13",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-15",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.TimeRangeChecker-ITER-10",
-        
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.TimerangeResolver-ITER-4")
-    ), reg.getGauges().keySet().toString());
+    Assert.assertEquals(reg.getGauges().keySet(), Sets.newHashSet(
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnResolver-ITER-0",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AliasReplacer-ITER-1",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-2",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-3",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.TimerangeResolver-ITER-4",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-5",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.AggregateResolver-ITER-6",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.GroupbyResolver-ITER-7",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.FieldValidator-ITER-8",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.JoinResolver-ITER-9",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ColumnLifetimeChecker-ITER-10",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-11",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.CandidateTableResolver-ITER-12",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse."
+        + "CandidateCoveringSetsResolver-ITER-13",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-14",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.MaxCoveringFactResolver-ITER-15",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.StorageTableResolver-ITER-16",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.DenormalizationResolver-ITER-17",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.ExpressionResolver-ITER-18",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestFactResolver-ITER-19",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LeastPartitionResolver-ITER-20",
+      
"lens.MethodMetricGauge.testCubeRewriteStackName-org.apache.lens.cube.parse.LightestDimensionResolver-ITER-21"
+    ));
   }
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
index 7f26b24..76ea77d 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestRewriterPlan.java
@@ -59,8 +59,8 @@ public class TestRewriterPlan extends TestQueryRewrite {
     
Assert.assertTrue(plan.getTablesQueried().contains("TestQueryRewrite.c2_testfact"));
     
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c2_testfact"), 
1.0);
     Assert.assertFalse(plan.getPartitions().isEmpty());
-    Assert.assertFalse(plan.getPartitions().get("testfact").isEmpty());
-    Assert.assertTrue(plan.getPartitions().get("testfact").size() > 1);
+    Assert.assertFalse(plan.getPartitions().get("c2_testfact").isEmpty());
+    Assert.assertTrue(plan.getPartitions().get("c2_testfact").size() > 1);
   }
 
   @Test
@@ -79,8 +79,8 @@ public class TestRewriterPlan extends TestQueryRewrite {
     
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_testfact2"),
 1.0);
     
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_citytable"),
 100.0);
     Assert.assertFalse(plan.getPartitions().isEmpty());
-    Assert.assertFalse(plan.getPartitions().get("testfact2").isEmpty());
-    Assert.assertTrue(plan.getPartitions().get("testfact2").size() > 1);
+    Assert.assertFalse(plan.getPartitions().get("c1_testfact2").isEmpty());
+    Assert.assertTrue(plan.getPartitions().get("c1_testfact2").size() > 1);
     Assert.assertFalse(plan.getPartitions().get("citytable").isEmpty());
     Assert.assertEquals(plan.getPartitions().get("citytable").size(), 1);
   }
@@ -103,8 +103,8 @@ public class TestRewriterPlan extends TestQueryRewrite {
     
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_testfact2"),
 1.0);
     
Assert.assertEquals(plan.getTableWeights().get("TestQueryRewrite.c1_citytable"),
 100.0);
     Assert.assertFalse(plan.getPartitions().isEmpty());
-    Assert.assertFalse(plan.getPartitions().get("testfact2").isEmpty());
-    Assert.assertTrue(plan.getPartitions().get("testfact2").size() > 1);
+    Assert.assertFalse(plan.getPartitions().get("c1_testfact2").isEmpty());
+    Assert.assertTrue(plan.getPartitions().get("c1_testfact2").size() > 1);
     Assert.assertFalse(plan.getPartitions().get("citytable").isEmpty());
     Assert.assertEquals(plan.getPartitions().get("citytable").size(), 1);
   }

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java
index 280a8c4..d3938c1 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeResolver.java
@@ -20,19 +20,13 @@
 package org.apache.lens.cube.parse;
 
 import static org.apache.lens.cube.metadata.DateFactory.*;
-import static 
org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.COLUMN_NOT_FOUND;
-import static 
org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.FACT_NOT_AVAILABLE_IN_RANGE;
+import static 
org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.TIME_RANGE_NOT_ANSWERABLE;
+import static 
org.apache.lens.cube.parse.CandidateTablePruneCause.CandidateTablePruneCode.UNSUPPORTED_STORAGE;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
 
-import java.util.Calendar;
-import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
-import org.apache.lens.cube.error.NoCandidateFactAvailableException;
-import org.apache.lens.cube.metadata.TimeRange;
 import org.apache.lens.server.api.LensConfConstants;
 import org.apache.lens.server.api.error.LensException;
 
@@ -44,7 +38,6 @@ import org.joda.time.DateTime;
 import org.testng.annotations.BeforeTest;
 import org.testng.annotations.Test;
 
-import com.google.common.collect.Sets;
 
 public class TestTimeRangeResolver extends TestQueryRewrite {
 
@@ -69,23 +62,9 @@ public class TestTimeRangeResolver extends TestQueryRewrite {
 
   @Test
   public void testFactValidity() throws ParseException, LensException, 
HiveException, ClassNotFoundException {
-    LensException e =
-      getLensExceptionInRewrite("select msr2 from " + cubeName + " where " + 
LAST_YEAR_RANGE,
-        getConf());
-    NoCandidateFactAvailableException ne = (NoCandidateFactAvailableException) 
e;
-    PruneCauses.BriefAndDetailedError causes = ne.getJsonMessage();
-    assertTrue(causes.getBrief().contains("Columns [msr2] are not present in 
any table"));
-    assertEquals(causes.getDetails().size(), 2);
-
-    Set<CandidateTablePruneCause.CandidateTablePruneCode> expectedPruneCodes = 
Sets.newTreeSet();
-    expectedPruneCodes.add(FACT_NOT_AVAILABLE_IN_RANGE);
-    expectedPruneCodes.add(COLUMN_NOT_FOUND);
-    Set<CandidateTablePruneCause.CandidateTablePruneCode> actualPruneCodes = 
Sets.newTreeSet();
-    for (List<CandidateTablePruneCause> cause : causes.getDetails().values()) {
-      assertEquals(cause.size(), 1);
-      actualPruneCodes.add(cause.iterator().next().getCause());
-    }
-    assertEquals(actualPruneCodes, expectedPruneCodes);
+    String query = "select msr2 from " + cubeName + " where "  + 
LAST_YEAR_RANGE;
+    LensException e = getLensExceptionInRewrite(query, getConf());
+    assertEquals(e.getErrorInfo().getErrorName(), 
"NO_UNION_CANDIDATE_AVAILABLE");
   }
 
   @Test
@@ -93,13 +72,28 @@ public class TestTimeRangeResolver extends TestQueryRewrite 
{
     CubeQueryContext ctx =
       rewriteCtx("select msr12 from basecube where " + TWO_DAYS_RANGE + " or " 
+ TWO_DAYS_RANGE_BEFORE_4_DAYS,
         getConf());
-    
assertEquals(ctx.getFactPruningMsgs().get(ctx.getMetastoreClient().getCubeFact("testfact_deprecated")).size(),
 1);
-    CandidateTablePruneCause pruningMsg =
-      
ctx.getFactPruningMsgs().get(ctx.getMetastoreClient().getCubeFact("testfact_deprecated")).get(0);
+    List<CandidateTablePruneCause> causes = 
findPruningMessagesForStorage("c3_testfact_deprecated",
+      ctx.getStoragePruningMsgs());
+    assertEquals(causes.size(), 1);
+    assertEquals(causes.get(0).getCause(), UNSUPPORTED_STORAGE);
+
+    causes = findPruningMessagesForStorage("c4_testfact_deprecated",
+      ctx.getStoragePruningMsgs());
+    assertEquals(causes.size(), 1);
+    assertEquals(causes.get(0).getCause(), UNSUPPORTED_STORAGE);
+
     // testfact_deprecated's validity should be in between of both ranges. So 
both ranges should be in the invalid list
     // That would prove that parsing of properties has gone through 
successfully
-    assertEquals(pruningMsg.getCause(), FACT_NOT_AVAILABLE_IN_RANGE);
-    assertTrue(pruningMsg.getInvalidRanges().containsAll(ctx.getTimeRanges()));
+
+    causes = findPruningMessagesForStorage("c1_testfact_deprecated",
+      ctx.getStoragePruningMsgs());
+    assertEquals(causes.size(), 1);
+    assertEquals(causes.get(0).getCause(), TIME_RANGE_NOT_ANSWERABLE);
+
+    causes = findPruningMessagesForStorage("c2_testfact_deprecated",
+      ctx.getStoragePruningMsgs());
+    assertEquals(causes.size(), 1);
+    assertEquals(causes.get(0).getCause(), TIME_RANGE_NOT_ANSWERABLE);
   }
 
   @Test
@@ -107,12 +101,25 @@ public class TestTimeRangeResolver extends 
TestQueryRewrite {
     Configuration conf = getConf();
     DateTime dt = new DateTime(1990, 3, 23, 12, 0, 0, 0);
     conf.setLong(LensConfConstants.QUERY_CURRENT_TIME_IN_MILLIS, 
dt.getMillis());
-    CubeQueryContext ctx = rewriteCtx("select msr12 from basecube where 
time_range_in(d_time, 'now.day-275days','now')",
-        conf);
-    TimeRange timeRange = ctx.getTimeRanges().get(0);
-    // Month starts from zero.
-    Calendar from = new GregorianCalendar(1989, 5, 21, 0, 0, 0);
-    assertEquals(timeRange.getFromDate(), from.getTime());
-    assertEquals(timeRange.getToDate(), dt.toDate());
+    String query = "select msr12 from basecube where time_range_in(d_time, 
'now.day-275days','now')";
+    LensException e = getLensExceptionInRewrite(query, conf);
+    assertEquals(e.getMessage(), "NO_CANDIDATE_FACT_AVAILABLE[Range not 
answerable]");
   }
+
+  /**
+   *
+   * @param stoargeName  storageName_factName
+   * @param allStoragePruningMsgs
+   * @return
+   */
+  private static List<CandidateTablePruneCause> 
findPruningMessagesForStorage(String stoargeName,
+    PruneCauses<StorageCandidate> allStoragePruningMsgs) {
+    for (StorageCandidate sc : allStoragePruningMsgs.keySet()) {
+      if (sc.getStorageTable().equals(stoargeName)) {
+        return allStoragePruningMsgs.get(sc);
+      }
+    }
+    return  new ArrayList<CandidateTablePruneCause>();
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java
index 7010849..a8014bf 100644
--- 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestTimeRangeWriterWithQuery.java
@@ -79,10 +79,11 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     return cal.getTime();
   }
 
-  @Test
+  @Test(invocationCount = 1)
   public void testCubeQueryContinuousUpdatePeriod() throws Exception {
     LensException th = null;
     try {
+      conf.set("lens.cube.query.valid.testcube.facttables", "summary3");
       rewrite("select" + " SUM(msr2) from testCube where " + TWO_DAYS_RANGE, 
conf);
     } catch (LensException e) {
       th = e;
@@ -93,6 +94,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
       Assert
       .assertEquals(th.getErrorCode(), 
CANNOT_USE_TIMERANGE_WRITER.getLensErrorInfo().getErrorCode());
     }
+    conf.unset("lens.cube.query.valid.testcube.facttables");
     // hourly partitions for two days
     conf.setBoolean(FAIL_QUERY_ON_PARTIAL_DATA, true);
     DateFormat qFmt = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
@@ -101,10 +103,11 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     String hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + 
twoDaysInRangeClause, conf);
     Map<String, String> whereClauses = new HashMap<String, String>();
     whereClauses.put(
-      getDbName() + "c1_testfact",
+      getDbName() + "c2_testfact",
       TestBetweenTimeRangeWriter.getBetweenClause(cubeName, "dt",
         getDateWithOffset(DAILY, -2), getDateWithOffset(DAILY, 0), 
CONTINUOUS.format()));
-    String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) 
FROM ", null, null, whereClauses);
+    String expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) as 
`sum(msr2)` FROM ",
+        null, null, whereClauses);
     System.out.println("HQL:" + hqlQuery);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
@@ -118,13 +121,13 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
 
     whereClauses = new HashMap<String, String>();
     whereClauses.put(
-      getDbName() + "c1_testfact",
+      getDbName() + "c2_testfact",
       TestBetweenTimeRangeWriter.getBetweenClause(cubeName, "dt", 
getDateWithOffset(DAILY, -2),
         getDateWithOffset(DAILY, 0), CONTINUOUS.format())
         + " OR"
         + TestBetweenTimeRangeWriter.getBetweenClause(cubeName, "dt", 
getDateWithOffset(DAILY, -6),
         getDateWithOffset(DAILY, 0), CONTINUOUS.format()));
-    expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", 
null, null, whereClauses);
+    expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) as 
`sum(msr2)` FROM ", null, null, whereClauses);
     System.out.println("HQL:" + hqlQuery);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
 
@@ -132,10 +135,10 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     conf.set(CubeQueryConfUtil.PART_WHERE_CLAUSE_DATE_FORMAT, "yyyy-MM-dd 
HH:mm:ss");
     hqlQuery = rewrite("select SUM(msr2) from testCube" + " where " + 
TWO_DAYS_RANGE, conf);
     whereClauses = new HashMap<String, String>();
-    whereClauses.put(getDbName() + "c1_testfact", 
TestBetweenTimeRangeWriter.getBetweenClause(cubeName,
+    whereClauses.put(getDbName() + "c2_testfact", 
TestBetweenTimeRangeWriter.getBetweenClause(cubeName,
       "dt", getUptoHour(TWODAYS_BACK),
       getUptoHour(NOW), TestTimeRangeWriter.DB_FORMAT));
-    expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", 
null, null, whereClauses);
+    expected = getExpectedQuery(cubeName, "select sum(testcube.msr2) as 
`sum(msr2)` FROM ", null, null, whereClauses);
     System.out.println("HQL:" + hqlQuery);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
   }
@@ -159,7 +162,8 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
       getUptoHour(getOneLess(NOW, UpdatePeriod.HOURLY.calendarField())), 
TestTimeRangeWriter.DB_FORMAT));
     System.out.println("HQL:" + hqlQuery);
     String expected =
-      getExpectedQuery(cubeName, "select timehourchain1.full_hour, 
sum(testcube.msr2) FROM ", " join " + getDbName()
+      getExpectedQuery(cubeName, "select timehourchain1.full_hour as 
`test_time_dim`, sum(testcube.msr2) as `msr2`"
+          + " FROM ", " join " + getDbName()
           + "c4_hourDimTbl timehourchain1 on testcube.test_time_dim_hour_id  = 
timehourchain1.id", null,
         " GROUP BY timehourchain1.full_hour", null, whereClauses);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -169,7 +173,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     hqlQuery = rewrite(query, tconf);
     System.out.println("HQL:" + hqlQuery);
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `msr2` FROM ", 
" join " + getDbName()
         + "c4_hourDimTbl timehourchain1 on testcube.test_time_dim_hour_id  = 
timehourchain1.id", null, null, null,
         whereClauses);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -179,7 +183,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     hqlQuery = rewrite(query, tconf);
     System.out.println("HQL:" + hqlQuery);
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `msr2` FROM ", 
" join " + getDbName()
           + "c4_hourDimTbl timehourchain1 on testcube.test_time_dim_hour_id  = 
timehourchain1.id",
         " testcube.cityid > 2 ",
         " and testcube.cityid != 5", null, whereClauses);
@@ -202,7 +206,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
         getUptoHour(getOneLess(BEFORE_4_DAYS, 
UpdatePeriod.HOURLY.calendarField())),
         TestTimeRangeWriter.DB_FORMAT));
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2)  as `sum(msr2)` 
FROM ", " join " + getDbName()
         + "c4_hourDimTbl timehourchain1 on testcube.test_time_dim_hour_id  = 
timehourchain1.id", null, null, null,
         whereClauses);
     System.out.println("HQL:" + hqlQuery);
@@ -214,7 +218,8 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
           + " OR " + TWO_DAYS_RANGE_TTD_BEFORE_4_DAYS, tconf);
 
     expected =
-      getExpectedQuery(cubeName, "select to_date(timehourchain1.full_hour), 
sum(testcube.msr2) FROM ", " join "
+      getExpectedQuery(cubeName, "select to_date(timehourchain1.full_hour) as 
`to_date(test_time_dim)`, "
+          + "sum(testcube.msr2) as `sum(msr2)` FROM ", " join "
           + getDbName() + "c4_hourDimTbl timehourchain1 on 
testcube.test_time_dim_hour_id  = timehourchain1.id", null,
         " group by to_date(timehourchain1.full_hour)", null, whereClauses);
     System.out.println("HQL:" + hqlQuery);
@@ -240,7 +245,8 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
       getUptoHour(getOneLess(NOW, UpdatePeriod.HOURLY.calendarField())), 
TestTimeRangeWriter.DB_FORMAT));
     System.out.println("HQL:" + hqlQuery);
     String expected =
-      getExpectedQuery(cubeName, "select timehourchain2.full_hour, 
sum(testcube.msr2) FROM ", " join " + getDbName()
+      getExpectedQuery(cubeName, "select timehourchain2.full_hour as 
`test_time_dim2`, sum(testcube.msr2) as `msr2` "
+          + "FROM ", " join " + getDbName()
           + "c4_hourDimTbl timehourchain2 on testcube.test_time_dim_hour_id2  
= timehourchain2.id", null,
         " GROUP BY timehourchain2.full_hour", null, whereClauses);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -250,7 +256,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     hqlQuery = rewrite(query, tconf);
     System.out.println("HQL:" + hqlQuery);
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `msr2` FROM ", 
" join " + getDbName()
         + "c4_hourDimTbl timehourchain2 on testcube.test_time_dim_hour_id2  = 
timehourchain2.id", null, null, null,
         whereClauses);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -260,7 +266,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
     hqlQuery = rewrite(query, tconf);
     System.out.println("HQL:" + hqlQuery);
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2) as `msr2` FROM ", 
" join " + getDbName()
           + "c4_hourDimTbl timehourchain2 on testcube.test_time_dim_hour_id2  
= timehourchain2.id",
           " testcube.cityid > 2 ", " and testcube.cityid != 5", null, 
whereClauses);
     TestCubeRewriter.compareQueries(hqlQuery, expected);
@@ -282,7 +288,7 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
         getUptoHour(getOneLess(BEFORE_4_DAYS, 
UpdatePeriod.HOURLY.calendarField())),
         TestTimeRangeWriter.DB_FORMAT));
     expected =
-      getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", " join " + 
getDbName()
+      getExpectedQuery(cubeName, "select sum(testcube.msr2)  as 
`sum(msr2)`FROM ", " join " + getDbName()
         + "c4_hourDimTbl timehourchain2 on testcube.test_time_dim_hour_id2  = 
timehourchain2.id", null, null, null,
         whereClauses);
     System.out.println("HQL:" + hqlQuery);
@@ -294,7 +300,8 @@ public class TestTimeRangeWriterWithQuery extends 
TestQueryRewrite {
           + " OR " +TWO_DAYS_RANGE_TTD2_BEFORE_4_DAYS, tconf);
 
     expected =
-      getExpectedQuery(cubeName, "select to_date(timehourchain2.full_hour), 
sum(testcube.msr2) FROM ", " join "
+      getExpectedQuery(cubeName, "select to_date(timehourchain2.full_hour) as 
`to_date(test_time_dim2)`, "
+          + "sum(testcube.msr2)  as `sum(msr2)` FROM ", " join "
           + getDbName() + "c4_hourDimTbl timehourchain2 on 
testcube.test_time_dim_hour_id2  = timehourchain2.id", null,
         " group by to_date(timehourchain2.full_hour)", null, whereClauses);
     System.out.println("HQL:" + hqlQuery);

http://git-wip-us.apache.org/repos/asf/lens/blob/ae83caae/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionAndJoinCandidates.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionAndJoinCandidates.java
 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionAndJoinCandidates.java
new file mode 100644
index 0000000..0119f2e
--- /dev/null
+++ 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionAndJoinCandidates.java
@@ -0,0 +1,169 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.lens.cube.parse;
+
+import static 
org.apache.lens.cube.metadata.DateFactory.TWO_MONTHS_RANGE_UPTO_DAYS;
+import static org.apache.lens.cube.parse.CubeQueryConfUtil.*;
+import static org.apache.lens.cube.parse.CubeTestSetup.*;
+import static org.apache.lens.cube.parse.TestCubeRewriter.compareContains;
+
+import static org.testng.Assert.*;
+
+import org.apache.lens.server.api.LensServerAPITestUtil;
+import org.apache.lens.server.api.error.LensException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hive.ql.parse.ParseException;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+
+import jodd.util.StringUtil;
+
+public class TestUnionAndJoinCandidates extends TestQueryRewrite {
+
+  private Configuration conf;
+
+  @BeforeTest
+  public void setupDriver() throws Exception {
+    conf = LensServerAPITestUtil.getConfigurationWithParams(getConf(),
+        //Supported storage
+        CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1",
+        // Storage tables
+        getValidStorageTablesKey("union_join_ctx_fact1"), 
"C1_union_join_ctx_fact1",
+        getValidStorageTablesKey("union_join_ctx_fact2"), 
"C1_union_join_ctx_fact2",
+        getValidStorageTablesKey("union_join_ctx_fact3"), 
"C1_union_join_ctx_fact3",
+        // Update periods
+        getValidUpdatePeriodsKey("union_join_ctx_fact1", "C1"), "DAILY",
+        getValidUpdatePeriodsKey("union_join_ctx_fact2", "C1"), "DAILY",
+        getValidUpdatePeriodsKey("union_join_ctx_fact3", "C1"), "DAILY");
+    conf.setBoolean(DISABLE_AUTO_JOINS, false);
+    conf.setBoolean(ENABLE_SELECT_TO_GROUPBY, true);
+    conf.setBoolean(ENABLE_GROUP_BY_TO_SELECT, true);
+    conf.setBoolean(DISABLE_AGGREGATE_RESOLVER, false);
+    conf.setBoolean(ENABLE_STORAGES_UNION, true);
+  }
+
+  @Override
+  public Configuration getConf() {
+    return new Configuration();
+  }
+
+  @Test
+  public void testDuplicateProjectedFieldExclusion() throws ParseException, 
LensException {
+    String colsSelected = " union_join_ctx_cityid , 
union_join_ctx_msr1_greater_than_100, "
+        + " sum(union_join_ctx_msr1) ";
+    String whereCond = " union_join_ctx_zipcode = 'a' and 
union_join_ctx_cityid = 'b' and "
+        + "(" + TWO_MONTHS_RANGE_UPTO_DAYS + ")";
+    String rewrittenQuery = rewrite("select " + colsSelected + " from basecube 
where " + whereCond, conf);
+    assertTrue(rewrittenQuery.contains("UNION ALL"));
+    assertEquals(StringUtil.count(rewrittenQuery, 
"sum((basecube.union_join_ctx_msr1))"), 2);
+  }
+
+  @Test
+  public void testFinalCandidateRewrittenQuery() throws ParseException, 
LensException {
+    try {
+      // Query with non projected measure in having clause.
+      String colsSelected = "union_join_ctx_cityid, sum(union_join_ctx_msr2) ";
+      String having = " having sum(union_join_ctx_msr1) > 100";
+      String whereCond = " union_join_ctx_zipcode = 'a' and 
union_join_ctx_cityid = 'b' and "
+          + "(" + TWO_MONTHS_RANGE_UPTO_DAYS + ")";
+      String rewrittenQuery = rewrite("select " + colsSelected + " from 
basecube where " + whereCond + having, conf);
+      String expectedInnerSelect1 = "SELECT (basecube.union_join_ctx_cityid) 
as `alias0`, 0.0 as `alias1`, "
+          + "sum((basecube.union_join_ctx_msr1)) as `alias2` FROM 
TestQueryRewrite.c1_union_join_ctx_fact1 basecube ";
+      String expectedInnerSelect2 = "SELECT (basecube.union_join_ctx_cityid) 
as `alias0`, 0.0 as `alias1`, "
+          + "sum((basecube.union_join_ctx_msr1)) as `alias2` FROM 
TestQueryRewrite.c1_union_join_ctx_fact2 basecube ";
+      String expectedInnerSelect3 = " SELECT (basecube.union_join_ctx_cityid) 
as `alias0`, "
+          + "sum((basecube.union_join_ctx_msr2)) as `alias1`, 0.0 as `alias2` "
+          + "FROM TestQueryRewrite.c1_union_join_ctx_fact3 basecube ";
+      String outerHaving = "HAVING (sum((basecube.alias2)) > 100)";
+      compareContains(expectedInnerSelect1, rewrittenQuery);
+      compareContains(expectedInnerSelect2, rewrittenQuery);
+      compareContains(expectedInnerSelect3, rewrittenQuery);
+      compareContains(outerHaving, rewrittenQuery);
+
+      // Query with measure and dim only expression
+      colsSelected = " union_join_ctx_cityid , union_join_ctx_cityname , 
union_join_ctx_notnullcityid, "
+          + "  sum(union_join_ctx_msr1), sum(union_join_ctx_msr2) ";
+      whereCond = " union_join_ctx_zipcode = 'a' and union_join_ctx_cityid = 
'b' and "
+          + "(" + TWO_MONTHS_RANGE_UPTO_DAYS + ")";
+      rewrittenQuery = rewrite("select " + colsSelected + " from basecube 
where " + whereCond, conf);
+      String outerSelect = "SELECT (basecube.alias0) as 
`union_join_ctx_cityid`, "
+          + "(basecube.alias1) as `union_join_ctx_cityname`, (basecube.alias2) 
as `union_join_ctx_notnullcityid`, "
+          + "sum((basecube.alias3)) as `sum(union_join_ctx_msr1)`, "
+          + "sum((basecube.alias4)) as `sum(union_join_ctx_msr2)` FROM ";
+      expectedInnerSelect1 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, (cubecityjoinunionctx.name) "
+          + "as `alias1`, case  when (basecube.union_join_ctx_cityid) is null 
then 0 else "
+          + "(basecube.union_join_ctx_cityid) end as `alias2`, 
sum((basecube.union_join_ctx_msr1)) as `alias3`, "
+          + "0.0 as `alias4` FROM TestQueryRewrite.c1_union_join_ctx_fact1 
basecube";
+      expectedInnerSelect2 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, (cubecityjoinunionctx.name) "
+          + "as `alias1`, case  when (basecube.union_join_ctx_cityid) is null 
then 0 else "
+          + "(basecube.union_join_ctx_cityid) end as `alias2`, 
sum((basecube.union_join_ctx_msr1)) as `alias3`, "
+          + "0.0 as `alias4` FROM TestQueryRewrite.c1_union_join_ctx_fact2";
+      expectedInnerSelect3 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, (cubecityjoinunionctx.name) "
+          + "as `alias1`, case  when (basecube.union_join_ctx_cityid) is null 
then 0 else "
+          + "(basecube.union_join_ctx_cityid) end as `alias2`, 0.0 as 
`alias3`, "
+          + "sum((basecube.union_join_ctx_msr2)) as `alias4` FROM 
TestQueryRewrite.c1_union_join_ctx_fact3";
+      String outerGroupBy = "GROUP BY (basecube.alias0), (basecube.alias1), 
(basecube.alias2)";
+      compareContains(outerSelect, rewrittenQuery);
+      compareContains(expectedInnerSelect1, rewrittenQuery);
+      compareContains(expectedInnerSelect2, rewrittenQuery);
+      compareContains(expectedInnerSelect3, rewrittenQuery);
+      compareContains(outerGroupBy, rewrittenQuery);
+      // Query with measure and measure expression eg. sum(case when....), 
case when sum(msr1)...
+      // and measure with constant sum(msr1) + 10
+      colsSelected = " union_join_ctx_cityid as `city id`, 
union_join_ctx_cityname, sum(union_join_ctx_msr1), "
+          + "sum(union_join_ctx_msr2), union_join_ctx_non_zero_msr2_sum, 
union_join_ctx_msr1_greater_than_100, "
+          + "sum(union_join_ctx_msr1) + 10 ";
+      whereCond = " union_join_ctx_zipcode = 'a' and union_join_ctx_cityid = 
'b' and "
+          + "(" + TWO_MONTHS_RANGE_UPTO_DAYS + ")";
+      rewrittenQuery = rewrite("select " + colsSelected + " from basecube 
where " + whereCond, conf);
+      outerSelect = "SELECT (basecube.alias0) as `city id`, (basecube.alias1) 
as `union_join_ctx_cityname`, "
+          + "sum((basecube.alias2)) as `sum(union_join_ctx_msr1)`, 
sum((basecube.alias3)) "
+          + "as `sum(union_join_ctx_msr2)`, sum((basecube.alias4)) as 
`union_join_ctx_non_zero_msr2_sum`, "
+          + "case  when (sum((basecube.alias2)) > 100) then \"high\" else 
\"low\" end as "
+          + "`union_join_ctx_msr1_greater_than_100`, (sum((basecube.alias2)) + 
10) "
+          + "as `(sum(union_join_ctx_msr1) + 10)` FROM ";
+      expectedInnerSelect1 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, "
+          + "(cubecityjoinunionctx.name) as `alias1`, 
sum((basecube.union_join_ctx_msr1)) as `alias2`, "
+          + "0.0 as `alias3`, 0.0 as `alias4` FROM";
+      expectedInnerSelect2 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, "
+          + "(cubecityjoinunionctx.name) as `alias1`, 
sum((basecube.union_join_ctx_msr1)) as `alias2`, "
+          + "0.0 as `alias3`, 0.0 as `alias4` FROM";
+      expectedInnerSelect3 = "SELECT (basecube.union_join_ctx_cityid) as 
`alias0`, (cubecityjoinunionctx.name) "
+          + "as `alias1`, 0.0 as `alias2`, sum((basecube.union_join_ctx_msr2)) 
as `alias3`, "
+          + "sum(case  when ((basecube.union_join_ctx_msr2) > 0) then 
(basecube.union_join_ctx_msr2) else 0 end) "
+          + "as `alias4` FROM";
+      String innerGroupBy = "GROUP BY (basecube.union_join_ctx_cityid), 
(cubecityjoinunionctx.name)";
+      outerGroupBy = "GROUP BY (basecube.alias0), (basecube.alias1)";
+
+      compareContains(outerSelect, rewrittenQuery);
+      compareContains(expectedInnerSelect1, rewrittenQuery);
+      compareContains(expectedInnerSelect2, rewrittenQuery);
+      compareContains(expectedInnerSelect3, rewrittenQuery);
+      compareContains(outerGroupBy, rewrittenQuery);
+      compareContains(innerGroupBy, rewrittenQuery);
+
+    } finally {
+      getStorageToUpdatePeriodMap().clear();
+    }
+  }
+
+
+}

Reply via email to