Repository: lens Updated Branches: refs/heads/master 9ef7ce736 -> d9884ec6d
http://git-wip-us.apache.org/repos/asf/lens/blob/2cfb7b09/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java index 35234a1..dd0b6dc 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestAggregateResolver.java @@ -81,14 +81,14 @@ public class TestAggregateResolver extends TestQueryRewrite { // pass String q7 = "SELECT cityid, sum(testCube.msr2) from testCube where " + TWO_DAYS_RANGE - + " having (testCube.msr2 > 100) OR (testcube.msr2 < 100" + " AND max(testcube.msr3) > 1000)"; + + " having (testCube.msr2 > 100) OR (testcube.msr2 < 100 AND max(testcube.msr3) > 1000)"; // pass - String q8 = "SELECT cityid, sum(testCube.msr2) * max(testCube.msr3) from" + " testCube where " + TWO_DAYS_RANGE; + String q8 = "SELECT cityid, sum(testCube.msr2) * max(testCube.msr3) from testCube where " + TWO_DAYS_RANGE; // pass String q9 = - "SELECT cityid c1, max(msr3) m3 from testCube where " + "c1 > 100 and " + TWO_DAYS_RANGE + " having (msr2 < 100" + "SELECT cityid c1, max(msr3) m3 from testCube where c1 > 100 and " + TWO_DAYS_RANGE + " having (msr2 < 100" + " AND m3 > 1000)"; String q10 = "SELECT cityid, round(testCube.msr2) from testCube where " + TWO_DAYS_RANGE; @@ -97,39 +97,39 @@ public class TestAggregateResolver extends TestQueryRewrite { String q11 = "SELECT cityid from testCube where " + TWO_DAYS_RANGE + " having (testCube.msr2 > 100)"; String expectedq1 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq2 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) * max(testCube.msr3) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) * max(testCube.msr3) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq3 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq4 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having" + " sum(testCube.msr2) > 100", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq5 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having" + " sum(testCube.msr2) + max(testCube.msr3) > 100", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq6 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having" + " sum(testCube.msr2) > 100 and sum(testCube.msr2) < 1000", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq7 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having" + " sum(testCube.msr2) > 100 OR (sum(testCube.msr2) < 100 AND" + " max(testcube.msr3) > 1000)", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq8 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) * max(testCube.msr3) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) * max(testCube.msr3) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq9 = - getExpectedQuery(cubeName, "SELECT testcube.cityid as `c1`," + " max(testCube.msr3) as `m3` from ", "c1 > 100", + getExpectedQuery(cubeName, "SELECT testcube.cityid as `c1`, max(testCube.msr3) as `m3` from ", "c1 > 100", "group by testcube.cityid" + " having sum(testCube.msr2) < 100 AND (m3 > 1000)", getWhereForDailyAndHourly2days(cubeName, "c2_testfact")); String expectedq10 = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " round(sum(testCube.msr2)) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, round(sum(testCube.msr2)) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); String expectedq11 = getExpectedQuery(cubeName, "SELECT testcube.cityid from ", null, @@ -216,7 +216,7 @@ public class TestAggregateResolver extends TestQueryRewrite { CandidateFact candidateFact = cubeql.getCandidateFacts().iterator().next(); Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); String expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " testCube.msr2 from ", null, null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, testCube.msr2 from ", null, null, getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); conf2.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2"); @@ -247,7 +247,7 @@ public class TestAggregateResolver extends TestQueryRewrite { cubeql = rewriteCtx(query, conf); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(hQL, expectedQL); @@ -255,7 +255,7 @@ public class TestAggregateResolver extends TestQueryRewrite { cubeql = rewriteCtx(query, conf); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) as `m2` from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) as `m2` from ", null, "group by testcube.cityid order by m2 asc", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(hQL, expectedQL); @@ -263,7 +263,7 @@ public class TestAggregateResolver extends TestQueryRewrite { cubeql = rewriteCtx(query, conf); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having max(testcube.msr3) > 100", getWhereForDailyAndHourly2days(cubeName, "C2_testfact")); compareQueries(hQL, expectedQL); @@ -278,7 +278,7 @@ public class TestAggregateResolver extends TestQueryRewrite { CandidateFact candidateFact = cubeql.getCandidateFacts().iterator().next(); Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); String expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " avg(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, avg(testCube.msr2) from ", null, "group by testcube.cityid", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -290,7 +290,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", "testcube.msr1 < 100", + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", "testcube.msr1 < 100", "group by testcube.cityid", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -301,7 +301,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " testCube.msr2 from ", "testcube.msr2 < 100", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, testCube.msr2 from ", "testcube.msr2 < 100", null, getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -312,8 +312,8 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, - " group by testCube.msr1, testcube.cityid", getWhereForHourly2days("c1_testfact2_raw")); + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, + " group by testCube.msr1", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); query = "SELECT cityid, sum(testCube.msr2) FROM testCube WHERE " + TWO_DAYS_RANGE + " group by testCube.msr3"; @@ -323,8 +323,8 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, - " group by testCube.msr3, testcube.cityid", getWhereForHourly2days("c1_testfact2_raw")); + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, + " group by testCube.msr3", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); query = "SELECT cityid, sum(testCube.msr2) FROM testCube WHERE " + TWO_DAYS_RANGE + " order by testCube.msr1"; @@ -334,7 +334,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, " group by testcube.cityid order by testcube.msr1 asc", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -345,7 +345,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, " group by testcube.cityid order by testcube.msr3 asc", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -356,7 +356,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT distinct testcube.cityid," + " round(testCube.msr2) from ", null, null, + getExpectedQuery(cubeName, "SELECT distinct testcube.cityid, round(testCube.msr2) from ", null, null, getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -379,7 +379,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " round(testCube.msr1) from ", null, null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, round(testCube.msr1) from ", null, null, getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -390,7 +390,7 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT distinct testcube.cityid," + " round(testCube.msr1) from ", null, null, + getExpectedQuery(cubeName, "SELECT distinct testcube.cityid, round(testCube.msr1) from ", null, null, getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); @@ -412,14 +412,14 @@ public class TestAggregateResolver extends TestQueryRewrite { Assert.assertEquals("testFact2_raw".toLowerCase(), candidateFact.fact.getName().toLowerCase()); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr1) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr1) from ", null, "group by testcube.cityid", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); query = "SELECT cityid, sum(testCube.msr2) FROM testCube WHERE " + TWO_DAYS_RANGE + " having max(msr1) > 100"; cubeql = rewriteCtx(query, conf); hQL = cubeql.toHQL(); expectedQL = - getExpectedQuery(cubeName, "SELECT testcube.cityid," + " sum(testCube.msr2) from ", null, + getExpectedQuery(cubeName, "SELECT testcube.cityid, sum(testCube.msr2) from ", null, "group by testcube.cityid having max(testcube.msr1) > 100", getWhereForHourly2days("c1_testfact2_raw")); compareQueries(hQL, expectedQL); } http://git-wip-us.apache.org/repos/asf/lens/blob/2cfb7b09/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java index 053cad3..f6cec1b 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestBaseCubeQueries.java @@ -34,6 +34,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.lens.api.error.ErrorCollectionFactory; import org.apache.lens.cube.error.LensCubeErrorCode; import org.apache.lens.cube.error.NoCandidateFactAvailableException; import org.apache.lens.cube.metadata.TimeRange; @@ -86,8 +87,11 @@ public class TestBaseCubeQueries extends TestQueryRewrite { LensException e; e = getLensExceptionInRewrite("select msr11 + msr2 from basecube" + " where " + TWO_DAYS_RANGE, conf); + e.buildLensErrorResponse(new ErrorCollectionFactory().createErrorCollection(), null, "testid"); assertEquals(e.getErrorCode(), - LensCubeErrorCode.EXPRESSION_NOT_IN_ANY_FACT.getLensErrorInfo().getErrorCode()); + LensCubeErrorCode.NO_FACT_HAS_COLUMN.getLensErrorInfo().getErrorCode()); + assertTrue(e.getMessage().contains("msr11"), e.getMessage()); + assertTrue(e.getMessage().contains("msr2"), e.getMessage()); // no fact has the all the dimensions queried e = getLensExceptionInRewrite("select dim1, test_time_dim, msr3, msr13 from basecube where " + TWO_DAYS_RANGE, conf); @@ -728,6 +732,115 @@ public class TestBaseCubeQueries extends TestQueryRewrite { && hqlQuery.endsWith("mq2 on mq1.booleancut <=> mq2.booleancut"), hqlQuery); } + + @Test + public void testMultiFactQueryCaseWhenExpressionWithChainField() throws Exception { + Configuration tconf = new Configuration(conf); + String hqlQuery = + rewrite("select sum(case when dim22 = 'x' then msr12 else 0 end) as case_expr, sum(msr1) from basecube where " + + TWO_DAYS_RANGE, tconf); + String expected1 = + getExpectedQuery(cubeName, "select sum(case when basecube.dim22 = 'x' then basecube.msr12 else 0 end) as " + + "`expr1` FROM ", null, null, getWhereForHourly2days(cubeName, "C1_testfact2_raw_base")); + String expected2 = + getExpectedQuery(cubeName, "select sum(basecube.msr1) as `expr2` FROM ", null, null, + getWhereForHourly2days(cubeName, "c1_testfact1_raw_base")); + compareContains(expected1, hqlQuery); + compareContains(expected2, hqlQuery); + assertTrue(hqlQuery.toLowerCase().startsWith("select mq2.expr1 `case_expr`, mq1.expr2 `sum(msr1)` from ") + || hqlQuery.toLowerCase().startsWith("select mq1.expr1 `case_expr`, mq2.expr2 `sum(msr1)` from "), hqlQuery); + assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2"), hqlQuery); + } + + @Test + public void testMultiFactQueryCaseWhenExpression() throws Exception { + Configuration tconf = new Configuration(conf); + String hqlQuery = + rewrite("select sum(case when dim13 = 'x' then msr12 else 0 end) as case_expr, sum(msr1) from basecube where " + + TWO_DAYS_RANGE, tconf); + String expected1 = + getExpectedQuery(cubeName, "select sum(case when basecube.dim13 = 'x' then basecube.msr12 else 0 end) as " + + "`expr1` FROM ", null, null, getWhereForHourly2days(cubeName, "C1_testfact2_raw_base")); + String expected2 = + getExpectedQuery(cubeName, "select sum(basecube.msr1) as `expr2` FROM ", null, null, + getWhereForHourly2days(cubeName, "c1_testfact1_raw_base")); + compareContains(expected1, hqlQuery); + compareContains(expected2, hqlQuery); + assertTrue(hqlQuery.toLowerCase().startsWith("select mq2.expr1 `case_expr`, mq1.expr2 `sum(msr1)` from ") + || hqlQuery.toLowerCase().startsWith("select mq1.expr1 `case_expr`, mq2.expr2 `sum(msr1)` from "), hqlQuery); + assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2"), hqlQuery); + } + + @Test + public void testMultiFactQueryCaseWhenExpressionWithGroupby() throws Exception { + Configuration tconf = new Configuration(conf); + String hqlQuery = + rewrite("select dim1, sum(case when dim13 = 'x' then msr12 else 0 end) as case_expr, sum(msr1) from basecube " + + "where " + TWO_DAYS_RANGE, tconf); + String expected1 = + getExpectedQuery(cubeName, "select basecube.dim1 as `dim1`, sum(case when basecube.dim13 = 'x' then basecube" + + ".msr12 else 0 end) as `expr2` FROM ", null, " group by basecube.dim1 ", + getWhereForHourly2days(cubeName, "C1_testfact2_raw_base")); + String expected2 = + getExpectedQuery(cubeName, "select basecube.dim1 as `dim1`, sum(basecube.msr1) as `expr3` FROM ", null, + " group by basecube.dim1 ", getWhereForHourly2days(cubeName, "c1_testfact1_raw_base")); + compareContains(expected1, hqlQuery); + compareContains(expected2, hqlQuery); + assertTrue(hqlQuery.toLowerCase().startsWith( + "select coalesce(mq1.dim1, mq2.dim1) dim1, mq2.expr2 `case_expr`, mq1.expr3 `sum(msr1)` from ") + || hqlQuery.toLowerCase().startsWith( + "select coalesce(mq1.dim1, mq2.dim1) dim1, mq1.expr2 `case_expr`, mq2.expr3 `sum(msr1)` from "), hqlQuery); + assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2 on mq1.dim1 <=> mq2.dim1"), + hqlQuery); + } + + @Test + public void testMultiFactQueryCaseWhenExpressionWithHavingClause() throws Exception { + Configuration tconf = new Configuration(conf); + String hqlQuery = + rewrite("select sum(case when dim13 = 'x' then msr12 else 0 end) as case_expr, sum(msr1) from basecube " + + "where " + + TWO_DAYS_RANGE + " having sum(case when dim13 = 'x' then msr12 else 0 end) > 100 and sum(msr1) > 500", tconf); + String expected1 = + getExpectedQuery(cubeName, "select sum(case when basecube.dim13 = 'x' then basecube.msr12 else 0 end) as " + + "`expr1` FROM ", null, " having sum(case when basecube.dim13 = 'x' then basecube.msr12 else 0 end) > 100", + getWhereForHourly2days(cubeName, "C1_testfact2_raw_base")); + String expected2 = + getExpectedQuery(cubeName, "select sum(basecube.msr1) as `expr2` FROM ", null, " having sum(basecube.msr1) > 500", + getWhereForHourly2days(cubeName, "c1_testfact1_raw_base")); + compareContains(expected1, hqlQuery); + compareContains(expected2, hqlQuery); + assertTrue(hqlQuery.toLowerCase().startsWith("select mq2.expr1 `case_expr`, mq1.expr2 `sum(msr1)` from ") + || hqlQuery.toLowerCase().startsWith("select mq1.expr1 `case_expr`, mq2.expr2 `sum(msr1)` from "), hqlQuery); + assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2"), hqlQuery); + } + + @Test + public void testMultiFactQueryCaseWhenExpressionWithGroubyAndHavingClause() throws Exception { + Configuration tconf = new Configuration(conf); + String hqlQuery = + rewrite("select dim1, sum(case when dim13 = 'x' then msr12 else 0 end) as case_expr, sum(msr1) from basecube " + + "where " + + TWO_DAYS_RANGE + " having sum(case when dim13 = 'x' then msr12 else 0 end) > 100 and sum(msr1) > 500", tconf); + String expected1 = + getExpectedQuery(cubeName, "select basecube.dim1 as `dim1`, sum(case when basecube.dim13 = 'x' then basecube" + + ".msr12 else 0 end) as `expr2` FROM ", null, + " group by basecube.dim1 having sum(case when basecube.dim13 = 'x' then basecube.msr12 else 0 end) > 100", + getWhereForHourly2days(cubeName, "C1_testfact2_raw_base")); + String expected2 = + getExpectedQuery(cubeName, "select basecube.dim1 as `dim1`, sum(basecube.msr1) as `expr3` FROM ", null, + " group by basecube.dim1 having sum(basecube.msr1) > 500", + getWhereForHourly2days(cubeName, "c1_testfact1_raw_base")); + compareContains(expected1, hqlQuery); + compareContains(expected2, hqlQuery); + assertTrue(hqlQuery.toLowerCase().startsWith( + "select coalesce(mq1.dim1, mq2.dim1) dim1, mq2.expr2 `case_expr`, mq1.expr3 `sum(msr1)` from ") + || hqlQuery.toLowerCase().startsWith( + "select coalesce(mq1.dim1, mq2.dim1) dim1, mq1.expr2 `case_expr`, mq2.expr3 `sum(msr1)` from "), hqlQuery); + assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2 on mq1.dim1 <=> mq2.dim1"), + hqlQuery); + } + @Test public void testFallbackPartCol() throws Exception { Configuration conf = getConfWithStorages("C1");
