Repository: tajo Updated Branches: refs/heads/master 882f92c6d -> 248879fee
TAJO-787: FilterPushDownRule::visitSubQuery does not consider aliased columns. (jaehwa) Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/248879fe Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/248879fe Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/248879fe Branch: refs/heads/master Commit: 248879fee0038c89b77d0bf6271023e718410e41 Parents: 882f92c Author: blrunner <[email protected]> Authored: Tue Apr 22 18:01:39 2014 +0900 Committer: blrunner <[email protected]> Committed: Tue Apr 22 18:01:39 2014 +0900 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ .../engine/planner/rewrite/FilterPushDownRule.java | 15 +++++++++++++-- .../apache/tajo/engine/query/TestSelectQuery.java | 7 +++++++ .../queries/TestSelectQuery/testWhereCond2.sql | 8 ++++++++ .../results/TestSelectQuery/testWhereCond2.result | 5 +++++ 5 files changed, 35 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/248879fe/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index de78d31..1b9e7f7 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -341,6 +341,8 @@ Release 0.8.0 - unreleased BUG FIXES + TAJO-787: FilterPushDownRule::visitSubQuery does not consider aliased columns. (jaehwa) + TAJO-786: TajoDataMetaDatabase::getSchemas creates invalid MetaDataTuple. (hyunsik) http://git-wip-us.apache.org/repos/asf/tajo/blob/248879fe/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/FilterPushDownRule.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/FilterPushDownRule.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/FilterPushDownRule.java index 63b426f..0f0a956 100644 --- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/FilterPushDownRule.java +++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/FilterPushDownRule.java @@ -255,8 +255,19 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<Set<EvalNode>, L childNode.getOutSchema().getColumn(i).getQualifiedName()); } else { NamedExprsManager namedExprsMgr = plan.getBlock(node.getSubQuery()).getNamedExprsManager(); - columnMap.put(node.getInSchema().getColumn(i).getQualifiedName(), - namedExprsMgr.getOriginalName(childNode.getOutSchema().getColumn(i).getQualifiedName())); + String originalName = namedExprsMgr.getOriginalName(childNode.getOutSchema().getColumn(i) + .getQualifiedName()); + + // We need to consider aliased columns of sub-query. + // Because we can't get original column name for a special occasion. + // For example, if we use an aliased name inside a sub-query and then we use it to where + // condition outside the sub-query, we can't find its original name. + if (originalName != null) { + columnMap.put(node.getInSchema().getColumn(i).getQualifiedName(), originalName); + } else { + columnMap.put(node.getInSchema().getColumn(i).getQualifiedName(), + node.getInSchema().getColumn(i).getQualifiedName()); + } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/248879fe/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java index 05c510b..ca452b7 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestSelectQuery.java @@ -128,6 +128,13 @@ public class TestSelectQuery extends QueryTestCaseBase { } @Test + public final void testWhereCond2() throws Exception { + ResultSet res = executeQuery(); + assertResultSet(res); + cleanupQuery(res); + } + + @Test public final void testWhereCondWithAlias1() throws Exception { ResultSet res = executeQuery(); assertResultSet(res); http://git-wip-us.apache.org/repos/asf/tajo/blob/248879fe/tajo-core/src/test/resources/queries/TestSelectQuery/testWhereCond2.sql ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/resources/queries/TestSelectQuery/testWhereCond2.sql b/tajo-core/src/test/resources/queries/TestSelectQuery/testWhereCond2.sql new file mode 100644 index 0000000..ff50369 --- /dev/null +++ b/tajo-core/src/test/resources/queries/TestSelectQuery/testWhereCond2.sql @@ -0,0 +1,8 @@ +select * +from ( + select a.l_orderkey, count(*) as cnt + from lineitem a + group by a.l_orderkey +) t +where t.cnt > 0 +order by t.l_orderkey \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tajo/blob/248879fe/tajo-core/src/test/resources/results/TestSelectQuery/testWhereCond2.result ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/resources/results/TestSelectQuery/testWhereCond2.result b/tajo-core/src/test/resources/results/TestSelectQuery/testWhereCond2.result new file mode 100644 index 0000000..32c93ed --- /dev/null +++ b/tajo-core/src/test/resources/results/TestSelectQuery/testWhereCond2.result @@ -0,0 +1,5 @@ +l_orderkey,cnt +------------------------------- +1,2 +2,1 +3,2 \ No newline at end of file
