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/20 04:04:32 UTC
tajo git commit: TAJO-1392: Resolve findbug warnings on Tajo Plan
Module
Repository: tajo
Updated Branches:
refs/heads/master 5260c1e06 -> 154f5b9e1
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/master
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;