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

Reply via email to