tajo-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From hyun...@apache.org
Subject [46/50] [abbrv] git commit: TAJO-898: Left outer join with union returns empty result. (Hyoungjun Kim via hyunsik)
Date Wed, 09 Jul 2014 04:11:03 GMT
TAJO-898: Left outer join with union returns empty result. (Hyoungjun Kim via hyunsik)

Closes #55


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

Branch: refs/heads/window_function
Commit: 9fdd1ebe120976df53de4cee890de88413847146
Parents: 844ffd7
Author: Hyunsik Choi <hyunsik@apache.org>
Authored: Mon Jul 7 11:48:19 2014 +0900
Committer: Hyunsik Choi <hyunsik@apache.org>
Committed: Mon Jul 7 11:49:52 2014 +0900

----------------------------------------------------------------------
 CHANGES                                         |  3 +++
 .../tajo/master/querymaster/Repartitioner.java  | 11 +++++++--
 .../tajo/engine/query/TestUnionQuery.java       | 25 ++++++++++++++++++++
 3 files changed, 37 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/9fdd1ebe/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 986af7a..74db949 100644
--- a/CHANGES
+++ b/CHANGES
@@ -74,6 +74,9 @@ Release 0.9.0 - unreleased
 
   BUG FIXES
 
+    TAJO-898: Left outer join with union returns empty result. 
+    (Hyoungjun Kim via hyunsik)
+
     TAJO-897: PartitionedTableRewriter is repeated several times with same 
     table. (Hyoungjun Kim via hyunsik)
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/9fdd1ebe/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Repartitioner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Repartitioner.java
b/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Repartitioner.java
index 80274e2..0046dbe 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Repartitioner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/querymaster/Repartitioner.java
@@ -88,8 +88,15 @@ public class Repartitioner {
       TableDesc tableDesc = masterContext.getTableDescMap().get(scans[i].getCanonicalName());
       if (tableDesc == null) { // if it is a real table stored on storage
         tablePath = storageManager.getTablePath(scans[i].getTableName());
-        ExecutionBlockId scanEBId = TajoIdUtils.createExecutionBlockId(scans[i].getTableName());
-        stats[i] = masterContext.getSubQuery(scanEBId).getResultStats().getNumBytes();
+        if (execBlock.getUnionScanMap() != null && !execBlock.getUnionScanMap().isEmpty())
{
+          for (Map.Entry<ExecutionBlockId, ExecutionBlockId> unionScanEntry: execBlock.getUnionScanMap().entrySet())
{
+            ExecutionBlockId originScanEbId = unionScanEntry.getKey();
+            stats[i] += masterContext.getSubQuery(originScanEbId).getResultStats().getNumBytes();
+          }
+        } else {
+          ExecutionBlockId scanEBId = TajoIdUtils.createExecutionBlockId(scans[i].getTableName());
+          stats[i] = masterContext.getSubQuery(scanEBId).getResultStats().getNumBytes();
+        }
         fragments[i] = new FileFragment(scans[i].getCanonicalName(), tablePath, 0, 0, new
String[]{UNKNOWN_HOST});
       } else {
         tablePath = tableDesc.getPath();

http://git-wip-us.apache.org/repos/asf/tajo/blob/9fdd1ebe/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
index 1ec2c33..3d292a4 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestUnionQuery.java
@@ -425,4 +425,29 @@ public class TestUnionQuery extends QueryTestCaseBase {
 
     cleanupQuery(res);
   }
+
+  @Test
+  public void testUnionCaseOfFirstEmptyAndJoin() throws Exception {
+    ResultSet res = executeString(
+        "select a.c_custkey, b.c_custkey from " +
+            "  (select c_custkey, c_nationkey from customer where c_nationkey < 0 " +
+            "   union all " +
+            "   select c_custkey, c_nationkey from customer where c_nationkey > 0 " +
+            ") a " +
+            "left outer join customer b " +
+            "on a.c_custkey = b.c_custkey "
+    );
+
+    String expected =
+        "c_custkey,c_custkey\n" +
+            "-------------------------------\n" +
+            "1,1\n" +
+            "2,2\n" +
+            "3,3\n" +
+            "4,4\n" +
+            "5,5\n";
+
+    assertEquals(expected, resultSetToString(res));
+    res.close();
+  }
 }
\ No newline at end of file


Mime
View raw message