You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2013/12/28 07:36:14 UTC
[17/50] [abbrv] git commit: TAJO-418: sort operator after Inline
views consisting of unions can cause an incorrect distributed plan. (hyunsik)
TAJO-418: sort operator after Inline views consisting of unions can cause an incorrect distributed plan. (hyunsik)
Project: http://git-wip-us.apache.org/repos/asf/incubator-tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tajo/commit/d930a90d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tajo/tree/d930a90d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tajo/diff/d930a90d
Branch: refs/heads/DAG-execplan
Commit: d930a90d50ce9b41050486ace11c96d0847b80b0
Parents: 14160fa
Author: Hyunsik Choi <hy...@apache.org>
Authored: Tue Dec 17 02:46:48 2013 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Tue Dec 17 02:46:48 2013 +0900
----------------------------------------------------------------------
CHANGES.txt | 3 ++
.../engine/planner/global/GlobalPlanner.java | 7 ++++-
.../tajo/engine/query/TestCaseByCases.java | 16 +++++++++++
.../src/test/queries/tajo418_case.sql | 29 ++++++++++++++++++++
4 files changed, 54 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d930a90d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2581d3c..96a3b77 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -150,6 +150,9 @@ Release 0.8.0 - unreleased
BUG FIXES
+ TAJO-418: sort operator after inline views consisting of unions can cause
+ an incorrect distributed plan. (hyunsik)
+
TAJO-417: TestSQLExpression.testCastFromTable causes unit test failure.
(hyunsik)
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d930a90d/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index 5ce8922..6ef35ce 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -288,12 +288,17 @@ public class GlobalPlanner {
ExecutionBlock currentBlock;
SortNode firstSortNode = PlannerUtil.clone(context.plan.getLogicalPlan(), currentNode);
+ LogicalNode childBlockPlan = childBlock.getPlan();
+ firstSortNode.setChild(childBlockPlan);
+ // sort is a non-projectable operator. So, in/out schemas are the same to its child operator.
+ firstSortNode.setInSchema(childBlockPlan.getOutSchema());
+ firstSortNode.setOutSchema(childBlockPlan.getOutSchema());
childBlock.setPlan(firstSortNode);
currentBlock = masterPlan.newExecutionBlock();
DataChannel channel = new DataChannel(childBlock, currentBlock, RANGE_PARTITION, 32);
channel.setPartitionKey(PlannerUtil.sortSpecsToSchema(currentNode.getSortKeys()).toArray());
- channel.setSchema(currentNode.getOutSchema());
+ channel.setSchema(firstSortNode.getOutSchema());
ScanNode secondScan = buildInputExecutor(masterPlan.getLogicalPlan(), channel);
currentNode.setChild(secondScan);
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d930a90d/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCaseByCases.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCaseByCases.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCaseByCases.java
index 7f301be..5885f10 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCaseByCases.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCaseByCases.java
@@ -21,6 +21,7 @@ package org.apache.tajo.engine.query;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.client.ResultSetUtil;
import org.apache.tajo.util.FileUtil;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -31,6 +32,8 @@ import java.sql.ResultSet;
import java.util.List;
import java.util.Map;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class TestCaseByCases {
@@ -63,4 +66,17 @@ public class TestCaseByCases {
res.close();
}
}
+
+ @Test
+ public final void testTAJO418Case() throws Exception {
+ ResultSet res = tpch.execute(FileUtil.readTextFile(new File("src/test/queries/tajo418_case.sql")));
+ try {
+ assertTrue(res.next());
+ assertEquals("R", res.getString(1));
+ assertEquals("F", res.getString(2));
+ assertFalse(res.next());
+ } finally {
+ res.close();
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/d930a90d/tajo-core/tajo-core-backend/src/test/queries/tajo418_case.sql
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/queries/tajo418_case.sql b/tajo-core/tajo-core-backend/src/test/queries/tajo418_case.sql
new file mode 100644
index 0000000..b3ad48a
--- /dev/null
+++ b/tajo-core/tajo-core-backend/src/test/queries/tajo418_case.sql
@@ -0,0 +1,29 @@
+SELECT
+ l_returnflag,
+ l_linestatus
+
+FROM (
+ SELECT
+ *
+ FROM
+ lineitem
+ WHERE
+ l_returnflag = 'K'
+
+ UNION ALL
+
+ SELECT
+ *
+ FROM
+ lineitem
+ WHERE
+ l_returnflag = 'R'
+) T
+
+GROUP BY
+ l_returnflag,
+ l_linestatus
+
+ORDER BY
+ l_returnflag,
+ l_linestatus
\ No newline at end of file