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 2015/03/23 03:56:10 UTC
[1/9] tajo git commit: TAJO-1368: Exceptions during processing nested
union queries
Repository: tajo
Updated Branches:
refs/heads/index_support 60cbe9cac -> d09bd8ddc
TAJO-1368: Exceptions during processing nested union queries
Closes #402
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/725448c5
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/725448c5
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/725448c5
Branch: refs/heads/index_support
Commit: 725448c5249cd8691ea167f595237ed7bcc22293
Parents: a9ae3ca
Author: Jihun Kang <ji...@apache.org>
Authored: Thu Mar 19 09:24:55 2015 +0900
Committer: Jihun Kang <ji...@apache.org>
Committed: Thu Mar 19 09:24:55 2015 +0900
----------------------------------------------------------------------
CHANGES | 3 +
.../engine/planner/global/GlobalPlanner.java | 39 +++++++++---
.../java/org/apache/tajo/querymaster/Stage.java | 3 +-
.../apache/tajo/engine/query/TestCTASQuery.java | 28 +++++++++
.../tajo/engine/query/TestUnionQuery.java | 64 +++++++++++++++++++-
.../TestCTASQuery/CtasWithMultipleUnions.sql | 12 ++++
.../testCtasWithMultipleUnions.sql | 1 +
7 files changed, 140 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 4875cab..56d77b3 100644
--- a/CHANGES
+++ b/CHANGES
@@ -32,6 +32,9 @@ Release 0.11.0 - unreleased
BUG FIXES
+ TAJO-1368: Exceptions during processing nested union queries.
+ (jihun)
+
TAJO-1405: Fix some illegal way of usages on connection pool.
(Contributed by navis, Committed by Keuntae Park)
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index 15d8034..d2ac6cc 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -23,6 +23,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.Path;
@@ -821,7 +822,7 @@ public class GlobalPlanner {
public static boolean hasUnionChild(UnaryNode node) {
- // there are two cases:
+ // there are three cases:
//
// The first case is:
//
@@ -835,9 +836,15 @@ public class GlobalPlanner {
// select avg(..) from (select ... UNION select ) T
//
// We can generalize this case as 'a shuffle required operator on the top of union'.
+ //
+ // The third case is:
+ //
+ // create table select * from ( select ... ) a union all select * from ( select ... ) b
- if (node.getChild() instanceof UnaryNode) { // first case
- UnaryNode child = node.getChild();
+ LogicalNode childNode = node.getChild();
+
+ if (childNode instanceof UnaryNode) { // first case
+ UnaryNode child = (UnaryNode) childNode;
if (child.getChild().getType() == NodeType.PROJECTION) {
child = child.getChild();
@@ -848,9 +855,11 @@ public class GlobalPlanner {
return tableSubQuery.getSubQuery().getType() == NodeType.UNION;
}
- } else if (node.getChild().getType() == NodeType.TABLE_SUBQUERY) { // second case
+ } else if (childNode.getType() == NodeType.TABLE_SUBQUERY) { // second case
TableSubQueryNode tableSubQuery = node.getChild();
return tableSubQuery.getSubQuery().getType() == NodeType.UNION;
+ } else if (childNode.getType() == NodeType.UNION) { // third case
+ return true;
}
return false;
@@ -1156,6 +1165,9 @@ public class GlobalPlanner {
((TableSubQueryNode)child).getSubQuery().getType() == NodeType.UNION) {
MasterPlan masterPlan = context.plan;
for (DataChannel dataChannel : masterPlan.getIncomingChannels(execBlock.getId())) {
+ // This data channel will be stored in staging directory, but RawFile, default file type, does not support
+ // distributed file system. It needs to change the file format for distributed file system.
+ dataChannel.setStoreType(CatalogProtos.StoreType.CSV);
ExecutionBlock subBlock = masterPlan.getExecBlock(dataChannel.getSrcId());
ProjectionNode copy = PlannerUtil.clone(plan, node);
@@ -1371,18 +1383,28 @@ public class GlobalPlanner {
LogicalPlan.QueryBlock rightQueryBlock = plan.getBlock(node.getRightChild());
LogicalNode rightChild = visit(context, plan, rightQueryBlock, rightQueryBlock.getRoot(), stack);
stack.pop();
+
+ MasterPlan masterPlan = context.getPlan();
List<ExecutionBlock> unionBlocks = Lists.newArrayList();
List<ExecutionBlock> queryBlockBlocks = Lists.newArrayList();
ExecutionBlock leftBlock = context.execBlockMap.remove(leftChild.getPID());
ExecutionBlock rightBlock = context.execBlockMap.remove(rightChild.getPID());
- if (leftChild.getType() == NodeType.UNION) {
+
+ // These union types need to eliminate unnecessary nodes between parent and child node of query tree.
+ boolean leftUnion = (leftChild.getType() == NodeType.UNION) ||
+ ((leftChild.getType() == NodeType.TABLE_SUBQUERY) &&
+ (((TableSubQueryNode)leftChild).getSubQuery().getType() == NodeType.UNION));
+ boolean rightUnion = (rightChild.getType() == NodeType.UNION) ||
+ (rightChild.getType() == NodeType.TABLE_SUBQUERY) &&
+ (((TableSubQueryNode)rightChild).getSubQuery().getType() == NodeType.UNION);
+ if (leftUnion) {
unionBlocks.add(leftBlock);
} else {
queryBlockBlocks.add(leftBlock);
}
- if (rightChild.getType() == NodeType.UNION) {
+ if (rightUnion) {
unionBlocks.add(rightBlock);
} else {
queryBlockBlocks.add(rightBlock);
@@ -1396,7 +1418,8 @@ public class GlobalPlanner {
}
for (ExecutionBlock childBlocks : unionBlocks) {
- for (ExecutionBlock grandChildBlock : context.plan.getChilds(childBlocks)) {
+ for (ExecutionBlock grandChildBlock : masterPlan.getChilds(childBlocks)) {
+ masterPlan.disconnect(grandChildBlock, childBlocks);
queryBlockBlocks.add(grandChildBlock);
}
}
@@ -1404,7 +1427,7 @@ public class GlobalPlanner {
for (ExecutionBlock childBlocks : queryBlockBlocks) {
DataChannel channel = new DataChannel(childBlocks, execBlock, NONE_SHUFFLE, 1);
channel.setStoreType(storeType);
- context.plan.addConnect(channel);
+ masterPlan.addConnect(channel);
}
context.execBlockMap.put(node.getPID(), execBlock);
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
index 4e1f716..20add9f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
@@ -780,7 +780,8 @@ public class Stage implements EventHandler<StageEvent> {
try {
// Union operator does not require actual query processing. It is performed logically.
if (execBlock.hasUnion()) {
- stage.finalizeStats();
+ // Though union operator does not be processed at all, but it should handle the completion event.
+ stage.complete();
state = StageState.SUCCEEDED;
} else {
ExecutionBlock parent = stage.getMasterPlan().getParent(stage.getBlock());
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
index e93d214..18c9fbc 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
@@ -182,6 +182,34 @@ public class TestCTASQuery extends QueryTestCaseBase {
}
@Test
+ public final void testCtasWithMultipleUnions() throws Exception {
+ ResultSet res = executeFile("CtasWithMultipleUnions.sql");
+ res.close();
+
+ ResultSet res2 = executeQuery();
+ String actual = resultSetToString(res2);
+ res2.close();
+
+ String expected = "c_custkey,c_nationkey\n" +
+ "-------------------------------\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n";
+
+ assertEquals(expected, actual);
+
+ TableDesc desc = client.getTableDesc(CatalogUtil.normalizeIdentifier(res2.getMetaData().getTableName(1)));
+ assertNotNull(desc);
+ }
+
+ @Test
public final void testCtasWithStoreType() throws Exception {
ResultSet res = executeFile("CtasWithStoreType.sql");
res.close();
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/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 d46d110..03a80d1 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
@@ -450,4 +450,66 @@ public class TestUnionQuery extends QueryTestCaseBase {
assertEquals(expected, resultSetToString(res));
res.close();
}
-}
\ No newline at end of file
+
+ @Test
+ public void testTajo1368Case1() throws Exception {
+ ResultSet res = executeString(
+ "select * 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 " +
+ "union all " +
+ "select * 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 " +
+ ") b ");
+
+ String expected = "c_custkey,c_nationkey\n" +
+ "-------------------------------\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n";
+
+ assertEquals(expected, resultSetToString(res));
+ res.close();
+ }
+
+ @Test
+ public void testTajo1368Case2() throws Exception {
+ ResultSet res = executeString("select * from ( "+
+ "select c_custkey, c_nationkey from ( " +
+ "select c_custkey, c_nationkey from ( " +
+ "select c_custkey, c_nationkey from customer) a " +
+ "union all " +
+ "select c_custkey, c_nationkey from ( " +
+ "select c_custkey, c_nationkey from customer) a " +
+ " ) a " +
+ " ) a ");
+
+ String expected = "c_custkey,c_nationkey\n" +
+ "-------------------------------\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n" +
+ "1,15\n" +
+ "2,13\n" +
+ "3,1\n" +
+ "4,4\n" +
+ "5,3\n";
+
+ assertEquals(expected, resultSetToString(res));
+ res.close();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/tajo-core/src/test/resources/queries/TestCTASQuery/CtasWithMultipleUnions.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestCTASQuery/CtasWithMultipleUnions.sql b/tajo-core/src/test/resources/queries/TestCTASQuery/CtasWithMultipleUnions.sql
new file mode 100644
index 0000000..7176a2a
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestCTASQuery/CtasWithMultipleUnions.sql
@@ -0,0 +1,12 @@
+create table testCtasWithMultipleUnions as
+select * 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
+union all
+select * 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
+) b;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/725448c5/tajo-core/src/test/resources/queries/TestCTASQuery/testCtasWithMultipleUnions.sql
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/resources/queries/TestCTASQuery/testCtasWithMultipleUnions.sql b/tajo-core/src/test/resources/queries/TestCTASQuery/testCtasWithMultipleUnions.sql
new file mode 100644
index 0000000..71b7034
--- /dev/null
+++ b/tajo-core/src/test/resources/queries/TestCTASQuery/testCtasWithMultipleUnions.sql
@@ -0,0 +1 @@
+select * from testCtasWithMultipleUnions;
\ No newline at end of file
[6/9] tajo git commit: TAJO-1439: Some method name is written
wrongly. (Contributed by Jongyoung Park. Committed by jihoon)
Posted by ji...@apache.org.
TAJO-1439: Some method name is written wrongly. (Contributed by Jongyoung Park. Committed by jihoon)
Closes #444
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/3aaff387
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/3aaff387
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/3aaff387
Branch: refs/heads/index_support
Commit: 3aaff387c29adf1949d0a6ac4f0d6d7c7388f238
Parents: 154f5b9
Author: Jihoon Son <ji...@apache.org>
Authored: Sat Mar 21 18:31:38 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Sat Mar 21 18:31:57 2015 +0900
----------------------------------------------------------------------
CHANGES | 3 +++
.../src/main/java/org/apache/tajo/master/QueryInProgress.java | 2 +-
tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java | 2 +-
3 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/3aaff387/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 38bd330..e3636e6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -71,6 +71,9 @@ Release 0.11.0 - unreleased
TASKS
+ TAJO-1439: Some method name is written wrongly.
+ (Contributed by Jongyoung Park. Committed by jihoon)
+
TAJO-1398: Fix 'Getting Started' link error from 0.9.0 into 0.10.0.
(Contributed by Dongjoon Hyun, Committed by jihoon)
http://git-wip-us.apache.org/repos/asf/tajo/blob/3aaff387/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java b/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java
index bfc7b9f..c24dd90 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/QueryInProgress.java
@@ -156,7 +156,7 @@ public class QueryInProgress {
queryMasterRpcClient = queryMasterRpc.getStub();
}
- public void submmitQueryToMaster() {
+ public void submitQueryToMaster() {
if(querySubmitted.get()) {
return;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/3aaff387/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java b/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java
index 3c81540..b1fa17d 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/QueryManager.java
@@ -221,7 +221,7 @@ public class QueryManager extends CompositeService {
}
if (event.getType() == QueryJobEvent.Type.QUERY_MASTER_START) {
- queryInProgress.submmitQueryToMaster();
+ queryInProgress.submitQueryToMaster();
} else if (event.getType() == QueryJobEvent.Type.QUERY_JOB_KILL) {
scheduler.removeQuery(queryInProgress.getQueryId());
[3/9] tajo git commit: TAJO-1418 Comment on
TAJO_PULLSERVER_STANDALONE in tajo-env.sh is not consistent.
Posted by ji...@apache.org.
TAJO-1418 Comment on TAJO_PULLSERVER_STANDALONE in tajo-env.sh is not consistent.
Closes #438
Signed-off-by: Hyunsik Choi <hy...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/797138e6
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/797138e6
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/797138e6
Branch: refs/heads/index_support
Commit: 797138e61bf692de455f0a38580793cd190f46d5
Parents: e15ac7e
Author: navis.ryu <na...@apache.org>
Authored: Thu Mar 19 14:42:29 2015 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Thu Mar 19 18:52:28 2015 -0700
----------------------------------------------------------------------
CHANGES | 3 +++
tajo-dist/src/main/conf/tajo-env.sh | 2 +-
2 files changed, 4 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/797138e6/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 6ae53f6..fc18306 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,9 @@ Release 0.11.0 - unreleased
IMPROVEMENT
+ TAJO-1418: Comment on TAJO_PULLSERVER_STANDALONE in tajo-env.sh
+ is not consistent. (Contributed by navis, Committed by hyunsik)
+
TAJO-1381: Support multi-bytes delimiter for Text file.
(Contributed by navis, Committed by jinho)
http://git-wip-us.apache.org/repos/asf/tajo/blob/797138e6/tajo-dist/src/main/conf/tajo-env.sh
----------------------------------------------------------------------
diff --git a/tajo-dist/src/main/conf/tajo-env.sh b/tajo-dist/src/main/conf/tajo-env.sh
index 4a8e2b2..cbb881e 100755
--- a/tajo-dist/src/main/conf/tajo-env.sh
+++ b/tajo-dist/src/main/conf/tajo-env.sh
@@ -79,7 +79,7 @@ export TAJO_WORKER_STANDBY_MODE=true
# export HIVE_HOME=
# export HIVE_JDBC_DRIVER_DIR=
-# Tajo PullServer mode. the default mode is standalone mode
+# Tajo PullServer mode. the default is embedded mode (in worker)
# export TAJO_PULLSERVER_STANDALONE=false
# It must be required to use HBase
[8/9] tajo git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/tajo into index_support
Posted by ji...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into index_support
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/fd2f8281
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/fd2f8281
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/fd2f8281
Branch: refs/heads/index_support
Commit: fd2f8281dd0efcf07322ae94086a1a72ad8b5f87
Parents: 63c8e1c 8d0146b
Author: Jihoon Son <ji...@apache.org>
Authored: Mon Mar 23 11:55:25 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Mon Mar 23 11:55:25 2015 +0900
----------------------------------------------------------------------
CHANGES | 39 +++
tajo-catalog/tajo-catalog-client/pom.xml | 2 +-
.../tajo-catalog-drivers/tajo-hcatalog/pom.xml | 2 +-
tajo-catalog/tajo-catalog-server/pom.xml | 2 +-
tajo-cli/pom.xml | 2 +-
.../org/apache/tajo/cli/tools/TajoAdmin.java | 1 -
.../org/apache/tajo/cli/tools/TajoGetConf.java | 5 -
.../org/apache/tajo/cli/tools/TajoHAAdmin.java | 5 -
.../cli/tsql/DefaultTajoCliOutputFormatter.java | 2 +-
.../org/apache/tajo/cli/tsql/SimpleParser.java | 3 +-
.../java/org/apache/tajo/cli/tsql/TajoCli.java | 10 +-
tajo-client/pom.xml | 2 +-
.../apache/tajo/client/SessionConnection.java | 20 +-
.../java/org/apache/tajo/conf/TajoConf.java | 2 +
.../java/org/apache/tajo/util/BytesUtils.java | 159 +++++----
.../java/org/apache/tajo/util/StringUtils.java | 6 +-
.../org/apache/tajo/util/TestStringUtil.java | 4 +-
tajo-core/pom.xml | 2 +-
.../engine/planner/global/GlobalPlanner.java | 39 ++-
.../engine/planner/physical/HashJoinExec.java | 51 ++-
.../planner/physical/HashLeftOuterJoinExec.java | 74 +++-
.../physical/PartitionMergeScanExec.java | 17 +-
.../tajo/engine/planner/physical/ScanExec.java | 72 ++++
.../engine/planner/physical/SeqScanExec.java | 105 +-----
.../apache/tajo/engine/utils/CacheHolder.java | 97 ++++++
.../apache/tajo/engine/utils/TableCache.java | 84 +++++
.../apache/tajo/engine/utils/TableCacheKey.java | 57 +++
.../apache/tajo/engine/utils/TupleCache.java | 122 -------
.../apache/tajo/engine/utils/TupleCacheKey.java | 57 ---
.../org/apache/tajo/master/QueryInProgress.java | 2 +-
.../org/apache/tajo/master/QueryManager.java | 2 +-
.../exec/NonForwardQueryResultFileScanner.java | 37 +-
.../apache/tajo/master/exec/QueryExecutor.java | 5 +
.../java/org/apache/tajo/querymaster/Stage.java | 3 +-
.../tajo/worker/ExecutionBlockContext.java | 43 ++-
.../worker/ExecutionBlockSharedResource.java | 26 ++
.../main/java/org/apache/tajo/worker/Task.java | 75 ++--
.../apache/tajo/worker/TaskAttemptContext.java | 2 +-
.../java/org/apache/tajo/worker/TaskRunner.java | 9 +-
.../apache/tajo/worker/TaskRunnerManager.java | 4 +-
.../apache/tajo/engine/eval/ExprTestBase.java | 5 +-
.../apache/tajo/engine/query/TestCTASQuery.java | 28 ++
.../tajo/engine/query/TestSelectQuery.java | 48 +++
.../tajo/engine/query/TestUnionQuery.java | 64 +++-
.../apache/tajo/engine/util/TestTableCache.java | 109 ++++++
.../apache/tajo/engine/util/TestTupleCache.java | 89 -----
.../apache/tajo/master/TestGlobalPlanner.java | 3 +-
.../multibytes_delimiter1/table1.tbl | 5 +
.../multibytes_delimiter2/table2.tbl | 5 +
.../TestCTASQuery/CtasWithMultipleUnions.sql | 12 +
.../testCtasWithMultipleUnions.sql | 1 +
.../multibytes_delimiter_table1_ddl.sql | 3 +
.../multibytes_delimiter_table2_ddl.sql | 3 +
.../multibytes_delimiter_table3_ddl.sql | 3 +
.../multibytes_delimiter_table4_ddl.sql | 3 +
.../testMultiBytesDelimiter1.sql | 1 +
.../testMultiBytesDelimiter2.sql | 1 +
.../testMultiBytesDelimiter3.sql | 1 +
.../testMultiBytesDelimiter4.sql | 1 +
.../testMultiBytesDelimiter1.result | 7 +
.../testMultiBytesDelimiter2.result | 7 +
.../testMultiBytesDelimiter3.result | 7 +
.../testMultiBytesDelimiter4.result | 7 +
tajo-dist/pom.xml | 7 +-
tajo-dist/src/main/conf/tajo-env.sh | 2 +-
.../org/apache/tajo/plan/ExprAnnotator.java | 2 +-
.../java/org/apache/tajo/plan/LogicalPlan.java | 2 -
.../plan/expr/AggregationFunctionCallEval.java | 14 +
.../apache/tajo/plan/expr/AlgebraicUtil.java | 5 +
.../tajo/plan/expr/BetweenPredicateEval.java | 14 +
.../org/apache/tajo/plan/expr/CaseWhenEval.java | 25 +-
.../org/apache/tajo/plan/expr/CastEval.java | 10 +
.../org/apache/tajo/plan/expr/EvalTreeUtil.java | 66 +++-
.../java/org/apache/tajo/plan/expr/InEval.java | 10 +
.../org/apache/tajo/plan/expr/IsNullEval.java | 9 +
.../tajo/plan/expr/PartialBinaryExpr.java | 5 +-
.../tajo/plan/expr/RegexPredicateEval.java | 25 ++
.../apache/tajo/plan/expr/RowConstantEval.java | 11 +
.../tajo/plan/expr/WindowFunctionEval.java | 14 +
.../GreedyHeuristicJoinOrderAlgorithm.java | 4 +-
.../tajo/plan/logical/AlterTableNode.java | 14 +
.../tajo/plan/logical/DistinctGroupbyNode.java | 17 +-
.../apache/tajo/plan/logical/EvalExprNode.java | 18 +-
.../apache/tajo/plan/logical/GroupbyNode.java | 16 +-
.../apache/tajo/plan/logical/HavingNode.java | 9 +
.../apache/tajo/plan/logical/IndexScanNode.java | 13 +
.../apache/tajo/plan/logical/InsertNode.java | 13 +
.../org/apache/tajo/plan/logical/JoinNode.java | 13 +
.../org/apache/tajo/plan/logical/LimitNode.java | 11 +-
.../apache/tajo/plan/logical/LogicalNode.java | 27 +-
.../tajo/plan/logical/PersistentStoreNode.java | 10 +
.../tajo/plan/logical/ProjectionNode.java | 28 +-
.../apache/tajo/plan/logical/SelectionNode.java | 9 +
.../tajo/plan/logical/ShuffleFileWriteNode.java | 13 +
.../org/apache/tajo/plan/logical/SortNode.java | 14 +-
.../tajo/plan/logical/StoreTableNode.java | 10 +
.../tajo/plan/nameresolver/NameResolver.java | 4 +-
.../plan/rewrite/rules/FilterPushDownRule.java | 10 +-
.../tajo/plan/serder/EvalNodeDeserializer.java | 17 +-
.../plan/serder/LogicalNodeDeserializer.java | 3 +
.../tajo/plan/serder/LogicalNodeSerializer.java | 2 +
.../org/apache/tajo/plan/util/PlannerUtil.java | 26 +-
.../tajo/plan/verifier/LogicalPlanVerifier.java | 7 -
.../plan/verifier/PreLogicalPlanVerifier.java | 19 +-
.../plan/visitor/BasicLogicalPlanVisitor.java | 6 +-
tajo-plan/src/main/proto/Plan.proto | 1 +
tajo-project/pom.xml | 31 ++
tajo-project/src/site/site.xml | 2 +-
tajo-pullserver/pom.xml | 2 +-
tajo-rpc/pom.xml | 180 ++--------
.../org/apache/tajo/rpc/AsyncRpcClient.java | 267 --------------
.../org/apache/tajo/rpc/AsyncRpcServer.java | 148 --------
.../org/apache/tajo/rpc/BlockingRpcClient.java | 315 -----------------
.../org/apache/tajo/rpc/BlockingRpcServer.java | 147 --------
.../java/org/apache/tajo/rpc/CallFuture.java | 84 -----
.../apache/tajo/rpc/DefaultRpcController.java | 65 ----
.../org/apache/tajo/rpc/NettyClientBase.java | 173 ---------
.../org/apache/tajo/rpc/NettyRpcController.java | 63 ----
.../org/apache/tajo/rpc/NettyServerBase.java | 205 -----------
.../java/org/apache/tajo/rpc/NullCallback.java | 38 --
.../tajo/rpc/ProtoChannelInitializer.java | 50 ---
.../apache/tajo/rpc/RemoteCallException.java | 69 ----
.../org/apache/tajo/rpc/RemoteException.java | 37 --
.../tajo/rpc/RetriesExhaustedException.java | 104 ------
.../org/apache/tajo/rpc/RpcChannelFactory.java | 182 ----------
.../org/apache/tajo/rpc/RpcConnectionPool.java | 194 -----------
.../main/java/org/apache/tajo/rpc/RpcUtils.java | 68 ----
.../org/apache/tajo/rpc/ServerCallable.java | 162 ---------
.../apache/tajo/rpc/TajoServiceException.java | 58 ---
tajo-rpc/src/main/proto/DummyProtos.proto | 47 ---
tajo-rpc/src/main/proto/RpcProtos.proto | 32 --
tajo-rpc/src/main/proto/TestProtocol.proto | 31 --
tajo-rpc/src/main/proto/TestProtos.proto | 35 --
tajo-rpc/src/test/java/log4j.properties | 25 --
.../java/org/apache/tajo/rpc/TestAsyncRpc.java | 339 ------------------
.../org/apache/tajo/rpc/TestBlockingRpc.java | 341 ------------------
.../rpc/test/impl/DummyProtocolAsyncImpl.java | 86 -----
.../test/impl/DummyProtocolBlockingImpl.java | 83 -----
tajo-rpc/tajo-rpc-common/pom.xml | 216 ++++++++++++
.../org/apache/tajo/rpc/NettyServerBase.java | 243 +++++++++++++
.../org/apache/tajo/rpc/RemoteException.java | 37 ++
.../tajo/rpc/RetriesExhaustedException.java | 104 ++++++
.../org/apache/tajo/rpc/RpcChannelFactory.java | 182 ++++++++++
.../org/apache/tajo/rpc/RpcEventListener.java | 62 ++++
.../main/java/org/apache/tajo/rpc/RpcUtils.java | 122 +++++++
tajo-rpc/tajo-rpc-protobuf/pom.xml | 274 +++++++++++++++
.../org/apache/tajo/rpc/AsyncRpcClient.java | 227 ++++++++++++
.../org/apache/tajo/rpc/AsyncRpcServer.java | 148 ++++++++
.../org/apache/tajo/rpc/BlockingRpcClient.java | 273 +++++++++++++++
.../org/apache/tajo/rpc/BlockingRpcServer.java | 147 ++++++++
.../java/org/apache/tajo/rpc/CallFuture.java | 84 +++++
.../apache/tajo/rpc/DefaultRpcController.java | 65 ++++
.../org/apache/tajo/rpc/NettyClientBase.java | 221 ++++++++++++
.../org/apache/tajo/rpc/NettyRpcController.java | 63 ++++
.../java/org/apache/tajo/rpc/NullCallback.java | 38 ++
.../tajo/rpc/ProtoChannelInitializer.java | 50 +++
.../apache/tajo/rpc/RemoteCallException.java | 69 ++++
.../tajo/rpc/RetriesExhaustedException.java | 104 ++++++
.../org/apache/tajo/rpc/RpcConnectionPool.java | 190 ++++++++++
.../org/apache/tajo/rpc/ServerCallable.java | 162 +++++++++
.../apache/tajo/rpc/TajoServiceException.java | 58 +++
.../src/main/proto/DummyProtos.proto | 47 +++
.../src/main/proto/RpcProtos.proto | 32 ++
.../src/main/proto/TestProtocol.proto | 31 ++
.../src/main/proto/TestProtos.proto | 35 ++
.../src/test/java/log4j.properties | 25 ++
.../java/org/apache/tajo/rpc/TestAsyncRpc.java | 345 ++++++++++++++++++
.../org/apache/tajo/rpc/TestBlockingRpc.java | 349 +++++++++++++++++++
.../rpc/test/impl/DummyProtocolAsyncImpl.java | 86 +++++
.../test/impl/DummyProtocolBlockingImpl.java | 83 +++++
tajo-rpc/tajo-ws-rs/pom.xml | 218 ++++++++++++
.../rs/netty/NettyRestChannelInitializer.java | 50 +++
.../ws/rs/netty/NettyRestHandlerContainer.java | 319 +++++++++++++++++
.../NettyRestHandlerContainerProvider.java | 42 +++
.../tajo/ws/rs/netty/NettyRestServer.java | 67 ++++
.../ws/rs/netty/NettyRestServerFactory.java | 89 +++++
.../ws/rs/netty/NettyRestServerListener.java | 72 ++++
.../tajo/ws/rs/netty/gson/GsonFeature.java | 34 ++
.../tajo/ws/rs/netty/gson/GsonReader.java | 52 +++
.../apache/tajo/ws/rs/netty/gson/GsonUtil.java | 32 ++
.../tajo/ws/rs/netty/gson/GsonWriter.java | 59 ++++
.../NettyRestHandlerContainerProviderTest.java | 66 ++++
.../tajo/ws/rs/netty/NettyRestServerTest.java | 137 ++++++++
.../ws/rs/netty/testapp1/TestApplication1.java | 38 ++
.../ws/rs/netty/testapp1/TestResource1.java | 36 ++
.../ws/rs/netty/testapp2/DirectoriesDao.java | 39 +++
.../rs/netty/testapp2/DirectoriesResource.java | 85 +++++
.../tajo/ws/rs/netty/testapp2/Directory.java | 52 +++
.../testapp2/FileManagementApplication.java | 35 ++
.../org/apache/tajo/storage/TestLazyTuple.java | 4 +-
.../tajo/storage/hbase/ColumnMapping.java | 6 +-
.../apache/tajo/storage/hbase/HBaseScanner.java | 3 +-
.../tajo/storage/hbase/HBaseStorageManager.java | 3 +-
.../java/org/apache/tajo/storage/CSVFile.java | 21 +-
.../apache/tajo/storage/FileStorageManager.java | 27 +-
.../sequencefile/SequenceFileScanner.java | 3 +-
.../tajo/storage/text/CSVLineDeserializer.java | 14 +-
.../apache/tajo/storage/text/CSVLineSerDe.java | 5 +-
.../tajo/storage/text/CSVLineSerializer.java | 8 +-
.../tajo/storage/text/DelimitedTextFile.java | 2 +-
.../tajo/storage/text/FieldSplitProcessor.java | 8 +-
.../text/MultiBytesFieldSplitProcessor.java | 45 +++
.../tajo/storage/text/TextLineDeserializer.java | 6 +-
.../apache/tajo/storage/text/TextLineSerDe.java | 3 +-
.../apache/tajo/storage/TestSplitProcessor.java | 38 +-
205 files changed, 7516 insertions(+), 4256 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/main/java/org/apache/tajo/worker/Task.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/main/java/org/apache/tajo/worker/TaskAttemptContext.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
----------------------------------------------------------------------
diff --cc tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
index a36e982,8b73756..e320ce9
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
@@@ -18,28 -18,24 +18,31 @@@
package org.apache.tajo.plan.logical;
+ import java.util.Arrays;
+
import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SortSpec;
-import org.apache.tajo.datum.Datum;
+import org.apache.tajo.plan.rewrite.rules.IndexScanInfo.SimplePredicate;
import org.apache.tajo.plan.serder.PlanGsonHelper;
+import org.apache.tajo.util.TUtil;
+
+import java.net.URI;
public class IndexScanNode extends ScanNode {
- @Expose private SortSpec [] sortKeys;
@Expose private Schema keySchema = null;
- @Expose private Datum[] datum = null;
+ @Expose private URI indexPath = null;
+ @Expose private SimplePredicate[] predicates = null;
+
+ public IndexScanNode(int pid) {
+ super(pid);
+ setType(NodeType.INDEX_SCAN);
+ }
public IndexScanNode(int pid, ScanNode scanNode ,
- Schema keySchema , Datum[] datum, SortSpec[] sortKeys ) {
- super(pid);
+ Schema keySchema , SimplePredicate[] predicates, URI indexPath) {
+ this(pid);
init(scanNode.getTableDesc());
setQual(scanNode.getQual());
setInSchema(scanNode.getInSchema());
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
----------------------------------------------------------------------
diff --cc tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
index 1ce7019,4cd008a..a257296
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
@@@ -957,58 -918,17 +957,60 @@@ public class FilterPushDownRule extend
return scanNode;
}
+ private static class Predicate {
+ Column column;
+ Datum value;
+ EvalType evalType;
+
+ public Predicate(EvalType evalType, Column column, Datum value) {
+ this.evalType = evalType;
+ this.column = column;
+ this.value = value;
+ }
+ }
+
+ private static SimplePredicate[] getSimplePredicates(IndexDesc desc, Set<Predicate> predicates) {
+ SimplePredicate[] simplePredicates = new SimplePredicate[predicates.size()];
+ Map<Column, Datum> colToValue = TUtil.newHashMap();
+ for (Predicate predicate : predicates) {
+ colToValue.put(predicate.column, predicate.value);
+ }
+ SortSpec [] keySortSpecs = desc.getKeySortSpecs();
+ for (int i = 0; i < keySortSpecs.length; i++) {
+ simplePredicates[i] = new SimplePredicate(keySortSpecs[i],
+ colToValue.get(keySortSpecs[i].getSortKey()));
+ }
+ return simplePredicates;
+ }
+
+ private static Datum[] extractPredicateValues(List<Predicate> predicates) {
+ Datum[] values = new Datum[predicates.size()];
+ for (int i = 0; i < values.length; i++) {
+ values[i] = predicates.get(i).value;
+ }
+ return values;
+ }
+
+ private static Column[] extractColumns(Set<Predicate> predicates) {
+ Column[] columns = new Column[predicates.size()];
+ int i = 0;
+ for (Predicate p : predicates) {
+ columns[i++] = p.column;
+ }
+ return columns;
+ }
+
private void errorFilterPushDown(LogicalPlan plan, LogicalNode node,
FilterPushDownContext context) throws PlanningException {
- String notMatchedNodeStr = "";
String prefix = "";
+ StringBuilder notMatchedNodeStrBuilder = new StringBuilder();
for (EvalNode notMatchedNode: context.pushingDownFilters) {
- notMatchedNodeStr += prefix + notMatchedNode;
- prefix = ", ";
+ notMatchedNodeStrBuilder.append(prefix).append(notMatchedNode.toString());
+ if (prefix.isEmpty()) {
+ prefix = ", ";
+ }
}
- throw new PlanningException("FilterPushDown failed cause some filters not matched: " + notMatchedNodeStr + "\n" +
+ throw new PlanningException("FilterPushDown failed cause some filters not matched: " + notMatchedNodeStrBuilder.toString() + "\n" +
"Error node: " + node.getPlanString() + "\n" +
plan.toString());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/fd2f8281/tajo-plan/src/main/proto/Plan.proto
----------------------------------------------------------------------
[2/9] tajo git commit: TAJO-1393: Resolve findbug warnings on Tajo
Cli Module
Posted by ji...@apache.org.
TAJO-1393: Resolve findbug warnings on Tajo Cli Module
Closes #417
Signed-off-by: Hyunsik Choi <hy...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/e15ac7e5
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/e15ac7e5
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/e15ac7e5
Branch: refs/heads/index_support
Commit: e15ac7e5596ad03aedc1168e422099e1d0ee9a1d
Parents: 725448c
Author: Dongjoon Hyun <do...@apache.org>
Authored: Fri Mar 13 09:56:46 2015 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Thu Mar 19 18:39:28 2015 -0700
----------------------------------------------------------------------
CHANGES | 3 +++
.../main/java/org/apache/tajo/cli/tools/TajoAdmin.java | 1 -
.../main/java/org/apache/tajo/cli/tools/TajoGetConf.java | 5 -----
.../main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java | 5 -----
.../tajo/cli/tsql/DefaultTajoCliOutputFormatter.java | 2 +-
.../main/java/org/apache/tajo/cli/tsql/SimpleParser.java | 3 ++-
.../src/main/java/org/apache/tajo/cli/tsql/TajoCli.java | 10 ++++------
7 files changed, 10 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 56d77b3..6ae53f6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -79,6 +79,9 @@ Release 0.11.0 - unreleased
SUB TASKS
+ TAJO-1393: Resolve findbug warnings on Tajo Cli Module.
+ (Contributed by Dongjoon Hyun, Committed by hyunsik)
+
TAJO-1337: Implements common modules to handle RESTful API. (jihun)
TAJO-1329: Improve Schema class to support nested struct support.
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoAdmin.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoAdmin.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoAdmin.java
index 5497435..98ccc5f 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoAdmin.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoAdmin.java
@@ -71,7 +71,6 @@ public class TajoAdmin {
private TajoConf tajoConf;
private TajoClient tajoClient;
- private ServiceTracker serviceTracker;
private Writer writer;
public TajoAdmin(TajoConf tajoConf, Writer writer) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoGetConf.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoGetConf.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoGetConf.java
index 756f2ee..0c4a42a 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoGetConf.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoGetConf.java
@@ -40,7 +40,6 @@ public class TajoGetConf {
}
private TajoConf tajoConf;
- private TajoClient tajoClient;
private Writer writer;
public final static String defaultLeftPad = " ";
@@ -53,7 +52,6 @@ public class TajoGetConf {
public TajoGetConf(TajoConf tajoConf, Writer writer, TajoClient tajoClient) {
this.tajoConf = tajoConf;
this.writer = writer;
- this.tajoClient = tajoClient;
}
private void printUsage(boolean tsqlMode) {
@@ -115,9 +113,6 @@ public class TajoGetConf {
return;
} else if (hostName != null && port != null) {
tajoConf.setVar(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS, hostName + ":" + port);
- tajoClient = new TajoClientImpl(ServiceTrackerFactory.get(tajoConf));
- } else if (hostName == null && port == null) {
- tajoClient = new TajoClientImpl(ServiceTrackerFactory.get(tajoConf));
}
processConfKey(writer, param);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java
index 127ee8c..e25d7d4 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tools/TajoHAAdmin.java
@@ -44,7 +44,6 @@ public class TajoHAAdmin {
}
private TajoConf tajoConf;
- private TajoClient tajoClient;
private Writer writer;
public TajoHAAdmin(TajoConf tajoConf, Writer writer) {
@@ -54,7 +53,6 @@ public class TajoHAAdmin {
public TajoHAAdmin(TajoConf tajoConf, Writer writer, TajoClient tajoClient) {
this.tajoConf = tajoConf;
this.writer = writer;
- this.tajoClient = tajoClient;
}
private void printUsage() {
@@ -127,9 +125,6 @@ public class TajoHAAdmin {
return;
} else if (hostName != null && port != null) {
tajoConf.setVar(TajoConf.ConfVars.TAJO_MASTER_CLIENT_RPC_ADDRESS, hostName + ":" + port);
- tajoClient = new TajoClientImpl(ServiceTrackerFactory.get(tajoConf));
- } else if (hostName == null && port == null) {
- tajoClient = new TajoClientImpl(ServiceTrackerFactory.get(tajoConf));
}
if (!tajoConf.getBoolVar(TajoConf.ConfVars.TAJO_MASTER_HA_ENABLE)) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/DefaultTajoCliOutputFormatter.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/DefaultTajoCliOutputFormatter.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/DefaultTajoCliOutputFormatter.java
index 5cbe77b..aaa411e 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/DefaultTajoCliOutputFormatter.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/DefaultTajoCliOutputFormatter.java
@@ -37,7 +37,7 @@ public class DefaultTajoCliOutputFormatter implements TajoCliOutputFormatter {
private boolean printPause;
private boolean printErrorTrace;
private String nullChar;
- public static char QUIT_COMMAND = 'q';
+ public static final char QUIT_COMMAND = 'q';
@Override
public void init(TajoCli.TajoCliContext context) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/SimpleParser.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/SimpleParser.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/SimpleParser.java
index cc772a3..b8c4c28 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/SimpleParser.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/SimpleParser.java
@@ -180,7 +180,7 @@ public class SimpleParser {
appendToBothStatements(chars, lineStartIdx, idx, 2); // omit two dash characters '--' from history statement
int commentStartIdx = idx;
idx = consumeInlineComment(chars, idx);
- appendToRawStatement(str.subSequence(commentStartIdx, idx).toString(), true);
+ appendToRawStatement(str.subSequence(commentStartIdx, idx).toString(), false);
lineStartIdx = idx;
}
///////////////////////////////////////////////////////
@@ -281,6 +281,7 @@ public class SimpleParser {
private void appendToRawStatement(String str, boolean addLF) {
if (!str.isEmpty() && !"\n".equals(str) &&
rawAppender.length() > 0 && addLF && rawAppender.charAt(rawAppender.length() - 1) != '\n') {
+ rawAppender.append("\n");
rawAppender.append(str);
} else {
rawAppender.append(str);
http://git-wip-us.apache.org/repos/asf/tajo/blob/e15ac7e5/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
index 354f60d..86046c4 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
@@ -665,12 +665,10 @@ public class TajoCli {
}
if (reconnect && (t instanceof InvalidClientSessionException ||
(message != null && message.startsWith("org.apache.tajo.session.InvalidSessionException")))) {
- if (client instanceof SessionConnection) {
- try {
- ((SessionConnection)client).reconnect();
- } catch (Exception e) {
- // ignore
- }
+ try {
+ ((SessionConnection)client).reconnect();
+ } catch (Exception e) {
+ // ignore
}
}
}
[5/9] tajo git commit: TAJO-1392: Resolve findbug warnings on Tajo
Plan Module
Posted by ji...@apache.org.
TAJO-1392: Resolve findbug warnings on Tajo Plan Module
Closes #424
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/154f5b9e
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/154f5b9e
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/154f5b9e
Branch: refs/heads/index_support
Commit: 154f5b9e1c619ce4327aa055fb3ef02d6030fc0d
Parents: 5260c1e
Author: Jihun Kang <ji...@apache.org>
Authored: Fri Mar 20 12:03:19 2015 +0900
Committer: Jihun Kang <ji...@apache.org>
Committed: Fri Mar 20 12:03:19 2015 +0900
----------------------------------------------------------------------
CHANGES | 2 ++
.../org/apache/tajo/plan/ExprAnnotator.java | 2 +-
.../java/org/apache/tajo/plan/LogicalPlan.java | 2 --
.../plan/expr/AggregationFunctionCallEval.java | 14 ++++++++++
.../apache/tajo/plan/expr/AlgebraicUtil.java | 5 ++++
.../tajo/plan/expr/BetweenPredicateEval.java | 14 ++++++++++
.../org/apache/tajo/plan/expr/CaseWhenEval.java | 25 ++++++++++++++---
.../org/apache/tajo/plan/expr/CastEval.java | 10 +++++++
.../org/apache/tajo/plan/expr/EvalTreeUtil.java | 5 +++-
.../java/org/apache/tajo/plan/expr/InEval.java | 10 +++++++
.../org/apache/tajo/plan/expr/IsNullEval.java | 9 +++++++
.../tajo/plan/expr/PartialBinaryExpr.java | 5 +---
.../tajo/plan/expr/RegexPredicateEval.java | 25 +++++++++++++++++
.../apache/tajo/plan/expr/RowConstantEval.java | 11 ++++++++
.../tajo/plan/expr/WindowFunctionEval.java | 14 ++++++++++
.../GreedyHeuristicJoinOrderAlgorithm.java | 4 ++-
.../tajo/plan/logical/AlterTableNode.java | 14 ++++++++++
.../tajo/plan/logical/DistinctGroupbyNode.java | 17 +++++++++++-
.../apache/tajo/plan/logical/EvalExprNode.java | 18 ++++++++++---
.../apache/tajo/plan/logical/GroupbyNode.java | 16 ++++++++++-
.../apache/tajo/plan/logical/HavingNode.java | 9 +++++++
.../apache/tajo/plan/logical/IndexScanNode.java | 13 +++++++++
.../apache/tajo/plan/logical/InsertNode.java | 13 +++++++++
.../org/apache/tajo/plan/logical/JoinNode.java | 13 +++++++++
.../org/apache/tajo/plan/logical/LimitNode.java | 11 +++++++-
.../apache/tajo/plan/logical/LogicalNode.java | 27 ++++++++++++++-----
.../tajo/plan/logical/PersistentStoreNode.java | 10 +++++++
.../tajo/plan/logical/ProjectionNode.java | 28 ++++++++++++++------
.../apache/tajo/plan/logical/SelectionNode.java | 9 +++++++
.../tajo/plan/logical/ShuffleFileWriteNode.java | 13 +++++++++
.../org/apache/tajo/plan/logical/SortNode.java | 14 +++++++++-
.../tajo/plan/logical/StoreTableNode.java | 10 +++++++
.../tajo/plan/nameresolver/NameResolver.java | 4 +--
.../plan/rewrite/rules/FilterPushDownRule.java | 10 ++++---
.../tajo/plan/serder/EvalNodeDeserializer.java | 17 +++++++++++-
.../tajo/plan/verifier/LogicalPlanVerifier.java | 7 -----
.../plan/verifier/PreLogicalPlanVerifier.java | 19 +------------
.../plan/visitor/BasicLogicalPlanVisitor.java | 6 ++---
38 files changed, 387 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index bac5461..38bd330 100644
--- a/CHANGES
+++ b/CHANGES
@@ -85,6 +85,8 @@ Release 0.11.0 - unreleased
SUB TASKS
+ TAJO-1392: Resolve findbug warnings on Tajo Plan Module. (jihun)
+
TAJO-1393: Resolve findbug warnings on Tajo Cli Module.
(Contributed by Dongjoon Hyun, Committed by hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
index 5166e80..127d5bd 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
@@ -805,7 +805,7 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
public EvalNode visitLiteral(Context ctx, Stack<Expr> stack, LiteralValue expr) throws PlanningException {
switch (expr.getValueType()) {
case Boolean:
- return new ConstEval(DatumFactory.createBool(((BooleanLiteral) expr).isTrue()));
+ return new ConstEval(DatumFactory.createBool(Boolean.parseBoolean(expr.getValue())));
case String:
return new ConstEval(DatumFactory.createText(expr.getValue()));
case Unsigned_Integer:
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java
index 3baf61d..0425f2e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlan.java
@@ -67,12 +67,10 @@ public class LogicalPlan {
/** planning and optimization log */
private List<String> planingHistory = Lists.newArrayList();
- LogicalPlanner planner;
private boolean isExplain;
public LogicalPlan(LogicalPlanner planner) {
- this.planner = planner;
}
/**
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
index ca8c110..3ffe20e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes.DataType;
@@ -142,6 +143,19 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
this.intermediatePhase = true;
}
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((alias == null) ? 0 : alias.hashCode());
+ result = prime * result + (finalPhase ? 1231 : 1237);
+ result = prime * result + ((instance == null) ? 0 : instance.hashCode());
+ result = prime * result + (intermediatePhase ? 1231 : 1237);
+ result = prime * result + ((params == null) ? 0 : params.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof AggregationFunctionCallEval) {
AggregationFunctionCallEval other = (AggregationFunctionCallEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java
index 84352f0..9ecb93c 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AlgebraicUtil.java
@@ -342,6 +342,11 @@ public class AlgebraicUtil {
}
private static EvalNode createSingletonExprFromCNFRecursive(EvalNode[] evalNode, int idx) {
+ if (idx >= evalNode.length) {
+ throw new ArrayIndexOutOfBoundsException("index " + idx + " is exceeded the maximum length ("+
+ evalNode.length+") of EvalNode");
+ }
+
if (idx == evalNode.length - 2) {
return new BinaryEval(EvalType.AND, evalNode[idx], evalNode[idx + 1]);
} else {
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BetweenPredicateEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BetweenPredicateEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BetweenPredicateEval.java
index 84197e8..b0fbd5e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BetweenPredicateEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BetweenPredicateEval.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
@@ -230,6 +231,19 @@ public class BetweenPredicateEval extends EvalNode implements Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((begin == null) ? 0 : begin.hashCode());
+ result = prime * result + ((checker == null) ? 0 : checker.hashCode());
+ result = prime * result + ((end == null) ? 0 : end.hashCode());
+ result = prime * result + (not ? 1231 : 1237);
+ result = prime * result + ((predicand == null) ? 0 : predicand.hashCode());
+ result = prime * result + (symmetric ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof BetweenPredicateEval) {
BetweenPredicateEval another = (BetweenPredicateEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CaseWhenEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CaseWhenEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CaseWhenEval.java
index 4321d02..4d42db5 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CaseWhenEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CaseWhenEval.java
@@ -20,6 +20,7 @@ package org.apache.tajo.plan.expr;
import com.google.common.collect.Lists;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
@@ -164,6 +165,15 @@ public class CaseWhenEval extends EvalNode implements GsonObject {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((elseResult == null) ? 0 : elseResult.hashCode());
+ result = prime * result + ((whens == null) ? 0 : whens.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof CaseWhenEval) {
CaseWhenEval other = (CaseWhenEval) obj;
@@ -240,9 +250,18 @@ public class CaseWhenEval extends EvalNode implements GsonObject {
}
@Override
- public boolean equals(Object object) {
- if (object instanceof IfThenEval) {
- IfThenEval other = (IfThenEval) object;
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((condition == null) ? 0 : condition.hashCode());
+ result = prime * result + ((this.result == null) ? 0 : this.result.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof IfThenEval) {
+ IfThenEval other = (IfThenEval) obj;
return condition.equals(other.condition) && result.equals(other.result);
} else {
return false;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CastEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CastEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CastEval.java
index 3cad842..9f7f69f 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CastEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/CastEval.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.OverridableConf;
import org.apache.tajo.SessionVars;
import org.apache.tajo.catalog.Schema;
@@ -81,6 +82,15 @@ public class CastEval extends UnaryEval {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((target == null) ? 0 : target.hashCode());
+ result = prime * result + ((timezone == null) ? 0 : timezone.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
boolean valid = obj != null && obj instanceof CastEval;
if (valid) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
index f1d4498..23b4659 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
@@ -233,6 +233,9 @@ public class EvalTreeUtil {
if (containColumnRef(expr, target)) {
exprSet.add(expr);
}
+ break;
+ default:
+ break;
}
}
@@ -318,7 +321,7 @@ public class EvalTreeUtil {
} else if (leftSchema != null && rightSchema != null) {
ensureColumnsOfDifferentTables = isJoinQualwithSchemas(leftSchema, rightSchema, leftColumn, rightColumn);
} else {
- ensureColumnsOfDifferentTables = isJoinQualWithOnlyColumns(block, leftColumn, rightColumn);
+ ensureColumnsOfDifferentTables = isJoinQualWithOnlyColumns(null, leftColumn, rightColumn);
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/InEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/InEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/InEval.java
index 4dcc7bf..e60b68a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/InEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/InEval.java
@@ -21,6 +21,7 @@ package org.apache.tajo.plan.expr;
import com.google.common.collect.Sets;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
@@ -72,6 +73,15 @@ public class InEval extends BinaryEval {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + (not ? 1231 : 1237);
+ result = prime * result + ((values == null) ? 0 : values.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof InEval) {
InEval other = (InEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/IsNullEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/IsNullEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/IsNullEval.java
index 6a17bf8..16fc4f0 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/IsNullEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/IsNullEval.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.common.TajoDataTypes;
@@ -66,6 +67,14 @@ public class IsNullEval extends UnaryEval {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + (isNot ? 1231 : 1237);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof IsNullEval) {
IsNullEval other = (IsNullEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PartialBinaryExpr.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PartialBinaryExpr.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PartialBinaryExpr.java
index 3aded7b..9f6d6d6 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PartialBinaryExpr.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PartialBinaryExpr.java
@@ -56,10 +56,7 @@ public class PartialBinaryExpr extends BinaryEval {
@Override
public boolean equals(Object obj) {
if (obj instanceof PartialBinaryExpr) {
- PartialBinaryExpr other = (PartialBinaryExpr) obj;
- return type.equals(other.type) &&
- leftExpr.equals(other.leftExpr) &&
- rightExpr.equals(other.rightExpr);
+ return super.equals(obj);
}
return false;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RegexPredicateEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RegexPredicateEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RegexPredicateEval.java
index 7519e2d..9e9c748 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RegexPredicateEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RegexPredicateEval.java
@@ -47,6 +47,31 @@ public class RegexPredicateEval extends PatternMatchPredicateEval {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((operator == null) ? 0 : operator.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (!super.equals(obj))
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ RegexPredicateEval other = (RegexPredicateEval) obj;
+ if (operator == null) {
+ if (other.operator != null)
+ return false;
+ } else if (!operator.equals(other.operator))
+ return false;
+ return true;
+ }
+
+ @Override
public String toString() {
return leftExpr.toString() + operator + "'" + pattern +"'";
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java
index 4a97e67..a581700 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java
@@ -18,7 +18,10 @@
package org.apache.tajo.plan.expr;
+import java.util.Arrays;
+
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.datum.Datum;
@@ -66,6 +69,14 @@ public class RowConstantEval extends EvalNode {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(values);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof RowConstantEval) {
RowConstantEval other = (RowConstantEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/WindowFunctionEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/WindowFunctionEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/WindowFunctionEval.java
index 0ff5927..1a1f138 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/WindowFunctionEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/WindowFunctionEval.java
@@ -18,7 +18,10 @@
package org.apache.tajo.plan.expr;
+import java.util.Arrays;
+
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.SortSpec;
@@ -86,6 +89,17 @@ public class WindowFunctionEval extends AggregationFunctionCallEval implements C
return funcDesc.getReturnType();
}
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((params == null) ? 0 : params.hashCode());
+ result = prime * result + Arrays.hashCode(sortSpecs);
+ result = prime * result + ((windowFrame == null) ? 0 : windowFrame.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof WindowFunctionEval) {
WindowFunctionEval other = (WindowFunctionEval) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java b/tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
index 4231484..e4d6122 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
@@ -36,7 +36,7 @@ import java.util.*;
* all join operators.
*/
public class GreedyHeuristicJoinOrderAlgorithm implements JoinOrderAlgorithm {
- public static double DEFAULT_SELECTION_FACTOR = 0.1;
+ public static final double DEFAULT_SELECTION_FACTOR = 0.1;
@Override
public FoundJoinOrder findBestOrder(LogicalPlan plan, LogicalPlan.QueryBlock block, JoinGraph joinGraph,
@@ -89,6 +89,8 @@ public class GreedyHeuristicJoinOrderAlgorithm implements JoinOrderAlgorithm {
checkingRelations.add(relation);
}
break;
+ default:
+ break;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/AlterTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/AlterTableNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/AlterTableNode.java
index e926dce..69cff54 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/AlterTableNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/AlterTableNode.java
@@ -20,6 +20,7 @@ package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.algebra.AlterTableOpType;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.plan.PlanString;
@@ -107,6 +108,19 @@ public class AlterTableNode extends LogicalNode {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((addNewColumn == null) ? 0 : addNewColumn.hashCode());
+ result = prime * result + ((alterTableOpType == null) ? 0 : alterTableOpType.hashCode());
+ result = prime * result + ((columnName == null) ? 0 : columnName.hashCode());
+ result = prime * result + ((newColumnName == null) ? 0 : newColumnName.hashCode());
+ result = prime * result + ((newTableName == null) ? 0 : newTableName.hashCode());
+ result = prime * result + ((tableName == null) ? 0 : tableName.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof AlterTableNode) {
AlterTableNode other = (AlterTableNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/DistinctGroupbyNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/DistinctGroupbyNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/DistinctGroupbyNode.java
index a40ad59..61ce789 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/DistinctGroupbyNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/DistinctGroupbyNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Column;
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.util.PlannerUtil;
@@ -27,6 +28,7 @@ import org.apache.tajo.plan.expr.AggregationFunctionCallEval;
import org.apache.tajo.util.TUtil;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class DistinctGroupbyNode extends UnaryNode implements Projectable, Cloneable {
@@ -147,7 +149,7 @@ public class DistinctGroupbyNode extends UnaryNode implements Projectable, Clone
public String toString() {
StringBuilder sb = new StringBuilder("Distinct GroupBy (");
- if (groupingColumns != null || groupingColumns.length > 0) {
+ if (groupingColumns != null && groupingColumns.length > 0) {
sb.append("grouping set=").append(TUtil.arrayToString(groupingColumns));
sb.append(", ");
}
@@ -159,6 +161,19 @@ public class DistinctGroupbyNode extends UnaryNode implements Projectable, Clone
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(aggrFunctions);
+ result = prime * result + ((groupbyPlan == null) ? 0 : groupbyPlan.hashCode());
+ result = prime * result + Arrays.hashCode(groupingColumns);
+ result = prime * result + Arrays.hashCode(resultColumnIds);
+ result = prime * result + ((subGroupbyPlan == null) ? 0 : subGroupbyPlan.hashCode());
+ result = prime * result + Arrays.hashCode(targets);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof DistinctGroupbyNode) {
DistinctGroupbyNode other = (DistinctGroupbyNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/EvalExprNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/EvalExprNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/EvalExprNode.java
index 0f96575..3aaf5d0 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/EvalExprNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/EvalExprNode.java
@@ -21,7 +21,10 @@
*/
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.plan.Target;
@@ -69,9 +72,18 @@ public class EvalExprNode extends LogicalNode implements Projectable {
return "EvalExprNode (" + TUtil.arrayToString(exprs) + ")";
}
- public boolean equals(Object object) {
- if (object instanceof EvalExprNode) {
- EvalExprNode other = (EvalExprNode) object;
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(exprs);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof EvalExprNode) {
+ EvalExprNode other = (EvalExprNode) obj;
return TUtil.checkEquals(this.exprs, other.exprs);
} else {
return false;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/GroupbyNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/GroupbyNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/GroupbyNode.java
index 4a18cb4..730f705 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/GroupbyNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/GroupbyNode.java
@@ -18,8 +18,11 @@
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Column;
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.util.PlannerUtil;
@@ -106,7 +109,7 @@ public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
public String toString() {
StringBuilder sb = new StringBuilder("GroupBy (");
- if (groupingKeys != null || groupingKeys.length > 0) {
+ if (groupingKeys != null && groupingKeys.length > 0) {
sb.append("grouping set=").append(TUtil.arrayToString(groupingKeys));
sb.append(", ");
}
@@ -118,6 +121,17 @@ public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(aggrFunctions);
+ result = prime * result + Arrays.hashCode(groupingKeys);
+ result = prime * result + (hasDistinct ? 1231 : 1237);
+ result = prime * result + Arrays.hashCode(targets);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof GroupbyNode) {
GroupbyNode other = (GroupbyNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/HavingNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/HavingNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/HavingNode.java
index a3371c7..a45fbe4 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/HavingNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/HavingNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.expr.EvalNode;
@@ -43,6 +44,14 @@ public class HavingNode extends UnaryNode implements SelectableNode, Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((qual == null) ? 0 : qual.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof HavingNode) {
HavingNode other = (HavingNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
index 0d59733..8b73756 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/IndexScanNode.java
@@ -18,8 +18,11 @@
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.gson.Gson;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.SortSpec;
import org.apache.tajo.datum.Datum;
@@ -78,6 +81,16 @@ public class IndexScanNode extends ScanNode {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + Arrays.hashCode(datum);
+ result = prime * result + ((keySchema == null) ? 0 : keySchema.hashCode());
+ result = prime * result + Arrays.hashCode(sortKeys);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof IndexScanNode) {
IndexScanNode other = (IndexScanNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
index 769cb59..ee15951 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.hadoop.fs.Path;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
@@ -124,6 +125,18 @@ public class InsertNode extends StoreTableNode implements Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (overwrite ? 1231 : 1237);
+ result = prime * result + ((path == null) ? 0 : path.hashCode());
+ result = prime * result + ((projectedSchema == null) ? 0 : projectedSchema.hashCode());
+ result = prime * result + ((tableSchema == null) ? 0 : tableSchema.hashCode());
+ result = prime * result + ((targetSchema == null) ? 0 : targetSchema.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof InsertNode) {
InsertNode other = (InsertNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
index 58dfac2..bad8704 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
@@ -22,6 +22,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.algebra.JoinType;
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.util.PlannerUtil;
@@ -31,6 +32,7 @@ import org.apache.tajo.plan.expr.EvalNode;
import org.apache.tajo.util.TUtil;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
public class JoinNode extends BinaryNode implements Projectable, Cloneable {
@@ -126,6 +128,17 @@ public class JoinNode extends BinaryNode implements Projectable, Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (candidateBroadcast ? 1231 : 1237);
+ result = prime * result + ((joinQual == null) ? 0 : joinQual.hashCode());
+ result = prime * result + ((joinType == null) ? 0 : joinType.hashCode());
+ result = prime * result + Arrays.hashCode(targets);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof JoinNode) {
JoinNode other = (JoinNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LimitNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LimitNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LimitNode.java
index 7a3431e..96230a1 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LimitNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LimitNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
public final class LimitNode extends UnaryNode implements Cloneable {
@@ -41,7 +42,15 @@ public final class LimitNode extends UnaryNode implements Cloneable {
return new PlanString(this).appendTitle(" " + fetchFirstNum);
}
- @Override
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (int) (fetchFirstNum ^ (fetchFirstNum >>> 32));
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof LimitNode) {
LimitNode other = (LimitNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LogicalNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LogicalNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LogicalNode.java
index 200977b..450d3e0 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LogicalNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/LogicalNode.java
@@ -22,6 +22,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.json.GsonObject;
import org.apache.tajo.plan.PlanString;
@@ -87,9 +88,23 @@ public abstract class LogicalNode implements Cloneable, GsonObject {
}
@Override
- public boolean equals(Object obj) {
- if (obj instanceof LogicalNode) {
- LogicalNode other = (LogicalNode) obj;
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ long temp;
+ temp = Double.doubleToLongBits(cost);
+ result = prime * result + (int) (temp ^ (temp >>> 32));
+ result = prime * result + ((inputSchema == null) ? 0 : inputSchema.hashCode());
+ result = prime * result + nodeId;
+ result = prime * result + ((outputSchema == null) ? 0 : outputSchema.hashCode());
+ result = prime * result + ((type == null) ? 0 : type.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof LogicalNode) {
+ LogicalNode other = (LogicalNode) obj;
boolean eq = this.type == other.type;
eq = eq && TUtil.checkEquals(this.inputSchema, other.inputSchema);
@@ -97,9 +112,9 @@ public abstract class LogicalNode implements Cloneable, GsonObject {
eq = eq && this.cost == other.cost;
return eq;
- } else {
- return false;
- }
+ } else {
+ return false;
+ }
}
public boolean deepEquals(Object o) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/PersistentStoreNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/PersistentStoreNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/PersistentStoreNode.java
index 420ed7c..556ae7a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/PersistentStoreNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/PersistentStoreNode.java
@@ -20,6 +20,7 @@ package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.util.KeyValueSet;
import org.apache.tajo.util.TUtil;
@@ -68,6 +69,15 @@ public abstract class PersistentStoreNode extends UnaryNode implements Cloneable
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = super.hashCode();
+ result = prime * result + ((options == null) ? 0 : options.hashCode());
+ result = prime * result + ((storageType == null) ? 0 : storageType.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof PersistentStoreNode) {
PersistentStoreNode other = (PersistentStoreNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ProjectionNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ProjectionNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ProjectionNode.java
index c0b5953..3c9d497 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ProjectionNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ProjectionNode.java
@@ -18,7 +18,10 @@
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.plan.Target;
@@ -73,17 +76,26 @@ public class ProjectionNode extends UnaryNode implements Projectable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + (distinct ? 1231 : 1237);
+ result = prime * result + Arrays.hashCode(targets);
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
- if (obj instanceof ProjectionNode) {
- ProjectionNode other = (ProjectionNode) obj;
-
- boolean b1 = super.equals(other);
+ if (obj instanceof ProjectionNode) {
+ ProjectionNode other = (ProjectionNode) obj;
+
+ boolean b1 = super.equals(other);
boolean b2 = TUtil.checkEquals(targets, other.targets);
return b1 && b2;
- } else {
- return false;
- }
- }
+ } else {
+ return false;
+ }
+ }
@Override
public Object clone() throws CloneNotSupportedException {
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SelectionNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SelectionNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SelectionNode.java
index 4c4d5ee..3897ee2 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SelectionNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SelectionNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.plan.expr.EvalNode;
@@ -50,6 +51,14 @@ public class SelectionNode extends UnaryNode implements SelectableNode, Cloneabl
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((qual == null) ? 0 : qual.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof SelectionNode) {
SelectionNode other = (SelectionNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ShuffleFileWriteNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ShuffleFileWriteNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ShuffleFileWriteNode.java
index 29aefc9..8215f51 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ShuffleFileWriteNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ShuffleFileWriteNode.java
@@ -18,8 +18,11 @@
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.Column;
import org.apache.tajo.util.TUtil;
@@ -67,6 +70,16 @@ public class ShuffleFileWriteNode extends PersistentStoreNode implements Cloneab
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + numOutputs;
+ result = prime * result + Arrays.hashCode(shuffleKeys);
+ result = prime * result + ((shuffleType == null) ? 0 : shuffleType.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof ShuffleFileWriteNode) {
ShuffleFileWriteNode other = (ShuffleFileWriteNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SortNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SortNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SortNode.java
index 2e5e159..5157d45 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SortNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SortNode.java
@@ -18,8 +18,11 @@
package org.apache.tajo.plan.logical;
+import java.util.Arrays;
+
import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.SortSpec;
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.util.TUtil;
@@ -46,7 +49,16 @@ public final class SortNode extends UnaryNode implements Cloneable {
return this.sortKeys;
}
- @Override
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + Arrays.hashCode(sortKeys);
+ result = prime * result + ((sortPurpose == null) ? 0 : sortPurpose.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof SortNode) {
SortNode other = (SortNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/StoreTableNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/StoreTableNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/StoreTableNode.java
index 730eb35..62f7db4 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/StoreTableNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/StoreTableNode.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.logical;
import com.google.gson.annotations.Expose;
+
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.plan.PlanString;
import org.apache.tajo.util.TUtil;
@@ -78,6 +79,15 @@ public class StoreTableNode extends PersistentStoreNode implements Cloneable {
}
@Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((partitionDesc == null) ? 0 : partitionDesc.hashCode());
+ result = prime * result + ((tableName == null) ? 0 : tableName.hashCode());
+ return result;
+ }
+
+ @Override
public boolean equals(Object obj) {
if (obj instanceof StoreTableNode) {
StoreTableNode other = (StoreTableNode) obj;
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
index 44d3263..2c55c81 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
@@ -42,7 +42,7 @@ import java.util.Map;
*/
public abstract class NameResolver {
- public static Map<NameResolvingMode, NameResolver> resolverMap = Maps.newHashMap();
+ public static final Map<NameResolvingMode, NameResolver> resolverMap = Maps.newHashMap();
static {
resolverMap.put(NameResolvingMode.RELS_ONLY, new ResolverByRels());
@@ -115,7 +115,7 @@ public abstract class NameResolver {
// If we cannot find any relation against a qualified column name
if (relationOp == null) {
- throw null;
+ throw new PlanningException("Cannot find any relation for " + qualifier);
}
// Please consider a query case:
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
index d7cd82e..4cd008a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
@@ -920,13 +920,15 @@ public class FilterPushDownRule extends BasicLogicalPlanVisitor<FilterPushDownCo
private void errorFilterPushDown(LogicalPlan plan, LogicalNode node,
FilterPushDownContext context) throws PlanningException {
- String notMatchedNodeStr = "";
String prefix = "";
+ StringBuilder notMatchedNodeStrBuilder = new StringBuilder();
for (EvalNode notMatchedNode: context.pushingDownFilters) {
- notMatchedNodeStr += prefix + notMatchedNode;
- prefix = ", ";
+ notMatchedNodeStrBuilder.append(prefix).append(notMatchedNode.toString());
+ if (prefix.isEmpty()) {
+ prefix = ", ";
+ }
}
- throw new PlanningException("FilterPushDown failed cause some filters not matched: " + notMatchedNodeStr + "\n" +
+ throw new PlanningException("FilterPushDown failed cause some filters not matched: " + notMatchedNodeStrBuilder.toString() + "\n" +
"Error node: " + node.getPlanString() + "\n" +
plan.toString());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
index 322c8db..5a96054 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
@@ -20,6 +20,7 @@ package org.apache.tajo.plan.serder;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+
import org.apache.tajo.OverridableConf;
import org.apache.tajo.algebra.WindowSpec.WindowFrameEndBoundType;
import org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType;
@@ -28,6 +29,8 @@ import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.SortSpec;
import org.apache.tajo.catalog.exception.NoSuchFunctionException;
import org.apache.tajo.catalog.proto.CatalogProtos;
+import org.apache.tajo.catalog.proto.CatalogProtos.FunctionSignatureProto;
+import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.*;
import org.apache.tajo.exception.InternalException;
import org.apache.tajo.plan.expr.*;
@@ -210,7 +213,19 @@ public class EvalNodeDeserializer {
}
}
} catch (ClassNotFoundException cnfe) {
- throw new NoSuchFunctionException(funcDesc.getFunctionName(), funcDesc.getParamTypes());
+ String functionName = "Unknown";
+ DataType[] parameterTypes = new DataType[0];
+ if (funcProto.getFuncion() != null && funcProto.getFuncion().getSignature() != null) {
+ FunctionSignatureProto funcSignatureProto = funcProto.getFuncion().getSignature();
+
+ if (funcSignatureProto.hasName()) {
+ functionName = funcSignatureProto.getName();
+ }
+
+ parameterTypes = funcSignatureProto.getParameterTypesList().toArray(
+ new DataType[funcSignatureProto.getParameterTypesCount()]);
+ }
+ throw new NoSuchFunctionException(functionName, parameterTypes);
} catch (InternalException ie) {
throw new NoSuchFunctionException(funcDesc.getFunctionName(), funcDesc.getParamTypes());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
index b6912a7..22b3351 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
@@ -34,20 +34,13 @@ import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
import java.util.Stack;
public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVerifier.Context, LogicalNode> {
- private TajoConf conf;
- private CatalogService catalog;
-
public LogicalPlanVerifier(TajoConf conf, CatalogService catalog) {
- this.conf = conf;
- this.catalog = catalog;
}
public static class Context {
- OverridableConf queryContext;
VerificationState state;
public Context(OverridableConf queryContext, VerificationState state) {
- this.queryContext = this.queryContext;
this.state = state;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
index 25452de..275ab3a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
@@ -83,8 +83,7 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer
super.visitProjection(context, stack, expr);
Set<String> names = TUtil.newHashSet();
- Expr [] distinctValues = null;
-
+
for (NamedExpr namedExpr : expr.getNamedExprs()) {
if (namedExpr.hasAlias()) {
@@ -95,22 +94,6 @@ public class PreLogicalPlanVerifier extends BaseAlgebraVisitor<PreLogicalPlanVer
names.add(namedExpr.getAlias());
}
}
-
- Set<GeneralSetFunctionExpr> exprs = ExprFinder.finds(namedExpr.getExpr(), OpType.GeneralSetFunction);
-
- // Currently, avg functions with distinct aggregation are not supported.
- // This code does not allow users to use avg functions with distinct aggregation.
- if (distinctValues != null) {
- for (GeneralSetFunctionExpr setFunction : exprs) {
- if (setFunction.getSignature().equalsIgnoreCase("avg")) {
- if (setFunction.isDistinct()) {
- throw new PlanningException("avg(distinct) function is not supported yet.");
- } else {
- throw new PlanningException("avg() function with distinct aggregation functions is not supported yet.");
- }
- }
- }
- }
}
return expr;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/154f5b9e/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
index 23c834d..ecf9050 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
@@ -258,8 +258,8 @@ public class BasicLogicalPlanVisitor<CONTEXT, RESULT> implements LogicalPlanVisi
LogicalPlan.QueryBlock rightBlock = plan.getBlock(node.getRightChild());
visit(context, plan, rightBlock, rightBlock.getRoot(), stack);
} else {
- result = visit(context, plan, null, node.getLeftChild(), stack);
- visit(context, plan, null, node.getRightChild(), stack);
+ result = visit(context, null, null, node.getLeftChild(), stack);
+ visit(context, null, null, node.getRightChild(), stack);
}
stack.pop();
@@ -295,7 +295,7 @@ public class BasicLogicalPlanVisitor<CONTEXT, RESULT> implements LogicalPlanVisi
LogicalPlan.QueryBlock childBlock = plan.getBlock(node.getSubQuery());
result = visit(context, plan, childBlock, childBlock.getRoot(), stack);
} else {
- result = visit(context, plan, null, node.getSubQuery(), stack);
+ result = visit(context, null, null, node.getSubQuery(), stack);
}
stack.pop();
return result;
[4/9] tajo git commit: TAJO-1414: Two RemoteException in rpc module
Posted by ji...@apache.org.
TAJO-1414: Two RemoteException in rpc module
Closes #435
Signed-off-by: Jihun Kang <ji...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/5260c1e0
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/5260c1e0
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/5260c1e0
Branch: refs/heads/index_support
Commit: 5260c1e064e09f14b686144bdfc136fe76e01f4d
Parents: 797138e
Author: navis.ryu <na...@apache.org>
Authored: Fri Mar 20 11:57:42 2015 +0900
Committer: Jihun Kang <ji...@apache.org>
Committed: Fri Mar 20 11:57:42 2015 +0900
----------------------------------------------------------------------
CHANGES | 3 ++
.../org/apache/tajo/rpc/RemoteException.java | 37 --------------------
2 files changed, 3 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/5260c1e0/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index fc18306..bac5461 100644
--- a/CHANGES
+++ b/CHANGES
@@ -35,6 +35,9 @@ Release 0.11.0 - unreleased
BUG FIXES
+ TAJO-1414: Two RemoteException in rpc module.
+ (Contributed by navis. Committed by jihun)
+
TAJO-1368: Exceptions during processing nested union queries.
(jihun)
http://git-wip-us.apache.org/repos/asf/tajo/blob/5260c1e0/tajo-rpc/tajo-rpc-protobuf/src/main/java/org/apache/tajo/rpc/RemoteException.java
----------------------------------------------------------------------
diff --git a/tajo-rpc/tajo-rpc-protobuf/src/main/java/org/apache/tajo/rpc/RemoteException.java b/tajo-rpc/tajo-rpc-protobuf/src/main/java/org/apache/tajo/rpc/RemoteException.java
deleted file mode 100644
index 30c110d..0000000
--- a/tajo-rpc/tajo-rpc-protobuf/src/main/java/org/apache/tajo/rpc/RemoteException.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.rpc;
-
-public class RemoteException extends RuntimeException {
- public RemoteException() {
- super();
- }
-
- public RemoteException(String message) {
- super(message);
- }
-
- public RemoteException(Throwable t) {
- super(t);
- }
-
- public RemoteException(String message, Throwable t) {
- super(message, t);
- }
-}
[7/9] tajo git commit: TAJO-1403: Improve 'Simple Query' with only
partition columns and constant values.
Posted by ji...@apache.org.
TAJO-1403: Improve 'Simple Query' with only partition columns and constant values.
Closes #434
Signed-off-by: Jihoon Son <ji...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/8d0146b8
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/8d0146b8
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/8d0146b8
Branch: refs/heads/index_support
Commit: 8d0146b8d8f5eeac37fe3f531ce1362af3b20c2f
Parents: 3aaff38
Author: Jihoon Son <ji...@apache.org>
Authored: Mon Mar 23 11:48:18 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Mon Mar 23 11:48:18 2015 +0900
----------------------------------------------------------------------
CHANGES | 3 +
.../exec/NonForwardQueryResultFileScanner.java | 37 +++++++++++-
.../apache/tajo/master/exec/QueryExecutor.java | 5 ++
.../apache/tajo/master/TestGlobalPlanner.java | 3 +-
.../org/apache/tajo/plan/expr/EvalTreeUtil.java | 61 ++++++++++++++++++++
.../org/apache/tajo/plan/util/PlannerUtil.java | 26 ++++++++-
.../apache/tajo/storage/FileStorageManager.java | 27 ++++++++-
7 files changed, 155 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index e3636e6..ad3a6bd 100644
--- a/CHANGES
+++ b/CHANGES
@@ -9,6 +9,9 @@ Release 0.11.0 - unreleased
IMPROVEMENT
+ TAJO-1403: Improve 'Simple Query' with only partition columns and constant
+ values. (Contributed by Dongjoon Hyun, Committed by jihoon)
+
TAJO-1418: Comment on TAJO_PULLSERVER_STANDALONE in tajo-env.sh
is not consistent. (Contributed by navis, Committed by hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
index dc0c44a..6c02aa9 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
@@ -24,19 +24,23 @@ import org.apache.tajo.ExecutionBlockId;
import org.apache.tajo.QueryId;
import org.apache.tajo.TaskAttemptId;
import org.apache.tajo.TaskId;
+import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.proto.CatalogProtos.FragmentProto;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.plan.expr.EvalTreeUtil;
import org.apache.tajo.plan.logical.ScanNode;
import org.apache.tajo.engine.planner.physical.SeqScanExec;
import org.apache.tajo.engine.query.QueryContext;
+import org.apache.tajo.storage.FileStorageManager;
import org.apache.tajo.storage.RowStoreUtil;
import org.apache.tajo.storage.RowStoreUtil.RowStoreEncoder;
import org.apache.tajo.storage.StorageManager;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.storage.fragment.Fragment;
import org.apache.tajo.storage.fragment.FragmentConvertor;
+import org.apache.tajo.util.StringUtils;
import org.apache.tajo.worker.TaskAttemptContext;
import java.io.IOException;
@@ -74,10 +78,37 @@ public class NonForwardQueryResultFileScanner implements NonForwardQueryResultSc
initSeqScanExec();
}
+ /**
+ * Set partition path and depth if ScanNode's qualification exists
+ *
+ * @param storageManager target storage manager to be set with partition info
+ */
+ private void setPartition(StorageManager storageManager) {
+ if (tableDesc.isExternal() && tableDesc.hasPartition() && scanNode.getQual() != null &&
+ storageManager instanceof FileStorageManager) {
+ StringBuffer path = new StringBuffer();
+ int depth = 0;
+ if (tableDesc.hasPartition()) {
+ for (Column c : tableDesc.getPartitionMethod().getExpressionSchema().getColumns()) {
+ String partitionValue = EvalTreeUtil.getPartitionValue(scanNode.getQual(), c.getSimpleName());
+ if (partitionValue == null)
+ break;
+ path.append(String.format("/%s=%s", c.getSimpleName(), StringUtils.escapePathName(partitionValue)));
+ depth++;
+ }
+ }
+ ((FileStorageManager)storageManager).setPartitionPath(path.toString());
+ ((FileStorageManager)storageManager).setCurrentDepth(depth);
+ scanNode.setQual(null);
+ }
+ }
+
private void initSeqScanExec() throws IOException {
- List<Fragment> fragments = StorageManager.getStorageManager(tajoConf, tableDesc.getMeta().getStoreType())
- .getNonForwardSplit(tableDesc, currentFragmentIndex, MAX_FRAGMENT_NUM_PER_SCAN);
-
+ StorageManager storageManager = StorageManager.getStorageManager(tajoConf, tableDesc.getMeta().getStoreType());
+ List<Fragment> fragments = null;
+ setPartition(storageManager);
+ fragments = storageManager.getNonForwardSplit(tableDesc, currentFragmentIndex, MAX_FRAGMENT_NUM_PER_SCAN);
+
if (fragments != null && !fragments.isEmpty()) {
FragmentProto[] fragmentProtos = FragmentConvertor.toFragmentProtoArray(fragments.toArray(new Fragment[] {}));
this.taskContext = new TaskAttemptContext(
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
index db82fca..aa8b228 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
@@ -212,6 +212,11 @@ public class QueryExecutor {
scanNode = plan.getRootBlock().getNode(NodeType.PARTITIONS_SCAN);
}
TableDesc desc = scanNode.getTableDesc();
+ // Keep info for partition-column-only queries
+ SelectionNode selectionNode = plan.getRootBlock().getNode(NodeType.SELECTION);
+ if (desc.isExternal() && desc.hasPartition() && selectionNode != null) {
+ scanNode.setQual(selectionNode.getQual());
+ }
int maxRow = Integer.MAX_VALUE;
if (plan.getRootBlock().hasNode(NodeType.LIMIT)) {
LimitNode limitNode = plan.getRootBlock().getNode(NodeType.LIMIT);
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
index d0f7cf4..45c94a3 100644
--- a/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/master/TestGlobalPlanner.java
@@ -317,8 +317,9 @@ public class TestGlobalPlanner {
plan = buildPlan("select * from customer where c_nationkey = 1");
assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
+ // c_nationkey is partition column
plan = buildPlan("select * from customer_parts where c_nationkey = 1");
- assertFalse(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
+ assertTrue(PlannerUtil.checkIfSimpleQuery(plan.getLogicalPlan()));
// same column order
plan = buildPlan("select c_custkey, c_name, c_address, c_nationkey, c_phone, c_acctbal, c_mktsegment, c_comment" +
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
index 23b4659..0d0ea88 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
@@ -573,4 +573,65 @@ public class EvalTreeUtil {
public static Datum evaluateImmediately(EvalNode evalNode) {
return evalNode.eval(null, null);
}
+
+ /**
+ * Checks whether EvalNode consists of only partition columns and const values.
+ * The partition based simple query can be defined as 'select * from tb_name where col_name1="X" and col_name2="Y" [LIMIT Z]',
+ * whose WHERE clause consists of only partition-columns with constant values.
+ * Partition columns must be able to form a prefix of HDFS path like '/tb_name1/col_name1=X/col_name2=Y'.
+ *
+ * @param node The qualification node of a SELECTION node
+ * @param partSchema Partition expression schema
+ * @return True if the query is partition-column based simple query.
+ */
+ public static boolean checkIfPartitionSelection(EvalNode node, Schema partSchema) {
+ if (node != null && node instanceof BinaryEval) {
+ BinaryEval eval = (BinaryEval)node;
+ EvalNode left = eval.getLeftExpr();
+ EvalNode right = eval.getRightExpr();
+ EvalType type = eval.getType();
+
+ if (type == EvalType.EQUAL) {
+ if (left instanceof FieldEval && right instanceof ConstEval && partSchema.contains(((FieldEval) left).getColumnName())) {
+ return true;
+ } else if (left instanceof ConstEval && right instanceof FieldEval && partSchema.contains(((FieldEval) right).getColumnName())) {
+ return true;
+ }
+ } else if (type == EvalType.AND && left instanceof BinaryEval && right instanceof BinaryEval) {
+ return checkIfPartitionSelection(left, partSchema) && checkIfPartitionSelection(right, partSchema);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get partition constant value associated with `columnName`.
+ *
+ * @param node EvalNode having query predicates
+ * @param columnName Column name to be looked up
+ * @return String The value associated with `columnName` in the predicates
+ */
+ public static String getPartitionValue(EvalNode node, String columnName) {
+ if (node != null && node instanceof BinaryEval) {
+ BinaryEval eval = (BinaryEval)node;
+ EvalNode left = eval.getLeftExpr();
+ EvalNode right = eval.getRightExpr();
+ EvalType type = eval.getType();
+
+ if (type == EvalType.EQUAL) {
+ if (left instanceof FieldEval && right instanceof ConstEval && columnName.equals(((FieldEval) left).getColumnName())) {
+ return ((ConstEval)right).getValue().toString();
+ } else if (left instanceof ConstEval && right instanceof FieldEval && columnName.equals(((FieldEval) right).getColumnName())) {
+ return ((ConstEval)left).getValue().toString();
+ }
+ } else if (type == EvalType.AND && left instanceof BinaryEval && right instanceof BinaryEval) {
+ String value = getPartitionValue(left, columnName);
+ if (value == null) {
+ value = getPartitionValue(right, columnName);
+ }
+ return value;
+ }
+ }
+ return null;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
index 0fbd359..b09fc9e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
@@ -100,6 +100,7 @@ public class PlannerUtil {
PlannerUtil.getRelationLineage(plan.getRootBlock().getRoot()).length == 1;
boolean noComplexComputation = false;
+ boolean prefixPartitionWhere = false;
if (singleRelation) {
ScanNode scanNode = plan.getRootBlock().getNode(NodeType.SCAN);
if (scanNode == null) {
@@ -133,11 +134,34 @@ public class PlannerUtil {
}
}
}
+
+ /**
+ * TODO: Remove isExternal check after resolving the following issues
+ * - TAJO-1416: INSERT INTO EXTERNAL PARTITIONED TABLE
+ * - TAJO-1441: INSERT INTO MANAGED PARTITIONED TABLE
+ */
+ if (!noWhere && scanNode.getTableDesc().isExternal() && scanNode.getTableDesc().getPartitionMethod() != null) {
+ EvalNode node = ((SelectionNode) plan.getRootBlock().getNode(NodeType.SELECTION)).getQual();
+ Schema partSchema = scanNode.getTableDesc().getPartitionMethod().getExpressionSchema();
+ if (EvalTreeUtil.checkIfPartitionSelection(node, partSchema)) {
+ prefixPartitionWhere = true;
+ boolean isPrefix = true;
+ for (Column c : partSchema.getColumns()) {
+ String value = EvalTreeUtil.getPartitionValue(node, c.getSimpleName());
+ if (isPrefix && value == null)
+ isPrefix = false;
+ else if (!isPrefix && value != null) {
+ prefixPartitionWhere = false;
+ break;
+ }
+ }
+ }
+ }
}
return !checkIfDDLPlan(rootNode) &&
(simpleOperator && noComplexComputation && isOneQueryBlock &&
- noOrderBy && noGroupBy && noWhere && noJoin && singleRelation);
+ noOrderBy && noGroupBy && (noWhere || prefixPartitionWhere) && noJoin && singleRelation);
}
/**
http://git-wip-us.apache.org/repos/asf/tajo/blob/8d0146b8/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
index c427940..8d425b4 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
@@ -149,6 +149,21 @@ public class FileStorageManager extends StorageManager {
return new Path(tableBaseDir, tableName);
}
+ private String partitionPath = "";
+ private int currentDepth = 0;
+
+ /**
+ * Set a specific partition path for partition-column only queries
+ * @param path The partition prefix path
+ */
+ public void setPartitionPath(String path) { partitionPath = path; }
+
+ /**
+ * Set a depth of partition path for partition-column only queries
+ * @param depth Depth of partitions
+ */
+ public void setCurrentDepth(int depth) { currentDepth = depth; }
+
@VisibleForTesting
public Appender getAppender(TableMeta meta, Schema schema, Path filePath)
throws IOException {
@@ -722,8 +737,16 @@ public class FileStorageManager extends StorageManager {
List<FileStatus> nonZeroLengthFiles = new ArrayList<FileStatus>();
if (fs.exists(tablePath)) {
- getNonZeroLengthDataFiles(fs, tablePath, nonZeroLengthFiles, currentPage, numResultFragments,
- new AtomicInteger(0), tableDesc.hasPartition(), 0, partitionDepth);
+ if (!partitionPath.isEmpty()) {
+ Path partPath = new Path(tableDesc.getPath() + partitionPath);
+ if (fs.exists(partPath)) {
+ getNonZeroLengthDataFiles(fs, partPath, nonZeroLengthFiles, currentPage, numResultFragments,
+ new AtomicInteger(0), tableDesc.hasPartition(), this.currentDepth, partitionDepth);
+ }
+ } else {
+ getNonZeroLengthDataFiles(fs, tablePath, nonZeroLengthFiles, currentPage, numResultFragments,
+ new AtomicInteger(0), tableDesc.hasPartition(), 0, partitionDepth);
+ }
}
List<Fragment> fragments = new ArrayList<Fragment>();
[9/9] tajo git commit: Merge branch 'index_support' of
https://git-wip-us.apache.org/repos/asf/tajo into index_support
Posted by ji...@apache.org.
Merge branch 'index_support' of https://git-wip-us.apache.org/repos/asf/tajo into index_support
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/d09bd8dd
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/d09bd8dd
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/d09bd8dd
Branch: refs/heads/index_support
Commit: d09bd8ddc048fb1475d0192f1e06101a2876c72d
Parents: fd2f828 60cbe9c
Author: Jihoon Son <ji...@apache.org>
Authored: Mon Mar 23 11:56:05 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Mon Mar 23 11:56:05 2015 +0900
----------------------------------------------------------------------
----------------------------------------------------------------------