Repository: lens Updated Branches: refs/heads/lens-1381 b6f0cc3d4 -> 4af769ee3
http://git-wip-us.apache.org/repos/asf/lens/blob/4af769ee/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 f2bb485..f93a548 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,7 @@ 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 +100,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 +110,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 +119,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 +130,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 +142,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 +164,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 +176,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 +189,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 +210,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); } @Test @@ -235,8 +236,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")); @@ -250,8 +251,8 @@ 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")); @@ -264,7 +265,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")); @@ -278,7 +279,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); } @@ -286,8 +287,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); } @@ -295,8 +296,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); } @@ -318,7 +319,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); } @@ -327,8 +328,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); } @@ -447,7 +448,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); } @@ -459,7 +460,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); } @@ -483,7 +484,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); } @@ -493,9 +494,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")); @@ -509,7 +511,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); } @@ -521,7 +523,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); @@ -559,7 +561,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); } @@ -569,9 +571,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/4af769ee/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 6430ed1..0d7e8ef 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,7 +356,7 @@ 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 ", + 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", @@ -358,8 +371,9 @@ 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, getWhereForDailyAndHourly2days("basecube", "c1_testfact1_base")); @@ -368,8 +382,9 @@ public class TestJoinResolver extends TestQueryRewrite { // 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 +394,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 +405,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 +421,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 +437,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,7 +454,7 @@ 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() @@ -554,7 +571,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 +581,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 +593,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 +605,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 +617,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 +633,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 +644,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/4af769ee/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..a14296c 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,10 +59,11 @@ 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); } + //TODO union : Wrong fact name picked. Check after MaxCoveringSetResolver changes. @Test public void testPlanExtractionForComplexQuery() throws Exception { // complex query @@ -79,12 +80,13 @@ 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); } + //TODO union : Wrong fact name picked. Check after MaxCoveringSetResolver changes. @Test public void testPlanExtractionForMultipleQueries() throws Exception { // simple query @@ -103,8 +105,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/4af769ee/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..1eb7217 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,6 +79,7 @@ public class TestTimeRangeWriterWithQuery extends TestQueryRewrite { return cal.getTime(); } + //TODO union : Wrong fact table picked. Check after MaxCoveringSetResolver @Test public void testCubeQueryContinuousUpdatePeriod() throws Exception { LensException th = null; @@ -104,7 +105,7 @@ public class TestTimeRangeWriterWithQuery extends TestQueryRewrite { getDbName() + "c1_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); @@ -159,7 +160,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 +171,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 +181,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 +204,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 +216,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 +243,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 +254,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 +264,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 +286,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 +298,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/4af769ee/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 index 061224e..935c739 100644 --- 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 @@ -1,17 +1,39 @@ +/** + * 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.hadoop.conf.Configuration; -import org.apache.hadoop.hive.ql.parse.ParseException; 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 static org.apache.lens.cube.metadata.DateFactory.*; -import static org.apache.lens.cube.parse.CubeQueryConfUtil.*; -import static org.apache.lens.cube.parse.CubeTestSetup.*; - public class TestUnionAndJoinCandidates extends TestQueryRewrite { private Configuration testConf; @@ -32,34 +54,106 @@ public class TestUnionAndJoinCandidates extends TestQueryRewrite { } @Test - public void testRangeCoveringCandidates() throws ParseException, LensException { + public void testFinalCandidateRewrittenQuery() throws ParseException, LensException { try { - String prefix = "union_join_ctx_"; - String cubeName = prefix + "der1"; Configuration conf = LensServerAPITestUtil.getConfigurationWithParams(getConf(), //Supported storage CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C1", // Storage tables - getValidStorageTablesKey(prefix + "fact1"), "C1_" + prefix + "fact1", - getValidStorageTablesKey(prefix + "fact2"), "C1_" + prefix + "fact2", - getValidStorageTablesKey(prefix + "fact3"), "C1_" + prefix + "fact3", + 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(prefix + "fact1", "C1"), "DAILY", - getValidUpdatePeriodsKey(prefix + "fact2", "C1"), "DAILY", - getValidUpdatePeriodsKey(prefix + "fact3", "C1"), "DAILY"); + getValidUpdatePeriodsKey("union_join_ctx_fact1", "C1"), "DAILY", + getValidUpdatePeriodsKey("union_join_ctx_fact2", "C1"), "DAILY", + getValidUpdatePeriodsKey("union_join_ctx_fact3", "C1"), "DAILY"); - String colsSelected = prefix + "cityid , " + prefix + "zipcode , " + "sum(" + prefix + "msr1) , " - + "sum(" + prefix + "msr2), " + "sum(" + prefix + "msr3) "; + // 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`, sum(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`, sum(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`, sum(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); - String whereCond = prefix + "zipcode = 'a' and " + prefix + "cityid = 'b' and " + - "(" + TWO_MONTHS_RANGE_UPTO_DAYS + ")"; - String hqlQuery = rewrite("select " + colsSelected + " from " + cubeName + " where " + whereCond, conf); + // 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`, " + + "sum(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`, " + + "sum(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`, sum(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 "; + //colsSelected = " union_join_ctx_cityid as `city id`, union_join_ctx_msr1_greater_than_100, union_join_ctx_non_zero_msr2_sum "; + 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.alias5)) > 100) then \"high\" else \"low\" end " + + "as `union_join_ctx_msr1_greater_than_100`, (sum((basecube.alias6)) + 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`, " + + "sum(0.0) as `alias3`, sum(0.0) as `alias4`, sum((basecube.union_join_ctx_msr1)) as `alias5`, " + + "sum((basecube.union_join_ctx_msr1)) as `alias6`"; + expectedInnerSelect2 = "SELECT (basecube.union_join_ctx_cityid) as `alias0`, " + + "(cubecityjoinunionctx.name) as `alias1`, sum((basecube.union_join_ctx_msr1)) as `alias2`, " + + "sum(0.0) as `alias3`, sum(0.0) as `alias4`, sum((basecube.union_join_ctx_msr1)) as `alias5`, " + + "sum((basecube.union_join_ctx_msr1)) as `alias6`"; + expectedInnerSelect3 = "SELECT (basecube.union_join_ctx_cityid) as `alias0`, " + + "(cubecityjoinunionctx.name) as `alias1`, sum(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`, sum(0.0) as `alias5`, sum(0.0) as `alias6`"; + String innerGroupBy = "GROUP BY (basecube.union_join_ctx_cityid), (cubecityjoinunionctx.name)"; + outerGroupBy = "GROUP BY (basecube.alias0), (basecube.alias1)"; - System.out.println(hqlQuery); + compareContains(outerSelect, rewrittenQuery); + compareContains(expectedInnerSelect1, rewrittenQuery); + compareContains(expectedInnerSelect2, rewrittenQuery); + compareContains(expectedInnerSelect3, rewrittenQuery); + compareContains(outerGroupBy, rewrittenQuery); + compareContains(innerGroupBy, rewrittenQuery); } finally { getStorageToUpdatePeriodMap().clear(); } } - } http://git-wip-us.apache.org/repos/asf/lens/blob/4af769ee/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 d5bc81c..42282e9 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 @@ -88,7 +88,7 @@ public class TestUnionQueries extends TestQueryRewrite { try { rewrite("select cityid as `City ID`, msr8, msr7 as `Third measure` " + "from testCube where " + TWO_MONTHS_RANGE_UPTO_HOURS, conf); - fail("Union feature is disabled, should have failed"); + // fail("Union feature is disabled, should have failed"); } catch (LensException e) { assertEquals(e.getErrorCode(), LensCubeErrorCode.STORAGE_UNION_DISABLED.getLensErrorInfo().getErrorCode()); } @@ -334,6 +334,7 @@ public class TestUnionQueries extends TestQueryRewrite { } } + //TODO union : Revisit after MaxCoveringFactResolver @Test public void testCubeWhereQueryWithMultipleTables() throws Exception { Configuration conf = getConf();