Repository: tajo Updated Branches: refs/heads/branch-0.8.0 655c2c058 -> b0ff0314c
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/b0ff0314 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/b0ff0314 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/b0ff0314 Branch: refs/heads/branch-0.8.0 Commit: b0ff0314cd81e9e974d02809deb41d4b37e90ae1 Parents: 655c2c0 Author: blrunner <[email protected]> Authored: Tue Apr 22 18:01:22 2014 +0900 Committer: blrunner <[email protected]> Committed: Tue Apr 22 18:01:22 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/b0ff0314/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index b564579..2ef2982 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -327,6 +327,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/b0ff0314/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/b0ff0314/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/b0ff0314/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/b0ff0314/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
