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/05/23 03:08:43 UTC

[2/2] tajo git commit: TAJO-2154: Refactor Datum to use new Type implementation.

TAJO-2154: Refactor Datum to use new Type implementation.

Closes #1017


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/13212495
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/13212495
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/13212495

Branch: refs/heads/master
Commit: 132124955d9af4a98ffb9893563be6f212a0c33a
Parents: d819bee
Author: Hyunsik Choi <hy...@apache.org>
Authored: Sun May 22 17:25:24 2016 -0700
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Sun May 22 17:25:39 2016 -0700

----------------------------------------------------------------------
 CHANGES                                         |   2 +
 .../org/apache/tajo/jdbc/MetaDataTuple.java     |   2 +-
 .../apache/tajo/common/type/TajoTypeUtil.java   |  16 +-
 .../java/org/apache/tajo/datum/AnyDatum.java    |   9 +-
 .../java/org/apache/tajo/datum/BitDatum.java    |   8 +-
 .../java/org/apache/tajo/datum/BlobDatum.java   |  12 +-
 .../org/apache/tajo/datum/BooleanDatum.java     |  13 +-
 .../java/org/apache/tajo/datum/CharDatum.java   |  10 +-
 .../java/org/apache/tajo/datum/DateDatum.java   |  16 +-
 .../main/java/org/apache/tajo/datum/Datum.java  |  63 +++----
 .../org/apache/tajo/datum/DatumFactory.java     |   8 +-
 .../java/org/apache/tajo/datum/Float4Datum.java |  34 ++--
 .../java/org/apache/tajo/datum/Float8Datum.java |  21 +--
 .../java/org/apache/tajo/datum/Int2Datum.java   |  21 +--
 .../java/org/apache/tajo/datum/Int4Datum.java   |  21 +--
 .../java/org/apache/tajo/datum/Int8Datum.java   |  22 +--
 .../org/apache/tajo/datum/IntervalDatum.java    |  18 +-
 .../java/org/apache/tajo/datum/NullDatum.java   |  12 +-
 .../org/apache/tajo/datum/NumericDatum.java     |   4 +-
 .../org/apache/tajo/datum/ProtobufDatum.java    |   6 +-
 .../java/org/apache/tajo/datum/TextDatum.java   |  11 +-
 .../java/org/apache/tajo/datum/TimeDatum.java   |  12 +-
 .../org/apache/tajo/datum/TimestampDatum.java   |  12 +-
 .../exception/InvalidOperationException.java    |   8 +-
 .../exception/InvalidValueForCastException.java |   4 +
 .../java/org/apache/tajo/json/DatumAdapter.java |  13 +-
 .../java/org/apache/tajo/storage/VTuple.java    |   2 +-
 .../src/main/java/org/apache/tajo/type/Any.java |   2 +-
 .../main/java/org/apache/tajo/type/Array.java   |   2 +-
 .../src/main/java/org/apache/tajo/type/Bit.java |  27 +++
 .../main/java/org/apache/tajo/type/Blob.java    |   2 +-
 .../main/java/org/apache/tajo/type/Bool.java    |   2 +-
 .../main/java/org/apache/tajo/type/Char.java    |   2 +-
 .../main/java/org/apache/tajo/type/Date.java    |   2 +-
 .../main/java/org/apache/tajo/type/Float4.java  |   2 +-
 .../main/java/org/apache/tajo/type/Float8.java  |   2 +-
 .../main/java/org/apache/tajo/type/Int1.java    |   2 +-
 .../main/java/org/apache/tajo/type/Int2.java    |   2 +-
 .../main/java/org/apache/tajo/type/Int4.java    |   2 +-
 .../main/java/org/apache/tajo/type/Int8.java    |   2 +-
 .../java/org/apache/tajo/type/Interval.java     |   2 +-
 .../src/main/java/org/apache/tajo/type/Map.java |   2 +-
 .../main/java/org/apache/tajo/type/Null.java    |   2 +-
 .../main/java/org/apache/tajo/type/Numeric.java |   2 +-
 .../main/java/org/apache/tajo/type/Record.java  |   2 +-
 .../main/java/org/apache/tajo/type/Text.java    |   2 +-
 .../main/java/org/apache/tajo/type/Time.java    |   2 +-
 .../java/org/apache/tajo/type/Timestamp.java    |   2 +-
 .../main/java/org/apache/tajo/type/Type.java    |  16 +-
 .../java/org/apache/tajo/type/TypeFactory.java  |   2 +-
 .../main/java/org/apache/tajo/type/Varchar.java |   2 +-
 .../org/apache/tajo/datum/TestBitDatum.java     |  12 +-
 .../org/apache/tajo/datum/TestBoolDatum.java    |   7 -
 .../org/apache/tajo/datum/TestBytesDatum.java   |  19 +--
 .../org/apache/tajo/datum/TestCharDatum.java    |   4 +-
 .../org/apache/tajo/datum/TestDateDatum.java    |  10 +-
 .../java/org/apache/tajo/datum/TestDatum.java   | 106 ++++++------
 .../org/apache/tajo/datum/TestDatumFactory.java |  18 +-
 .../org/apache/tajo/datum/TestFloat8Datum.java  |   6 -
 .../org/apache/tajo/datum/TestFloatDatum.java   |   6 -
 .../org/apache/tajo/datum/TestInt2Datum.java    |   7 -
 .../org/apache/tajo/datum/TestInt4Datum.java    |   7 -
 .../org/apache/tajo/datum/TestInt8Datum.java    |  11 +-
 .../apache/tajo/datum/TestIntervalDatum.java    |  43 ++---
 .../org/apache/tajo/datum/TestTextDatum.java    |   8 +-
 .../org/apache/tajo/datum/TestTimeDatum.java    |  10 +-
 .../apache/tajo/datum/TestTimestampDatum.java   |   7 -
 .../tajo/tuple/memory/TestMemoryRowBlock.java   |   2 +-
 .../engine/function/json/JsonArrayContains.java |  12 +-
 .../org/apache/tajo/plan/LogicalPlanner.java    |   2 +-
 .../org/apache/tajo/plan/expr/BinaryEval.java   |   3 +-
 .../org/apache/tajo/plan/expr/ConstEval.java    |   3 +-
 .../apache/tajo/plan/expr/RowConstantEval.java  |   3 +-
 .../plan/function/stream/CSVLineSerializer.java |  20 +--
 .../stream/TextFieldSerializerDeserializer.java |   2 +-
 .../tajo/plan/serder/EvalNodeSerializer.java    |   6 +-
 .../tajo/plan/util/EvalNodeToExprConverter.java |   2 +-
 .../tajo/plan/util/WritableTypeConverter.java   |   7 +-
 .../java/org/apache/tajo/storage/LazyTuple.java |   2 +-
 .../org/apache/tajo/storage/MemoryUtil.java     | 167 -------------------
 .../storage/jdbc/SQLExpressionGenerator.java    |   4 +-
 81 files changed, 384 insertions(+), 599 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 9af0928..6819aa5 100644
--- a/CHANGES
+++ b/CHANGES
@@ -277,6 +277,8 @@ Release 0.12.0 - unreleased
 
   TASKS
 
+    TAJO-2154: Refactor Datum to use new Type implementation. (hyunsik)
+
     TAJO-2027: Writing Hive UDF integration document. (Jongyoung via hyunsik)
 
     TAJO-2157: EvalNodeSerializer/Deserializer should use new Type 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
index bb20c0a..62f944c 100644
--- a/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
@@ -85,7 +85,7 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public TajoDataTypes.Type type(int fieldId) {
-    return values.get(fieldId).type();
+    return values.get(fieldId).kind();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/common/type/TajoTypeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/common/type/TajoTypeUtil.java b/tajo-common/src/main/java/org/apache/tajo/common/type/TajoTypeUtil.java
index bbab9de..658af65 100644
--- a/tajo-common/src/main/java/org/apache/tajo/common/type/TajoTypeUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/common/type/TajoTypeUtil.java
@@ -182,20 +182,18 @@ public class TajoTypeUtil {
     }
   }
 
-  public static boolean isNumeric(Type type) {
-    return isNumber(type) || isReal(type);
+  public static boolean isNumeric(org.apache.tajo.type.Type type) {
+    return isNumber(type) || isReal(type.kind());
   }
 
-  public static boolean isNumber(Type type) {
+  public static boolean isNumber(org.apache.tajo.type.Type type) {
     return
-        type == Type.INT2 ||
-            type == Type.INT4 ||
-            type == Type.INT8;
+        type.kind() == Type.INT2 ||
+        type.kind() == Type.INT4 ||
+        type.kind() == Type.INT8;
   }
 
   public static boolean isReal(Type type) {
-    return
-        type == Type.FLOAT4||
-            type == Type.FLOAT8;
+    return type == Type.FLOAT4|| type == Type.FLOAT8;
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/AnyDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/AnyDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/AnyDatum.java
index 0771a6e..45b9520 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/AnyDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/AnyDatum.java
@@ -19,8 +19,7 @@
 package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
-
-import static org.apache.tajo.common.TajoDataTypes.Type.ANY;
+import org.apache.tajo.type.Type;
 
 /**
  * <code>AnyDatum</code> can contain any types of datum.
@@ -29,7 +28,7 @@ public class AnyDatum extends Datum {
   @Expose Datum val;
 
   public AnyDatum(Datum val) {
-    super(ANY);
+    super(Type.Any);
     this.val = val;
   }
 
@@ -58,7 +57,7 @@ public class AnyDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    if (datum.type() == ANY) {
+    if (datum.type.isAny()) {
       AnyDatum other = (AnyDatum) datum;
       return val.equalsTo(other.val);
     }
@@ -67,7 +66,7 @@ public class AnyDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == ANY) {
+    if (datum.type.isAny()) {
       AnyDatum other = (AnyDatum) datum;
       return val.compareTo(other.val);
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java
index 8ada5e8..81fae51 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/BitDatum.java
@@ -19,8 +19,8 @@
 package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.type.Type;
 import org.apache.tajo.util.NumberUtil;
 
 public class BitDatum extends Datum {
@@ -28,7 +28,7 @@ public class BitDatum extends Datum {
   @Expose	final byte val;
 	
 	public BitDatum(byte val) {
-		super(TajoDataTypes.Type.BIT);
+		super(Type.Bit);
 		this.val = val;
 	}
 
@@ -105,7 +105,7 @@ public class BitDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case BIT:
       return DatumFactory.createBool(this.val == (((BitDatum) datum).val));
     case NULL_TYPE:
@@ -117,7 +117,7 @@ public class BitDatum extends Datum {
   
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case BIT:
       if (val < datum.asByte() ) {
         return -1;

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java
index 3de5135..f86bc1e 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/BlobDatum.java
@@ -28,21 +28,21 @@ import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.util.Arrays;
 
-import static org.apache.tajo.common.TajoDataTypes.Type.BLOB;
+import static org.apache.tajo.type.Type.Blob;
 
 public class BlobDatum extends Datum {
 	@Expose private final byte [] val;
 	private ByteBuffer bb = null;
 
 	public BlobDatum(byte[] val) {
-    super(BLOB);
+    super(Blob);
 		this.val = val;
 		this.bb = ByteBuffer.wrap(val);	
 		bb.flip();
 	}
 
   public BlobDatum(byte[] val, int offset, int length) {
-    super(BLOB);
+    super(Blob);
     byte[] b = new byte[length];
     System.arraycopy(val, offset, b, 0 , length);
     this.val = b;
@@ -51,7 +51,7 @@ public class BlobDatum extends Datum {
   }
 	
 	public BlobDatum(ByteBuffer val) {
-    super(BLOB);
+    super(Blob);
 		this.val = val.array();
 		this.bb = val.duplicate();
 		bb.flip();
@@ -138,7 +138,7 @@ public class BlobDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case BLOB:
       return DatumFactory.createBool(Arrays.equals(this.val, ((BlobDatum)datum).val));
     case NULL_TYPE:
@@ -150,7 +150,7 @@ public class BlobDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case BLOB:
     	initFromBytes();
     	((BlobDatum)datum).initFromBytes();

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java
index 596540f..7a2df03 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/BooleanDatum.java
@@ -20,9 +20,10 @@ package org.apache.tajo.datum;
 
 import com.google.common.primitives.Booleans;
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.InvalidOperationException;
 
+import static org.apache.tajo.type.Type.Bool;
+
 public class BooleanDatum extends Datum {
   @Expose private final boolean val;
   public static final String TRUE_STRING ="t";
@@ -57,17 +58,17 @@ public class BooleanDatum extends Datum {
   };
 
   private BooleanDatum(boolean val) {
-    super(TajoDataTypes.Type.BOOLEAN);
+    super(Bool);
     this.val = val;
   }
 
   protected BooleanDatum(byte byteVal) {
-    super(TajoDataTypes.Type.BOOLEAN);
+    super(Bool);
     this.val = byteVal == TRUE_INT;
   }
 
   protected BooleanDatum(int byteVal) {
-    super(TajoDataTypes.Type.BOOLEAN);
+    super(Bool);
     this.val = byteVal == TRUE_INT;
   }
 
@@ -157,7 +158,7 @@ public class BooleanDatum extends Datum {
 
   // Datum Comparator
   public BooleanDatum equalsTo(Datum datum) {
-    switch(datum.type()) {
+    switch(datum.kind()) {
     case BOOLEAN: return DatumFactory.createBool(this.val == ((BooleanDatum)datum).val);
     default:
       throw new InvalidOperationException(datum.type());
@@ -166,7 +167,7 @@ public class BooleanDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case BOOLEAN:
       return Booleans.compare(val, datum.asBool());
     default:

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
index 750930f..6b75ac6 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/CharDatum.java
@@ -24,7 +24,7 @@ import org.apache.tajo.exception.InvalidOperationException;
 
 import java.util.Arrays;
 
-import static org.apache.tajo.common.TajoDataTypes.Type;
+import static org.apache.tajo.type.Type.Char;
 
 public class CharDatum extends Datum {
   @Expose private final int size;
@@ -32,7 +32,7 @@ public class CharDatum extends Datum {
   private String chars = null;
 
 	public CharDatum(byte val) {
-    super(Type.CHAR);
+    super(Char(1));
     this.size = 1;
     bytes = new byte[size];
     bytes[0] = val;
@@ -43,7 +43,7 @@ public class CharDatum extends Datum {
   }
 
   public CharDatum(byte [] bytes) {
-    super(Type.CHAR);
+    super(Char(1));
     this.bytes = bytes;
     this.size = bytes.length;
   }
@@ -131,7 +131,7 @@ public class CharDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case CHAR:
       case VARCHAR:
       case TEXT:
@@ -147,7 +147,7 @@ public class CharDatum extends Datum {
   
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case CHAR:
       case TEXT:
         return UnsignedBytes.lexicographicalComparator().compare(bytes, datum.asByteArray());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
index fffdca8..e8af261 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/DateDatum.java
@@ -21,8 +21,8 @@ package org.apache.tajo.datum;
 import com.google.common.primitives.Ints;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.Bytes;
 import org.apache.tajo.util.datetime.DateTimeConstants.DateStyle;
@@ -30,6 +30,8 @@ import org.apache.tajo.util.datetime.DateTimeFormat;
 import org.apache.tajo.util.datetime.DateTimeUtil;
 import org.apache.tajo.util.datetime.TimeMeta;
 
+import static org.apache.tajo.type.Type.Date;
+
 public class DateDatum extends Datum {
   public static final int SIZE = 4;
 
@@ -37,13 +39,13 @@ public class DateDatum extends Datum {
   private int jdate;
 
   public DateDatum(int value) {
-    super(TajoDataTypes.Type.DATE);
+    super(Date);
 
     jdate = value;
   }
 
   public DateDatum(TimeMeta tm) {
-    super(TajoDataTypes.Type.DATE);
+    super(Date);
     jdate = DateTimeUtil.date2j(tm.years, tm.monthOfYear, tm.dayOfMonth);
   }
 
@@ -102,7 +104,7 @@ public class DateDatum extends Datum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
     case INT4:
     case INT8: {
@@ -128,7 +130,7 @@ public class DateDatum extends Datum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch(datum.type()) {
+    switch(datum.kind()) {
       case INT2:
       case INT4:
       case INT8: {
@@ -198,7 +200,7 @@ public class DateDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    if (datum.type() == Type.DATE) {
+    if (datum.kind() == Type.DATE) {
       return DatumFactory.createBool(equals(datum));
     } else if (datum.isNull()) {
       return datum;
@@ -209,7 +211,7 @@ public class DateDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.DATE) {
+    if (datum.kind() == TajoDataTypes.Type.DATE) {
       DateDatum another = (DateDatum) datum;
       return Ints.compare(jdate, another.jdate);
     } else if (datum.isNull()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
index dc61145..61d8f48 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Datum.java
@@ -20,6 +20,7 @@ package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.SessionVars;
+import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.type.TajoTypeUtil;
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.conf.TajoConf.ConfVars;
@@ -30,7 +31,7 @@ import org.apache.tajo.json.CommonGsonHelper;
 import org.apache.tajo.json.GsonObject;
 import org.apache.tajo.util.datetime.TimeMeta;
 
-import static org.apache.tajo.common.TajoDataTypes.Type;
+import static org.apache.tajo.common.TajoDataTypes.Type.*;
 
 public abstract class Datum implements Comparable<Datum>, GsonObject {
   static boolean abortWhenDivideByZero;
@@ -45,18 +46,22 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
     }
   }
 
-  @Expose	private final Type type;
+  @Expose	protected final org.apache.tajo.type.Type type;
 
-  public Datum(Type type) {
+  public Datum(org.apache.tajo.type.Type type) {
     this.type = type;
   }
 
-  public Type type() {
+  public org.apache.tajo.type.Type type() {
     return this.type;
   }
 
+  public TajoDataTypes.Type kind() {
+    return this.type.kind();
+  }
+
   public boolean isTrue() {
-    return type == Type.BOOLEAN && asBool();
+    return type.kind() == BOOLEAN && asBool();
   }
 
   public boolean isNull() {
@@ -68,48 +73,48 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
   }
 
   public boolean asBool() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.BOOLEAN));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type.kind(), BOOLEAN));
   }
 
   public byte asByte() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.BIT));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, BIT));
   }
 
   public char asChar() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.CHAR));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, CHAR));
   }
 
   public short asInt2() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.INT2));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, INT2));
   }
 
   public int asInt4() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.INT4));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, INT4));
   }
 
   public long asInt8() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.INT8));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, INT8));
   }
 
   public byte [] asByteArray() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.BLOB));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, BLOB));
   }
 
   public float asFloat4() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.FLOAT4));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, FLOAT4));
   }
 
   public double asFloat8() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.FLOAT8));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, FLOAT8));
   }
 
   public String asChars() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.TEXT));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, TEXT));
   }
 
   // todo remove this
   public char [] asUnicodeChars() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.TEXT));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, TEXT));
   }
 
   public byte[] asTextBytes() {
@@ -117,7 +122,7 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
   }
 
   public TimeMeta asTimeMeta() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(type, Type.INT8));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, TajoDataTypes.Type.INT8));
   }
 
   public boolean isNumeric() {
@@ -129,7 +134,7 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
   }
 
   public boolean isReal() {
-    return TajoTypeUtil.isReal(type);
+    return TajoTypeUtil.isReal(type.kind());
   }
 
   protected static void initAbortWhenDivideByZero(TajoConf tajoConf) {
@@ -140,31 +145,31 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
 
   // belows should be extracted out of datum
   public Datum and(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum or(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum plus(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum minus(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum multiply(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum divide(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum modular(Datum datum) {
-    throw new InvalidOperationException(datum.type);
+    throw new InvalidOperationException(type);
   }
 
   public Datum equalsTo(Datum datum) {
@@ -184,28 +189,28 @@ public abstract class Datum implements Comparable<Datum>, GsonObject {
   }
 
   public Datum lessThan(Datum datum) {
-    if (this.type() == Type.NULL_TYPE || datum.type() == Type.NULL_TYPE) {
+    if (type.isNull() || datum.type().isNull()) {
       return NullDatum.get();
     }
     return DatumFactory.createBool(compareTo(datum) < 0);
   }
 
   public Datum lessThanEqual(Datum datum) {
-    if (this.type() == Type.NULL_TYPE || datum.type() == Type.NULL_TYPE) {
+    if (type.isNull() || datum.type().isNull()) {
       return NullDatum.get();
     }
     return DatumFactory.createBool(compareTo(datum) <= 0);
   }
 
   public Datum greaterThan(Datum datum) {
-    if (this.type() == Type.NULL_TYPE || datum.type() == Type.NULL_TYPE) {
+    if (type.isNull() || datum.type().isNull()) {
       return NullDatum.get();
     }
     return DatumFactory.createBool(compareTo(datum) > 0);
   }
 
   public Datum greaterThanEqual(Datum datum) {
-    if (this.type() == Type.NULL_TYPE || datum.type() == Type.NULL_TYPE) {
+    if (type.isNull() || datum.type().isNull()) {
       return NullDatum.get();
     }
     return DatumFactory.createBool(compareTo(datum) >= 0);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
index 8943642..2774948 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/DatumFactory.java
@@ -309,7 +309,7 @@ public class DatumFactory {
   }
 
   public static DateDatum createDate(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT4:
       return new DateDatum(datum.asInt4());
     case INT8:
@@ -324,7 +324,7 @@ public class DatumFactory {
   }
 
   public static TimeDatum createTime(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT8:
       return new TimeDatum(datum.asInt8());
     case CHAR:
@@ -340,7 +340,7 @@ public class DatumFactory {
   }
 
   public static TimestampDatum createTimestamp(Datum datum, @Nullable TimeZone tz) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case CHAR:
       case VARCHAR:
       case TEXT:
@@ -403,7 +403,7 @@ public class DatumFactory {
       return DatumFactory.createFloat8(operandDatum.asFloat8());
     case VARCHAR:
     case TEXT:
-      switch (operandDatum.type()) {
+      switch (operandDatum.kind()) {
         case TIMESTAMP: {
           TimestampDatum timestampDatum = (TimestampDatum)operandDatum;
           if (tz != null) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
index 5d56984..5ae4e5e 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float4Datum.java
@@ -20,8 +20,8 @@ package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.MurmurHash;
 import org.apache.tajo.util.NumberUtil;
@@ -29,17 +29,19 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.nio.ByteBuffer;
 
+import static org.apache.tajo.type.Type.Float4;
+
 public class Float4Datum extends NumericDatum {
   private static final int size = 4;
   @Expose final float val;
 
 	public Float4Datum(float val) {
-    super(TajoDataTypes.Type.FLOAT4);
+    super(Float4);
 		this.val = val;
 	}
 
   public Float4Datum(byte[] bytes) {
-    super(TajoDataTypes.Type.FLOAT4);
+    super(Float4);
     ByteBuffer bb = ByteBuffer.wrap(bytes);
     this.val = bb.getFloat();
   }
@@ -122,7 +124,7 @@ public class Float4Datum extends NumericDatum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         return DatumFactory.createBool(val == datum.asInt2());
       case INT4:
@@ -136,13 +138,13 @@ public class Float4Datum extends NumericDatum {
       case NULL_TYPE:
         return datum;
       default:
-        throw new InvalidOperationException(datum.type());
+        throw new InvalidOperationException(datum.type);
     }
   }
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2: {
         short another = datum.asInt2();
         if (val < another) {
@@ -196,13 +198,13 @@ public class Float4Datum extends NumericDatum {
       case NULL_TYPE:
         return -1;
       default:
-        throw new InvalidOperationException(datum.type());
+        throw new InvalidOperationException(datum.type);
     }
   }
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat4(val + datum.asInt2());
     case INT4:
@@ -220,13 +222,13 @@ public class Float4Datum extends NumericDatum {
     case NULL_TYPE:
       return datum;
     default:
-      throw new InvalidOperationException(datum.type());
+      throw new InvalidOperationException(datum.type);
     }
   }
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat4(val - datum.asInt2());
     case INT4:
@@ -244,13 +246,13 @@ public class Float4Datum extends NumericDatum {
     case NULL_TYPE:
       return datum;
     default:
-      throw new InvalidOperationException(datum.type());
+      throw new InvalidOperationException(datum.type);
     }
   }
 
   @Override
   public Datum multiply(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat4(val * datum.asInt2());
     case INT4:
@@ -273,7 +275,7 @@ public class Float4Datum extends NumericDatum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       short paramValueI2 = datum.asInt2();
       if (!validateDivideZero(paramValueI2)) {
@@ -307,13 +309,13 @@ public class Float4Datum extends NumericDatum {
     case NULL_TYPE:
       return datum;
     default:
-      throw new InvalidOperationException(datum.type());
+      throw new InvalidOperationException(datum.type);
     }
   }
 
   @Override
   public Datum modular(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {
@@ -347,7 +349,7 @@ public class Float4Datum extends NumericDatum {
       case NULL_TYPE:
         return datum;
       default:
-        throw new InvalidOperationException(datum.type());
+        throw new InvalidOperationException(datum.type);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
index fdd5495..c2a5247 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Float8Datum.java
@@ -19,7 +19,6 @@
 package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.InvalidOperationException;
 import org.apache.tajo.util.Bytes;
 import org.apache.tajo.util.MurmurHash;
@@ -28,18 +27,20 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.nio.ByteBuffer;
 
+import static org.apache.tajo.type.Type.Float8;
+
 
 public class Float8Datum extends NumericDatum {
   private static final int size = 8;
   @Expose private final double val;
 
 	public Float8Datum(double val) {
-    super(TajoDataTypes.Type.FLOAT8);
+    super(Float8);
 		this.val = val;
 	}
 
   public Float8Datum(byte[] bytes) {
-    super(TajoDataTypes.Type.FLOAT8);
+    super(Float8);
     ByteBuffer bb = ByteBuffer.wrap(bytes);
     this.val = bb.getDouble();
   }
@@ -110,7 +111,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createBool(val == datum.asInt2());
     case INT4:
@@ -130,7 +131,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2: {
         short another = datum.asInt2();
         if (val < another) {
@@ -190,7 +191,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat8(val + datum.asInt2());
     case INT4:
@@ -214,7 +215,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat8(val - datum.asInt2());
     case INT4:
@@ -238,7 +239,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum multiply(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createFloat8(val * datum.asInt2());
     case INT4:
@@ -261,7 +262,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {
@@ -301,7 +302,7 @@ public class Float8Datum extends NumericDatum {
 
   @Override
   public Datum modular(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
index 5629f41..a5b03e6 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int2Datum.java
@@ -19,7 +19,6 @@
 package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.InvalidOperationException;
 import org.apache.tajo.util.MurmurHash;
 import org.apache.tajo.util.NumberUtil;
@@ -27,18 +26,20 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.nio.ByteBuffer;
 
+import static org.apache.tajo.type.Type.Int2;
+
 
 public class Int2Datum extends NumericDatum {
   private static final int size = 2;
   @Expose private final short val;
 
 	public Int2Datum(short val) {
-    super(TajoDataTypes.Type.INT2);
+    super(Int2);
 		this.val = val;
 	}
 
   public Int2Datum(byte[] bytes) {
-    super(TajoDataTypes.Type.INT2);
+    super(Int2);
     ByteBuffer bb = ByteBuffer.wrap(bytes);
     this.val = bb.getShort();
   }
@@ -112,7 +113,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createBool(val == datum.asInt2());
     case INT4:
@@ -132,7 +133,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2: {
         short another = datum.asInt2();
         if (val < another) {
@@ -192,7 +193,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt2((short) (val + datum.asInt2()));
     case INT4:
@@ -216,7 +217,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt2((short) (val - datum.asInt2()));
     case INT4:
@@ -240,7 +241,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum multiply(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt4(val * datum.asInt2());
     case INT4:
@@ -263,7 +264,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {
@@ -303,7 +304,7 @@ public class Int2Datum extends NumericDatum {
 
   @Override
   public Datum modular(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
index a45cb1e..9128dd1 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int4Datum.java
@@ -19,7 +19,6 @@
 package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.exception.InvalidOperationException;
 import org.apache.tajo.util.MurmurHash;
 import org.apache.tajo.util.NumberUtil;
@@ -27,18 +26,20 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.nio.ByteBuffer;
 
+import static org.apache.tajo.type.Type.Int4;
+
 
 public class Int4Datum extends NumericDatum {
   private static final int size = 4;
   @Expose private final int val;
 
 	public Int4Datum(int val) {
-    super(Type.INT4);
+    super(Int4);
 		this.val = val;
 	}
 
   public Int4Datum(byte[] bytes) {
-    super(Type.INT4);
+    super(Int4);
     ByteBuffer bb = ByteBuffer.wrap(bytes);
     this.val = bb.getInt();
   }
@@ -116,7 +117,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createBool(val == datum.asInt2());
     case INT4:
@@ -136,7 +137,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2: {
         short another = datum.asInt2();
         if (val < another) {
@@ -196,7 +197,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt4(val + datum.asInt2());
     case INT4:
@@ -220,7 +221,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt4(val - datum.asInt2());
     case INT4:
@@ -244,7 +245,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum multiply(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt4(val * datum.asInt2());
     case INT4:
@@ -267,7 +268,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {
@@ -307,7 +308,7 @@ public class Int4Datum extends NumericDatum {
 
   @Override
   public Datum modular(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
index 86f19c7..bda4f90 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/Int8Datum.java
@@ -20,8 +20,8 @@ package org.apache.tajo.datum;
 
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.MurmurHash;
 import org.apache.tajo.util.NumberUtil;
@@ -29,18 +29,20 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.nio.ByteBuffer;
 
+import static org.apache.tajo.type.Type.Int8;
+
 
 public class Int8Datum extends NumericDatum {
   private static final int size = 8;
   @Expose private final long val;
 
 	public Int8Datum(long val) {
-    super(TajoDataTypes.Type.INT8);
+    super(Int8);
 		this.val = val;
 	}
 
   public Int8Datum(byte[] bytes) {
-    super(TajoDataTypes.Type.INT8);
+    super(Int8);
     ByteBuffer bb = ByteBuffer.wrap(bytes);
     val = bb.getLong();
   }
@@ -124,7 +126,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         return DatumFactory.createBool(val == datum.asInt2());
       case INT4:
@@ -144,7 +146,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2: {
         short another = datum.asInt2();
         if (val < another) {
@@ -205,7 +207,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt8(val + datum.asInt2());
     case INT4:
@@ -229,7 +231,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt8(val - datum.asInt2());
     case INT4:
@@ -253,7 +255,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum multiply(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INT2:
       return DatumFactory.createInt8(val * datum.asInt2());
     case INT4:
@@ -277,7 +279,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {
@@ -317,7 +319,7 @@ public class Int8Datum extends NumericDatum {
 
   @Override
   public Datum modular(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
         short paramValueI2 = datum.asInt2();
         if (!validateDivideZero(paramValueI2)) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
index 44570f3..5dabe50 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/IntervalDatum.java
@@ -28,6 +28,8 @@ import java.text.DecimalFormat;
 import java.util.HashMap;
 import java.util.Map;
 
+import static org.apache.tajo.type.Type.Interval;
+
 public class IntervalDatum extends Datum {
   public static final long MINUTE_MILLIS = 60 * 1000;
   public static final long HOUR_MILLIS = 60 * MINUTE_MILLIS;
@@ -70,13 +72,13 @@ public class IntervalDatum extends Datum {
   }
 
   public IntervalDatum(int months, long milliseconds) {
-    super(TajoDataTypes.Type.INTERVAL);
+    super(Interval);
     this.months = months;
     this.milliseconds = milliseconds;
   }
 
   public IntervalDatum(String intervalStr) {
-    super(TajoDataTypes.Type.INTERVAL);
+    super(Interval);
 
     intervalStr = intervalStr.trim();
     if (intervalStr.isEmpty()) {
@@ -225,7 +227,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch(datum.type()) {
+    switch(datum.kind()) {
       case INTERVAL:
         IntervalDatum other = (IntervalDatum) datum;
         return new IntervalDatum(months + other.months, milliseconds + other.milliseconds);
@@ -253,7 +255,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public Datum minus(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.INTERVAL) {
+    if (datum.kind() == TajoDataTypes.Type.INTERVAL) {
       IntervalDatum other = (IntervalDatum) datum;
       return new IntervalDatum(months - other.months, milliseconds - other.milliseconds);
     } else {
@@ -263,7 +265,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public Datum multiply(Datum datum) {
-    switch(datum.type()) {
+    switch(datum.kind()) {
       case INT2:
       case INT4:
       case INT8:
@@ -280,7 +282,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public Datum divide(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case INT2:
       case INT4:
       case INT8:
@@ -397,7 +399,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.INTERVAL) {
+    if (datum.kind() == TajoDataTypes.Type.INTERVAL) {
       return Longs.compare(asInt8(), datum.asInt8());
     } else if (datum instanceof NullDatum || datum.isNull()) {
       return -1;
@@ -408,7 +410,7 @@ public class IntervalDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.INTERVAL) {
+    if (datum.kind() == TajoDataTypes.Type.INTERVAL) {
       return DatumFactory.createBool(asInt8() == datum.asInt8());
     } else if (datum.isNull()) {
       return datum;

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
index de4ddcb..2079953 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/NullDatum.java
@@ -18,11 +18,13 @@
 
 package org.apache.tajo.datum;
 
+import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.TajoRuntimeException;
 
-import static org.apache.tajo.common.TajoDataTypes.Type;
+import static org.apache.tajo.type.Type.Bool;
+import static org.apache.tajo.type.Type.Null;
 
 public class NullDatum extends Datum {
   private static NullDatum instance;
@@ -32,11 +34,11 @@ public class NullDatum extends Datum {
 
   static {
     instance = new NullDatum();
-    NULL_DATA_TYPE = DataType.newBuilder().setType(Type.NULL_TYPE).build();
+    NULL_DATA_TYPE = DataType.newBuilder().setType(TajoDataTypes.Type.NULL_TYPE).build();
   }
 
   private NullDatum() {
-    super(Type.NULL_TYPE);
+    super(Null);
   }
 
   public static NullDatum get() {
@@ -59,7 +61,7 @@ public class NullDatum extends Datum {
 
   @Override
   public boolean asBool() {
-    throw new TajoRuntimeException(new InvalidValueForCastException(Type.NULL_TYPE, Type.BOOLEAN));
+    throw new TajoRuntimeException(new InvalidValueForCastException(type, Bool));
   }
 
   @Override
@@ -119,7 +121,7 @@ public class NullDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == Type.NULL_TYPE) {
+    if (datum.type().isNull()) {
       return 0;
     } else {
       return 1;

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/NumericDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/NumericDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/NumericDatum.java
index e021781..13ce7e0 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/NumericDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/NumericDatum.java
@@ -19,11 +19,11 @@
 package org.apache.tajo.datum;
 
 
-import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.type.Type;
 
 public abstract class NumericDatum extends Datum {
 
-  public NumericDatum(TajoDataTypes.Type type) {
+  public NumericDatum(Type type) {
     super(type);
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/ProtobufDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/ProtobufDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/ProtobufDatum.java
index 822a1e9..9adfe47 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/ProtobufDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/ProtobufDatum.java
@@ -19,12 +19,14 @@ package org.apache.tajo.datum;
 
 import com.google.protobuf.Message;
 import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.type.Protobuf;
 
+@Deprecated
 public class ProtobufDatum extends Datum {
   private final Message value;
 
   public ProtobufDatum(Message message) {
-    super(TajoDataTypes.Type.PROTOBUF);
+    super(new Protobuf(null));
     this.value = message;
   }
 
@@ -44,7 +46,7 @@ public class ProtobufDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.PROTOBUF) {
+    if (datum.kind() == TajoDataTypes.Type.PROTOBUF) {
       return value.equals(((ProtobufDatum)datum).get()) ? 0 : -1;
     } else {
       return -1;

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
index df810fe..cbd0ca0 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TextDatum.java
@@ -20,10 +20,9 @@ package org.apache.tajo.datum;
 
 import com.google.common.primitives.UnsignedBytes;
 import com.google.gson.annotations.Expose;
-
 import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.exception.InvalidValueForCastException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.MurmurHash;
 import org.apache.tajo.util.StringUtils;
@@ -31,6 +30,8 @@ import org.apache.tajo.util.StringUtils;
 import java.nio.charset.Charset;
 import java.util.Comparator;
 
+import static org.apache.tajo.type.Type.Text;
+
 public class TextDatum extends Datum {
   public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
 
@@ -42,7 +43,7 @@ public class TextDatum extends Datum {
   public static final Comparator<byte[]> COMPARATOR = UnsignedBytes.lexicographicalComparator();
 
   public TextDatum(byte[] bytes) {
-    super(TajoDataTypes.Type.TEXT);
+    super(Text);
     this.bytes = bytes;
   }
 
@@ -112,7 +113,7 @@ public class TextDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case TEXT:
       case CHAR:
       case BLOB:
@@ -138,7 +139,7 @@ public class TextDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
       case TEXT:
       case CHAR:
       case BLOB:

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
index 57196d2..8c98ddc 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TimeDatum.java
@@ -28,12 +28,14 @@ import org.apache.tajo.util.datetime.DateTimeConstants.DateStyle;
 import org.apache.tajo.util.datetime.DateTimeUtil;
 import org.apache.tajo.util.datetime.TimeMeta;
 
+import static org.apache.tajo.type.Type.Time;
+
 public class TimeDatum extends Datum {
   public static final int SIZE = 8;
   private final long time;
 
   public TimeDatum(long time) {
-    super(TajoDataTypes.Type.TIME);
+    super(Time);
     this.time = time;
   }
 
@@ -108,7 +110,7 @@ public class TimeDatum extends Datum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INTERVAL: {
       IntervalDatum interval = ((IntervalDatum) datum);
       TimeMeta tm = asTimeMeta();
@@ -134,7 +136,7 @@ public class TimeDatum extends Datum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch(datum.type()) {
+    switch(datum.kind()) {
       case INTERVAL:
         IntervalDatum interval = ((IntervalDatum)datum);
         TimeMeta tm = asTimeMeta();
@@ -149,7 +151,7 @@ public class TimeDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.TIME) {
+    if (datum.kind() == TajoDataTypes.Type.TIME) {
       return DatumFactory.createBool(time == (((TimeDatum) datum).time));
     } else if (datum.isNull()) {
       return datum;
@@ -160,7 +162,7 @@ public class TimeDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.TIME) {
+    if (datum.kind() == TajoDataTypes.Type.TIME) {
       TimeDatum another = (TimeDatum)datum;
       return Longs.compare(time, another.time);
     } else if (datum.isNull()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java b/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
index 782aab4..3854de9 100644
--- a/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
+++ b/tajo-common/src/main/java/org/apache/tajo/datum/TimestampDatum.java
@@ -28,6 +28,8 @@ import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.util.TimeZone;
 
+import static org.apache.tajo.type.Type.Timestamp;
+
 public class TimestampDatum extends Datum {
   public static final int SIZE = 8;
 
@@ -38,7 +40,7 @@ public class TimestampDatum extends Datum {
    * @param timestamp UTC based Julian time microseconds
    */
   public TimestampDatum(long timestamp) {
-    super(TajoDataTypes.Type.TIMESTAMP);
+    super(Timestamp);
     this.timestamp = timestamp;
   }
 
@@ -169,7 +171,7 @@ public class TimestampDatum extends Datum {
 
   @Override
   public Datum equalsTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.TIMESTAMP) {
+    if (datum.kind() == TajoDataTypes.Type.TIMESTAMP) {
       return timestamp == datum.asInt8() ? BooleanDatum.TRUE : BooleanDatum.FALSE;
     } else if (datum.isNull()) {
       return datum;
@@ -180,7 +182,7 @@ public class TimestampDatum extends Datum {
 
   @Override
   public int compareTo(Datum datum) {
-    if (datum.type() == TajoDataTypes.Type.TIMESTAMP) {
+    if (datum.kind() == TajoDataTypes.Type.TIMESTAMP) {
       TimestampDatum another = (TimestampDatum) datum;
       return Longs.compare(timestamp, another.timestamp);
     } else if (datum.isNull()) {
@@ -202,7 +204,7 @@ public class TimestampDatum extends Datum {
 
   @Override
   public Datum plus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INTERVAL:
       IntervalDatum interval = (IntervalDatum) datum;
       TimeMeta tm = asTimeMeta();
@@ -220,7 +222,7 @@ public class TimestampDatum extends Datum {
 
   @Override
   public Datum minus(Datum datum) {
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case INTERVAL:
       IntervalDatum interval = (IntervalDatum) datum;
       TimeMeta tm = asTimeMeta();

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/exception/InvalidOperationException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidOperationException.java b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidOperationException.java
index 5e48113..d97a0d1 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidOperationException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidOperationException.java
@@ -18,8 +18,6 @@
 
 package org.apache.tajo.exception;
 
-import static org.apache.tajo.common.TajoDataTypes.Type;
-
 public class InvalidOperationException extends RuntimeException {
 	private static final long serialVersionUID = -7689027447969916148L;
 
@@ -32,8 +30,8 @@ public class InvalidOperationException extends RuntimeException {
 	public InvalidOperationException(String message) {
 		super(message);
 	}
-	
-	public InvalidOperationException(Type type) {
-	  super("Cannot compare to " + type + " type datum");
+
+	public InvalidOperationException(org.apache.tajo.type.Type type) {
+		super("Cannot compare to " + type + " type datum");
 	}
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 63ee354..f1152b2 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
@@ -38,6 +38,10 @@ public class InvalidValueForCastException extends TajoException {
     super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.name(), target.name());
   }
 
+  public InvalidValueForCastException(Type src, TajoDataTypes.Type target) {
+    super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.kind().name(), target.name());
+  }
+
   public InvalidValueForCastException(Type src, Type target) {
     super(Errors.ResultCode.INVALID_VALUE_FOR_CAST, src.kind().name(), target.kind().name());
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java b/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
index b9d8aef..9cc246c 100644
--- a/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
+++ b/tajo-common/src/main/java/org/apache/tajo/json/DatumAdapter.java
@@ -21,6 +21,7 @@ package org.apache.tajo.json;
 import com.google.gson.*;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
+import org.apache.tajo.type.TypeStringEncoder;
 
 import java.lang.reflect.Type;
 
@@ -30,9 +31,9 @@ public class DatumAdapter implements GsonSerDerAdapter<Datum> {
 	public Datum deserialize(JsonElement json, Type typeOfT,
 			JsonDeserializationContext context) throws JsonParseException {
 		JsonObject jsonObject = json.getAsJsonObject();
-		String typeName = CommonGsonHelper.getOrDie(jsonObject, "type").getAsString();
-    TajoDataTypes.Type type = TajoDataTypes.Type.valueOf(typeName);
-    switch (type) {
+		String typeStr = CommonGsonHelper.getOrDie(jsonObject, "type").getAsString();
+    org.apache.tajo.type.Type type = TypeStringEncoder.decode(typeStr);
+    switch (type.kind()) {
     case DATE:
       return new DateDatum(CommonGsonHelper.getOrDie(jsonObject, "value").getAsInt());
     case TIME:
@@ -46,15 +47,15 @@ public class DatumAdapter implements GsonSerDerAdapter<Datum> {
       return new AnyDatum(deserialize(CommonGsonHelper.getOrDie(jsonObject, "actual"), typeOfT, context));
     default:
       return context.deserialize(CommonGsonHelper.getOrDie(jsonObject, "body"),
-          DatumFactory.getDatumClass(TajoDataTypes.Type.valueOf(typeName)));
+          DatumFactory.getDatumClass(TajoDataTypes.Type.valueOf(type.kind().name())));
     }
 	}
 
 	@Override
 	public JsonElement serialize(Datum src, Type typeOfSrc, JsonSerializationContext context) {
 		JsonObject jsonObj = new JsonObject();
-		jsonObj.addProperty("type", src.type().name());
-    switch (src.type()) {
+		jsonObj.addProperty("type", TypeStringEncoder.encode(src.type()));
+    switch (src.kind()) {
     case DATE:
       jsonObj.addProperty("value", src.asInt4());
       break;

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
index dc7c15f..9dc0588 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
@@ -90,7 +90,7 @@ public class VTuple implements Tuple, Cloneable {
 
   @Override
   public TajoDataTypes.Type type(int fieldId) {
-    return values[fieldId].type();
+    return values[fieldId].kind();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Any.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Any.java b/tajo-common/src/main/java/org/apache/tajo/type/Any.java
index 342fdb6..e6f9f6f 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Any.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Any.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.ANY;
 
 public class Any extends Type {
-  public Any() {
+  Any() {
     super(ANY);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Array.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Array.java b/tajo-common/src/main/java/org/apache/tajo/type/Array.java
index 3432238..67be256 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Array.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Array.java
@@ -24,7 +24,7 @@ import static org.apache.tajo.common.TajoDataTypes.Type.ARRAY;
 
 public class Array extends TypeParamterizedType {
 
-  public Array(Type elementType) {
+  Array(Type elementType) {
     super(ARRAY, ImmutableList.of(elementType));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Bit.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Bit.java b/tajo-common/src/main/java/org/apache/tajo/type/Bit.java
new file mode 100644
index 0000000..befabda
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Bit.java
@@ -0,0 +1,27 @@
+/**
+ * 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 static org.apache.tajo.common.TajoDataTypes.Type.BIT;
+
+public class Bit extends Type {
+  Bit() {
+    super(BIT);
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Blob.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Blob.java b/tajo-common/src/main/java/org/apache/tajo/type/Blob.java
index 360ea13..d250842 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Blob.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Blob.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.BLOB;
 
 public class Blob extends Type {
-  public Blob() {
+  Blob() {
     super(BLOB);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Bool.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Bool.java b/tajo-common/src/main/java/org/apache/tajo/type/Bool.java
index 923e8e9..7a15214 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Bool.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Bool.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.BOOLEAN;
 
 public class Bool extends Type {
-  public Bool() {
+  Bool() {
     super(BOOLEAN);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Char.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Char.java b/tajo-common/src/main/java/org/apache/tajo/type/Char.java
index 586775e..f2679ae 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Char.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Char.java
@@ -23,7 +23,7 @@ import com.google.common.collect.ImmutableList;
 import static org.apache.tajo.common.TajoDataTypes.Type.CHAR;
 
 public class Char extends ValueParamterizedType {
-  public Char(int length) {
+  Char(int length) {
     super(CHAR, ImmutableList.of(length));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Date.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Date.java b/tajo-common/src/main/java/org/apache/tajo/type/Date.java
index a68ab97..61cc7cc 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Date.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Date.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.DATE;
 
 public class Date extends Type {
-  public Date() {
+  Date() {
     super(DATE);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Float4.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Float4.java b/tajo-common/src/main/java/org/apache/tajo/type/Float4.java
index b8c8218..58e5bb0 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Float4.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Float4.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.FLOAT4;
 
 public class Float4 extends Type {
-  public Float4() {
+  Float4() {
     super(FLOAT4);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Float8.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Float8.java b/tajo-common/src/main/java/org/apache/tajo/type/Float8.java
index f36fac8..6cb5d90 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Float8.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Float8.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.FLOAT8;
 
 public class Float8 extends Type {
-  public Float8() {
+  Float8() {
     super(FLOAT8);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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
index d86d36e..bb7c310 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Int1.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Int1.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.INT1;
 
 public class Int1 extends Type {
-  public Int1() {
+  Int1() {
     super(INT1);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Int2.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Int2.java b/tajo-common/src/main/java/org/apache/tajo/type/Int2.java
index e7c2215..315fed5 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Int2.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Int2.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.INT2;
 
 public class Int2 extends Type {
-  public Int2() {
+  Int2() {
     super(INT2);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Int4.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Int4.java b/tajo-common/src/main/java/org/apache/tajo/type/Int4.java
index e8db784..2aab6c4 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Int4.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Int4.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.INT4;
 
 public class Int4 extends Type {
-  public Int4() {
+  Int4() {
     super(INT4);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Int8.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Int8.java b/tajo-common/src/main/java/org/apache/tajo/type/Int8.java
index 999e9ac..d16aada 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Int8.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Int8.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.INT8;
 
 public class Int8 extends Type {
-  public Int8() {
+  Int8() {
     super(INT8);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Interval.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Interval.java b/tajo-common/src/main/java/org/apache/tajo/type/Interval.java
index d6dc17e..5ca8177 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Interval.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Interval.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.INTERVAL;
 
 public class Interval extends Type {
-  public Interval() {
+  Interval() {
     super(INTERVAL);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Map.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Map.java b/tajo-common/src/main/java/org/apache/tajo/type/Map.java
index 786d6af..4738b9b 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Map.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Map.java
@@ -23,7 +23,7 @@ import com.google.common.collect.ImmutableList;
 import static org.apache.tajo.common.TajoDataTypes.Type.MAP;
 
 public class Map extends TypeParamterizedType {
-  public Map(Type keyType, Type valueType) {
+  Map(Type keyType, Type valueType) {
     super(MAP, ImmutableList.of(keyType, valueType));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Null.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Null.java b/tajo-common/src/main/java/org/apache/tajo/type/Null.java
index 74cf052..78a4fbe 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Null.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Null.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.NULL_TYPE;
 
 public class Null extends Type {
-  public Null() {
+  Null() {
     super(NULL_TYPE);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Numeric.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Numeric.java b/tajo-common/src/main/java/org/apache/tajo/type/Numeric.java
index c21325d..8f9f9f9 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Numeric.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Numeric.java
@@ -24,7 +24,7 @@ import static org.apache.tajo.common.TajoDataTypes.Type.NUMERIC;
 
 public class Numeric extends ValueParamterizedType {
 
-  public Numeric(int precision, int scale) {
+  Numeric(int precision, int scale) {
     super(NUMERIC, ImmutableList.of(precision, scale));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Record.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Record.java b/tajo-common/src/main/java/org/apache/tajo/type/Record.java
index 46d7e19..d8492c5 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Record.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Record.java
@@ -35,7 +35,7 @@ import static org.apache.tajo.common.TajoDataTypes.Type.RECORD;
 public class Record extends Type implements Iterable<Field> {
   private final ImmutableList<Field> fields;
 
-  public Record(Collection<Field> fields) {
+  Record(Collection<Field> fields) {
     super(RECORD);
     this.fields = ImmutableList.copyOf(fields);
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Text.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Text.java b/tajo-common/src/main/java/org/apache/tajo/type/Text.java
index aab49a4..8933314 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Text.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Text.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.TEXT;
 
 public class Text extends Type {
-  public Text() {
+  Text() {
     super(TEXT);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Time.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Time.java b/tajo-common/src/main/java/org/apache/tajo/type/Time.java
index 12fe5f8..9ad94dd 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Time.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Time.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.TIME;
 
 public class Time extends Type {
-  public Time() {
+  Time() {
     super(TIME);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Timestamp.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Timestamp.java b/tajo-common/src/main/java/org/apache/tajo/type/Timestamp.java
index 577f877..36b1edc 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Timestamp.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Timestamp.java
@@ -21,7 +21,7 @@ package org.apache.tajo.type;
 import static org.apache.tajo.common.TajoDataTypes.Type.TIMESTAMP;
 
 public class Timestamp extends Type {
-  public Timestamp() {
+  Timestamp() {
     super(TIMESTAMP);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 5479658..75d9000 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
@@ -34,8 +34,12 @@ import java.util.List;
  */
 public abstract class Type implements Cloneable, ProtoObject<TypeProto> {
 
+  public static int DEFAULT_PRECISION = 0;
+  public static int DEFAULT_SCALE = 0;
+
   // No paramter types
   public static final Any Any = new Any();
+  public static final Bit Bit = new Bit();
   public static final Null Null = new Null();
   public static final Bool Bool = new Bool();
   public static final Int1 Int1 = new Int1();
@@ -44,6 +48,7 @@ public abstract class Type implements Cloneable, ProtoObject<TypeProto> {
   public static final Int8 Int8 = new Int8();
   public static final Float4 Float4 = new Float4();
   public static final Float8 Float8 = new Float8();
+  public static final Numeric Numeric = new Numeric(DEFAULT_PRECISION, DEFAULT_SCALE);
   public static final Date Date = new Date();
   public static final Time Time = new Time();
   public static final Timestamp Timestamp = new Timestamp();
@@ -96,19 +101,16 @@ public abstract class Type implements Cloneable, ProtoObject<TypeProto> {
     return typeName(kind());
   }
 
+  public boolean isAny() {
+    return this.kind() == TajoDataTypes.Type.ANY;
+  }
+
   public boolean isStruct() {
     return this.kind() == TajoDataTypes.Type.RECORD;
   }
 
   public boolean isNull() { return this.kind() == TajoDataTypes.Type.NULL_TYPE; }
 
-  public static int DEFAULT_PRECISION = 0;
-  public static int DEFAULT_SCALE = 0;
-
-  public static Numeric Numeric() {
-    return new Numeric(DEFAULT_PRECISION, DEFAULT_SCALE);
-  }
-
   public static Numeric Numeric(int precision) {
     return new Numeric(precision, DEFAULT_SCALE);
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/TypeFactory.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/TypeFactory.java b/tajo-common/src/main/java/org/apache/tajo/type/TypeFactory.java
index 24c46a9..f8f1b43 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/TypeFactory.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/TypeFactory.java
@@ -132,7 +132,7 @@ public class TypeFactory {
     case FLOAT8: return Type.Float8;
     case NUMERIC: {
       if (valueParams.size() == 0) {
-        return Numeric.Numeric();
+        return Type.Numeric;
 
       } else {
         for (Object p : valueParams) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java b/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java
index 61e4e85..e96bc98 100644
--- a/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java
+++ b/tajo-common/src/main/java/org/apache/tajo/type/Varchar.java
@@ -24,7 +24,7 @@ import static org.apache.tajo.common.TajoDataTypes.Type.VARCHAR;
 
 public class Varchar extends ValueParamterizedType {
 
-  public Varchar(int length) {
+  Varchar(int length) {
     super(VARCHAR, ImmutableList.of(length));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestBitDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBitDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBitDatum.java
index 812c4c7..ac6a558 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBitDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBitDatum.java
@@ -18,23 +18,15 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
+import org.apache.tajo.type.Type;
 import org.apache.tajo.util.NumberUtil;
 import org.junit.Test;
 
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 public class TestBitDatum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createBit((byte) 1);
-		assertEquals(Type.BIT, d.type());
-	}
-
-	@Test
 	public final void testAsInt() {
 		Datum d = DatumFactory.createBit((byte) 5);
 		assertEquals(5,d.asInt4());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
index dd722ff..7c928b5 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBoolDatum.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.junit.Test;
 
 import static org.junit.Assert.assertArrayEquals;
@@ -27,12 +26,6 @@ import static org.junit.Assert.assertEquals;
 public class TestBoolDatum {
 
   @Test
-  public final void testType() {
-    Datum d = DatumFactory.createBool(true);
-    assertEquals(Type.BOOLEAN, d.type());
-  }
-
-  @Test
   public final void testAsBool() {
     Datum trueDatum = DatumFactory.createBool(true);
     assertEquals(true, trueDatum.asBool());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
index c3a0e84..12f9241 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestBytesDatum.java
@@ -18,24 +18,17 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.json.CommonGsonHelper;
 import org.apache.tajo.util.Bytes;
 import org.junit.Test;
 
 import java.nio.ByteBuffer;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
 
 public class TestBytesDatum {
 
   @Test
-  public final void testType() {
-    Datum d = DatumFactory.createBlob("12345".getBytes());
-    assertEquals(Type.BLOB, d.type());
-  }
-  
-  @Test
   public final void testAsChars() {
     Datum d = DatumFactory.createBlob("12345".getBytes());
     assertEquals("12345", d.asChars());
@@ -46,14 +39,6 @@ public class TestBytesDatum {
     Datum d = DatumFactory.createBlob("12345".getBytes());
     assertEquals(5, d.size());
   }
-  
-  @Test
-  public final void testJson() {
-	  Datum d = DatumFactory.createBlob("12345".getBytes());
-	  String json = d.toJson();
-	  Datum fromJson = CommonGsonHelper.fromJson(json, Datum.class);
-	  assertTrue(d.equalsTo(fromJson).asBool());
-  }
 
   @Test
   public final void testAsTextBytes() {