TAJO-897: PartitionedTableRewriter is repeated several times with same table. 
(Hyoungjun Kim via hyunsik)

Closes #54


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/844ffd7d
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/844ffd7d
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/844ffd7d

Branch: refs/heads/window_function
Commit: 844ffd7d2428209292e41dadbfed19ee03c37deb
Parents: eae4c13
Author: Hyunsik Choi <[email protected]>
Authored: Mon Jul 7 11:40:38 2014 +0900
Committer: Hyunsik Choi <[email protected]>
Committed: Mon Jul 7 11:43:31 2014 +0900

----------------------------------------------------------------------
 CHANGES                                         |  3 +++
 .../rewrite/PartitionedTableRewriter.java       | 19 +++----------
 .../query/TestJoinOnPartitionedTables.java      | 28 ++++++++++++++++++++
 3 files changed, 34 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/844ffd7d/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index d12b1e8..986af7a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -74,6 +74,9 @@ Release 0.9.0 - unreleased
 
   BUG FIXES
 
+    TAJO-897: PartitionedTableRewriter is repeated several times with same 
+    table. (Hyoungjun Kim via hyunsik)
+
     TAJO-891: Complex join conditions with UNION or inline should be supported.
     (hyunsik)
     

http://git-wip-us.apache.org/repos/asf/tajo/blob/844ffd7d/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
index e637341..666c5fc 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
@@ -76,21 +76,8 @@ public class PartitionedTableRewriter implements RewriteRule 
{
 
   @Override
   public LogicalPlan rewrite(LogicalPlan plan) throws PlanningException {
-    boolean containsPartitionedTables;
-    for (LogicalPlan.QueryBlock block : plan.getQueryBlocks()) {
-      containsPartitionedTables = false;
-      for (RelationNode relation : block.getRelations()) {
-        if (relation.getType() == NodeType.SCAN) {
-          TableDesc table = ((ScanNode)relation).getTableDesc();
-          if (table.hasPartition()) {
-            containsPartitionedTables = true;
-          }
-        }
-      }
-      if (containsPartitionedTables) {
-        rewriter.visit(block, plan, block, block.getRoot(), new 
Stack<LogicalNode>());
-      }
-    }
+    LogicalPlan.QueryBlock rootBlock = plan.getRootBlock();
+    rewriter.visit(rootBlock, plan, rootBlock, rootBlock.getRoot(), new 
Stack<LogicalNode>());
     return plan;
   }
 
@@ -360,7 +347,7 @@ public class PartitionedTableRewriter implements 
RewriteRule {
         updateTableStat(rewrittenScanNode);
 
         // if it is topmost node, set it as the rootnode of this block.
-        if (stack.empty()) {
+        if (stack.empty() || block.getRoot().equals(scanNode)) {
           block.setRoot(rewrittenScanNode);
         } else {
           PlannerUtil.replaceNode(plan, stack.peek(), scanNode, 
rewrittenScanNode);

http://git-wip-us.apache.org/repos/asf/tajo/blob/844ffd7d/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinOnPartitionedTables.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinOnPartitionedTables.java
 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinOnPartitionedTables.java
index 781f80a..34ead13 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinOnPartitionedTables.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinOnPartitionedTables.java
@@ -24,6 +24,8 @@ import org.junit.Test;
 
 import java.sql.ResultSet;
 
+import static org.junit.Assert.assertEquals;
+
 public class TestJoinOnPartitionedTables extends QueryTestCaseBase {
 
   public TestJoinOnPartitionedTables() {
@@ -64,6 +66,32 @@ public class TestJoinOnPartitionedTables extends 
QueryTestCaseBase {
   }
 
   @Test
+  public void testPartitionMultiplePartitionFilter() throws Exception {
+    executeDDL("customer_ddl.sql", null);
+    ResultSet res = executeFile("insert_into_customer.sql");
+    res.close();
+
+    res = executeString(
+        "select a.c_custkey, b.c_custkey from " +
+            "  (select c_custkey, c_nationkey from customer_parts where 
c_nationkey < 0 " +
+            "   union all " +
+            "   select c_custkey, c_nationkey from customer_parts where 
c_nationkey < 0 " +
+            ") a " +
+            "left outer join customer_parts b " +
+            "on a.c_custkey = b.c_custkey " +
+            "and a.c_nationkey > 0"
+    );
+
+    String expected =
+        "c_custkey,c_custkey\n" +
+            "-------------------------------\n";
+    assertEquals(expected, resultSetToString(res));
+    res.close();
+
+    executeString("DROP TABLE customer_parts PURGE").close();
+  }
+
+  @Test
   public void testFilterPushDownPartitionColumnCaseWhen() throws Exception {
     executeDDL("customer_ddl.sql", null);
     ResultSet res = executeFile("insert_into_customer.sql");

Reply via email to