You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2014/07/07 05:10:40 UTC
git commit: TAJO-898: Left outer join with union returns empty
result. (Hyoungjun Kim via hyunsik)
Repository: tajo
Updated Branches:
refs/heads/master 844ffd7d2 -> 9fdd1ebe1
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/master
Commit: 9fdd1ebe120976df53de4cee890de88413847146
Parents: 844ffd7
Author: Hyunsik Choi <hy...@apache.org>
Authored: Mon Jul 7 11:48:19 2014 +0900
Committer: Hyunsik Choi <hy...@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