You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2016/04/22 14:06:50 UTC
[1/2] tajo git commit: TAJO-2127: Use Type instead of DataType for
EvalNode.
Repository: tajo
Updated Branches:
refs/heads/master dc96f7e27 -> 552376a80
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 eb3e36b..9c78497 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,17 +19,14 @@
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;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class BetweenPredicateEval extends EvalNode implements Cloneable {
- private static final TajoDataTypes.DataType RES_TYPE = CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
@Expose private boolean not;
@Expose private boolean symmetric;
@Expose private EvalNode predicand;
@@ -194,8 +191,8 @@ public class BetweenPredicateEval extends EvalNode implements Cloneable {
}
@Override
- public TajoDataTypes.DataType getValueType() {
- return RES_TYPE;
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BinaryEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BinaryEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BinaryEval.java
index e792c34..b565b80 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BinaryEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BinaryEval.java
@@ -20,21 +20,21 @@ package org.apache.tajo.plan.expr;
import com.google.common.base.Objects;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.DataTypeUtil;
+import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.DataTypeUtil;
import org.apache.tajo.exception.InvalidOperationException;
import org.apache.tajo.storage.Tuple;
-import static org.apache.tajo.common.TajoDataTypes.Type;
+import static org.apache.tajo.type.Type.Bool;
+import static org.apache.tajo.type.Type.Text;
public class BinaryEval extends EvalNode implements Cloneable {
@Expose protected EvalNode leftExpr;
@Expose protected EvalNode rightExpr;
- @Expose protected DataType returnType;
+ @Expose protected org.apache.tajo.type.Type returnType;
protected BinaryEval(EvalType type) {
super(type);
@@ -54,7 +54,7 @@ public class BinaryEval extends EvalNode implements Cloneable {
type == EvalType.GTH ||
type == EvalType.LEQ ||
type == EvalType.GEQ ) {
- this.returnType = CatalogUtil.newSimpleDataType(Type.BOOLEAN);
+ this.returnType = Bool;
} else if (
type == EvalType.PLUS ||
type == EvalType.MINUS ||
@@ -64,7 +64,7 @@ public class BinaryEval extends EvalNode implements Cloneable {
this.returnType = DataTypeUtil.determineType(left.getValueType(), right.getValueType());
} else if (type == EvalType.CONCATENATE) {
- this.returnType = CatalogUtil.newSimpleDataType(Type.TEXT);
+ this.returnType = Text;
}
}
@@ -154,7 +154,7 @@ public class BinaryEval extends EvalNode implements Cloneable {
return lhs.modular(rhs);
case CONCATENATE:
- if (lhs.type() == Type.NULL_TYPE || rhs.type() == Type.NULL_TYPE) {
+ if (lhs.type() == TajoDataTypes.Type.NULL_TYPE || rhs.type() == TajoDataTypes.Type.NULL_TYPE) {
return NullDatum.get();
}
return DatumFactory.createText(lhs.asChars() + rhs.asChars());
@@ -169,7 +169,7 @@ public class BinaryEval extends EvalNode implements Cloneable {
}
@Override
- public DataType getValueType() {
+ public org.apache.tajo.type.Type getValueType() {
return returnType;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 331b8e1..d55cff9 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,11 +20,6 @@ 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.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.json.GsonObject;
@@ -68,10 +63,10 @@ public class CaseWhenEval extends EvalNode implements GsonObject {
}
@Override
- public DataType getValueType() {
+ public org.apache.tajo.type.Type getValueType() {
// Find not null type
for (IfThenEval eachWhen: whens) {
- if (eachWhen.getResult().getValueType().getType() != Type.NULL_TYPE) {
+ if (!eachWhen.getResult().getValueType().isNull()) {
return eachWhen.getResult().getValueType();
}
}
@@ -80,7 +75,7 @@ public class CaseWhenEval extends EvalNode implements GsonObject {
return elseResult.getValueType();
}
- return NullDatum.getDataType();
+ return org.apache.tajo.type.Type.Null;
}
@Override
@@ -202,8 +197,8 @@ public class CaseWhenEval extends EvalNode implements GsonObject {
}
@Override
- public DataType getValueType() {
- return CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
+ public org.apache.tajo.type.Type getValueType() {
+ return org.apache.tajo.type.Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 b8b768b..653eeb0 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,12 +19,13 @@
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.TypeConverter;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.TUtil;
import java.util.TimeZone;
@@ -50,8 +51,8 @@ public class CastEval extends UnaryEval implements Cloneable {
}
@Override
- public DataType getValueType() {
- return target;
+ public Type getValueType() {
+ return TypeConverter.convert(target);
}
public boolean hasTimeZone() {
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/ConstEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/ConstEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/ConstEval.java
index ff964e6..25c12d4 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/ConstEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/ConstEval.java
@@ -20,10 +20,10 @@ package org.apache.tajo.plan.expr;
import com.google.common.base.Objects;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class ConstEval extends EvalNode implements Comparable<ConstEval>, Cloneable {
@Expose Datum datum = null;
@@ -50,8 +50,8 @@ public class ConstEval extends EvalNode implements Comparable<ConstEval>, Clonea
}
@Override
- public DataType getValueType() {
- return CatalogUtil.newSimpleDataType(datum.type());
+ public Type getValueType() {
+ return TypeConverter.convert(datum.type());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalNode.java
index b154532..665a770 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalNode.java
@@ -29,6 +29,7 @@ import org.apache.tajo.plan.serder.EvalNodeSerializer;
import org.apache.tajo.plan.serder.PlanGsonHelper;
import org.apache.tajo.plan.serder.PlanProto;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
/**
* An annotated expression which includes actual data domains.
@@ -50,7 +51,7 @@ public abstract class EvalNode implements Cloneable, GsonObject, ProtoObject<Pla
return this.type;
}
- public abstract DataType getValueType();
+ public abstract Type getValueType();
public abstract int childNum();
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 c71dba2..bb48030 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
@@ -179,7 +179,7 @@ public class EvalTreeUtil {
case DIVIDE:
case CONST:
case FUNCTION:
- return expr.getValueType();
+ return TypeConverter.convert(expr.getValueType());
case FIELD:
FieldEval fieldEval = (FieldEval) expr;
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
index 2b301b6..60144ce 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
@@ -21,9 +21,11 @@ package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class FieldEval extends EvalNode implements Cloneable {
@Expose private Column column;
@@ -33,6 +35,11 @@ public class FieldEval extends EvalNode implements Cloneable {
super(EvalType.FIELD);
this.column = new Column(columnName, domain);
}
+
+ public FieldEval(String columnName, Type type) {
+ super(EvalType.FIELD);
+ this.column = new Column(columnName, TypeConverter.convert(type));
+ }
public FieldEval(Column column) {
super(EvalType.FIELD);
@@ -62,8 +69,8 @@ public class FieldEval extends EvalNode implements Cloneable {
}
@Override
- public DataType getValueType() {
- return column.getDataType();
+ public Type getValueType() {
+ return TypeConverter.convert(column.getDataType());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FunctionEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FunctionEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FunctionEval.java
index e4bb46c..1a4ea8e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FunctionEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FunctionEval.java
@@ -23,11 +23,13 @@ import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.storage.VTuple;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.TUtil;
import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.DISTINCT_AGGREGATION;
@@ -71,7 +73,7 @@ public abstract class FunctionEval extends EvalNode implements Cloneable {
ParamType [] paramTypes = new ParamType[argEvals.length];
for (int i = 0; i < argEvals.length; i++) {
if (argEvals[i].getType() == EvalType.CONST) {
- if (argEvals[i].getValueType().getType() == TajoDataTypes.Type.NULL_TYPE) {
+ if (argEvals[i].getValueType().isNull()) {
paramTypes[i] = ParamType.NULL;
} else {
paramTypes[i] = ParamType.CONSTANT;
@@ -111,8 +113,8 @@ public abstract class FunctionEval extends EvalNode implements Cloneable {
}
- public DataType getValueType() {
- return this.funcDesc.getReturnType();
+ public Type getValueType() {
+ return TypeConverter.convert(this.funcDesc.getReturnType());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 66bb5b0..5ee6e9e 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
@@ -26,14 +26,13 @@ import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class InEval extends BinaryEval {
- private static final TajoDataTypes.DataType RES_TYPE = CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
-
@Expose private boolean not;
Set<Datum> values;
@@ -47,8 +46,8 @@ public class InEval extends BinaryEval {
}
@Override
- public TajoDataTypes.DataType getValueType() {
- return RES_TYPE;
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 72b36eb..f337b8a 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,19 +19,12 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
-
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class IsNullEval extends UnaryEval {
- // it's just a hack to emulate a binary expression
- private final static ConstEval DUMMY_EVAL = new ConstEval(DatumFactory.createBool(true));
- private static final DataType RES_TYPE = CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
-
// persistent variables
@Expose private boolean isNot;
@@ -41,8 +34,8 @@ public class IsNullEval extends UnaryEval {
}
@Override
- public DataType getValueType() {
- return RES_TYPE;
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/NotEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/NotEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/NotEval.java
index 088f3a5..f9b5393 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/NotEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/NotEval.java
@@ -18,23 +18,19 @@
package org.apache.tajo.plan.expr;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class NotEval extends UnaryEval implements Cloneable {
- private static final DataType RES_TYPE = CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
-
public NotEval(EvalNode child) {
super(EvalType.NOT, child);
}
@Override
- public DataType getValueType() {
- return RES_TYPE;
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 1b1ee44..78b8910 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
@@ -18,10 +18,10 @@
package org.apache.tajo.plan.expr;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.exception.InvalidOperationException;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class PartialBinaryExpr extends BinaryEval {
@@ -37,7 +37,7 @@ public class PartialBinaryExpr extends BinaryEval {
}
@Override
- public DataType getValueType() {
+ public Type getValueType() {
return null;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PatternMatchPredicateEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PatternMatchPredicateEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PatternMatchPredicateEval.java
index ec143f7..0f595b1 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PatternMatchPredicateEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/PatternMatchPredicateEval.java
@@ -19,21 +19,17 @@
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;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
public abstract class PatternMatchPredicateEval extends BinaryEval {
- private static final DataType RES_TYPE = CatalogUtil.newSimpleDataType(TajoDataTypes.Type.BOOLEAN);
-
@Expose protected boolean not;
@Expose protected String pattern;
@Expose protected boolean caseInsensitive;
@@ -64,8 +60,8 @@ public abstract class PatternMatchPredicateEval extends BinaryEval {
}
@Override
- public DataType getValueType() {
- return RES_TYPE;
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 d2dae5a..aaaba22 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
@@ -19,17 +19,16 @@
package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.NullDatum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.StringUtils;
import org.apache.tajo.util.TUtil;
import java.util.Arrays;
-import static org.apache.tajo.common.TajoDataTypes.DataType;
-
public class RowConstantEval extends ValueSetEval {
@Expose Datum [] values;
@@ -39,8 +38,8 @@ public class RowConstantEval extends ValueSetEval {
}
@Override
- public DataType getValueType() {
- return CatalogUtil.newSimpleDataType(values[0].type());
+ public Type getValueType() {
+ return TypeConverter.convert(values[0].type());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SignedEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SignedEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SignedEval.java
index baa78a2..085d82c 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SignedEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SignedEval.java
@@ -20,10 +20,10 @@ package org.apache.tajo.plan.expr;
import com.google.common.base.Objects;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.NumericDatum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public class SignedEval extends UnaryEval implements Cloneable {
@Expose private boolean negative;
@@ -38,7 +38,7 @@ public class SignedEval extends UnaryEval implements Cloneable {
}
@Override
- public DataType getValueType() {
+ public Type getValueType() {
return child.getValueType();
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
index f2af073..1cac7ff 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
@@ -20,12 +20,13 @@ package org.apache.tajo.plan.expr;
import org.apache.tajo.annotation.Nullable;
import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.exception.TajoRuntimeException;
import org.apache.tajo.exception.UnsupportedException;
import org.apache.tajo.plan.logical.TableSubQueryNode;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
/**
* SubqueryEval is a temporal eval to keep subquery information when the subquery occurs in expressions,
@@ -44,8 +45,8 @@ public class SubqueryEval extends ValueSetEval {
}
@Override
- public DataType getValueType() {
- return subQueryNode.getOutSchema().getColumn(0).getDataType();
+ public Type getValueType() {
+ return TypeConverter.convert(subQueryNode.getOutSchema().getColumn(0).getDataType());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/expr/UnaryEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/UnaryEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/UnaryEval.java
index 4db2b90..5c7ee6e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/UnaryEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/UnaryEval.java
@@ -21,9 +21,9 @@ package org.apache.tajo.plan.expr;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
public abstract class UnaryEval extends EvalNode implements Cloneable {
@Expose protected EvalNode child;
@@ -56,7 +56,7 @@ public abstract class UnaryEval extends EvalNode implements Cloneable {
}
@Override
- public TajoDataTypes.DataType getValueType() {
+ public Type getValueType() {
return null;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 e5b88f2..6c70395 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
@@ -21,11 +21,13 @@ package org.apache.tajo.plan.expr;
import com.google.gson.annotations.Expose;
import org.apache.tajo.catalog.FunctionDesc;
import org.apache.tajo.catalog.SortSpec;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.plan.function.FunctionContext;
import org.apache.tajo.plan.logical.WindowSpec;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.StringUtils;
import org.apache.tajo.util.TUtil;
@@ -71,8 +73,8 @@ public class WindowFunctionEval extends AggregationFunctionCallEval implements C
}
@Override
- public DataType getValueType() {
- return funcDesc.getReturnType();
+ public Type getValueType() {
+ return TypeConverter.convert(funcDesc.getReturnType());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
index f37ce69..759867f 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeSerializer.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
import com.google.protobuf.ByteString;
import org.apache.tajo.algebra.WindowSpec.WindowFrameEndBoundType;
import org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.datum.AnyDatum;
import org.apache.tajo.datum.Datum;
@@ -96,7 +97,7 @@ public class EvalNodeSerializer
PlanProto.EvalNode.Builder nodeBuilder = PlanProto.EvalNode.newBuilder();
nodeBuilder.setId(sid);
- nodeBuilder.setDataType(node.getValueType());
+ nodeBuilder.setDataType(TypeConverter.convert(node.getValueType()));
nodeBuilder.setType(PlanProto.EvalType.valueOf(node.getType().name()));
return nodeBuilder;
}
@@ -118,7 +119,7 @@ public class EvalNodeSerializer
unaryBuilder.setNegative(signedEval.isNegative());
} else if (unary.getType() == EvalType.CAST) {
CastEval castEval = (CastEval) unary;
- unaryBuilder.setCastingType(castEval.getValueType());
+ unaryBuilder.setCastingType(TypeConverter.convert(castEval.getValueType()));
if (castEval.hasTimeZone()) {
unaryBuilder.setTimezone(castEval.getTimezone().getID());
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/util/EvalNodeToExprConverter.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/EvalNodeToExprConverter.java b/tajo-plan/src/main/java/org/apache/tajo/plan/util/EvalNodeToExprConverter.java
index 00638c2..86f8286 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/EvalNodeToExprConverter.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/EvalNodeToExprConverter.java
@@ -145,7 +145,7 @@ public class EvalNodeToExprConverter extends SimpleEvalNodeVisitor<Object> {
@Override
protected EvalNode visitConst(Object o, ConstEval evalNode, Stack<EvalNode> stack) {
- exprs.push(convertDatumToExpr(evalNode.getValueType().getType(), evalNode.getValue()));
+ exprs.push(convertDatumToExpr(evalNode.getValueType().baseType(), evalNode.getValue()));
return super.visitConst(o, evalNode, stack);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 ff3e3c8..7dc5ae3 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
@@ -25,8 +25,6 @@ import com.google.common.collect.Sets;
import org.apache.tajo.algebra.*;
import org.apache.tajo.annotation.Nullable;
import org.apache.tajo.catalog.*;
-import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.exception.*;
import org.apache.tajo.plan.LogicalPlan;
import org.apache.tajo.plan.Target;
@@ -36,6 +34,7 @@ import org.apache.tajo.plan.serder.PlanProto.ShuffleType;
import org.apache.tajo.plan.visitor.BasicLogicalPlanVisitor;
import org.apache.tajo.plan.visitor.ExplainLogicalPlanVisitor;
import org.apache.tajo.plan.visitor.SimpleAlgebraVisitor;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.KeyValueSet;
import org.apache.tajo.util.StringUtils;
@@ -658,10 +657,10 @@ public class PlannerUtil {
public static Schema targetToSchema(List<Target> targets) {
SchemaBuilder schema = SchemaBuilder.uniqueNameBuilder();
for (Target t : targets) {
- DataType type = t.getEvalTree().getValueType();
+ Type type = t.getEvalTree().getValueType();
// hack to avoid projecting record type.
- if (type.getType() == TajoDataTypes.Type.RECORD) {
+ if (type.isStruct()) {
throw new TajoRuntimeException(new NotImplementedException("record projection"));
}
@@ -672,7 +671,7 @@ public class PlannerUtil {
name = t.getEvalTree().getName();
}
- schema.add(name, type);
+ schema.add(name, TypeConverter.convert(type));
}
return schema.build();
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java
index a9737e0..2040ae3 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/ExprsVerifier.java
@@ -19,6 +19,7 @@
package org.apache.tajo.plan.verifier;
import org.apache.tajo.catalog.Column;
+import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.error.Errors;
import org.apache.tajo.exception.TajoException;
import org.apache.tajo.exception.TajoInternalError;
@@ -29,8 +30,7 @@ import org.apache.tajo.plan.logical.LogicalNode;
import java.util.Set;
import java.util.Stack;
-import static org.apache.tajo.common.TajoDataTypes.DataType;
-import static org.apache.tajo.common.TajoDataTypes.Type;
+import static org.apache.tajo.common.TajoDataTypes.Type.*;
/**
* It verifies one predicate or expression with the semantic and data type checks as follows:
@@ -61,7 +61,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN
/**
* It checks the compatibility of two data types.
*/
- private static boolean isCompatibleType(DataType dataType1, DataType dataType2) {
+ private static boolean isCompatibleType(org.apache.tajo.type.Type dataType1, org.apache.tajo.type.Type dataType2) {
if (checkNumericType(dataType1) && checkNumericType(dataType2)) {
return true;
}
@@ -85,9 +85,7 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN
* It checks both expressions in a comparison operator are compatible to each other.
*/
private static void verifyComparisonOperator(VerificationState state, BinaryEval expr) {
- DataType leftType = expr.getLeftExpr().getValueType();
- DataType rightType = expr.getRightExpr().getValueType();
- if (!isCompatibleType(leftType, rightType)) {
+ if (!isCompatibleType(expr.getLeftExpr().getValueType(), expr.getRightExpr().getValueType())) {
state.addVerification(new UndefinedOperatorException(expr.toString()));
}
}
@@ -145,32 +143,32 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN
EvalNode leftExpr = evalNode.getLeftExpr();
EvalNode rightExpr = evalNode.getRightExpr();
- DataType leftDataType = leftExpr.getValueType();
- DataType rightDataType = rightExpr.getValueType();
+ org.apache.tajo.type.Type leftDataType = leftExpr.getValueType();
+ org.apache.tajo.type.Type rightDataType = rightExpr.getValueType();
- Type leftType = leftDataType.getType();
- Type rightType = rightDataType.getType();
+ TajoDataTypes.Type leftType = leftDataType.baseType();
+ TajoDataTypes.Type rightType = rightDataType.baseType();
- if (leftType == Type.DATE &&
+ if (leftType == DATE &&
(checkIntType(rightDataType) ||
- rightType == Type.DATE || rightType == Type.INTERVAL || rightType == Type.TIME)) {
+ rightType == DATE || rightType == INTERVAL || rightType == TIME)) {
return;
}
- if (leftType == Type.INTERVAL &&
+ if (leftType == INTERVAL &&
(checkNumericType(rightDataType) ||
- rightType == Type.DATE || rightType == Type.INTERVAL || rightType == Type.TIME ||
- rightType == Type.TIMESTAMP)) {
+ rightType == DATE || rightType == INTERVAL || rightType == TIME ||
+ rightType == TIMESTAMP)) {
return;
}
- if (leftType == Type.TIME &&
- (rightType == Type.DATE || rightType == Type.INTERVAL || rightType == Type.TIME)) {
+ if (leftType == TIME &&
+ (rightType == DATE || rightType == INTERVAL || rightType == TIME)) {
return;
}
- if (leftType == Type.TIMESTAMP &&
- (rightType == Type.TIMESTAMP || rightType == Type.INTERVAL || rightType == Type.TIME)) {
+ if (leftType == TIMESTAMP &&
+ (rightType == TIMESTAMP || rightType == INTERVAL || rightType == TajoDataTypes.Type.TIME)) {
return;
}
@@ -179,29 +177,29 @@ public class ExprsVerifier extends BasicEvalNodeVisitor<VerificationState, EvalN
}
}
- private static boolean checkNetworkType(DataType dataType) {
- return dataType.getType() == Type.INET4 || dataType.getType() == Type.INET6;
+ private static boolean checkNetworkType(org.apache.tajo.type.Type dataType) {
+ return dataType.baseType() == INET4 || dataType.baseType() == INET6;
}
- private static boolean checkIntType(DataType dataType) {
- int typeNumber = dataType.getType().getNumber();
- return Type.INT1.getNumber() < typeNumber && typeNumber <= Type.INT8.getNumber();
+ private static boolean checkIntType(org.apache.tajo.type.Type dataType) {
+ int typeNumber = dataType.baseType().getNumber();
+ return INT1.getNumber() < typeNumber && typeNumber <= INT8.getNumber();
}
- private static boolean checkNumericType(DataType dataType) {
- int typeNumber = dataType.getType().getNumber();
- return Type.INT1.getNumber() <= typeNumber && typeNumber <= Type.NUMERIC.getNumber();
+ private static boolean checkNumericType(org.apache.tajo.type.Type dataType) {
+ int typeNumber = dataType.baseType().getNumber();
+ return INT1.getNumber() <= typeNumber && typeNumber <= NUMERIC.getNumber();
}
- private static boolean checkTextData(DataType dataType) {
- int typeNumber = dataType.getType().getNumber();
- return Type.CHAR.getNumber() <= typeNumber && typeNumber <= Type.TEXT.getNumber();
+ private static boolean checkTextData(org.apache.tajo.type.Type dataType) {
+ int typeNumber = dataType.baseType().getNumber();
+ return CHAR.getNumber() <= typeNumber && typeNumber <= TEXT.getNumber();
}
- private static boolean checkDateTime(DataType dataType) {
- int typeNumber = dataType.getType().getNumber();
- return (Type.DATE.getNumber() <= typeNumber && typeNumber <= Type.INTERVAL.getNumber()) ||
- (Type.TIMEZ.getNumber() <= typeNumber && typeNumber <= Type.TIMESTAMPZ.getNumber());
+ private static boolean checkDateTime(org.apache.tajo.type.Type dataType) {
+ int typeNumber = dataType.baseType().getNumber();
+ return (DATE.getNumber() <= typeNumber && typeNumber <= INTERVAL.getNumber()) ||
+ (TIMEZ.getNumber() <= typeNumber && typeNumber <= TIMESTAMPZ.getNumber());
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-storage/tajo-storage-jdbc/src/main/java/org/apache/tajo/storage/jdbc/SQLExpressionGenerator.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-jdbc/src/main/java/org/apache/tajo/storage/jdbc/SQLExpressionGenerator.java b/tajo-storage/tajo-storage-jdbc/src/main/java/org/apache/tajo/storage/jdbc/SQLExpressionGenerator.java
index a265efe..0b1df31 100644
--- a/tajo-storage/tajo-storage-jdbc/src/main/java/org/apache/tajo/storage/jdbc/SQLExpressionGenerator.java
+++ b/tajo-storage/tajo-storage-jdbc/src/main/java/org/apache/tajo/storage/jdbc/SQLExpressionGenerator.java
@@ -26,6 +26,7 @@ import org.apache.tajo.exception.NotImplementedException;
import org.apache.tajo.exception.TajoRuntimeException;
import org.apache.tajo.exception.UnsupportedDataTypeException;
import org.apache.tajo.plan.expr.*;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.StringUtils;
import java.sql.DatabaseMetaData;
@@ -270,8 +271,8 @@ public class SQLExpressionGenerator extends SimpleEvalNodeVisitor<SQLExpressionG
* @param dataType Tajo DataType
* @return SQL DataType
*/
- public String convertTajoTypeToSQLType(DataType dataType) {
- switch (dataType.getType()) {
+ public String convertTajoTypeToSQLType(Type dataType) {
+ switch (dataType.baseType()) {
case INT1:
return "TINYINT";
case INT2:
@@ -285,7 +286,7 @@ public class SQLExpressionGenerator extends SimpleEvalNodeVisitor<SQLExpressionG
case FLOAT8:
return "DOUBLE";
default:
- return dataType.getType().name();
+ return dataType.baseType().name();
}
}
[2/2] tajo git commit: TAJO-2127: Use Type instead of DataType for
EvalNode.
Posted by hy...@apache.org.
TAJO-2127: Use Type instead of DataType for EvalNode.
Closes #1005
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/552376a8
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/552376a8
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/552376a8
Branch: refs/heads/master
Commit: 552376a80283edf8ac974d55291c4568ba17fc96
Parents: dc96f7e
Author: Hyunsik Choi <hy...@apache.org>
Authored: Fri Apr 22 05:04:17 2016 -0700
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Fri Apr 22 05:04:17 2016 -0700
----------------------------------------------------------------------
CHANGES | 2 +
.../main/java/org/apache/tajo/DataTypeUtil.java | 87 +++++++--------
.../java/org/apache/tajo/catalog/Column.java | 10 ++
.../org/apache/tajo/catalog/TypeConverter.java | 56 +++++++---
.../exception/InvalidValueForCastException.java | 25 +++--
.../main/java/org/apache/tajo/type/Int1.java | 28 +++++
.../main/java/org/apache/tajo/type/Type.java | 51 ++++-----
.../java/org/apache/tajo/schema/TestSchema.java | 16 +--
.../java/org/apache/tajo/type/TestType.java | 52 ++++-----
.../apache/tajo/engine/eval/ExprTestBase.java | 10 --
.../apache/tajo/engine/eval/TestEvalTree.java | 55 ++--------
.../tajo/engine/planner/TestLogicalPlanner.java | 62 -----------
.../tajo/engine/codegen/EvalCodeGenContext.java | 2 +-
.../tajo/engine/codegen/EvalCodeGenerator.java | 31 +++---
.../codegen/ScalarFunctionBindingEmitter.java | 5 +-
.../engine/codegen/TajoGeneratorAdapter.java | 109 ++++++++++---------
.../engine/codegen/VariablesPreBuilder.java | 4 +-
.../engine/planner/global/GlobalPlanner.java | 8 +-
.../worker/ExecutionBlockSharedResource.java | 6 +-
.../org/apache/tajo/plan/ExprAnnotator.java | 45 ++++----
.../org/apache/tajo/plan/LogicalPlanner.java | 2 +-
.../org/apache/tajo/plan/NamedExprsManager.java | 6 +-
.../org/apache/tajo/plan/TypeDeterminant.java | 16 +--
.../plan/expr/AggregationFunctionCallEval.java | 9 +-
.../tajo/plan/expr/BetweenPredicateEval.java | 9 +-
.../org/apache/tajo/plan/expr/BinaryEval.java | 18 +--
.../org/apache/tajo/plan/expr/CaseWhenEval.java | 15 +--
.../org/apache/tajo/plan/expr/CastEval.java | 7 +-
.../org/apache/tajo/plan/expr/ConstEval.java | 8 +-
.../org/apache/tajo/plan/expr/EvalNode.java | 3 +-
.../org/apache/tajo/plan/expr/EvalTreeUtil.java | 2 +-
.../org/apache/tajo/plan/expr/FieldEval.java | 11 +-
.../org/apache/tajo/plan/expr/FunctionEval.java | 8 +-
.../java/org/apache/tajo/plan/expr/InEval.java | 7 +-
.../org/apache/tajo/plan/expr/IsNullEval.java | 13 +--
.../java/org/apache/tajo/plan/expr/NotEval.java | 10 +-
.../tajo/plan/expr/PartialBinaryExpr.java | 4 +-
.../plan/expr/PatternMatchPredicateEval.java | 10 +-
.../apache/tajo/plan/expr/RowConstantEval.java | 9 +-
.../org/apache/tajo/plan/expr/SignedEval.java | 4 +-
.../org/apache/tajo/plan/expr/SubqueryEval.java | 7 +-
.../org/apache/tajo/plan/expr/UnaryEval.java | 4 +-
.../tajo/plan/expr/WindowFunctionEval.java | 6 +-
.../tajo/plan/serder/EvalNodeSerializer.java | 5 +-
.../tajo/plan/util/EvalNodeToExprConverter.java | 2 +-
.../org/apache/tajo/plan/util/PlannerUtil.java | 9 +-
.../tajo/plan/verifier/ExprsVerifier.java | 66 ++++++-----
.../storage/jdbc/SQLExpressionGenerator.java | 7 +-
48 files changed, 440 insertions(+), 501 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 829f9a3..7ac7d83 100644
--- a/CHANGES
+++ b/CHANGES
@@ -10,6 +10,8 @@ Release 0.12.0 - unreleased
IMPROVEMENT
+ TAJO-2127: Use Type instead of DataType for EvalNode. (hyunsik)
+
TAJO-2125: Detect JAVA_HOME on OSX, if JAVA_HOME is not set. (jinho)
TAJO-2108: Refactor Schema to be immutable. (hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/DataTypeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/DataTypeUtil.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/DataTypeUtil.java
index c12aa29..9cbdbe0 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/DataTypeUtil.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/DataTypeUtil.java
@@ -19,20 +19,19 @@
package org.apache.tajo;
import com.google.common.collect.Maps;
-import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.util.TUtil;
import java.util.Map;
-import static org.apache.tajo.common.TajoDataTypes.Type;
import static org.apache.tajo.common.TajoDataTypes.Type.*;
+import static org.apache.tajo.type.Type.*;
public class DataTypeUtil {
- public static final Map<Type, Map<Type, Boolean>> FUNCTION_ACCEPTABLE_PARAM_MAP = Maps.newHashMap();
+ public static final Map<TajoDataTypes.Type, Map<TajoDataTypes.Type, Boolean>> FUNCTION_ACCEPTABLE_PARAM_MAP = Maps.newHashMap();
- private static void putAcceptableType(Type given, Type define) {
+ private static void putAcceptableType(TajoDataTypes.Type given, TajoDataTypes.Type define) {
TUtil.putToNestedMap(FUNCTION_ACCEPTABLE_PARAM_MAP, given, define, true);
}
@@ -75,8 +74,8 @@ public class DataTypeUtil {
putAcceptableType(INET4, INET4);
}
- public static boolean isUpperCastable(Type define, Type given) {
- if (given == define) {
+ public static boolean isUpperCastable(TajoDataTypes.Type define, TajoDataTypes.Type given) {
+ if (given.equals(define)) {
return true;
}
@@ -86,92 +85,94 @@ public class DataTypeUtil {
/**
* This is verified by ExprsVerifier.checkArithmeticOperand().
*/
- public static TajoDataTypes.DataType determineType(TajoDataTypes.DataType left, TajoDataTypes.DataType right) {
- switch (left.getType()) {
+ public static org.apache.tajo.type.Type determineType(org.apache.tajo.type.Type left,
+ org.apache.tajo.type.Type right) {
+ TajoDataTypes.Type rhsBaseType = right.baseType();
+ switch (left.baseType()) {
case INT1:
case INT2:
case INT4: {
- switch(right.getType()) {
+ switch(rhsBaseType) {
case INT1:
case INT2:
- case INT4: return CatalogUtil.newSimpleDataType(Type.INT4);
- case INT8: return CatalogUtil.newSimpleDataType(Type.INT8);
- case FLOAT4: return CatalogUtil.newSimpleDataType(Type.FLOAT4);
- case FLOAT8: return CatalogUtil.newSimpleDataType(Type.FLOAT8);
- case DATE: return CatalogUtil.newSimpleDataType(Type.DATE);
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ case INT4: return Int4;
+ case INT8: return Int8;
+ case FLOAT4: return Float4;
+ case FLOAT8: return Float8;
+ case DATE: return Date;
+ case INTERVAL: return Interval;
}
}
case INT8: {
- switch(right.getType()) {
+ switch(rhsBaseType) {
case INT1:
case INT2:
case INT4:
- case INT8: return CatalogUtil.newSimpleDataType(Type.INT8);
- case FLOAT4: return CatalogUtil.newSimpleDataType(Type.FLOAT4);
- case FLOAT8: return CatalogUtil.newSimpleDataType(Type.FLOAT8);
- case DATE: return CatalogUtil.newSimpleDataType(Type.DATE);
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ case INT8: return Int8;
+ case FLOAT4: return Float4;
+ case FLOAT8: return Float8;
+ case DATE: return Date;
+ case INTERVAL: return Interval;
}
}
case FLOAT4: {
- switch(right.getType()) {
+ switch(rhsBaseType) {
case INT1:
case INT2:
- case INT4: return CatalogUtil.newSimpleDataType(Type.FLOAT4);
- case INT8: return CatalogUtil.newSimpleDataType(Type.FLOAT4);
- case FLOAT4: return CatalogUtil.newSimpleDataType(Type.FLOAT4);
- case FLOAT8: return CatalogUtil.newSimpleDataType(Type.FLOAT8);
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ case INT4: return Float4;
+ case INT8: return Float4;
+ case FLOAT4: return Float4;
+ case FLOAT8: return Float8;
+ case INTERVAL: return Interval;
}
}
case FLOAT8: {
- switch(right.getType()) {
+ switch(rhsBaseType) {
case INT1:
case INT2:
case INT4:
case INT8:
case FLOAT4:
- case FLOAT8: return CatalogUtil.newSimpleDataType(Type.FLOAT8);
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ case FLOAT8: return Float8;
+ case INTERVAL: return Interval;
}
}
case DATE: {
- switch(right.getType()) {
+ switch(rhsBaseType) {
case INT2:
case INT4:
- case INT8: return CatalogUtil.newSimpleDataType(Type.DATE);
+ case INT8: return Date;
case INTERVAL:
- case TIME: return CatalogUtil.newSimpleDataType(Type.TIMESTAMP);
- case DATE: return CatalogUtil.newSimpleDataType(Type.INT4);
+ case TIME: return Timestamp;
+ case DATE: return Int4;
}
}
case TIME: {
- switch(right.getType()) {
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.TIME);
- case TIME: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
- case DATE: return CatalogUtil.newSimpleDataType(Type.INT4);
+ switch(rhsBaseType) {
+ case INTERVAL: return Time;
+ case TIME: return Interval;
+ case DATE: return Int4;
}
}
case TIMESTAMP: {
- switch (right.getType()) {
- case INTERVAL: return CatalogUtil.newSimpleDataType(Type.TIMESTAMP);
- case TIMESTAMP: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ switch (rhsBaseType) {
+ case INTERVAL: return Timestamp;
+ case TIMESTAMP: return Interval;
}
}
case INTERVAL: {
- switch (right.getType()) {
+ switch (rhsBaseType) {
case INTERVAL:
case FLOAT4:
- case FLOAT8: return CatalogUtil.newSimpleDataType(Type.INTERVAL);
+ case FLOAT8: return Interval;
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
index 12edaa7..641b674 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
@@ -26,6 +26,7 @@ import org.apache.tajo.common.ProtoObject;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.json.GsonObject;
+import org.apache.tajo.type.Type;
/**
* Describes a column. It is an immutable object.
@@ -66,6 +67,15 @@ public class Column implements ProtoObject<ColumnProto>, GsonObject {
/**
*
* @param name Column name
+ * @param type Type
+ */
+ public Column(String name, Type type) {
+ this(name, TypeConverter.convert(type));
+ }
+
+ /**
+ *
+ * @param name Column name
* @param type Data Type
* @param typeLength The length of type
*/
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TypeConverter.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TypeConverter.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TypeConverter.java
index f82cc03..f4164d4 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TypeConverter.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/TypeConverter.java
@@ -20,11 +20,11 @@ package org.apache.tajo.catalog;
import com.google.common.collect.ImmutableList;
import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.exception.NotImplementedException;
import org.apache.tajo.exception.TajoRuntimeException;
import org.apache.tajo.exception.UnsupportedException;
import org.apache.tajo.schema.Schema;
-import org.apache.tajo.type.Protobuf;
-import org.apache.tajo.type.Type;
+import org.apache.tajo.type.*;
import java.util.Collection;
@@ -43,36 +43,41 @@ public class TypeConverter {
public static Type convert(TajoDataTypes.Type legacyBaseType) {
switch (legacyBaseType) {
case BOOLEAN:
- return Bool();
+ return Bool;
case INT1:
+ return Int1;
case INT2:
- return Int2();
+ return Int2;
case INT4:
- return Int4();
+ return Int4;
case INT8:
- return Int8();
+ return Int8;
case FLOAT4:
- return Float4();
+ return Float4;
case FLOAT8:
- return Float8();
+ return Float8;
case DATE:
- return Date();
+ return Date;
case TIME:
- return Time();
+ return Time;
case TIMESTAMP:
- return Timestamp();
+ return Timestamp;
case INTERVAL:
- return Interval();
+ return Interval;
+ case CHAR:
+ return Char(1); // default len = 1
case TEXT:
- return Text();
+ return Text;
case BLOB:
- return Blob();
+ return Blob;
case INET4:
- return Inet4();
+ return Inet4;
+ case RECORD:
+ throw new TajoRuntimeException(new NotImplementedException("record projection"));
case NULL_TYPE:
- return Null();
+ return Null;
case ANY:
- return Any();
+ return Any;
default:
throw new TajoRuntimeException(new UnsupportedException(legacyBaseType.name()));
}
@@ -96,6 +101,21 @@ public class TypeConverter {
}
public static TajoDataTypes.DataType convert(Type type) {
- return CatalogUtil.newSimpleDataType(type.baseType());
+ switch (type.baseType()) {
+ case CHAR:
+ Char charType = (Char) type;
+ return CatalogUtil.newDataTypeWithLen(TajoDataTypes.Type.CHAR, charType.length());
+ case VARCHAR:
+ Varchar varcharType = (Varchar) type;
+ return CatalogUtil.newDataTypeWithLen(TajoDataTypes.Type.VARCHAR, varcharType.length());
+ case PROTOBUF:
+ Protobuf protobuf = (Protobuf) type;
+ return CatalogUtil.newDataType(TajoDataTypes.Type.PROTOBUF, protobuf.getMessageName());
+ case NUMERIC:
+ Numeric numericType = (Numeric) type;
+ return CatalogUtil.newDataTypeWithLen(TajoDataTypes.Type.NUMERIC, numericType.precision());
+ default:
+ return CatalogUtil.newSimpleDataType(type.baseType());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-common/src/main/java/org/apache/tajo/exception/InvalidValueForCastException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidValueForCastException.java b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidValueForCastException.java
index 5baf7c6..6af8d1a 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidValueForCastException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidValueForCastException.java
@@ -6,9 +6,9 @@
* 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
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
* 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.
@@ -21,19 +21,24 @@ package org.apache.tajo.exception;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.error.Errors;
import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
+import org.apache.tajo.type.Type;
public class InvalidValueForCastException extends TajoException {
- private static final long serialVersionUID = -7689027447969916148L;
+ private static final long serialVersionUID = -7689027447969916148L;
- public InvalidValueForCastException(ReturnState state) {
- super(state);
- }
+ public InvalidValueForCastException(ReturnState state) {
+ super(state);
+ }
- public InvalidValueForCastException(TajoDataTypes.DataType src, TajoDataTypes.DataType target) {
- super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.getType().name(), target.getType().name());
- }
+ public InvalidValueForCastException(TajoDataTypes.DataType src, TajoDataTypes.DataType target) {
+ super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.getType().name(), target.getType().name());
+ }
public InvalidValueForCastException(TajoDataTypes.Type src, TajoDataTypes.Type target) {
super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.name(), target.name());
}
+
+ public InvalidValueForCastException(Type src, Type target) {
+ super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.baseType().name(), target.baseType().name());
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-common/src/main/java/org/apache/tajo/type/Int1.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Int1.java b/tajo-common/src/main/java/org/apache/tajo/type/Int1.java
new file mode 100644
index 0000000..9288328
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Int1.java
@@ -0,0 +1,28 @@
+/**
+ * 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.type;
+
+import org.apache.tajo.common.TajoDataTypes;
+
+public class Int1 extends Type {
+ @Override
+ public TajoDataTypes.Type baseType() {
+ return TajoDataTypes.Type.INT1;
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-common/src/main/java/org/apache/tajo/type/Type.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Type.java b/tajo-common/src/main/java/org/apache/tajo/type/Type.java
index e1a7180..fdea07e 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Type.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Type.java
@@ -25,6 +25,24 @@ import java.util.Collection;
public abstract class Type {
+ // No paramter types
+ public static final Any Any = new Any();
+ public static final Null Null = new Null();
+ public static final Bool Bool = new Bool();
+ public static final Int1 Int1 = new Int1();
+ public static final Int2 Int2 = new Int2();
+ public static final Int4 Int4 = new Int4();
+ public static final Int8 Int8 = new Int8();
+ public static final Float4 Float4 = new Float4();
+ public static final Float8 Float8 = new Float8();
+ public static final Date Date = new Date();
+ public static final Time Time = new Time();
+ public static final Timestamp Timestamp = new Timestamp();
+ public static final Interval Interval = new Interval();
+ public static final Text Text = new Text();
+ public static final Blob Blob = new Blob();
+ public static final Inet4 Inet4 = new Inet4();
+
public abstract TajoDataTypes.Type baseType();
public boolean hasParam() {
@@ -42,10 +60,7 @@ public abstract class Type {
@Override
public boolean equals(Object t) {
- if (t instanceof Type) {
- return ((Type)t).baseType() == baseType();
- }
- return false;
+ return t instanceof Type && ((Type)t).baseType() == baseType();
}
@Override
@@ -57,33 +72,7 @@ public abstract class Type {
return this.baseType() == TajoDataTypes.Type.RECORD;
}
- public static Any Any() {
- return Any.INSTANCE;
- }
-
- public static Bool Bool() {
- return new Bool();
- }
-
- public static Int2 Int2() {
- return new Int2();
- }
-
- public static Int4 Int4() {
- return new Int4();
- }
-
- public static Int8 Int8() {
- return new Int8();
- }
-
- public static Float4 Float4() {
- return new Float4();
- }
-
- public static Float8 Float8() {
- return new Float8();
- }
+ public boolean isNull() { return this.baseType() == TajoDataTypes.Type.NULL_TYPE; }
public static int DEFAULT_SCALE = 0;
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java b/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
index 03cc223..a843bd9 100644
--- a/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
+++ b/tajo-common/src/test/java/org/apache/tajo/schema/TestSchema.java
@@ -32,8 +32,8 @@ public class TestSchema {
@Test
public final void testSchema1() {
- NamedType struct1 = Struct($("f12"), Field($("f1"), Int8()), Field($("f2"), Int4()));
- NamedType struct2 = Struct($("f34"), Field($("f3"), Int8()), Field($("f4"), Int4()));
+ NamedType struct1 = Struct($("f12"), Field($("f1"), Int8), Field($("f2"), Int4));
+ NamedType struct2 = Struct($("f34"), Field($("f3"), Int8), Field($("f4"), Int4));
Schema schema = Schema(struct1, struct2);
assertEquals(schema.toString(), "f12 record (f1 int8,f2 int4),f34 record (f3 int8,f4 int4)");
@@ -41,9 +41,9 @@ public class TestSchema {
@Test
public final void testSchema2() {
- NamedType f1 = Field($("x"), Array(Int8()));
- NamedType f2 = Field($("y"), Int8());
- NamedType f3 = Struct($("z"), Field($("z-1"), Time()), Field($("z-2"), Array(Int8())));
+ NamedType f1 = Field($("x"), Array(Int8));
+ NamedType f2 = Field($("y"), Int8);
+ NamedType f3 = Struct($("z"), Field($("z-1"), Time()), Field($("z-2"), Array(Int8)));
Schema schema = Schema(f1, f2, f3);
assertEquals(schema.toString(), "x array<int8>,y int8,z record (z-1 time,z-2 array<int8>)");
@@ -51,9 +51,9 @@ public class TestSchema {
@Test
public final void testSchemaWithIdentifiers() {
- NamedType f1 = Field($("x", "y"), Array(Int8()));
- NamedType f2 = Field($(_("y"), _("B", true)), Int8());
- NamedType f3 = Struct($("z"), Field($("z-1"), Time()), Field($("z-2"), Array(Int8())));
+ NamedType f1 = Field($("x", "y"), Array(Int8));
+ NamedType f2 = Field($(_("y"), _("B", true)), Int8);
+ NamedType f3 = Struct($("z"), Field($("z-1"), Time), Field($("z-2"), Array(Int8)));
Schema schema = Schema(f1, f2, f3);
assertEquals(schema.toString(), "x.y array<int8>,y.'B' int8,z record (z-1 time,z-2 array<int8>)");
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-common/src/test/java/org/apache/tajo/type/TestType.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/type/TestType.java b/tajo-common/src/test/java/org/apache/tajo/type/TestType.java
index 9023af0..910ba0d 100644
--- a/tajo-common/src/test/java/org/apache/tajo/type/TestType.java
+++ b/tajo-common/src/test/java/org/apache/tajo/type/TestType.java
@@ -27,15 +27,16 @@ import static org.junit.Assert.assertEquals;
public class TestType {
@Test
public final void testPrimitiveTypes() {
- assertEquals(Bool().baseType(), BOOLEAN);
- assertEquals(Int2().baseType(), INT2);
- assertEquals(Int4().baseType(), INT4);
- assertEquals(Int8().baseType(), INT8);
- assertEquals(Float4().baseType(), FLOAT4);
- assertEquals(Float8().baseType(), FLOAT8);
- assertEquals(Date().baseType(), DATE);
- assertEquals(Time().baseType(), TIME);
- assertEquals(Timestamp().baseType(), TIMESTAMP);
+ assertEquals(Bool.baseType(), BOOLEAN);
+ assertEquals(Int1.baseType(), INT1);
+ assertEquals(Int2.baseType(), INT2);
+ assertEquals(Int4.baseType(), INT4);
+ assertEquals(Int8.baseType(), INT8);
+ assertEquals(Float4.baseType(), FLOAT4);
+ assertEquals(Float8.baseType(), FLOAT8);
+ assertEquals(Date.baseType(), DATE);
+ assertEquals(Time.baseType(), TIME);
+ assertEquals(Timestamp.baseType(), TIMESTAMP);
Numeric n = Numeric(4, 2);
assertEquals(n.baseType(), NUMERIC);
@@ -52,37 +53,38 @@ public class TestType {
assertEquals(varchar.baseType(), VARCHAR);
assertEquals(varchar.length(), 2);
- Struct struct = Struct(Int8(), Array(Float8()));
+ Struct struct = Struct(Int8, Array(Float8));
assertEquals(struct.baseType(), RECORD);
assertEquals(struct.memberType(0).baseType(), INT8);
assertEquals(struct.memberType(1).baseType(), ARRAY);
- Map map = Map(Int8(), Array(Timestamp()));
+ Map map = Map(Int8, Array(Timestamp()));
assertEquals(map.baseType(), MAP);
assertEquals(map.keyType().baseType(), INT8);
assertEquals(map.valueType().baseType(), ARRAY);
- Array array = Array(Int8());
+ Array array = Array(Int8);
assertEquals(array.baseType(), ARRAY);
assertEquals(array.elementType().baseType(), INT8);
}
@Test
public final void testToString() {
- assertEquals("boolean", Bool().toString());
- assertEquals("int2", Int2().toString());
- assertEquals("int4", Int4().toString());
- assertEquals("int8", Int8().toString());
- assertEquals("float4", Float4().toString());
- assertEquals("float8", Float8().toString());
- assertEquals("date", Date().toString());
- assertEquals("time", Time().toString());
- assertEquals("timestamp", Timestamp().toString());
+ assertEquals("boolean", Bool.toString());
+ assertEquals("int1", Int1.toString());
+ assertEquals("int2", Int2.toString());
+ assertEquals("int4", Int4.toString());
+ assertEquals("int8", Int8.toString());
+ assertEquals("float4", Float4.toString());
+ assertEquals("float8", Float8.toString());
+ assertEquals("date", Date.toString());
+ assertEquals("time", Time.toString());
+ assertEquals("timestamp", Timestamp.toString());
Numeric n = Numeric(4, 2);
assertEquals("numeric(4,2)", n.toString());
- assertEquals("blob", Blob().toString());
+ assertEquals("blob", Blob.toString());
Char c = Char(2);
assertEquals("char(2)", c.toString());
@@ -90,13 +92,13 @@ public class TestType {
Varchar varchar = Varchar(2);
assertEquals("varchar(2)", varchar.toString());
- Struct struct = Struct(Int8(), Array(Float8()));
+ Struct struct = Struct(Int8, Array(Float8));
assertEquals("struct(int8,array<float8>)", struct.toString());
- Map map = Map(Int8(), Array(Timestamp()));
+ Map map = Map(Int8, Array(Timestamp));
assertEquals("map<int8,array<timestamp>>", map.toString());
- Array array = Array(Int8());
+ Array array = Array(Int8);
assertEquals("array<int8>", array.toString());
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
index 61faee6..00fa590 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
@@ -33,7 +33,6 @@ import org.apache.tajo.datum.*;
import org.apache.tajo.engine.codegen.EvalCodeGenerator;
import org.apache.tajo.engine.codegen.TajoClassLoader;
import org.apache.tajo.engine.function.FunctionLoader;
-import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.engine.query.QueryContext;
import org.apache.tajo.exception.TajoException;
import org.apache.tajo.exception.TajoInternalError;
@@ -119,12 +118,6 @@ public class ExprTestBase {
cluster.shutdownCatalogCluster();
}
- private static void assertJsonSerDer(EvalNode expr) {
- String json = CoreGsonHelper.toJson(expr, EvalNode.class);
- EvalNode fromJson = CoreGsonHelper.fromJson(json, EvalNode.class);
- assertEquals(expr, fromJson);
- }
-
public TajoConf getConf() {
return new TajoConf(conf);
}
@@ -175,9 +168,6 @@ public class ExprTestBase {
}
}
for (Target t : targets) {
- assertJsonSerDer(t.getEvalTree());
- }
- for (Target t : targets) {
assertEvalTreeProtoSerDer(context, t.getEvalTree());
}
return targets;
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java
index e74b108..26e0615 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTree.java
@@ -23,16 +23,15 @@ import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.SchemaBuilder;
import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.common.TajoDataTypes.DataType;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.DatumFactory;
-import org.apache.tajo.engine.json.CoreGsonHelper;
import org.apache.tajo.plan.expr.*;
import org.apache.tajo.storage.Tuple;
import org.apache.tajo.storage.VTuple;
+import org.apache.tajo.type.Type;
import org.junit.Test;
-import static org.apache.tajo.common.TajoDataTypes.Type.*;
+import static org.apache.tajo.common.TajoDataTypes.Type.INT4;
import static org.junit.Assert.*;
public class TestEvalTree extends ExprTestBase {
@@ -93,8 +92,8 @@ public class TestEvalTree extends ExprTestBase {
}
@Override
- public DataType getValueType() {
- return CatalogUtil.newSimpleDataType(BOOLEAN);
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
@@ -141,8 +140,8 @@ public class TestEvalTree extends ExprTestBase {
}
@Override
- public DataType getValueType() {
- return CatalogUtil.newSimpleDataType(BOOLEAN);
+ public Type getValueType() {
+ return Type.Bool;
}
@Override
@@ -291,16 +290,16 @@ public class TestEvalTree extends ExprTestBase {
e1 = new ConstEval(DatumFactory.createInt4(9));
e2 = new ConstEval(DatumFactory.createInt4(34));
BinaryEval expr = new BinaryEval(EvalType.PLUS, e1, e2);
- assertEquals(CatalogUtil.newSimpleDataType(INT4), expr.getValueType());
+ assertEquals(Type.Int4, expr.getValueType());
expr = new BinaryEval(EvalType.LTH, e1, e2);
assertTrue(expr.bind(null, null).eval(null).asBool());
- assertEquals(CatalogUtil.newSimpleDataType(BOOLEAN), expr.getValueType());
+ assertEquals(Type.Bool, expr.getValueType());
e1 = new ConstEval(DatumFactory.createFloat8(9.3));
e2 = new ConstEval(DatumFactory.createFloat8(34.2));
expr = new BinaryEval(EvalType.PLUS, e1, e2);
- assertEquals(CatalogUtil.newSimpleDataType(FLOAT8), expr.getValueType());
+ assertEquals(Type.Float8, expr.getValueType());
}
@Test
@@ -334,42 +333,6 @@ public class TestEvalTree extends ExprTestBase {
assertTrue(compExpr1.equals(compExpr2));
}
-
- @Test
- public final void testJson() throws CloneNotSupportedException {
- ConstEval e1;
- ConstEval e2;
-
- // 29 > (34 + 5) + (5 + 34)
- e1 = new ConstEval(DatumFactory.createInt4(34));
- e2 = new ConstEval(DatumFactory.createInt4(5));
- assertCloneEqual(e1);
-
- BinaryEval plus1 = new BinaryEval(EvalType.PLUS, e1, e2);
- assertCloneEqual(plus1);
- BinaryEval plus2 = new BinaryEval(EvalType.PLUS, e2, e1);
- assertCloneEqual(plus2);
- BinaryEval plus3 = new BinaryEval(EvalType.PLUS, plus2, plus1);
- assertCloneEqual(plus3);
-
- ConstEval e3 = new ConstEval(DatumFactory.createInt4(29));
- BinaryEval gth = new BinaryEval(EvalType.GTH, e3, plus3);
- assertCloneEqual(gth);
-
- String json = gth.toJson();
- BinaryEval eval = (BinaryEval) CoreGsonHelper.fromJson(json, EvalNode.class);
- assertCloneEqual(eval);
-
- assertEquals(gth.getType(), eval.getType());
- assertEquals(e3.getType(), eval.getLeftExpr().getType());
- assertEquals(plus3.getType(), eval.getRightExpr().getType());
- assertEquals(plus3.getLeftExpr(), ((BinaryEval)eval.getRightExpr()).getLeftExpr());
- assertEquals(plus3.getRightExpr(), ((BinaryEval) eval.getRightExpr()).getRightExpr());
- assertEquals(plus2.getLeftExpr(), ((BinaryEval)((BinaryEval)eval.getRightExpr()).getLeftExpr()).getLeftExpr());
- assertEquals(plus2.getRightExpr(), ((BinaryEval)((BinaryEval)eval.getRightExpr()).getLeftExpr()).getRightExpr());
- assertEquals(plus1.getLeftExpr(), ((BinaryEval) ((BinaryEval) eval.getRightExpr()).getRightExpr()).getLeftExpr());
- assertEquals(plus1.getRightExpr(), ((BinaryEval) ((BinaryEval) eval.getRightExpr()).getRightExpr()).getRightExpr());
- }
@Test
public final void testBindCheck() {
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
index d1c8384..d01b0d5 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
@@ -187,7 +187,6 @@ public class TestLogicalPlanner {
assertEquals(NodeType.ROOT, plan.getType());
testCloneLogicalNode(plan);
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
assertEquals(NodeType.PROJECTION, root.getChild().getType());
ProjectionNode projNode = root.getChild();
@@ -222,7 +221,6 @@ public class TestLogicalPlanner {
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
testCloneLogicalNode(root);
Schema expectedSchema = SchemaBuilder.builder()
@@ -252,7 +250,6 @@ public class TestLogicalPlanner {
// three relations
expr = sqlAnalyzer.parse(QUERIES[2]);
plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
testCloneLogicalNode(plan);
expectedSchema = SchemaBuilder.builder().addAll(expectedSchema.getRootColumns())
@@ -310,7 +307,6 @@ public class TestLogicalPlanner {
// two relations
Expr context = sqlAnalyzer.parse(JOINS[0]);
LogicalNode plan = planner.createPlan(qc, context).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertSchema(expectedJoinSchema, plan.getOutSchema());
assertEquals(NodeType.ROOT, plan.getType());
@@ -343,7 +339,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(JOINS[1]);
LogicalPlan plan = planner.createPlan(qc, expr);
LogicalNode root = plan.getRootBlock().getRoot();
- testJsonSerDerObject(root);
assertSchema(expectedJoinSchema, root.getOutSchema());
assertEquals(NodeType.ROOT, root.getType());
@@ -376,7 +371,6 @@ public class TestLogicalPlanner {
// two relations
Expr expr = sqlAnalyzer.parse(JOINS[2]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertSchema(expectedJoinSchema, plan.getOutSchema());
assertEquals(NodeType.ROOT, plan.getType());
@@ -414,7 +408,6 @@ public class TestLogicalPlanner {
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
testQuery7(root.getChild());
// with having clause
@@ -452,7 +445,6 @@ public class TestLogicalPlanner {
FileUtil.readTextFile(new File("src/test/resources/queries/TestJoinQuery/testTPCHQ2Join.sql")));
QueryContext qc = createQueryContext();
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
Schema expected = tpch.getOutSchema("q2");
assertSchema(expected, plan.getOutSchema());
}
@@ -513,7 +505,6 @@ public class TestLogicalPlanner {
LogicalPlan plan = planner.createPlan(qc, expr);
LogicalNode node = plan.getRootBlock().getRoot();
- testJsonSerDerObject(node);
Schema expected = tpch.getOutSchema("q2");
assertSchema(expected, node.getOutSchema());
@@ -555,7 +546,6 @@ public class TestLogicalPlanner {
LogicalPlan plan = planner.createPlan(qc,expr);
LogicalNode node = plan.getRootBlock().getRoot();
- testJsonSerDerObject(node);
LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(), catalog, TablespaceManager.getInstance());
optimizer.optimize(plan);
@@ -596,7 +586,6 @@ public class TestLogicalPlanner {
LogicalPlan plan = planner.createPlan(qc, expr);
LogicalNode node = plan.getRootBlock().getRoot();
- testJsonSerDerObject(node);
LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(), catalog, TablespaceManager.getInstance());
optimizer.optimize(plan);
@@ -643,7 +632,6 @@ public class TestLogicalPlanner {
LogicalPlan plan = planner.createPlan(qc, expr);
LogicalNode node = plan.getRootBlock().getRoot();
- testJsonSerDerObject(node);
LogicalOptimizer optimizer = new LogicalOptimizer(util.getConfiguration(), catalog, TablespaceManager.getInstance());
optimizer.optimize(plan);
@@ -736,7 +724,6 @@ public class TestLogicalPlanner {
LogicalNode plan = planner.createPlan(qc, context).getRootBlock().getRoot();
testCloneLogicalNode(plan);
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
@@ -753,7 +740,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[4]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
testCloneLogicalNode(plan);
assertEquals(NodeType.ROOT, plan.getType());
@@ -783,7 +769,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[12]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
testCloneLogicalNode(plan);
assertEquals(NodeType.ROOT, plan.getType());
@@ -804,7 +789,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[5]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
testCloneLogicalNode(plan);
assertEquals(NodeType.ROOT, plan.getType());
@@ -826,33 +810,10 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[6]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
testCloneLogicalNode(plan);
}
@Test
- public final void testJson() throws TajoException {
- QueryContext qc = createQueryContext();
-
- Expr expr = sqlAnalyzer.parse(QUERIES[9]);
- LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
-
- String json = plan.toJson();
- LogicalNode fromJson = CoreGsonHelper.fromJson(json, LogicalNode.class);
- assertEquals(NodeType.ROOT, fromJson.getType());
- LogicalNode project = ((LogicalRootNode)fromJson).getChild();
- assertEquals(NodeType.PROJECTION, project.getType());
- assertEquals(NodeType.HAVING, ((ProjectionNode) project).getChild().getType());
- HavingNode havingNode = ((ProjectionNode) project).getChild();
- assertEquals(NodeType.GROUP_BY, havingNode.getChild().getType());
- GroupbyNode groupbyNode = havingNode.getChild();
- assertEquals(NodeType.SCAN, groupbyNode.getChild().getType());
- LogicalNode scan = groupbyNode.getChild();
- assertEquals(NodeType.SCAN, scan.getType());
- }
-
- @Test
public final void testVisitor() throws TajoException {
QueryContext qc = createQueryContext();
@@ -886,7 +847,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[10]);
LogicalPlan rootNode = planner.createPlan(qc, expr);
LogicalNode plan = rootNode.getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.EXPRS, root.getChild().getType());
@@ -907,7 +867,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(QUERIES[11]);
LogicalPlan rootNode = planner.createPlan(qc, expr);
LogicalNode plan = rootNode.getRootBlock().getRoot();
- testJsonSerDerObject(plan);
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.CREATE_INDEX, root.getChild().getType());
@@ -934,7 +893,6 @@ public class TestLogicalPlanner {
assertEquals(NodeType.ROOT, plan.getType());
testCloneLogicalNode(plan);
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
assertEquals(NodeType.PROJECTION, root.getChild().getType());
ProjectionNode projNode = root.getChild();
@@ -961,7 +919,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(ALIAS[0]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
Schema finalSchema = root.getOutSchema();
Iterator<Column> it = finalSchema.getRootColumns().iterator();
@@ -989,7 +946,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(ALIAS[1]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
Schema finalSchema = root.getOutSchema();
Iterator<Column> it = finalSchema.getRootColumns().iterator();
@@ -1010,7 +966,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(CREATE_TABLE[0]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
LogicalRootNode root = (LogicalRootNode) plan;
- testJsonSerDerObject(root);
assertEquals(NodeType.CREATE_TABLE, root.getChild().getType());
CreateTableNode createTable = root.getChild();
@@ -1095,7 +1050,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(setStatements[0]);
LogicalNode plan = planner.createPlan(qc, expr).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.UNION, root.getChild().getType());
@@ -1116,7 +1070,6 @@ public class TestLogicalPlanner {
Expr context = sqlAnalyzer.parse(setQualifiers[0]);
LogicalNode plan = planner.createPlan(qc, context).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.PROJECTION, root.getChild().getType());
@@ -1125,7 +1078,6 @@ public class TestLogicalPlanner {
context = sqlAnalyzer.parse(setQualifiers[1]);
plan = planner.createPlan(qc, context).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
root = (LogicalRootNode) plan;
assertEquals(NodeType.PROJECTION, root.getChild().getType());
@@ -1134,19 +1086,12 @@ public class TestLogicalPlanner {
context = sqlAnalyzer.parse(setQualifiers[2]);
plan = planner.createPlan(qc, context).getRootBlock().getRoot();
- testJsonSerDerObject(plan);
root = (LogicalRootNode) plan;
assertEquals(NodeType.PROJECTION, root.getChild().getType());
projectionNode = root.getChild();
assertEquals(NodeType.SCAN, projectionNode.getChild().getType());
}
- public void testJsonSerDerObject(LogicalNode rootNode) {
- String json = rootNode.toJson();
- LogicalNode fromJson = CoreGsonHelper.fromJson(json, LogicalNode.class);
- assertTrue("JSON (de) serialization equivalence check", rootNode.deepEquals(fromJson));
- }
-
// Table descriptions
//
// employee (name text, empid int4, deptname text)
@@ -1275,7 +1220,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(sql);
LogicalPlan rootNode = planner.createPlan(qc, expr);
LogicalNode plan = rootNode.getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.ALTER_TABLE, root.getChild().getType());
@@ -1341,7 +1285,6 @@ public class TestLogicalPlanner {
Expr expr = sqlAnalyzer.parse(ALTER_PARTITIONS[0]);
LogicalPlan rootNode = planner.createPlan(qc, expr);
LogicalNode plan = rootNode.getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
LogicalRootNode root = (LogicalRootNode) plan;
assertEquals(NodeType.ALTER_TABLE, root.getChild().getType());
@@ -1365,7 +1308,6 @@ public class TestLogicalPlanner {
expr = sqlAnalyzer.parse(ALTER_PARTITIONS[1]);
rootNode = planner.createPlan(qc, expr);
plan = rootNode.getRootBlock().getRoot();
- testJsonSerDerObject(plan);
assertEquals(NodeType.ROOT, plan.getType());
root = (LogicalRootNode) plan;
assertEquals(NodeType.ALTER_TABLE, root.getChild().getType());
@@ -1407,12 +1349,10 @@ public class TestLogicalPlanner {
LogicalNode node = logicalPlan.getRootNode();
assertEquals(NodeType.ROOT, node.getType());
LogicalRootNode root = (LogicalRootNode) node;
- testJsonSerDerObject(root);
testCloneLogicalNode(root);
assertEquals(NodeType.PROJECTION, root.getChild().getType());
ProjectionNode projectionNode = root.getChild();
- testJsonSerDerObject(projectionNode);
testCloneLogicalNode(projectionNode);
// projection column test
@@ -1462,12 +1402,10 @@ public class TestLogicalPlanner {
LogicalNode node = logicalPlan.getRootNode();
assertEquals(NodeType.ROOT, node.getType());
LogicalRootNode root = (LogicalRootNode) node;
- testJsonSerDerObject(root);
testCloneLogicalNode(root);
assertEquals(NodeType.PROJECTION, root.getChild().getType());
ProjectionNode projectionNode = root.getChild();
- testJsonSerDerObject(projectionNode);
testCloneLogicalNode(projectionNode);
// projection column test
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenContext.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenContext.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenContext.java
index ca3466b..0dea104 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenContext.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenContext.java
@@ -116,7 +116,7 @@ public class EvalCodeGenContext extends TajoGeneratorAdapter {
if (entry.getKey().getType() == EvalType.CONST) {
ConstEval constEval = (ConstEval) entry.getKey();
- if (constEval.getValueType().getType() == TajoDataTypes.Type.INTERVAL) {
+ if (constEval.getValueType().baseType() == TajoDataTypes.Type.INTERVAL) {
IntervalDatum datum = (IntervalDatum) constEval.getValue();
final String internalName = TajoGeneratorAdapter.getInternalName(IntervalDatum.class);
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenerator.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenerator.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenerator.java
index 1bf0d57..5ee6d82 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenerator.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/EvalCodeGenerator.java
@@ -20,7 +20,6 @@ package org.apache.tajo.engine.codegen;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.datum.IntervalDatum;
import org.apache.tajo.datum.ProtobufDatum;
@@ -36,7 +35,6 @@ import java.io.PrintStream;
import java.lang.reflect.Constructor;
import java.util.Stack;
-import static org.apache.tajo.common.TajoDataTypes.DataType;
import static org.apache.tajo.engine.codegen.TajoGeneratorAdapter.getDescription;
import static org.apache.tajo.plan.expr.FunctionEval.ParamType;
@@ -172,7 +170,7 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
context.emitNullityCheck(ifNull);
SignedEval signed = (SignedEval) unary;
- switch (signed.getValueType().getType()) {
+ switch (signed.getValueType().baseType()) {
case BOOLEAN:
case CHAR:
case INT1:
@@ -322,8 +320,8 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
}
public EvalNode visitCast(EvalCodeGenContext context, Stack<EvalNode> stack, CastEval cast) {
- DataType srcType = cast.getOperand().getValueType();
- DataType targetType = cast.getValueType();
+ org.apache.tajo.type.Type srcType = cast.getOperand().getValueType();
+ org.apache.tajo.type.Type targetType = cast.getValueType();
if (srcType.equals(targetType)) {
visit(context, cast.getChild(), stack);
@@ -351,7 +349,7 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
public EvalNode visitField(EvalCodeGenContext context, FieldEval field, Stack<EvalNode> stack) {
- if (field.getValueType().getType() == TajoDataTypes.Type.NULL_TYPE) {
+ if (field.getValueType().isNull()) {
context.pushNullOfThreeValuedLogic();
context.pushNullFlag(false);
} else {
@@ -377,7 +375,7 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
String methodName = null;
Class returnType = null;
Class [] paramTypes = null;
- switch (field.getValueType().getType()) {
+ switch (field.getValueType().baseType()) {
case BOOLEAN:
methodName = "getByte";
returnType = byte.class;
@@ -480,8 +478,8 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
return evalNode;
}
- public static int store(EvalCodeGenContext context, DataType type, int idx) {
- switch (type.getType()) {
+ public static int store(EvalCodeGenContext context, org.apache.tajo.type.Type type, int idx) {
+ switch (type.baseType()) {
case NULL_TYPE:
case BOOLEAN:
case CHAR:
@@ -536,10 +534,10 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
public EvalNode visitComparisonEval(EvalCodeGenContext context, BinaryEval evalNode, Stack<EvalNode> stack)
throws CompilationError {
- DataType lhsType = evalNode.getLeftExpr().getValueType();
- DataType rhsType = evalNode.getRightExpr().getValueType();
+ org.apache.tajo.type.Type lhsType = evalNode.getLeftExpr().getValueType();
+ org.apache.tajo.type.Type rhsType = evalNode.getRightExpr().getValueType();
- if (lhsType.getType() == TajoDataTypes.Type.NULL_TYPE || rhsType.getType() == TajoDataTypes.Type.NULL_TYPE) {
+ if (lhsType.isNull() || rhsType.isNull()) {
context.pushNullOfThreeValuedLogic();
context.pushNullFlag(false);
} else {
@@ -644,7 +642,7 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
@Override
public EvalNode visitConst(EvalCodeGenContext context, ConstEval constEval, Stack<EvalNode> stack) {
- switch (constEval.getValueType().getType()) {
+ switch (constEval.getValueType().baseType()) {
case NULL_TYPE:
if (stack.isEmpty()) {
@@ -697,11 +695,10 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
emitGetField(context, context.owner, context.symbols.get(constEval), IntervalDatum.class);
break;
default:
- throw new UnsupportedOperationException(constEval.getValueType().getType().name() +
- " const type is not supported");
+ throw new UnsupportedOperationException(constEval.getValueType() + " const type is not supported");
}
- context.pushNullFlag(constEval.getValueType().getType() != TajoDataTypes.Type.NULL_TYPE);
+ context.pushNullFlag(!constEval.getValueType().isNull());
return constEval;
}
@@ -709,7 +706,7 @@ public class EvalCodeGenerator extends SimpleEvalNodeVisitor<EvalCodeGenContext>
ParamType[] paramTypes = new ParamType[arguments.length];
for (int i = 0; i < arguments.length; i++) {
if (arguments[i].getType() == EvalType.CONST) {
- if (arguments[i].getValueType().getType() == TajoDataTypes.Type.NULL_TYPE) {
+ if (arguments[i].getValueType().isNull()) {
paramTypes[i] = ParamType.NULL;
} else {
paramTypes[i] = ParamType.CONSTANT;
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/engine/codegen/ScalarFunctionBindingEmitter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/ScalarFunctionBindingEmitter.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/ScalarFunctionBindingEmitter.java
index b33a7c4..9f022ce 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/ScalarFunctionBindingEmitter.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/ScalarFunctionBindingEmitter.java
@@ -26,6 +26,7 @@ import org.apache.tajo.org.objectweb.asm.Label;
import org.apache.tajo.org.objectweb.asm.Opcodes;
import org.apache.tajo.plan.expr.EvalNode;
import org.apache.tajo.plan.expr.FunctionEval;
+import org.apache.tajo.type.Type;
import java.util.Stack;
@@ -114,7 +115,7 @@ public class ScalarFunctionBindingEmitter {
}
}
- private static void emitFunctionReturnValue(EvalCodeGenContext context, TajoDataTypes.DataType returnType,
+ private static void emitFunctionReturnValue(EvalCodeGenContext context, Type returnType,
StaticMethodInvocationDesc method) {
if (FunctionUtil.isNullableParam(method.getReturnClass())) {
Label ifNull = new Label();
@@ -145,7 +146,7 @@ public class ScalarFunctionBindingEmitter {
context.istore(nullFlagId);
}
- private static void emitBoxedParameter(EvalCodeGenContext context, TajoDataTypes.DataType dataType) {
+ private static void emitBoxedParameter(EvalCodeGenContext context, Type dataType) {
Label ifNull = new Label();
Label afterAll = new Label();
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
index b1a15ae..8a958bb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
@@ -33,6 +33,7 @@ import org.apache.tajo.org.objectweb.asm.commons.GeneratorAdapter;
import org.apache.tajo.org.objectweb.asm.commons.TableSwitchGenerator;
import org.apache.tajo.plan.expr.EvalNode;
import org.apache.tajo.plan.expr.EvalType;
+import org.apache.tajo.type.Char;
import org.apache.tajo.util.TUtil;
import org.apache.tajo.util.datetime.DateTimeUtil;
@@ -160,13 +161,14 @@ class TajoGeneratorAdapter {
generatorAdapter = new GeneratorAdapter(methodVisitor, access, name, desc);
}
- public static boolean isJVMInternalInt(TajoDataTypes.DataType dataType) {
- TajoDataTypes.Type type = dataType.getType();
- return type == BOOLEAN || type == INT1 || type == INT2 || type == INT4 || type== INET4;
+ public static boolean isJVMInternalInt(org.apache.tajo.type.Type type) {
+ final TajoDataTypes.Type baseType = type.baseType();
+ return baseType == BOOLEAN || baseType == INT1 || baseType == INT2 || baseType == INT4 || baseType== INET4;
}
- public static int getWordSize(TajoDataTypes.DataType type) {
- if (type.getType() == INT8 || type.getType() == FLOAT8 || type.getType() == TIMESTAMP || type.getType() == TIME) {
+ public static int getWordSize(org.apache.tajo.type.Type type) {
+ final TajoDataTypes.Type baseType = type.baseType();
+ if (baseType == INT8 || baseType == FLOAT8 || baseType == TIMESTAMP || baseType == TIME) {
return 2;
} else {
return 1;
@@ -220,9 +222,9 @@ class TajoGeneratorAdapter {
methodvisitor.visitLdcInsn(value);
}
- public void ifCmp(TajoDataTypes.DataType dataType, EvalType evalType, Label elseLabel) {
+ public void ifCmp(org.apache.tajo.type.Type type, EvalType evalType, Label elseLabel) {
- if (isJVMInternalInt(dataType)) {
+ if (isJVMInternalInt(type)) {
switch (evalType) {
case EQUAL:
methodvisitor.visitJumpInsn(Opcodes.IF_ICMPNE, elseLabel);
@@ -247,10 +249,10 @@ class TajoGeneratorAdapter {
}
} else {
- if (dataType.getType() == TEXT) {
+ if (type.baseType() == TEXT) {
invokeVirtual(String.class, "compareTo", int.class, new Class[]{String.class});
} else {
- int opCode = TajoGeneratorAdapter.getOpCode(evalType, dataType);
+ int opCode = TajoGeneratorAdapter.getOpCode(evalType, type);
methodvisitor.visitInsn(opCode);
}
@@ -279,8 +281,8 @@ class TajoGeneratorAdapter {
}
}
- public void load(TajoDataTypes.DataType dataType, int idx) {
- switch (dataType.getType()) {
+ public void load(org.apache.tajo.type.Type type, int idx) {
+ switch (type.baseType()) {
case NULL_TYPE:
case BOOLEAN:
case CHAR:
@@ -305,7 +307,7 @@ class TajoGeneratorAdapter {
methodvisitor.visitVarInsn(Opcodes.ALOAD, idx);
break;
default:
- throw new CompilationError("Unknown data type: " + dataType.getType().name());
+ throw new CompilationError("Unknown data type: " + type);
}
}
@@ -398,20 +400,22 @@ class TajoGeneratorAdapter {
emitNullityCheck(ifNull);
}
- public void pushDummyValue(TajoDataTypes.DataType type) {
- if (type.getType() == NULL_TYPE) {
+ public void pushDummyValue(org.apache.tajo.type.Type type) {
+ TajoDataTypes.Type baseType = type.baseType();
+
+ if (type.isNull()) {
pushNullOfThreeValuedLogic();
- } else if (isJVMInternalInt(type) || type.getType() == DATE) {
+ } else if (isJVMInternalInt(type) || baseType == DATE) {
push(0);
- } else if (type.getType() == TajoDataTypes.Type.INT8 || type.getType() == TIMESTAMP || type.getType() == TIME) {
+ } else if (baseType == INT8 || baseType == TIMESTAMP || baseType == TIME) {
push(0L);
- } else if (type.getType() == TajoDataTypes.Type.FLOAT8) {
+ } else if (baseType == FLOAT8) {
push(0.0d);
- } else if (type.getType() == TajoDataTypes.Type.FLOAT4) {
+ } else if (baseType == FLOAT4) {
push(0.0f);
- } else if (type.getType() == TajoDataTypes.Type.CHAR || type.getType() == TajoDataTypes.Type.TEXT) {
+ } else if (baseType == CHAR || baseType == TEXT) {
push("");
- } else if (type.getType() == INTERVAL || type.getType() == PROTOBUF) {
+ } else if (baseType == INTERVAL || baseType == PROTOBUF) {
invokeStatic(NullDatum.class, "get", NullDatum.class, new Class[]{});
} else {
assert false;
@@ -443,25 +447,26 @@ class TajoGeneratorAdapter {
getMethodDescription(returnType, paramTypes));
}
- public static boolean isPrimitiveOpCode(EvalType evalType, TajoDataTypes.DataType returnType) {
- return TUtil.containsInNestedMap(OpCodesMap, evalType, returnType.getType());
+ public static boolean isPrimitiveOpCode(EvalType evalType, org.apache.tajo.type.Type returnType) {
+ return TUtil.containsInNestedMap(OpCodesMap, evalType, returnType.baseType());
}
- public static int getOpCode(EvalType evalType, TajoDataTypes.DataType returnType) {
+ public static int getOpCode(EvalType evalType, org.apache.tajo.type.Type returnType) {
if (!isPrimitiveOpCode(evalType, returnType)) {
- throw new CompilationError("No Such OpCode for " + evalType + " returning " + returnType.getType().name());
+ throw new CompilationError("No Such OpCode for " + evalType + " returning " + returnType);
}
- return TUtil.getFromNestedMap(OpCodesMap, evalType, returnType.getType());
+ return TUtil.getFromNestedMap(OpCodesMap, evalType, returnType.baseType());
}
- public void castInsn(TajoDataTypes.DataType srcType, TajoDataTypes.DataType targetType) {
- TajoDataTypes.Type srcRawType = srcType.getType();
- TajoDataTypes.Type targetRawType = targetType.getType();
- switch(srcRawType) {
+ public void castInsn(org.apache.tajo.type.Type srcType, org.apache.tajo.type.Type targetType) {
+ TajoDataTypes.Type srcBaseType = srcType.baseType();
+ TajoDataTypes.Type targetBaseType = targetType.baseType();
+ switch(srcBaseType) {
case BOOLEAN:
case CHAR: {
- if (srcType.hasLength() && srcType.getLength() == 1) {
- switch (targetType.getType()) {
+ Char srcCharType = (Char) srcType;
+ if (srcCharType.length() == 1) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -474,7 +479,7 @@ class TajoGeneratorAdapter {
throw new TajoRuntimeException(new InvalidValueForCastException(srcType, targetType));
}
} else {
- switch (targetRawType) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -491,7 +496,7 @@ class TajoGeneratorAdapter {
case INT1:
case INT2:
case INT4:
- switch (targetType.getType()) {
+ switch (targetBaseType) {
case CHAR:
case INT1: methodvisitor.visitInsn(Opcodes.I2C); break;
case INT2: methodvisitor.visitInsn(Opcodes.I2S); break;
@@ -504,7 +509,7 @@ class TajoGeneratorAdapter {
}
break;
case INT8:
- switch (targetRawType) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -517,7 +522,7 @@ class TajoGeneratorAdapter {
}
break;
case FLOAT4:
- switch (targetRawType) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -530,7 +535,7 @@ class TajoGeneratorAdapter {
}
break;
case FLOAT8:
- switch (targetRawType) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -543,7 +548,7 @@ class TajoGeneratorAdapter {
}
break;
case TEXT:
- switch (targetRawType) {
+ switch (targetBaseType) {
case CHAR:
case INT1:
case INT2:
@@ -582,7 +587,7 @@ class TajoGeneratorAdapter {
return clazz.getName().replace('.', '/');
}
- public void convertToPrimitive(TajoDataTypes.DataType type) {
+ public void convertToPrimitive(org.apache.tajo.type.Type type) {
Label ifNull = new Label();
Label afterAll = new Label();
@@ -595,7 +600,7 @@ class TajoGeneratorAdapter {
methodvisitor.visitJumpInsn(Opcodes.IFEQ, ifNull); // datum
aload(datum);
- switch (type.getType()) {
+ switch (type.baseType()) {
case BOOLEAN:
case INT1:
case INT2:
@@ -634,11 +639,11 @@ class TajoGeneratorAdapter {
methodvisitor.visitLabel(afterAll);
}
- public void convertToDatum(TajoDataTypes.DataType type, boolean castToDatum) {
+ public void convertToDatum(org.apache.tajo.type.Type type, boolean castToDatum) {
String convertMethod;
Class returnType;
Class [] paramTypes;
- switch (type.getType()) {
+ switch (type.baseType()) {
case NULL_TYPE:
pop(); // pop null flag
pop(type); // pop null datum
@@ -716,7 +721,7 @@ class TajoGeneratorAdapter {
paramTypes = new Class[] {int.class};
break;
default:
- throw new RuntimeException("Unsupported type: " + type.getType().name());
+ throw new RuntimeException("Unsupported type: " + type);
}
Label ifNull = new Label();
@@ -738,7 +743,7 @@ class TajoGeneratorAdapter {
}
}
- public void pop(TajoDataTypes.DataType type) {
+ public void pop(org.apache.tajo.type.Type type) {
if (getWordSize(type) == 2) {
methodvisitor.visitInsn(Opcodes.POP2);
} else {
@@ -886,11 +891,11 @@ class TajoGeneratorAdapter {
return varId;
}
- public int store(TajoDataTypes.DataType type) {
+ public int store(org.apache.tajo.type.Type type) {
int varId = nextVarId;
nextVarId += TajoGeneratorAdapter.getWordSize(type);
- switch (type.getType()) {
+ switch (type.baseType()) {
case NULL_TYPE:
case BOOLEAN:
case CHAR:
@@ -916,14 +921,14 @@ class TajoGeneratorAdapter {
methodvisitor.visitVarInsn(Opcodes.ASTORE, varId);
break;
default:
- throw new CompilationError("Unknown data type: " + type.getType().name());
+ throw new CompilationError("Unknown data type: " + type);
}
return varId;
}
- public void emitBoxing(EvalCodeGenContext context, TajoDataTypes.DataType dataType) {
- switch (dataType.getType()) {
+ public void emitBoxing(EvalCodeGenContext context, org.apache.tajo.type.Type type) {
+ switch (type.baseType()) {
case CHAR:
case TEXT:
@@ -944,12 +949,12 @@ class TajoGeneratorAdapter {
break;
default:
- throw new RuntimeException(dataType.getType().name() + " is not supported yet");
+ throw new RuntimeException(type + " is not supported yet");
}
}
- public void emitUnboxing(EvalCodeGenContext context, TajoDataTypes.DataType dataType) {
- switch (dataType.getType()) {
+ public void emitUnboxing(EvalCodeGenContext context, org.apache.tajo.type.Type type) {
+ switch (type.baseType()) {
case CHAR:
case TEXT:
@@ -970,7 +975,7 @@ class TajoGeneratorAdapter {
break;
default:
- throw new RuntimeException(dataType.getType().name() + " is not supported yet");
+ throw new RuntimeException(type + " is not supported yet");
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/engine/codegen/VariablesPreBuilder.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/VariablesPreBuilder.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/VariablesPreBuilder.java
index 95ec371..9d0f9d0 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/VariablesPreBuilder.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/VariablesPreBuilder.java
@@ -55,9 +55,9 @@ class VariablesPreBuilder extends SimpleEvalNodeVisitor<EvalCodeGenContext> {
@Override
public EvalNode visitConst(EvalCodeGenContext context, ConstEval constEval, Stack<EvalNode> stack) {
- if (constEval.getValueType().getType() == TajoDataTypes.Type.INTERVAL) {
+ if (constEval.getValueType().baseType() == TajoDataTypes.Type.INTERVAL) {
if (!context.symbols.containsKey(constEval)) {
- String fieldName = constEval.getValueType().getType().name() + "_" + context.seqId++;
+ String fieldName = constEval.getValueType().baseType().name() + "_" + context.seqId++;
context.symbols.put(constEval, fieldName);
context.classWriter.visitField(Opcodes.ACC_PRIVATE, fieldName,
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 463d015..cdab04f 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
@@ -349,13 +349,13 @@ public class GlobalPlanner {
private AggregationFunctionCallEval createSumFunction(EvalNode[] args) throws TajoException {
FunctionDesc functionDesc = null;
functionDesc = getCatalog().getFunction("sum", CatalogProtos.FunctionType.AGGREGATION,
- args[0].getValueType());
+ TypeConverter.convert(args[0].getValueType()));
return new AggregationFunctionCallEval(functionDesc, args);
}
private AggregationFunctionCallEval createCountFunction(EvalNode [] args) throws TajoException {
FunctionDesc functionDesc = getCatalog().getFunction("count", CatalogProtos.FunctionType.AGGREGATION,
- args[0].getValueType());
+ TypeConverter.convert(args[0].getValueType()));
return new AggregationFunctionCallEval(functionDesc, args);
}
@@ -367,13 +367,13 @@ public class GlobalPlanner {
private AggregationFunctionCallEval createMaxFunction(EvalNode [] args) throws TajoException {
FunctionDesc functionDesc = getCatalog().getFunction("max", CatalogProtos.FunctionType.AGGREGATION,
- args[0].getValueType());
+ TypeConverter.convert(args[0].getValueType()));
return new AggregationFunctionCallEval(functionDesc, args);
}
private AggregationFunctionCallEval createMinFunction(EvalNode [] args) throws TajoException {
FunctionDesc functionDesc = getCatalog().getFunction("min", CatalogProtos.FunctionType.AGGREGATION,
- args[0].getValueType());
+ TypeConverter.convert(args[0].getValueType()));
return new AggregationFunctionCallEval(functionDesc, args);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-core/src/main/java/org/apache/tajo/worker/ExecutionBlockSharedResource.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/worker/ExecutionBlockSharedResource.java b/tajo-core/src/main/java/org/apache/tajo/worker/ExecutionBlockSharedResource.java
index d55c4ba..660f875 100644
--- a/tajo-core/src/main/java/org/apache/tajo/worker/ExecutionBlockSharedResource.java
+++ b/tajo-core/src/main/java/org/apache/tajo/worker/ExecutionBlockSharedResource.java
@@ -32,6 +32,7 @@ import org.apache.tajo.engine.utils.CacheHolder;
import org.apache.tajo.engine.utils.TableCache;
import org.apache.tajo.engine.utils.TableCacheKey;
import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.UnsupportedException;
import org.apache.tajo.plan.expr.EvalNode;
import org.apache.tajo.plan.logical.LogicalNode;
import org.apache.tajo.util.Pair;
@@ -58,7 +59,6 @@ public class ExecutionBlockSharedResource {
if (!initializing.getAndSet(true)) {
try {
ExecutionBlockSharedResource.this.context = context;
- initPlan(planJson);
initCodeGeneration();
resourceInitSuccess = true;
} catch (Throwable t) {
@@ -72,10 +72,6 @@ public class ExecutionBlockSharedResource {
}
}
- private void initPlan(String planJson) {
- plan = CoreGsonHelper.fromJson(planJson, LogicalNode.class);
- }
-
private void initCodeGeneration() throws TajoException {
if (context.getBool(SessionVars.CODEGEN)) {
codeGenEnabled = true;
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 8107c72..e87d33b 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
@@ -23,17 +23,10 @@ import org.apache.commons.collections.set.UnmodifiableSet;
import org.apache.tajo.OverridableConf;
import org.apache.tajo.SessionVars;
import org.apache.tajo.algebra.*;
-import org.apache.tajo.catalog.CatalogService;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.exception.UndefinedFunctionException;
+import org.apache.tajo.catalog.*;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.datum.*;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.exception.NotImplementedException;
-import org.apache.tajo.exception.UnsupportedException;
+import org.apache.tajo.exception.*;
import org.apache.tajo.plan.algebra.BaseAlgebraVisitor;
import org.apache.tajo.plan.expr.*;
import org.apache.tajo.plan.logical.NodeType;
@@ -52,6 +45,7 @@ import java.util.TimeZone;
import static org.apache.tajo.algebra.WindowSpec.WindowFrameEndBoundType;
import static org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType;
+import static org.apache.tajo.catalog.TypeConverter.convert;
import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType;
import static org.apache.tajo.common.TajoDataTypes.DataType;
import static org.apache.tajo.common.TajoDataTypes.Type;
@@ -115,8 +109,8 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
* @return a pair including left/right hand side terms
*/
private static Pair<EvalNode, EvalNode> convertTypesIfNecessary(Context ctx, EvalNode lhs, EvalNode rhs) {
- Type lhsType = lhs.getValueType().getType();
- Type rhsType = rhs.getValueType().getType();
+ Type lhsType = lhs.getValueType().baseType();
+ Type rhsType = rhs.getValueType().baseType();
// If one of both is NULL, it just returns the original types without casting.
if (lhsType == Type.NULL_TYPE || rhsType == Type.NULL_TYPE) {
@@ -148,11 +142,11 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
private static EvalNode convertType(Context ctx, EvalNode evalNode, DataType toType) {
// if original and toType is the same, we don't need type conversion.
- if (evalNode.getValueType().equals(toType)) {
+ if (evalNode.getValueType().equals(TypeConverter.convert(toType))) {
return evalNode;
}
// the conversion to null is not allowed.
- if (evalNode.getValueType().getType() == Type.NULL_TYPE || toType.getType() == Type.NULL_TYPE) {
+ if (evalNode.getValueType().isNull() || toType.getType() == Type.NULL_TYPE) {
return evalNode;
}
@@ -314,7 +308,10 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
stack.pop();
// implicit type conversion
- DataType widestType = CatalogUtil.getWidestType(predicand.getValueType(), begin.getValueType(), end.getValueType());
+ DataType widestType = CatalogUtil.getWidestType(
+ convert(predicand.getValueType()),
+ convert(begin.getValueType()),
+ convert(end.getValueType()));
BetweenPredicateEval betweenEval = new BetweenPredicateEval(
between.isNot(),
@@ -343,13 +340,15 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
}
// Getting the widest type from all if-then expressions and else expression.
- DataType widestType = caseWhenEval.getIfThenEvals().get(0).getResult().getValueType();
+ DataType widestType = convert(caseWhenEval.getIfThenEvals().get(0).getResult().getValueType());
for (int i = 1; i < caseWhenEval.getIfThenEvals().size(); i++) {
- widestType = CatalogUtil.getWidestType(caseWhenEval.getIfThenEvals().get(i).getResult().getValueType(),
+ widestType = CatalogUtil.getWidestType(
+ convert(caseWhenEval.getIfThenEvals().get(i).getResult().getValueType()),
widestType);
}
if (caseWhen.hasElseResult()) {
- widestType = CatalogUtil.getWidestType(widestType, caseWhenEval.getElse().getValueType());
+ widestType = CatalogUtil.getWidestType(
+ widestType, convert(caseWhenEval.getElse().getValueType()));
}
assertEval(widestType != null, "Invalid Type Conversion for CaseWhen");
@@ -437,10 +436,10 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
EvalNode rhs = visit(ctx, stack, expr.getRight());
stack.pop();
- if (lhs.getValueType().getType() != Type.TEXT) {
+ if (lhs.getValueType().baseType() != Type.TEXT) {
lhs = convertType(ctx, lhs, CatalogUtil.newSimpleDataType(Type.TEXT));
}
- if (rhs.getValueType().getType() != Type.TEXT) {
+ if (rhs.getValueType().baseType() != Type.TEXT) {
rhs = convertType(ctx, rhs, CatalogUtil.newSimpleDataType(Type.TEXT));
}
@@ -585,7 +584,7 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
for (int i = 0; i < params.length; i++) {
givenArgs[i] = visit(ctx, stack, params[i]);
- paramTypes[i] = givenArgs[i].getValueType();
+ paramTypes[i] = TypeConverter.convert(givenArgs[i].getValueType());
}
stack.pop(); // <--- Pop
@@ -662,7 +661,7 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
if (setFunction.getSignature().equalsIgnoreCase("count")) {
paramTypes[0] = CatalogUtil.newSimpleDataType(Type.ANY);
} else {
- paramTypes[0] = givenArgs[0].getValueType();
+ paramTypes[0] = TypeConverter.convert(givenArgs[0].getValueType());
}
if (!catalog.containFunction(setFunction.getSignature(), functionType, paramTypes)) {
@@ -719,11 +718,11 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
} else if (windowFunc.getSignature().equalsIgnoreCase("row_number")) {
paramTypes[0] = CatalogUtil.newSimpleDataType(Type.INT8);
} else {
- paramTypes[0] = givenArgs[0].getValueType();
+ paramTypes[0] = convert(givenArgs[0].getValueType());
}
for (int i = 1; i < params.length; i++) {
givenArgs[i] = visit(ctx, stack, params[i]);
- paramTypes[i] = givenArgs[i].getValueType();
+ paramTypes[i] = convert(givenArgs[i].getValueType());
}
} else {
if (windowFunc.getSignature().equalsIgnoreCase("rank")) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
index 9176c2f..f74e16f 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
@@ -577,7 +577,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
public static void prohibitNestedRecordProjection(Projectable projectable)
throws TajoException {
for (Target t : projectable.getTargets()) {
- if (t.getEvalTree().getValueType().getType() == TajoDataTypes.Type.RECORD) {
+ if (t.getEvalTree().getValueType().isStruct()) {
throw new NotImplementedException("record field projection");
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/NamedExprsManager.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/NamedExprsManager.java b/tajo-plan/src/main/java/org/apache/tajo/plan/NamedExprsManager.java
index 6ad9d70..53f2610 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/NamedExprsManager.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/NamedExprsManager.java
@@ -34,6 +34,8 @@ import org.apache.tajo.util.TUtil;
import java.util.*;
+import static org.apache.tajo.catalog.TypeConverter.convert;
+
/**
* NamedExprsManager manages an expressions used in a query block. All expressions used in a query block must be
* added to NamedExprsManager. When an expression is added to NamedExprsManager, NamedExprsManager gives a reference
@@ -313,14 +315,14 @@ public class NamedExprsManager {
// But, if this reference name is not primary name, it cannot use the reference name.
// It changes the given reference name to the primary name.
if (evalNode.getType() != EvalType.CONST && isEvaluated(normalized) && !isPrimaryName(refId, referenceName)) {
- return new Target(new FieldEval(getPrimaryName(refId),evalNode.getValueType()), referenceName);
+ return new Target(new FieldEval(getPrimaryName(refId), convert(evalNode.getValueType())), referenceName);
}
EvalNode referredEval;
if (evalNode.getType() == EvalType.CONST) {
referredEval = evalNode;
} else {
- referredEval = new FieldEval(idToNamesMap.get(refId).get(0), evalNode.getValueType());
+ referredEval = new FieldEval(idToNamesMap.get(refId).get(0), convert(evalNode.getValueType()));
}
return new Target(referredEval, referenceName);
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
index 1ff297f..9fc5c0d 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
@@ -25,18 +25,20 @@ import org.apache.tajo.catalog.CatalogService;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.exception.UndefinedFunctionException;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.exception.TajoException;
import org.apache.tajo.exception.TajoInternalError;
+import org.apache.tajo.exception.UndefinedFunctionException;
import org.apache.tajo.function.FunctionUtil;
import org.apache.tajo.plan.nameresolver.NameResolver;
import org.apache.tajo.plan.nameresolver.NameResolvingMode;
import org.apache.tajo.plan.visitor.SimpleAlgebraVisitor;
+import org.apache.tajo.type.Type;
import java.util.Stack;
+import static org.apache.tajo.catalog.TypeConverter.convert;
import static org.apache.tajo.common.TajoDataTypes.DataType;
import static org.apache.tajo.common.TajoDataTypes.Type.BOOLEAN;
import static org.apache.tajo.common.TajoDataTypes.Type.NULL_TYPE;
@@ -81,24 +83,24 @@ public class TypeDeterminant extends SimpleAlgebraVisitor<LogicalPlanner.PlanCon
DataType lhsType = visit(ctx, stack, expr.getLeft());
DataType rhsType = visit(ctx, stack, expr.getRight());
stack.pop();
- return computeBinaryType(expr.getType(), lhsType, rhsType);
+ return convert(computeBinaryType(expr.getType(), convert(lhsType), convert(rhsType)));
}
- public DataType computeBinaryType(OpType type, DataType lhsDataType, DataType rhsDataType) throws TajoException {
+ public Type computeBinaryType(OpType type, Type lhsDataType, Type rhsDataType) throws TajoException {
Preconditions.checkNotNull(type);
Preconditions.checkNotNull(lhsDataType);
Preconditions.checkNotNull(rhsDataType);
if(OpType.isLogicalType(type) || OpType.isComparisonType(type)) {
- return BOOL_TYPE;
+ return Type.Bool;
} else if (OpType.isArithmeticType(type)) {
return DataTypeUtil.determineType(lhsDataType, rhsDataType);
} else if (type == OpType.Concatenate) {
- return CatalogUtil.newSimpleDataType(TajoDataTypes.Type.TEXT);
+ return Type.Text;
} else if (type == OpType.InPredicate) {
- return BOOL_TYPE;
+ return Type.Bool;
} else if (type == OpType.LikePredicate || type == OpType.SimilarToPredicate || type == OpType.Regexp) {
- return BOOL_TYPE;
+ return Type.Bool;
} else {
throw new TajoInternalError(type.name() + "is not binary type");
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/552376a8/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 3ff0065..908496b 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
@@ -21,12 +21,13 @@ 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;
+import org.apache.tajo.catalog.TypeConverter;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.plan.function.AggFunctionInvoke;
import org.apache.tajo.plan.function.FunctionContext;
import org.apache.tajo.plan.function.FunctionInvokeContext;
import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.type.Type;
import org.apache.tajo.util.TUtil;
import java.io.IOException;
@@ -106,11 +107,11 @@ public class AggregationFunctionCallEval extends FunctionEval implements Cloneab
}
@Override
- public DataType getValueType() {
+ public Type getValueType() {
if (!lastPhase) {
- return functionInvoke.getPartialResultType();
+ return TypeConverter.convert(functionInvoke.getPartialResultType());
} else {
- return funcDesc.getReturnType();
+ return TypeConverter.convert(funcDesc.getReturnType());
}
}