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:42 UTC

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

Repository: tajo
Updated Branches:
  refs/heads/master d819beee4 -> 132124955


http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestCharDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestCharDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestCharDatum.java
index bb22d5c..e8b2999 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestCharDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestCharDatum.java
@@ -18,9 +18,9 @@
 
 package org.apache.tajo.datum;
 
+import org.apache.tajo.type.Type;
 import org.junit.Test;
 
-import static org.apache.tajo.common.TajoDataTypes.Type;
 import static org.junit.Assert.*;
 
 public class TestCharDatum {
@@ -28,7 +28,7 @@ public class TestCharDatum {
 	@Test
 	public final void testType() {
 		Datum d = DatumFactory.createChar((char) 1);
-		assertEquals(Type.CHAR, d.type());
+		assertEquals(Type.Char(1), d.type());
 	}
 
 	@Test

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestDateDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestDateDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestDateDatum.java
index c7014a6..9e289e9 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestDateDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestDateDatum.java
@@ -18,23 +18,17 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.json.CommonGsonHelper;
+import org.apache.tajo.type.Type;
 import org.junit.Test;
 
+import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.*;
-import static org.hamcrest.CoreMatchers.*;
 
 public class TestDateDatum {
   private static String DATE = "1980-04-01";
 
-	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createDate(DATE);
-    assertEquals(Type.DATE, d.type());
-	}
-
   @Test
 	public final void testAsInt4() {
     Datum d = DatumFactory.createDate(DATE);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestDatum.java
index 9a0b654..2e71a0f 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestDatum.java
@@ -18,8 +18,8 @@
 
 package org.apache.tajo.datum;
 
+import org.apache.tajo.type.Type;
 import org.junit.Test;
-import org.apache.tajo.common.TajoDataTypes.Type;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
@@ -35,35 +35,35 @@ public class TestDatum {
 		x = DatumFactory.createInt4(1);
 		y = DatumFactory.createInt4(2);
 		z = x.plus(y);
-		assertEquals(z.type(), Type.INT4);
+		assertEquals(z.type(), Type.Int4);
 		assertEquals(z.asInt4(),3);
 		z = y.plus(x);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertEquals(z.asInt4(),3);
 		
 		x = DatumFactory.createInt4(1);
 		y = DatumFactory.createInt8(2l);
 		z = x.plus(y);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),3l);
 		z = y.plus(x);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),3l);
 		
 		y = DatumFactory.createFloat4(2.5f);
 		z = x.plus(y);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 3.5f);
 		z = y.plus(x);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertEquals(z.asInt4(),3);
 		
 		y = DatumFactory.createFloat8(4.5d);
 		z = x.plus(y);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 5.5d);
 		z = y.plus(x);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 5.5d);
 	}
 
@@ -76,34 +76,34 @@ public class TestDatum {
 		x = DatumFactory.createInt4(5);
 		y = DatumFactory.createInt4(2);
 		z = x.minus(y);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertEquals(z.asInt4(),3);
 		z = y.minus(x);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertEquals(z.asInt4(),-3);
 		
 		y = DatumFactory.createInt8(2l);
 		z = x.minus(y);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),3l);
 		z = y.minus(x);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),-3l);
 		
 		y = DatumFactory.createFloat4(2.5f);
 		z = x.minus(y);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 2.5f);
 		z = y.minus(x);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == -2.5f);
 		
 		y = DatumFactory.createFloat8(4.5d);
 		z = x.minus(y);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 0.5d);
 		z = y.minus(x);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == -0.5d);
 	}
 
@@ -116,34 +116,34 @@ public class TestDatum {
 		x = DatumFactory.createInt4(5);
 		y = DatumFactory.createInt4(2);
 		z = x.multiply(y);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertEquals(z.asInt4(),10);
 		z = y.multiply(x);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertEquals(z.asInt4(),10);
 		
 		y = DatumFactory.createInt8(2l);
 		z = x.multiply(y);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),10l);
 		z = y.multiply(x);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),10l);
 		
 		y = DatumFactory.createFloat4(2.5f);
 		z = x.multiply(y);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 12.5f);
 		z = y.multiply(x);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 12.5f);
 		
 		y = DatumFactory.createFloat8(4.5d);
 		z = x.multiply(y);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 22.5d);
 		z = y.multiply(x);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 22.5d);
 	}
 
@@ -156,34 +156,34 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.divide(y);
-		assertEquals(z.type(), Type.INT4);
+		assertEquals(z.type(), Type.Int4);
 		assertEquals(z.asInt4(),2);
 		z = y.divide(x);
-		assertEquals(z.type(),Type.INT4);
+		assertEquals(z.type(),Type.Int4);
 		assertTrue(z.asInt4() == 0);
 		
 		y = DatumFactory.createInt8(3l);
 		z = x.divide(y);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),2l);
 		z = y.divide(x);
-		assertEquals(z.type(),Type.INT8);
+		assertEquals(z.type(),Type.Int8);
 		assertEquals(z.asInt8(),0l);
 		
 		y = DatumFactory.createFloat4(3f);
 		z = x.divide(y);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 2.0f);
 		z = y.divide(x);
-		assertEquals(z.type(),Type.FLOAT4);
+		assertEquals(z.type(),Type.Float4);
 		assertTrue(z.asFloat4() == 0.5f);
 		
 		y = DatumFactory.createFloat8(3d);
 		z = x.divide(y);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 2.0d);
 		z = y.divide(x);
-		assertEquals(z.type(),Type.FLOAT8);
+		assertEquals(z.type(),Type.Float8);
 		assertTrue(z.asFloat8() == 0.5d);
 	}
 	
@@ -196,28 +196,28 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.equalsTo(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),false);		
 		z = y.equalsTo(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), false);
 		
 		x = DatumFactory.createFloat4(3.27f);
 		y = DatumFactory.createFloat4(3.27f);
 		z = x.equalsTo(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.equalsTo(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 		
 		x = DatumFactory.createInt8(123456789012345l);
 		y = DatumFactory.createInt8(123456789012345l);
 		z = x.equalsTo(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.equalsTo(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 	}
 	
@@ -230,10 +230,10 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.lessThan(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),false);		
 		z = y.lessThan(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 	}
 	
@@ -246,19 +246,19 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.lessThanEqual(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),false);		
 		z = y.lessThanEqual(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 		
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(6);
 		z = x.lessThanEqual(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.lessThanEqual(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 	}
 	
@@ -271,19 +271,19 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.greaterThan(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.greaterThan(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), false);
 		
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(6);
 		z = x.greaterThan(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),false);		
 		z = y.greaterThan(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), false);
 	}
 	
@@ -296,19 +296,19 @@ public class TestDatum {
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(3);
 		z = x.greaterThanEqual(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.greaterThanEqual(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), false);
 		
 		x = DatumFactory.createInt4(6);
 		y = DatumFactory.createInt4(6);
 		z = x.greaterThanEqual(y);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(),true);		
 		z = y.greaterThanEqual(x);
-		assertEquals(z.type(),Type.BOOLEAN);
+		assertEquals(z.type(),Type.Bool);
 		assertEquals(z.asBool(), true);
 	}
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestDatumFactory.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestDatumFactory.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestDatumFactory.java
index ffb3a30..2f96aa9 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestDatumFactory.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestDatumFactory.java
@@ -18,8 +18,8 @@
 
 package org.apache.tajo.datum;
 
+import org.apache.tajo.type.Type;
 import org.junit.Test;
-import org.apache.tajo.common.TajoDataTypes.Type;
 
 import static org.junit.Assert.assertEquals;
 
@@ -28,48 +28,48 @@ public class TestDatumFactory {
 	@Test
 	public final void testCreateBit() {
 		Datum d = DatumFactory.createBit((byte) 5);
-		assertEquals(Type.BIT, d.type());
+		assertEquals(Type.Bit, d.type());
 	}
 
 	@Test
 	public final void testCreateInt2() {
 		Datum d = DatumFactory.createInt2((short) 5);
-		assertEquals(Type.INT2, d.type());
+		assertEquals(Type.Int2, d.type());
 	}
 	
 	@Test
 	public final void testCreateInt4() {
 		Datum d = DatumFactory.createInt4(5);
-		assertEquals(Type.INT4, d.type());
+		assertEquals(Type.Int4, d.type());
 	}
 	
 	@Test
 	public final void testCreateInt8() {
 		Datum d = DatumFactory.createInt8((long) 5);
-		assertEquals(Type.INT8, d.type());
+		assertEquals(Type.Int8, d.type());
 	}
 
 	@Test
 	public final void testCreateFloat4() {
 		Datum d = DatumFactory.createFloat4(5.0f);
-		assertEquals(Type.FLOAT4, d.type());
+		assertEquals(Type.Float4, d.type());
 	}
 
 	@Test
 	public final void testCreateFloat8() {
 		Datum d = DatumFactory.createFloat8(5.0d);
-		assertEquals(Type.FLOAT8, d.type());
+		assertEquals(Type.Float8, d.type());
 	}
 
 	@Test
 	public final void testCreateBoolean() {
 		Datum d = DatumFactory.createBool(true);
-		assertEquals(Type.BOOLEAN, d.type());
+		assertEquals(Type.Bool, d.type());
 	}
 
 	@Test
 	public final void testCreateString() {
 		Datum d = DatumFactory.createText("12345a");
-		assertEquals(Type.TEXT, d.type());
+		assertEquals(Type.Text, d.type());
 	}
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestFloat8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestFloat8Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestFloat8Datum.java
index b2b49f2..1d4ffb8 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestFloat8Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestFloat8Datum.java
@@ -28,12 +28,6 @@ import static org.junit.Assert.assertTrue;
 public class TestFloat8Datum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createFloat8(1d);
-		assertEquals(Type.FLOAT8, d.type());
-	}
-
-	@Test
 	public final void testAsInt4() {
 		Datum d = DatumFactory.createFloat8(5d);
 		assertEquals(5,d.asInt4());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestFloatDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestFloatDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestFloatDatum.java
index cd92dda..417de83 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestFloatDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestFloatDatum.java
@@ -28,12 +28,6 @@ import static org.junit.Assert.assertTrue;
 public class TestFloatDatum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createFloat4(1f);
-		assertEquals(Type.FLOAT4, d.type());
-	}
-
-	@Test
 	public final void testAsInt() {
 		Datum d = DatumFactory.createFloat4(5f);
 		assertEquals(5,d.asInt4());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestInt2Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt2Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt2Datum.java
index 6af9700..e92f0d2 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt2Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt2Datum.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.*;
@@ -26,12 +25,6 @@ import static org.junit.Assert.*;
 public class TestInt2Datum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createInt2((short) 1);
-		assertEquals(d.type(), Type.INT2);
-	}
-
-	@Test
 	public final void testAsInt4() {
 		Datum d = DatumFactory.createInt2((short) 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/TestInt4Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt4Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt4Datum.java
index 294f8bb..ca8daa7 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt4Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt4Datum.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes;
 import org.junit.Test;
 
 import static org.junit.Assert.*;
@@ -26,12 +25,6 @@ import static org.junit.Assert.*;
 public class TestInt4Datum {
 
   @Test
-  public final void testType() {
-    Datum d = DatumFactory.createInt4(1);
-    assertEquals(TajoDataTypes.Type.INT4, d.type());
-  }
-
-  @Test
   public final void testAsInt() {
     Datum d = DatumFactory.createInt4(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/TestInt8Datum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt8Datum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt8Datum.java
index 7c07114..e625556 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestInt8Datum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestInt8Datum.java
@@ -19,21 +19,12 @@
 package org.apache.tajo.datum;
 
 import org.junit.Test;
-import org.apache.tajo.common.TajoDataTypes.Type;
 
-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 TestInt8Datum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createInt8(1l);
-		assertEquals(d.type(), Type.INT8);
-	}
-
-	@Test
 	public final void testAsInt() {
 		Datum d = DatumFactory.createInt8(5l);
 		assertEquals(5,d.asInt4());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestIntervalDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestIntervalDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestIntervalDatum.java
index b319c9c..5f7e074 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestIntervalDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestIntervalDatum.java
@@ -20,6 +20,7 @@ package org.apache.tajo.datum;
 
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.InvalidOperationException;
+import org.apache.tajo.type.Type;
 import org.apache.tajo.util.datetime.DateTimeUtil;
 import org.junit.Test;
 
@@ -68,7 +69,7 @@ public class TestIntervalDatum {
 
     for (int i = 0; i < datums.length; i++) {
       Datum result = datum.plus(datums[i]);
-      assertEquals(TajoDataTypes.Type.DATE, result.type());
+      assertEquals(Type.Date, result.type());
       assertEquals("date '2001-09-28' + " + datums[i].asChars() + "(" + i + " th test)", "2001-10-05", result.asChars());
     }
 
@@ -76,38 +77,38 @@ public class TestIntervalDatum {
     // date '2001-09-28' + interval '1 hour'	==> timestamp '2001-09-28 01:00:00'
     datum = DatumFactory.createDate(2001, 9, 28);
     Datum result = datum.plus(new IntervalDatum(60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-28 01:00:00", null), result);
 
     // interval '1 hour' +  date '2001-09-28'	==> timestamp '2001-09-28 01:00:00'
     datum = new IntervalDatum(60 * 60 * 1000);
     result = datum.plus(DatumFactory.createDate(2001, 9, 28));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-28 01:00:00", null), result);
 
     // date '2001-09-28' + time '03:00' ==> timestamp '2001-09-28 03:00:00'
     datum = DatumFactory.createDate(2001, 9, 28);
     TimeDatum time = new TimeDatum(DateTimeUtil.toTime(3, 0, 0, 0));
     result = datum.plus(time);
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-28 03:00:00", null), result);
 
     // interval '1 day' + interval '1 hour'	interval '1 day 01:00:00'
     datum = new IntervalDatum(IntervalDatum.DAY_MILLIS);
     result = datum.plus(new IntervalDatum(0, 1 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals("1 day 01:00:00", result.asChars());
 
     // timestamp '2001-09-28 01:00' + interval '23 hours'	==> timestamp '2001-09-29 00:00:00'
     datum = new TimestampDatum(DateTimeUtil.toJulianTimestamp(2001, 9, 28, 1, 0, 0, 0));
     result = datum.plus(new IntervalDatum(23 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-29 00:00:00", null), result);
 
     // time '01:00' + interval '3 hours' ==> time '04:00:00'
     datum = new TimeDatum(DateTimeUtil.toTime(1, 0, 0, 0));
     result = datum.plus(new IntervalDatum(3 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIME, result.type());
+    assertEquals(Type.Time, result.type());
     assertEquals(new TimeDatum(DateTimeUtil.toTime(4, 0, 0, 0)), result);
 
     // - interval '23 hours' ==> interval '-23:00:00'
@@ -116,59 +117,59 @@ public class TestIntervalDatum {
     // date '2001-10-01' - date '2001-09-28' ==>	integer '3'
     datum = DatumFactory.createDate(2001, 10, 1);
     result = datum.minus(DatumFactory.createDate(2001, 9, 28));
-    assertEquals(TajoDataTypes.Type.INT4, result.type());
+    assertEquals(Type.Int4, result.type());
     assertEquals(new Int4Datum(3), result);
 
     // date '2001-10-01' - integer '7' ==>	date '2001-09-24'
     datum = DatumFactory.createDate(2001, 10, 1);
     for (Datum eachDatum : datums) {
       Datum result2 = datum.minus(eachDatum);
-      assertEquals(TajoDataTypes.Type.DATE, result2.type());
+      assertEquals(Type.Date, result2.type());
       assertEquals(DatumFactory.createDate(2001, 9, 24), result2);
     }
 
     // date '2001-09-28' - interval '1 hour' ==> timestamp '2001-09-27 23:00:00'
     datum = DatumFactory.createDate(2001, 9, 28);
     result = datum.minus(new IntervalDatum(1 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-27 23:00:00", null), result);
 
     // date '2001-09-28' - interval '1 day 1 hour' ==> timestamp '2001-09-26 23:00:00'
     // In this case all datums are UTC
     datum = DatumFactory.createDate(2001, 9, 28);
     result = datum.minus(new IntervalDatum(IntervalDatum.DAY_MILLIS + 1 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-26 23:00:00", null),  result);
 
     // time '05:00' - time '03:00' ==>	interval '02:00:00'
     datum = new TimeDatum(DateTimeUtil.toTime(5, 0, 0, 0));
     result = datum.minus(new TimeDatum(DateTimeUtil.toTime(3, 0, 0, 0)));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals(new IntervalDatum(2 * 60 * 60 * 1000), result);
 
     // time '05:00' - interval '2 hours' ==>	time '03:00:00'
     datum = new TimeDatum(DateTimeUtil.toTime(5, 0, 0, 0));
     result = datum.minus(new IntervalDatum(2 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIME, result.type());
+    assertEquals(Type.Time, result.type());
     assertEquals(new TimeDatum(DateTimeUtil.toTime(3, 0, 0, 0)), result);
 
     // timestamp '2001-09-28 23:00' - interval '23 hours' ==>	timestamp '2001-09-28 00:00:00'
     // In this case all datums are UTC
     datum = new TimestampDatum(DateTimeUtil.toJulianTimestamp(2001, 9, 28, 23, 0, 0, 0));
     result = datum.minus(new IntervalDatum(23 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-28 00:00:00", null), result);
 
     // interval '1 day' - interval '1 hour'	==> interval '1 day -01:00:00'
     datum = new IntervalDatum(IntervalDatum.DAY_MILLIS);
     result = datum.minus(new IntervalDatum(1 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals(new IntervalDatum(23 * 60 * 60 * 1000), result);
 
     // timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00' ==>	interval '1 day 15:00:00'
     datum = new TimestampDatum(DateTimeUtil.toJulianTimestamp(2001, 9, 29, 3, 0, 0, 0));
     result = datum.minus(new TimestampDatum(DateTimeUtil.toJulianTimestamp(2001, 9, 27, 12, 0, 0, 0)));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals(new IntervalDatum(IntervalDatum.DAY_MILLIS + 15 * 60 * 60 * 1000), result);
 
     // 900 * interval '1 second' ==> interval '00:15:00'
@@ -178,31 +179,31 @@ public class TestIntervalDatum {
     datum = new IntervalDatum(1000);
     for (Datum aDatum900 : datum900) {
       Datum result2 = datum.multiply(aDatum900);
-      assertEquals(TajoDataTypes.Type.INTERVAL, result2.type());
+      assertEquals(Type.Interval, result2.type());
       assertEquals(new IntervalDatum(15 * 60 * 1000), result2);
 
       result2 = aDatum900.multiply(datum);
-      assertEquals(TajoDataTypes.Type.INTERVAL, result2.type());
+      assertEquals(Type.Interval, result2.type());
       assertEquals(new IntervalDatum(15 * 60 * 1000), result2);
     }
 
     // double precision '3.5' * interval '1 hour'	==> interval '03:30:00'
     datum = new Float8Datum(3.5f);
     result = datum.multiply(new IntervalDatum(1 * 60 * 60 * 1000));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals(new IntervalDatum(3 * 60 * 60 * 1000 + 30 * 60 * 1000), result);
 
     // interval '1 hour' / double precision '1.5' ==>	interval '00:40:00'
     datum = new IntervalDatum(1 * 60 * 60 * 1000);
     result = datum.divide(new Float8Datum(1.5f));
-    assertEquals(TajoDataTypes.Type.INTERVAL, result.type());
+    assertEquals(Type.Interval, result.type());
     assertEquals(new IntervalDatum(40 * 60 * 1000), result);
 
     // timestamp '2001-08-31 01:00:00' + interval '1 mons' ==> timestamp 2001-09-30 01:00:00
     // In this case all datums are UTC
     datum = new TimestampDatum(DateTimeUtil.toJulianTimestamp(2001, 8, 31, 1, 0, 0, 0));
     result = datum.plus(new IntervalDatum(1, 0));
-    assertEquals(TajoDataTypes.Type.TIMESTAMP, result.type());
+    assertEquals(Type.Timestamp, result.type());
     assertEquals(DatumFactory.parseTimestamp("2001-09-30 01:00:00", null), result);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestTextDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestTextDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestTextDatum.java
index 2624d33..d7e569b 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestTextDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestTextDatum.java
@@ -18,7 +18,7 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
+import org.apache.tajo.type.Type;
 import org.junit.Test;
 import org.powermock.reflect.Whitebox;
 
@@ -29,12 +29,6 @@ import static org.junit.Assert.*;
 public class TestTextDatum {
 
 	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createText("12345");
-		assertEquals(d.type(), Type.TEXT);
-	}
-
-	@Test
 	public final void testAsInt4() {
 		Datum d = DatumFactory.createText("12345");
 		assertEquals(12345,d.asInt4());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestTimeDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimeDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimeDatum.java
index 7058b52..ae5a9ac 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimeDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimeDatum.java
@@ -18,8 +18,8 @@
 
 package org.apache.tajo.datum;
 
+import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.TajoDataTypes.DataType;
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.json.CommonGsonHelper;
 import org.junit.Test;
@@ -30,12 +30,6 @@ import static org.junit.Assert.assertEquals;
 public class TestTimeDatum {
   private static String TIME = "12:34:56";
 
-  @Test
-  public final void testType() {
-    Datum d = DatumFactory.createTime(TIME);
-    assertEquals(Type.TIME, d.type());
-  }
-
   @Test(expected = TajoRuntimeException.class)
   public final void testAsInt4() {
     Datum d = DatumFactory.createTime(TIME);
@@ -106,7 +100,7 @@ public class TestTimeDatum {
   @Test
   public final void testTimeDatumFromCreateFromInt8() {
     TimeDatum d = DatumFactory.createTime(TIME);
-    DataType type = DataType.newBuilder().setType(Type.TIME).build();
+    DataType type = DataType.newBuilder().setType(TajoDataTypes.Type.TIME).build();
     TimeDatum copy = (TimeDatum)DatumFactory.createFromInt8(type, d.asInt8());
 
     assertEquals(d, copy);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
index 2bbb92d..32d4784 100644
--- a/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
+++ b/tajo-common/src/test/java/org/apache/tajo/datum/TestTimestampDatum.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.datum;
 
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.exception.InvalidOperationException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.json.CommonGsonHelper;
@@ -45,12 +44,6 @@ public class TestTimestampDatum {
     unixtime = (int) (javatime / 1000);
   }
 
-	@Test
-	public final void testType() {
-		Datum d = DatumFactory.createTimestampDatumWithUnixTime(unixtime);
-    assertEquals(Type.TIMESTAMP, d.type());
-	}
-
 	@Test(expected = TajoRuntimeException.class)
 	public final void testAsInt4() {
     Datum d = DatumFactory.createTimestampDatumWithUnixTime(unixtime);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-common/src/test/java/org/apache/tajo/tuple/memory/TestMemoryRowBlock.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/test/java/org/apache/tajo/tuple/memory/TestMemoryRowBlock.java b/tajo-common/src/test/java/org/apache/tajo/tuple/memory/TestMemoryRowBlock.java
index 6a9be2e..b93b964 100644
--- a/tajo-common/src/test/java/org/apache/tajo/tuple/memory/TestMemoryRowBlock.java
+++ b/tajo-common/src/test/java/org/apache/tajo/tuple/memory/TestMemoryRowBlock.java
@@ -288,7 +288,7 @@ public class TestMemoryRowBlock {
     int count = 0;
     for (VTuple aRowBlock : rowBlock) {
       for (int m = 0; m < schema.length; m++) {
-        if (aRowBlock.contains(m) && aRowBlock.get(m).type() == Type.INT4) {
+        if (aRowBlock.contains(m) && aRowBlock.get(m).kind() == Type.INT4) {
           count++;
         }
       }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-core/src/main/java/org/apache/tajo/engine/function/json/JsonArrayContains.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/json/JsonArrayContains.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/json/JsonArrayContains.java
index c0287a9..9f90e4c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/json/JsonArrayContains.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/json/JsonArrayContains.java
@@ -66,13 +66,13 @@ public class JsonArrayContains extends ScalarJsonFunction {
 
         if (isFirst) {
           isFirst = false;
-          if (actualParam.type() == TajoDataTypes.Type.INT1 ||
-              actualParam.type() == TajoDataTypes.Type.INT2 ||
-              actualParam.type() == TajoDataTypes.Type.INT4 ||
-              actualParam.type() == TajoDataTypes.Type.INT8) {
+          if (actualParam.kind() == TajoDataTypes.Type.INT1 ||
+              actualParam.kind() == TajoDataTypes.Type.INT2 ||
+              actualParam.kind() == TajoDataTypes.Type.INT4 ||
+              actualParam.kind() == TajoDataTypes.Type.INT8) {
             isLong = true;
-          } else if (actualParam.type() == TajoDataTypes.Type.FLOAT4 ||
-              actualParam.type() == TajoDataTypes.Type.FLOAT8) {
+          } else if (actualParam.kind() == TajoDataTypes.Type.FLOAT4 ||
+              actualParam.kind() == TajoDataTypes.Type.FLOAT8) {
             isDouble = true;
           }
         }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 aaf64cd..b646658 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
@@ -2132,7 +2132,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
       } else if (dataType.hasLengthOrPrecision()) {
         return Numeric(dataType.getLengthOrPrecision());
       } else {
-        return Numeric();
+        return Numeric;
       }
     } else {
       return TypeFactory.create(type);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 b565b80..a565d02 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
@@ -21,7 +21,6 @@ package org.apache.tajo.plan.expr;
 import com.google.common.base.Objects;
 import com.google.gson.annotations.Expose;
 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;
@@ -154,7 +153,7 @@ public class BinaryEval extends EvalNode implements Cloneable {
       return lhs.modular(rhs);
 
     case CONCATENATE:
-      if (lhs.type() == TajoDataTypes.Type.NULL_TYPE || rhs.type() == TajoDataTypes.Type.NULL_TYPE) {
+      if (lhs.type().isNull() || rhs.type().isNull()) {
         return NullDatum.get();
       }
       return DatumFactory.createText(lhs.asChars() + rhs.asChars());

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 4f1ece6..b60f06a 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
@@ -23,7 +23,6 @@ import com.google.gson.annotations.Expose;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.type.Type;
-import org.apache.tajo.type.TypeFactory;
 
 public class ConstEval extends EvalNode implements Comparable<ConstEval>, Cloneable {
 	@Expose Datum datum = null;
@@ -51,7 +50,7 @@ public class ConstEval extends EvalNode implements Comparable<ConstEval>, Clonea
 
   @Override
 	public Type getValueType() {
-    return TypeFactory.create(datum.type());
+    return datum.type();
 	}
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 21d3517..6e86890 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
@@ -23,7 +23,6 @@ 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.type.TypeFactory;
 import org.apache.tajo.util.StringUtils;
 import org.apache.tajo.util.TUtil;
 
@@ -39,7 +38,7 @@ public class RowConstantEval extends ValueSetEval {
 
   @Override
   public Type getValueType() {
-    return TypeFactory.create(values[0].type());
+    return values[0].type();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
index 9371b36..83ea416 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
@@ -20,7 +20,6 @@ package org.apache.tajo.plan.function.stream;
 
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.AnyDatum;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.exception.TajoRuntimeException;
@@ -59,7 +58,7 @@ public class CSVLineSerializer extends TextLineSerializer {
     for (int i = 0; i < input.size(); i++) {
       Datum datum = input.asDatum(i);
       String typeStr;
-      if (datum.type() == TajoDataTypes.Type.ANY) {
+      if (datum.type().isAny()) {
         typeStr = getTypeString(((AnyDatum)datum).getActual());
       } else {
         typeStr = getTypeString(datum);
@@ -78,19 +77,6 @@ public class CSVLineSerializer extends TextLineSerializer {
     return writtenBytes;
   }
 
-  private int serializeDatum(OutputStream out, Datum datum, TajoDataTypes.DataType dataType) throws IOException {
-    String typeStr;
-    if (datum.type() == TajoDataTypes.Type.ANY) {
-      typeStr = getTypeString(((AnyDatum)datum).getActual());
-    } else {
-      typeStr = getTypeString(datum);
-    }
-    out.write(typeStr.getBytes());
-    out.write(PARAM_DELIM.getBytes());
-
-    return serde.serialize(out, datum, dataType, nullChars);
-  }
-
   @Override
   public int serializeContext(OutputStream out, FunctionContext context) throws IOException {
     int writtenBytes = 0;
@@ -114,7 +100,7 @@ public class CSVLineSerializer extends TextLineSerializer {
   }
 
   public static String getTypeString(Datum val) {
-    switch (val.type()) {
+    switch (val.kind()) {
       case NULL_TYPE:
         return "-";
       case BOOLEAN:
@@ -141,7 +127,7 @@ public class CSVLineSerializer extends TextLineSerializer {
       case BLOB:
         return "A";
       default:
-        throw new TajoRuntimeException(new UnsupportedException("data type '" + val.type().name() + "'"));
+        throw new TajoRuntimeException(new UnsupportedException("data type '" + val.type() + "'"));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
index 7bcb694..84b1dbe 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
@@ -137,7 +137,7 @@ public class TextFieldSerializerDeserializer implements FieldSerializerDeseriali
         break;
       case ANY:
         AnyDatum anyDatum = (AnyDatum) datum;
-        length = serialize(out, anyDatum.getActual(), CatalogUtil.newSimpleDataType(anyDatum.getActual().type()),
+        length = serialize(out, anyDatum.getActual(), CatalogUtil.newSimpleDataType(anyDatum.getActual().kind()),
             nullChars);
         break;
       default:

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 ecaa882..f791198 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
@@ -364,9 +364,9 @@ public class EvalNodeSerializer
   public static PlanProto.Datum serialize(Datum datum) {
     PlanProto.Datum.Builder builder = PlanProto.Datum.newBuilder();
 
-    builder.setType(datum.type());
+    builder.setType(datum.kind());
 
-    switch (datum.type()) {
+    switch (datum.kind()) {
     case NULL_TYPE:
       break;
     case BOOLEAN:
@@ -409,7 +409,7 @@ public class EvalNodeSerializer
       builder.setActual(serialize(((AnyDatum)datum).getActual()));
       break;
     default:
-      throw new RuntimeException("Unknown data type: " + datum.type().name());
+      throw new RuntimeException("Unknown data type: " + datum.type());
     }
 
     return builder.build();

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 2ad6b6f..d3a51c1 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
@@ -154,7 +154,7 @@ public class EvalNodeToExprConverter extends SimpleEvalNodeVisitor<Object> {
     Expr[] values = new Expr[evalNode.getValues().length];
     for (int i = 0; i < evalNode.getValues().length; i++) {
       Datum datum = evalNode.getValues()[i];
-      values[i] = convertDatumToExpr(datum.type(), datum);
+      values[i] = convertDatumToExpr(datum.kind(), datum);
     }
     ValueListExpr expr = new ValueListExpr(values);
     exprs.push(expr);

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-plan/src/main/java/org/apache/tajo/plan/util/WritableTypeConverter.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/WritableTypeConverter.java b/tajo-plan/src/main/java/org/apache/tajo/plan/util/WritableTypeConverter.java
index d83524c..04058e5 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/WritableTypeConverter.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/WritableTypeConverter.java
@@ -23,12 +23,13 @@ import org.apache.hadoop.hive.serde2.io.DateWritable;
 import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
 import org.apache.hadoop.hive.serde2.io.TimestampWritable;
 import org.apache.hadoop.io.*;
-import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.common.TajoDataTypes.DataType;
+import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.datum.*;
 import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedDataTypeException;
+import org.apache.tajo.type.TypeStringEncoder;
 import org.apache.tajo.util.datetime.DateTimeConstants;
 import org.apache.tajo.util.datetime.DateTimeUtil;
 import org.reflections.ReflectionUtils;
@@ -83,7 +84,7 @@ public class WritableTypeConverter {
   }
 
   public static Writable convertDatum2Writable(Datum value) {
-    switch(value.type()) {
+    switch(value.kind()) {
       case INT1: return new ByteWritable(value.asByte());
       case INT2: return new ShortWritable(value.asInt2());
       case INT4: return new IntWritable(value.asInt4());
@@ -111,7 +112,7 @@ public class WritableTypeConverter {
       case NULL_TYPE: return null;
     }
 
-    throw new TajoRuntimeException(new NotImplementedException(value.type().name()));
+    throw new TajoRuntimeException(new NotImplementedException(TypeStringEncoder.encode(value.type())));
   }
 
   public static Datum convertWritable2Datum(Writable value) throws UnsupportedDataTypeException {

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
index 72ffde7..903ca39 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
@@ -116,7 +116,7 @@ public class LazyTuple implements Tuple, Cloneable {
 
   @Override
   public TajoDataTypes.Type type(int fieldId) {
-    return get(fieldId).type();
+    return get(fieldId).kind();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MemoryUtil.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MemoryUtil.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MemoryUtil.java
deleted file mode 100644
index 16477cd..0000000
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MemoryUtil.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.storage;
-
-import org.apache.tajo.datum.*;
-import org.apache.tajo.util.ClassSize;
-
-public class MemoryUtil {
-
-  /** Overhead for an NullDatum */
-  public static final long NULL_DATUM;
-
-  /** Overhead for an BoolDatum */
-  public static final long BOOL_DATUM;
-
-  /** Overhead for an CharDatum */
-  public static final long CHAR_DATUM;
-
-  /** Overhead for an BitDatum */
-  public static final long BIT_DATUM;
-
-  /** Overhead for an Int2Datum */
-  public static final long INT2_DATUM;
-
-  /** Overhead for an Int4Datum */
-  public static final long INT4_DATUM;
-
-  /** Overhead for an Int8Datum */
-  public static final long INT8_DATUM;
-
-  /** Overhead for an Float4Datum */
-  public static final long FLOAT4_DATUM;
-
-  /** Overhead for an Float8Datum */
-  public static final long FLOAT8_DATUM;
-
-  /** Overhead for an TextDatum */
-  public static final long TEXT_DATUM;
-
-  /** Overhead for an BlobDatum */
-  public static final long BLOB_DATUM;
-
-  /** Overhead for an DateDatum */
-  public static final long DATE_DATUM;
-
-  /** Overhead for an TimeDatum */
-  public static final long TIME_DATUM;
-
-  /** Overhead for an TimestampDatum */
-  public static final long TIMESTAMP_DATUM;
-
-  static {
-    NULL_DATUM = ClassSize.estimateBase(NullDatum.class, false);
-
-    CHAR_DATUM = ClassSize.estimateBase(CharDatum.class, false);
-
-    BOOL_DATUM = ClassSize.estimateBase(BooleanDatum.class, false);
-
-    BIT_DATUM = ClassSize.estimateBase(BitDatum.class, false);
-
-    INT2_DATUM = ClassSize.estimateBase(Int2Datum.class, false);
-
-    INT4_DATUM = ClassSize.estimateBase(Int4Datum.class, false);
-
-    INT8_DATUM = ClassSize.estimateBase(Int8Datum.class, false);
-
-    FLOAT4_DATUM = ClassSize.estimateBase(Float4Datum.class, false);
-
-    FLOAT8_DATUM = ClassSize.estimateBase(Float8Datum.class, false);
-
-    TEXT_DATUM = ClassSize.estimateBase(TextDatum.class, false);
-
-    BLOB_DATUM = ClassSize.estimateBase(BlobDatum.class, false);
-
-    DATE_DATUM = ClassSize.estimateBase(DateDatum.class, false);
-
-    TIME_DATUM = ClassSize.estimateBase(TimeDatum.class, false);
-
-    TIMESTAMP_DATUM = ClassSize.estimateBase(TimestampDatum.class, false);
-  }
-
-  public static long calculateMemorySize(Tuple tuple) {
-    long total = ClassSize.OBJECT;
-    for (Datum datum : tuple.getValues()) {
-      switch (datum.type()) {
-
-      case NULL_TYPE:
-        total += NULL_DATUM;
-        break;
-
-      case BOOLEAN:
-        total += BOOL_DATUM;
-        break;
-
-      case BIT:
-        total += BIT_DATUM;
-        break;
-
-      case CHAR:
-        total += CHAR_DATUM + datum.size();
-        break;
-
-      case INT1:
-      case INT2:
-        total += INT2_DATUM;
-        break;
-
-      case INT4:
-        total += INT4_DATUM;
-        break;
-
-      case INT8:
-        total += INT8_DATUM;
-        break;
-
-      case FLOAT4:
-        total += FLOAT4_DATUM;
-        break;
-
-      case FLOAT8:
-        total += FLOAT4_DATUM;
-        break;
-
-      case TEXT:
-        total += TEXT_DATUM + datum.size();
-        break;
-
-      case BLOB:
-        total += BLOB_DATUM + datum.size();
-        break;
-
-      case DATE:
-        total += DATE_DATUM;
-        break;
-
-      case TIME:
-        total += TIME_DATUM;
-        break;
-
-      case TIMESTAMP:
-        total += TIMESTAMP_DATUM;
-        break;
-
-      default:
-        break;
-      }
-    }
-
-    return total;
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/13212495/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 da97e32..064d6cb 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
@@ -229,7 +229,7 @@ public class SQLExpressionGenerator extends SimpleEvalNodeVisitor<SQLExpressionG
    * @param d Datum
    */
   public String convertDatumToSQLLiteral(Datum d) {
-    switch (d.type()) {
+    switch (d.kind()) {
     case BOOLEAN:
       return d.asBool() ? "TRUE" : "FALSE";
 
@@ -260,7 +260,7 @@ public class SQLExpressionGenerator extends SimpleEvalNodeVisitor<SQLExpressionG
       return "NULL";
 
     default:
-      throw new TajoRuntimeException(new UnsupportedDataTypeException(d.type().name()));
+      throw new TajoRuntimeException(new UnsupportedDataTypeException(d.type().toString()));
     }
   }
 


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

Posted by hy...@apache.org.
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() {