Repository: lens
Updated Branches:
  refs/heads/master e4d8b88f9 -> 3f03d29ba


LENS-1156 : Fix TestUnionQueries.testDimAttrExpressionQuery test failure


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

Branch: refs/heads/master
Commit: 3f03d29ba47755913e06cd3a397119c679b2f65a
Parents: e4d8b88
Author: Amareshwari Sriramadasu <amareshw...@apache.org>
Authored: Fri Jul 29 10:11:32 2016 +0530
Committer: Amareshwari Sriramadasu <amareshw...@apache.org>
Committed: Fri Jul 29 10:11:32 2016 +0530

----------------------------------------------------------------------
 .../lens/cube/parse/TestUnionQueries.java       | 176 +++++++++++--------
 1 file changed, 100 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lens/blob/3f03d29b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java
----------------------------------------------------------------------
diff --git 
a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java 
b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java
index f5657e5..d5bc81c 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestUnionQueries.java
@@ -218,96 +218,120 @@ public class TestUnionQueries extends TestQueryRewrite {
     conf.set(getValidUpdatePeriodsKey("testfact", "C1"), "DAILY,HOURLY");
     conf.set(getValidUpdatePeriodsKey("testfact2", "C1"), "YEARLY");
     conf.set(getValidUpdatePeriodsKey("testfact", "C2"), "MONTHLY,DAILY");
-    ArrayList<String> storages = Lists.newArrayList("c1_testfact", 
"c2_testfact");
-    getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY, DAILY));
-    getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(MONTHLY));
-    StoragePartitionProvider provider = new StoragePartitionProvider() {
-      @Override
-      public Map<String, String> providePartitionsForStorage(String storage) {
-        return getWhereForMonthlyDailyAndHourly2monthsUnionQuery(storage);
-      }
-    };
+
     String hqlQuery = rewrite("select asciicity as `City Name`, cityAndState 
as citystate, isIndia as isIndia,"
       + " msr8, msr7 as `Third measure` "
       + "from testCube where asciicity = 'c' and cityname = 'a' and zipcode = 
'b' and "
       + TWO_MONTHS_RANGE_UPTO_HOURS, conf);
-    String expected = getExpectedUnionQuery(TEST_CUBE_NAME, storages, provider,
-      "SELECT testcube.alias0 as `City Name`, testcube.alias1 as citystate, 
testcube.alias2 as isIndia, "
-        + "sum(testcube.alias3) + max(testcube.alias4), "
-        + "case when sum(testcube.alias3) = 0 then 0 else 
sum(testcube.alias5)/sum(testcube.alias3) end "
-        + "as `Third Measure`",
-      null, " group by testcube.alias0, testcube.alias1, testcube.alias2",
-      "select ascii(cubecity.name) as `alias0`, concat(cubecity.name, \":\", 
cubestate.name) as alias1,"
-        + "cubecity.name == 'DELHI' OR cubestate.name == 'KARNATAKA' OR 
cubestate.name == 'MAHARASHTRA' as alias2,"
-        + "sum(testcube.msr2) as `alias3`, max(testcube.msr3) as `alias4`, "
-        + "sum(case when testcube.cityid = 'x' then testcube.msr21 else 
testcube.msr22 end) as `alias5`", " join "
-        + getDbName() + "c1_statetable cubestate on testcube.stateid = 
cubestate.id and (cubestate.dt = 'latest') join"
-        + getDbName() + "c1_citytable cubecity on testcube.cityid = 
cubecity.id and (cubecity.dt = 'latest')",
-      "ascii(cubecity.name) = 'c' and cubecity.name = 'a' and testcube.zipcode 
= 'b'",
-      " group by ascii(cubecity.name)), concat(cubecity.name, \":\", 
cubestate.name),"
-        + "cubecity.name == 'DELHI' OR cubestate.name == 'KARNATAKA' OR 
cubestate.name == 'MAHARASHTRA'");
-    compareQueries(hqlQuery, expected);
+    String joinExpr1 =  " join "
+      + getDbName() + "c1_statetable cubestate on testcube.stateid = 
cubestate.id and (cubestate.dt = 'latest') join"
+      + getDbName() + "c1_citytable cubecity on testcube.cityid = cubecity.id 
and (cubecity.dt = 'latest')";
+    String joinExpr2 =  " join "
+      + getDbName() + "c1_citytable cubecity on testcube.cityid = cubecity.id 
and (cubecity.dt = 'latest') join"
+      + getDbName() + "c1_statetable cubestate on testcube.stateid = 
cubestate.id and (cubestate.dt = 'latest')";
+
+    String expected1 = getExpectedQueryForDimAttrExpressionQuery(joinExpr1);
+    String expected2 = getExpectedQueryForDimAttrExpressionQuery(joinExpr2);
+    assertTrue(new TestQuery(hqlQuery).equals(new TestQuery(expected1))
+      || new TestQuery(hqlQuery).equals(new TestQuery(expected2)),
+      "Actual :" + hqlQuery + " Expected1:" + expected1 + " Expected2 : "+ 
expected2);
   }
 
+  private String getExpectedQueryForDimAttrExpressionQuery(String joinExpr) {
+    try {
+      ArrayList<String> storages = Lists.newArrayList("c1_testfact", 
"c2_testfact");
+      getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY, DAILY));
+      getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(MONTHLY));
+      StoragePartitionProvider provider = new StoragePartitionProvider() {
+        @Override
+        public Map<String, String> providePartitionsForStorage(String storage) 
{
+          return getWhereForMonthlyDailyAndHourly2monthsUnionQuery(storage);
+        }
+      };
+      return getExpectedUnionQuery(TEST_CUBE_NAME, storages, provider,
+        "SELECT testcube.alias0 as `City Name`, testcube.alias1 as citystate, 
testcube.alias2 as isIndia, "
+          + "sum(testcube.alias3) + max(testcube.alias4), "
+          + "case when sum(testcube.alias3) = 0 then 0 else 
sum(testcube.alias5)/sum(testcube.alias3) end "
+          + "as `Third Measure`",
+        null, " group by testcube.alias0, testcube.alias1, testcube.alias2",
+        "select ascii(cubecity.name) as `alias0`, concat(cubecity.name, \":\", 
cubestate.name) as alias1,"
+          + "cubecity.name == 'DELHI' OR cubestate.name == 'KARNATAKA' OR 
cubestate.name == 'MAHARASHTRA' as alias2,"
+          + "sum(testcube.msr2) as `alias3`, max(testcube.msr3) as `alias4`, "
+          + "sum(case when testcube.cityid = 'x' then testcube.msr21 else 
testcube.msr22 end) as `alias5`", joinExpr,
+        "ascii(cubecity.name) = 'c' and cubecity.name = 'a' and 
testcube.zipcode = 'b'",
+        " group by ascii(cubecity.name)), concat(cubecity.name, \":\", 
cubestate.name),"
+          + "cubecity.name == 'DELHI' OR cubestate.name == 'KARNATAKA' OR 
cubestate.name == 'MAHARASHTRA'");
+    } finally {
+      getStorageToUpdatePeriodMap().clear();
+    }
+  }
   @Test
   public void testNonAggregateOverAggregateFunction() throws Exception {
-    Configuration conf = getConf();
-    conf.set(getValidStorageTablesKey("testfact"), "C1_testFact,C2_testFact");
-    conf.set(getValidUpdatePeriodsKey("testfact", "C1"), "DAILY,HOURLY");
-    conf.set(getValidUpdatePeriodsKey("testfact2", "C1"), "YEARLY");
-    conf.set(getValidUpdatePeriodsKey("testfact", "C2"), "MONTHLY,DAILY");
-    ArrayList<String> storages = Lists.newArrayList("c1_testfact", 
"c2_testfact");
-    getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY, DAILY));
-    getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(MONTHLY));
-    StoragePartitionProvider provider = new StoragePartitionProvider() {
-      @Override
-      public Map<String, String> providePartitionsForStorage(String storage) {
-        return getWhereForMonthlyDailyAndHourly2monthsUnionQuery(storage);
-      }
-    };
-    String hqlQuery = rewrite("select cityid as `City ID`, msr3 as `Measure 
3`, "
-      + "round(SUM(msr2)) as `Measure 2` from testCube" + " where "
-      + TWO_MONTHS_RANGE_UPTO_HOURS + " group by zipcode having msr4 > 10 
order by cityid desc, stateid asc, zipcode "
-      + "asc limit 5",
-      conf);
-    String expected = getExpectedUnionQuery(TEST_CUBE_NAME, storages, provider,
-      "SELECT testcube.alias0 as `City ID`,max(testcube.alias1) as `Measure 
3`,round(sum(testcube.alias2)) as "
-        + "`Measure 2` ", null, "group by testcube.alias3 having 
count(testcube.alias4) > 10 "
-        + "order by testcube.alias0 desc, testcube.alias5 asc, testcube.alias3 
asc limit 5",
+    try {
+      Configuration conf = getConf();
+      conf.set(getValidStorageTablesKey("testfact"), 
"C1_testFact,C2_testFact");
+      conf.set(getValidUpdatePeriodsKey("testfact", "C1"), "DAILY,HOURLY");
+      conf.set(getValidUpdatePeriodsKey("testfact2", "C1"), "YEARLY");
+      conf.set(getValidUpdatePeriodsKey("testfact", "C2"), "MONTHLY,DAILY");
+      ArrayList<String> storages = Lists.newArrayList("c1_testfact", 
"c2_testfact");
+      getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY, DAILY));
+      getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(MONTHLY));
+      StoragePartitionProvider provider = new StoragePartitionProvider() {
+        @Override
+        public Map<String, String> providePartitionsForStorage(String storage) 
{
+          return getWhereForMonthlyDailyAndHourly2monthsUnionQuery(storage);
+        }
+      };
+      String hqlQuery = rewrite("select cityid as `City ID`, msr3 as `Measure 
3`, "
+        + "round(SUM(msr2)) as `Measure 2` from testCube" + " where "
+        + TWO_MONTHS_RANGE_UPTO_HOURS + " group by zipcode having msr4 > 10 
order by cityid desc, stateid asc, zipcode "
+        + "asc limit 5",
+        conf);
+      String expected = getExpectedUnionQuery(TEST_CUBE_NAME, storages, 
provider,
+        "SELECT testcube.alias0 as `City ID`,max(testcube.alias1) as `Measure 
3`,round(sum(testcube.alias2)) as "
+          + "`Measure 2` ", null, "group by testcube.alias3 having 
count(testcube.alias4) > 10 "
+          + "order by testcube.alias0 desc, testcube.alias5 asc, 
testcube.alias3 asc limit 5",
         "SELECT testcube.cityid as `alias0`, max(testcube.msr3) as `alias1`, 
sum(testcube.msr2) as `alias2`, "
           + "testcube.zipcode as `alias3`, count(testcube .msr4) as `alias4`, 
(testcube.stateid) as `alias5` FROM ",
-      null, "GROUP BY testcube.zipcode");
-    compareQueries(hqlQuery, expected);
+        null, "GROUP BY testcube.zipcode");
+      compareQueries(hqlQuery, expected);
+    } finally {
+      getStorageToUpdatePeriodMap().clear();
+    }
   }
 
   @Test
   public void testMultiFactMultiStorage() throws ParseException, LensException 
{
-    Configuration conf = 
LensServerAPITestUtil.getConfigurationWithParams(getConf(),
-      CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2",
-      getValidStorageTablesKey("testfact"), "C1_testFact,C2_testFact",
-      getValidUpdatePeriodsKey("testfact", "C1"), "HOURLY",
-      getValidUpdatePeriodsKey("testfact", "C2"), "DAILY",
-      getValidUpdatePeriodsKey("testfact2_raw", "C1"), "YEARLY",
-      getValidUpdatePeriodsKey("testfact2_raw", "C2"), "YEARLY");
-    CubeTestSetup.getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY));
-    CubeTestSetup.getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(DAILY));
-    String whereCond = "zipcode = 'a' and cityid = 'b' and (" + 
TWO_DAYS_RANGE_SPLIT_OVER_UPDATE_PERIODS + ")";
-    String hqlQuery = rewrite("select zipcode, count(msr4), sum(msr15) from 
testCube where " + whereCond, conf);
-    System.out.println(hqlQuery);
-    String possibleStart1 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq1.expr2 `count(msr4)`,"
-      + " mq2.expr3 `sum(msr15)` FROM ";
-    String possibleStart2 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq2.expr2 `count(msr4)`,"
-      + " mq1.expr3 `sum(msr15)` FROM ";
-
-    assertTrue(hqlQuery.startsWith(possibleStart1) || 
hqlQuery.startsWith(possibleStart2));
-    compareContains(rewrite("select zipcode as `zipcode`, sum(msr15) as 
`expr3` from testcube where " + whereCond,
-      conf), hqlQuery);
-    compareContains(rewrite("select zipcode as `zipcode`, count(msr4) as 
`expr2` from testcube where " + whereCond,
-      conf), hqlQuery);
-    assertTrue(hqlQuery.endsWith("on mq1.zipcode <=> mq2.zipcode"));
-    // No time_range_in should be remaining
-    assertFalse(hqlQuery.contains("time_range_in"));
-    //TODO: handle having after LENS-813, also handle for order by and limit
+    try {
+      Configuration conf = 
LensServerAPITestUtil.getConfigurationWithParams(getConf(),
+        CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1,C2",
+        getValidStorageTablesKey("testfact"), "C1_testFact,C2_testFact",
+        getValidUpdatePeriodsKey("testfact", "C1"), "HOURLY",
+        getValidUpdatePeriodsKey("testfact", "C2"), "DAILY",
+        getValidUpdatePeriodsKey("testfact2_raw", "C1"), "YEARLY",
+        getValidUpdatePeriodsKey("testfact2_raw", "C2"), "YEARLY");
+      getStorageToUpdatePeriodMap().put("c1_testfact", 
Lists.newArrayList(HOURLY));
+      getStorageToUpdatePeriodMap().put("c2_testfact", 
Lists.newArrayList(DAILY));
+      String whereCond = "zipcode = 'a' and cityid = 'b' and (" + 
TWO_DAYS_RANGE_SPLIT_OVER_UPDATE_PERIODS + ")";
+      String hqlQuery = rewrite("select zipcode, count(msr4), sum(msr15) from 
testCube where " + whereCond, conf);
+      System.out.println(hqlQuery);
+      String possibleStart1 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq1.expr2 `count(msr4)`,"
+        + " mq2.expr3 `sum(msr15)` FROM ";
+      String possibleStart2 = "SELECT COALESCE(mq1.zipcode, mq2.zipcode) 
zipcode, mq2.expr2 `count(msr4)`,"
+        + " mq1.expr3 `sum(msr15)` FROM ";
+
+      assertTrue(hqlQuery.startsWith(possibleStart1) || 
hqlQuery.startsWith(possibleStart2));
+      compareContains(rewrite("select zipcode as `zipcode`, sum(msr15) as 
`expr3` from testcube where " + whereCond,
+        conf), hqlQuery);
+      compareContains(rewrite("select zipcode as `zipcode`, count(msr4) as 
`expr2` from testcube where " + whereCond,
+        conf), hqlQuery);
+      assertTrue(hqlQuery.endsWith("on mq1.zipcode <=> mq2.zipcode"));
+      // No time_range_in should be remaining
+      assertFalse(hqlQuery.contains("time_range_in"));
+      //TODO: handle having after LENS-813, also handle for order by and limit
+    } finally {
+      getStorageToUpdatePeriodMap().clear();
+    }
   }
 
   @Test

Reply via email to