You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by pr...@apache.org on 2015/10/27 16:38:14 UTC
lens git commit: LENS-849: NPE with CandidateTableResolver with
expression dimensions
Repository: lens
Updated Branches:
refs/heads/master 6c4dba51b -> 09419a577
LENS-849: NPE with CandidateTableResolver with expression dimensions
Project: http://git-wip-us.apache.org/repos/asf/lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/09419a57
Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/09419a57
Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/09419a57
Branch: refs/heads/master
Commit: 09419a577f6b4d4ac8890be10de7ddf256ef616b
Parents: 6c4dba5
Author: Amareshwari Sriramadasu <am...@gmail.com>
Authored: Tue Oct 27 21:07:29 2015 +0530
Committer: Rajat Khandelwal <ra...@gmail.com>
Committed: Tue Oct 27 21:07:30 2015 +0530
----------------------------------------------------------------------
.../apache/lens/cube/parse/CandidateTableResolver.java | 12 +++++++-----
.../java/org/apache/lens/cube/parse/CubeTestSetup.java | 2 ++
.../apache/lens/cube/parse/TestExpressionResolver.java | 13 ++++++++++++-
.../java/org/apache/lens/cube/parse/TestQuery.java | 12 +++++++-----
.../lens/driver/jdbc/TestColumnarSQLRewriter.java | 2 +-
5 files changed, 29 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lens/blob/09419a57/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 f81f3d5..0ad7610 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
@@ -590,11 +590,13 @@ class CandidateTableResolver implements ContextRewriter {
for (CandidateTable candidate : removedCandidates.get(dim)) {
// check if evaluable expressions of this candidate are no more evaluable because dimension is not reachable
// if no evaluable expressions exist, then remove the candidate
- Iterator<ExprSpecContext> escIter = ec.getEvaluableExpressions().get(candidate).iterator();
- while (escIter.hasNext()) {
- ExprSpecContext esc = escIter.next();
- if (esc.getExprDims().contains(dim)) {
- escIter.remove();
+ if (ec.getEvaluableExpressions().get(candidate) != null) {
+ Iterator<ExprSpecContext> escIter = ec.getEvaluableExpressions().get(candidate).iterator();
+ while (escIter.hasNext()) {
+ ExprSpecContext esc = escIter.next();
+ if (esc.getExprDims().contains(dim)) {
+ escIter.remove();
+ }
}
}
if (cubeql.getExprCtx().isEvaluable(col.getExprCol(), candidate)) {
http://git-wip-us.apache.org/repos/asf/lens/blob/09419a57/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 705f19b..dc11b4c 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
@@ -698,6 +698,8 @@ public class CubeTestSetup {
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",
null, null)));
+ exprs.add(new ExprColumn(new FieldSchema("msr2expr", "double", "nested expr"), "Nested expr",
+ new ExprSpec("case when cityStateName = 'xyz' then msr2 else 0 end", null, null)));
exprs.add(new ExprColumn(new FieldSchema("nestedExprWithTimes", "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/09419a57/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 1cb22eb..e90603c 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
@@ -316,6 +316,17 @@ public class TestExpressionResolver extends TestQueryRewrite {
}
@Test
+ public void testExpressionFieldWithOtherFields() throws Exception {
+ // select with expression which requires dimension tables. And there is a candidate, which is removed because
+ // the other fields which require the dimension tables as expression ones, are not reachable and
+ // the expression is not evaluable on the candidate.
+ LensException th =
+ getLensExceptionInRewrite("select cityStateName, msr2expr, msr5, msr15 from testCube where "
+ + TWO_DAYS_RANGE, conf);
+ Assert.assertEquals(th.getErrorCode(),
+ LensCubeErrorCode.NO_CANDIDATE_FACT_AVAILABLE.getLensErrorInfo().getErrorCode());
+ }
+ @Test
public void testMaterializedExpressionPickingMaterializedValue() throws Exception {
Configuration newConf = new Configuration(conf);
newConf.set(CubeQueryConfUtil.DRIVER_SUPPORTED_STORAGES, "C2");
@@ -371,7 +382,7 @@ public class TestExpressionResolver extends TestQueryRewrite {
// since zipdim is not available in storage C2, first expression should be have been pruned
// And joining with statedim for second expression is not possible because of stateid missing in C2 tables
// or citydim.name missing in c2 tables.
- CubeQueryContext ctx = rewriteCtx("select citydim.name, cityaddress from" + " citydim", newConf);
+ CubeQueryContext ctx = rewriteCtx("select citydim.name, cityaddress from citydim", newConf);
Assert.assertEquals(ctx.getDimPruningMsgs().get(ctx.getMetastoreClient().getDimension("citydim"))
.get(ctx.getMetastoreClient().getDimensionTable("citytable")).size(), 1);
CandidateTablePruneCause pruningMsg =
http://git-wip-us.apache.org/repos/asf/lens/blob/09419a57/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQuery.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQuery.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQuery.java
index 2707c4c..8e35ea9 100644
--- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQuery.java
+++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestQuery.java
@@ -72,12 +72,14 @@ public class TestQuery {
* Get the join query part, pre-join query and post-join query part from the trimmed query.
*
*/
- if (trimmedQuery.indexOf(joinQueryPart) != -1) {
+ if (StringUtils.isNotBlank(joinQueryPart)) {
this.preJoinQueryPart = trimmedQuery.substring(0, trimmedQuery.indexOf(joinQueryPart));
- if (getMinIndexOfClause() != -1) {
- this.postJoinQueryPart = trimmedQuery.substring(getMinIndexOfClause());
- }
+ this.postJoinQueryPart = trimmedQuery.substring(getMinIndexOfClause());
prepareJoinStrings(trimmedQuery);
+ } else {
+ int minIndex = getMinIndexOfClause();
+ this.preJoinQueryPart = trimmedQuery.substring(0, minIndex);
+ this.postJoinQueryPart = trimmedQuery.substring(minIndex);
}
}
@@ -162,7 +164,7 @@ public class TestQuery {
}
minClauseIndex = clauseIndex < minClauseIndex ? clauseIndex : minClauseIndex;
}
- return minClauseIndex == Integer.MAX_VALUE ? -1 : minClauseIndex;
+ return (minClauseIndex == Integer.MAX_VALUE || minClauseIndex == -1) ? query.length() : minClauseIndex;
}
private int getMinIndexOfJoinType() {
http://git-wip-us.apache.org/repos/asf/lens/blob/09419a57/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
----------------------------------------------------------------------
diff --git a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
index 149c450..758f549 100644
--- a/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
+++ b/lens-driver-jdbc/src/test/java/org/apache/lens/driver/jdbc/TestColumnarSQLRewriter.java
@@ -435,7 +435,7 @@ public class TestColumnarSQLRewriter {
String actual = qtest.rewrite(query, conf, hconf);
String expected = "select ( sales_fact___fact . time_key ), ( time_dim___time_dim . day_of_week ), "
- + "week((time_dim__time_dim . day )), "
+ + "week((time_dim___time_dim . day )), "
+ "date(( time_dim___time_dim . day )), ( item_dim___item_dim . item_key ), "
+ "case when (sum(alias2) = 0 ) then 0.0 else sum(alias2) end as `dollars_sold` , "
+ "format(sum(alias3), 4 ), format(avg(alias4), '##################.###' ), "