You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by sh...@apache.org on 2015/12/30 08:10:30 UTC
[11/50] [abbrv] lens git commit: LENS-870 : Expressions in multi fact
query is not rewritten properly
LENS-870 : Expressions in multi fact query is not rewritten properly
Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/09baa128
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/09baa128
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/09baa128
Branch: refs/heads/LENS-581
Commit: 09baa12880ba27c00323bbf881e9c69acb580117
Parents: d820c32
Author: Sushil Mohanty <su...@gmail.com>
Authored: Tue Nov 24 12:05:05 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Tue Nov 24 12:05:05 2015 +0530
----------------------------------------------------------------------
.../lens/cube/parse/CandidateTableResolver.java | 3 ++-
.../lens/cube/parse/ExpressionResolver.java | 6 ++---
.../apache/lens/cube/parse/CubeTestSetup.java | 2 ++
.../lens/cube/parse/TestBaseCubeQueries.java | 27 ++++++++++++++++++++
4 files changed, 34 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lens/blob/09baa128/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
index 0ad7610..38ff5a4 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CandidateTableResolver.java
@@ -272,7 +272,8 @@ class CandidateTableResolver implements ContextRewriter {
if (!checkForColumnExists(cfact, queriedMsrs)
&& (cubeql.getQueriedExprsWithMeasures().isEmpty()
|| cubeql.getExprCtx().allNotEvaluable(cubeql.getQueriedExprsWithMeasures(), cfact))) {
- log.info("Not considering fact table:{} as columns {} is not available", cfact, queriedMsrs);
+ log.info("Not considering fact table:{} as columns {},{} is not available", cfact, queriedMsrs,
+ cubeql.getQueriedExprsWithMeasures());
cubeql.addFactPruningMsgs(cfact.fact, CandidateTablePruneCause.columnNotFound(queriedMsrs,
cubeql.getQueriedExprsWithMeasures()));
toRemove = true;
http://git-wip-us.apache.org/repos/asf/lens/blob/09baa128/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java
index 1a347b2..200a48c 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/ExpressionResolver.java
@@ -405,11 +405,11 @@ class ExpressionResolver implements ContextRewriter {
*/
public boolean allNotEvaluable(Set<String> exprs, CandidateTable cTable) {
for (String expr : exprs) {
- if (!isEvaluable(expr, cTable)) {
- return true;
+ if (isEvaluable(expr, cTable)) {
+ return false;
}
}
- return false;
+ return true;
}
public Collection<String> coveringExpressions(Set<String> exprs, CandidateTable cTable) {
http://git-wip-us.apache.org/repos/asf/lens/blob/09baa128/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
index aa15a2c..999faa0 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/CubeTestSetup.java
@@ -732,6 +732,8 @@ public class CubeTestSetup {
"round(msr1/1000)"));
exprs.add(new ExprColumn(new FieldSchema("roundedmsr2", "double", "rounded measure2"), "Rounded msr2",
"round(msr2/1000)"));
+ exprs.add(new ExprColumn(new FieldSchema("flooredmsr12", "double", "floored measure12"), "Floored msr12",
+ "floor(msr12)"));
exprs.add(new ExprColumn(new FieldSchema("nestedexpr", "double", "nested expr"), "Nested expr",
new ExprSpec("avg(roundedmsr2)", null, null), new ExprSpec("avg(equalsums)", null, null),
new ExprSpec("case when substrexpr = 'xyz' then avg(msr5) when substrexpr = 'abc' then avg(msr4)/100 end",
http://git-wip-us.apache.org/repos/asf/lens/blob/09baa128/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 548bf5c..1ea22b7 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
@@ -226,6 +226,33 @@ public class TestBaseCubeQueries extends TestQueryRewrite {
}
@Test
+ public void testMultiFactQueryWithExpressionsFromMultipleFacts() throws Exception {
+ Configuration tConf = new Configuration(conf);
+ tConf.setBoolean(CubeQueryConfUtil.LIGHTEST_FACT_FIRST, true);
+ String hqlQuery = rewrite("select dim1, roundedmsr2, flooredmsr12 from basecube" + " where "
+ + TWO_DAYS_RANGE, tConf);
+ String expected1 =
+ getExpectedQuery(cubeName, "select basecube.dim1 as `dim1`, "
+ + "floor(sum(( basecube . msr12 ))) as `flooredmsr12` FROM ", null,
+ " group by basecube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_testFact2_BASE"));
+ String expected2 = getExpectedQuery(cubeName,
+ "select basecube.dim1 as `dim1`, round(sum(basecube.msr2)/1000) as `roundedmsr2` FROM ", null,
+ " group by basecube.dim1", getWhereForDailyAndHourly2days(cubeName, "C1_testFact1_BASE"));
+ TestCubeRewriter.compareContains(expected1, hqlQuery);
+ TestCubeRewriter.compareContains(expected2, hqlQuery);
+ String lower = hqlQuery.toLowerCase();
+ assertTrue(
+ lower.startsWith("select coalesce(mq1.dim1, mq2.dim1) dim1, mq2.roundedmsr2 roundedmsr2, "
+ + "mq1.flooredmsr12 flooredmsr12 from ")
+ || lower.startsWith("select coalesce(mq1.dim1, mq2.dim1) dim1, mq1.roundedmsr2 roundedmsr2, "
+ + "mq2.flooredmsr12 flooredmsr12"
+ + " from "), hqlQuery);
+
+ assertTrue(hqlQuery.contains("mq1 full outer join ") && hqlQuery.endsWith("mq2 on mq1.dim1 <=> mq2.dim1"),
+ hqlQuery);
+ }
+
+ @Test
public void testMultiFactQueryWithSingleCommonDimensionWithColumnsSwapped() throws Exception {
// columns in select interchanged
String hqlQuery = rewrite("select dim1, msr12, roundedmsr2 from basecube" + " where " + TWO_DAYS_RANGE, conf);