You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/06/02 04:58:58 UTC

[3/6] tajo git commit: TAJO-1450: Encapsulate Datum in Tuple.

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/WindowAggExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/WindowAggExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/WindowAggExec.java
index 05b0418..d177c48 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/WindowAggExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/WindowAggExec.java
@@ -214,7 +214,7 @@ public class WindowAggExec extends UnaryPhysicalExec {
         if (readTuple != null && hasPartitionKeys) { // get a key tuple
           currentKey = new VTuple(partitionKeyIds.length);
           for (int i = 0; i < partitionKeyIds.length; i++) {
-            currentKey.put(i, readTuple.get(partitionKeyIds[i]));
+            currentKey.put(i, readTuple.asDatum(partitionKeyIds[i]));
           }
         }
       }
@@ -273,7 +273,7 @@ public class WindowAggExec extends UnaryPhysicalExec {
   private void preAccumulatingNextWindow(Tuple inTuple) {
     Tuple projectedTuple = new VTuple(outSchema.size());
     for(int idx = 0; idx < nonFunctionColumnNum; idx++) {
-      projectedTuple.put(idx, inTuple.get(nonFunctionColumns[idx]));
+      projectedTuple.put(idx, inTuple.asDatum(nonFunctionColumns[idx]));
     }
     nextAccumulatedProjected = Lists.newArrayList();
     nextAccumulatedProjected.add(projectedTuple);
@@ -291,10 +291,10 @@ public class WindowAggExec extends UnaryPhysicalExec {
 
       Tuple projectedTuple = new VTuple(schemaForOrderBy.size());
       for (int c = 0; c < nonFunctionColumnNum; c++) {
-        projectedTuple.put(c, inTuple.get(nonFunctionColumns[c]));
+        projectedTuple.put(c, inTuple.asDatum(nonFunctionColumns[c]));
       }
       for (int c = 0; c < sortKeyColumns.length; c++) {
-        projectedTuple.put(outputColumnNum + c, inTuple.get(sortKeyColumns[c]));
+        projectedTuple.put(outputColumnNum + c, inTuple.asDatum(sortKeyColumns[c]));
       }
 
       evaluatedTuples.add(projectedTuple);

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java b/tajo-core/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
index c01900a..1dcbcab 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
@@ -126,8 +126,8 @@ public class TupleUtil {
           "ERROR: Invalid Column Stats (column stats: " + colStats + ", there exists not target " + col);
     }
 
-    Tuple startTuple = new VTuple(target.size());
-    Tuple endTuple = new VTuple(target.size());
+    VTuple startTuple = new VTuple(target.size());
+    VTuple endTuple = new VTuple(target.size());
     int i = 0;
     int sortSpecIndex = 0;
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
index 562dbc3..bc0d212 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
@@ -23,7 +23,6 @@ import com.google.protobuf.ByteString;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tajo.QueryId;
-import org.apache.tajo.SessionVars;
 import org.apache.tajo.TaskAttemptId;
 import org.apache.tajo.TaskId;
 import org.apache.tajo.catalog.*;
@@ -52,7 +51,6 @@ import org.apache.tajo.plan.logical.IndexScanNode;
 import org.apache.tajo.plan.logical.LogicalNode;
 import org.apache.tajo.plan.logical.ScanNode;
 import org.apache.tajo.session.InvalidSessionException;
-import org.apache.tajo.session.Session;
 import org.apache.tajo.storage.RowStoreUtil;
 import org.apache.tajo.storage.RowStoreUtil.RowStoreEncoder;
 import org.apache.tajo.storage.Tuple;
@@ -62,7 +60,10 @@ import org.apache.tajo.util.TUtil;
 import org.apache.tajo.worker.TaskAttemptContext;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Stack;
 
 public class NonForwardQueryResultSystemScanner implements NonForwardQueryResultScanner {
   
@@ -149,7 +150,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(tablespaces.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (TablespaceProto tablespace: tablespaces) {
       aTuple = new VTuple(outSchema.size());
       
@@ -184,7 +185,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(databases.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (DatabaseProto database: databases) {
       aTuple = new VTuple(outSchema.size());
       
@@ -214,7 +215,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(tables.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (TableDescriptorProto table: tables) {
       aTuple = new VTuple(outSchema.size());
       
@@ -298,7 +299,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(indexList.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (IndexProto index: indexList) {
       aTuple = new VTuple(outSchema.size());
       
@@ -337,7 +338,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(optionList.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (TableOptionProto option: optionList) {
       aTuple = new VTuple(outSchema.size());
       
@@ -364,7 +365,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(statList.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (TableStatsProto stat: statList) {
       aTuple = new VTuple(outSchema.size());
       
@@ -391,7 +392,7 @@ public class NonForwardQueryResultSystemScanner implements NonForwardQueryResult
     List<Tuple> tuples = new ArrayList<Tuple>(partitionList.size());
     List<Column> columns = outSchema.getRootColumns();
     Tuple aTuple;
-    
+
     for (TablePartitionProto partition: partitionList) {
       aTuple = new VTuple(outSchema.size());
       

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
index 22b8c4c..281edad 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
@@ -277,7 +277,7 @@ public class QueryExecutor {
     try {
       // start script executor
       startScriptExecutors(queryContext, evalContext, targets);
-      final Tuple outTuple = new VTuple(targets.length);
+      final VTuple outTuple = new VTuple(targets.length);
       for (int i = 0; i < targets.length; i++) {
         EvalNode eval = targets[i].getEvalTree();
         eval.bind(evalContext, null);

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java b/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
index af86abc..66aedc0 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
@@ -301,14 +301,13 @@ public class ExprTestBase {
       }
 
       for (int i = 0; i < expected.length; i++) {
-        Datum datum = outTuple.get(i);
         String outTupleAsChars;
-        if (datum.type() == Type.TIMESTAMP) {
-          outTupleAsChars = ((TimestampDatum) datum).asChars(timeZone, false);
-        } else if (datum.type() == Type.TIME) {
-          outTupleAsChars = ((TimeDatum) datum).asChars(timeZone, false);
+        if (outTuple.type(i) == Type.TIMESTAMP) {
+          outTupleAsChars = TimestampDatum.asChars(outTuple.getTimeDate(i), timeZone, false);
+        } else if (outTuple.type(i) == Type.TIME) {
+          outTupleAsChars = TimeDatum.asChars(outTuple.getTimeDate(i), timeZone, false);
         } else {
-          outTupleAsChars = datum.asChars();
+          outTupleAsChars = outTuple.getText(i);
         }
         assertEquals(query, expected[i], outTupleAsChars);
       }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
index dd5a75a..4bfe640 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
@@ -81,8 +81,8 @@ public class TestEvalTreeUtil {
 
     @Override
     public Datum eval(Tuple params) {
-      x =  params.get(0).asInt4();
-      y =  params.get(1).asInt4();
+      x =  params.getInt4(0);
+      y =  params.getInt4(1);
       return DatumFactory.createInt4(x + y);
     }
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
index 52982c0..b04d544 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
@@ -861,7 +861,7 @@ public class TestSQLExpression extends ExprTestBase {
     int unixtime = 1389071574; // (int) (System.currentTimeMillis() / 1000);
     TimestampDatum expected = DatumFactory.createTimestmpDatumWithUnixTime(unixtime);
     testSimpleEval(context, String.format("select to_timestamp(CAST(split_part('%d.999', '.', 1) as INT8));", unixtime),
-        new String[] {expected.asChars(tz, false)});
+        new String[] {TimestampDatum.asChars(expected.asTimeMeta(), tz, false)});
   }
 
   @Test
@@ -887,10 +887,11 @@ public class TestSQLExpression extends ExprTestBase {
 
     testEval(queryContext, schema, "table1", "1980-04-01 01:50:01,234",
         "select col1::timestamp as t1, col2::float from table1 where t1 = '1980-04-01 01:50:01'::timestamp",
-        new String[]{timestamp.asChars(tz, false), "234.0"}
+        new String[]{TimestampDatum.asChars(timestamp.asTimeMeta(), tz, false), "234.0"}
     );
 
-    testSimpleEval("select '1980-04-01 01:50:01'::timestamp;", new String[]{timestamp.asChars(tz, false)});
+    testSimpleEval("select '1980-04-01 01:50:01'::timestamp;", new String[]{
+        TimestampDatum.asChars(timestamp.asTimeMeta(), tz, false)});
     testSimpleEval("select '1980-04-01 01:50:01'::timestamp::text", new String[]{"1980-04-01 01:50:01"});
 
     testSimpleEval("select (cast ('99999'::int8 as text))::int4 + 1", new String[]{"100000"});

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestUniformRangePartition.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestUniformRangePartition.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestUniformRangePartition.java
index c5ef4ef..178af47 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestUniformRangePartition.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/TestUniformRangePartition.java
@@ -43,8 +43,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt2((short) 1));
     e.put(0, DatumFactory.createInt2((short) 30000));
 
@@ -74,8 +74,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt2((short) 30000));
     e.put(0, DatumFactory.createInt2((short) 1));
 
@@ -104,8 +104,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt4(1));
     e.put(0, DatumFactory.createInt4(10000));
 
@@ -135,8 +135,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt4(10000));
     e.put(0, DatumFactory.createInt4(1));
 
@@ -165,8 +165,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt8(1));
     e.put(0, DatumFactory.createInt8(10000));
 
@@ -196,8 +196,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createInt8(10000));
     e.put(0, DatumFactory.createInt8(1));
 
@@ -226,8 +226,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createFloat4((float) 1.0));
     e.put(0, DatumFactory.createFloat4((float) 10000.0));
 
@@ -257,8 +257,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createFloat4((float) 10000.0));
     e.put(0, DatumFactory.createFloat4((float) 1.0));
 
@@ -287,8 +287,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createFloat8(1.0));
     e.put(0, DatumFactory.createFloat8(10000.0));
 
@@ -318,8 +318,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createFloat8((float) 10000.0));
     e.put(0, DatumFactory.createFloat8((float) 1.0));
 
@@ -352,10 +352,10 @@ public class TestUniformRangePartition {
 
     SortSpec[] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createText("A"));
     s.put(1, DatumFactory.createText("A"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createText("D"));
     e.put(1, DatumFactory.createText("C"));
 
@@ -379,12 +379,12 @@ public class TestUniformRangePartition {
     result[11] = "DC";
 
     Tuple end = partitioner.increment(s, BigInteger.valueOf(1), 1);
-    assertEquals("A", end.get(0).asChars());
-    assertEquals("B", end.get(1).asChars());
+    assertEquals("A", end.getText(0));
+    assertEquals("B", end.getText(1));
     for (int i = 2; i < 11; i++ ) {
       end = partitioner.increment(end, BigInteger.valueOf(1), 1);
-      assertEquals(result[i].charAt(0), end.get(0).asChars().charAt(0));
-      assertEquals(result[i].charAt(1), end.get(1).asChars().charAt(0));
+      assertEquals(result[i].charAt(0), end.getText(0).charAt(0));
+      assertEquals(result[i].charAt(1), end.getText(1).charAt(0));
     }
   }
 
@@ -399,10 +399,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createText("A"));
     s.put(1, DatumFactory.createText("A"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createText("D"));
     e.put(1, DatumFactory.createText("C"));
 
@@ -426,11 +426,11 @@ public class TestUniformRangePartition {
     result[11] = "DC";
 
     Tuple end = partitioner.increment(s, BigInteger.valueOf(6), 1);
-    assertEquals("C", end.get(0).asChars());
-    assertEquals("A", end.get(1).asChars());
+    assertEquals("C", end.getText(0));
+    assertEquals("A", end.getText(1));
     end = partitioner.increment(end, BigInteger.valueOf(5), 1);
-    assertEquals("D", end.get(0).asChars());
-    assertEquals("C", end.get(1).asChars());
+    assertEquals("D", end.getText(0));
+    assertEquals("C", end.getText(1));
   }
 
   /**
@@ -445,11 +445,11 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(3);
+    VTuple s = new VTuple(3);
     s.put(0, DatumFactory.createText("A"));
     s.put(1, DatumFactory.createText("A"));
     s.put(2, DatumFactory.createText("A"));
-    Tuple e = new VTuple(3);
+    VTuple e = new VTuple(3);
     e.put(0, DatumFactory.createText("D")); //  4
     e.put(1, DatumFactory.createText("B")); //  2
     e.put(2, DatumFactory.createText("C")); // x3 = 24
@@ -460,13 +460,13 @@ public class TestUniformRangePartition {
     assertEquals(24, partitioner.getTotalCardinality().intValue());
 
     Tuple overflowBefore = partitioner.increment(s, BigInteger.valueOf(5), 2);
-    assertEquals("A", overflowBefore.get(0).asChars());
-    assertEquals("B", overflowBefore.get(1).asChars());
-    assertEquals("C", overflowBefore.get(2).asChars());
+    assertEquals("A", overflowBefore.getText(0));
+    assertEquals("B", overflowBefore.getText(1));
+    assertEquals("C", overflowBefore.getText(2));
     Tuple overflowed = partitioner.increment(overflowBefore, BigInteger.valueOf(1), 2);
-    assertEquals("B", overflowed.get(0).asChars());
-    assertEquals("A", overflowed.get(1).asChars());
-    assertEquals("A", overflowed.get(2).asChars());
+    assertEquals("B", overflowed.getText(0));
+    assertEquals("A", overflowed.getText(1));
+    assertEquals("A", overflowed.getText(2));
   }
 
   @Test
@@ -476,9 +476,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("가가가"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("하하하"));
 
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -504,9 +504,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("가"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("다"));
 
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -534,9 +534,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("가"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("꽥"));
 
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -564,8 +564,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("가가가"));
     e.put(0, DatumFactory.createText("하하하"));
 
@@ -594,8 +594,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("가"));
     e.put(0, DatumFactory.createText("하하하"));
 
@@ -624,8 +624,8 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("가가가"));
     e.put(0, DatumFactory.createText("하"));
 
@@ -655,8 +655,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("하하하"));
     e.put(0, DatumFactory.createText("가가가"));
 
@@ -686,8 +686,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("하"));
     e.put(0, DatumFactory.createText("가가가"));
 
@@ -717,8 +717,8 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
-    Tuple e = new VTuple(1);
+    VTuple s = new VTuple(1);
+    VTuple e = new VTuple(1);
     s.put(0, DatumFactory.createText("하"));
     e.put(0, DatumFactory.createText("가가가"));
 
@@ -748,10 +748,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createInt8(10));
     s.put(1, DatumFactory.createInt8(20));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createInt8(19));
     e.put(1, DatumFactory.createInt8(39));
 
@@ -761,11 +761,11 @@ public class TestUniformRangePartition {
     assertEquals(200, partitioner.getTotalCardinality().longValue());
 
     Tuple range2 = partitioner.increment(s, BigInteger.valueOf(100), 1);
-    assertEquals(15, range2.get(0).asInt4());
-    assertEquals(20, range2.get(1).asInt4());
+    assertEquals(15, range2.getInt4(0));
+    assertEquals(20, range2.getInt4(1));
     Tuple range3 = partitioner.increment(range2, BigInteger.valueOf(99), 1);
-    assertEquals(19, range3.get(0).asInt4());
-    assertEquals(39, range3.get(1).asInt4());
+    assertEquals(19, range3.getInt4(0));
+    assertEquals(39, range3.getInt4(1));
   }
 
   @Test public void testIncrementOfInt8AndFinal() {
@@ -776,11 +776,11 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(3);
+    VTuple s = new VTuple(3);
     s.put(0, DatumFactory.createInt8(1));
     s.put(1, DatumFactory.createInt8(1));
     s.put(2, DatumFactory.createInt8(1));
-    Tuple e = new VTuple(3);
+    VTuple e = new VTuple(3);
     e.put(0, DatumFactory.createInt8(4)); // 4
     e.put(1, DatumFactory.createInt8(2)); // 2
     e.put(2, DatumFactory.createInt8(3)); //x3 = 24
@@ -791,13 +791,13 @@ public class TestUniformRangePartition {
     assertEquals(24, partitioner.getTotalCardinality().longValue());
 
     Tuple beforeOverflow = partitioner.increment(s, BigInteger.valueOf(5), 2);
-    assertEquals(1, beforeOverflow.get(0).asInt8());
-    assertEquals(2, beforeOverflow.get(1).asInt8());
-    assertEquals(3, beforeOverflow.get(2).asInt8());
+    assertEquals(1, beforeOverflow.getInt8(0));
+    assertEquals(2, beforeOverflow.getInt8(1));
+    assertEquals(3, beforeOverflow.getInt8(2));
     Tuple overflow = partitioner.increment(beforeOverflow, BigInteger.valueOf(1), 2);
-    assertEquals(2, overflow.get(0).asInt8());
-    assertEquals(1, overflow.get(1).asInt8());
-    assertEquals(1, overflow.get(2).asInt8());
+    assertEquals(2, overflow.getInt8(0));
+    assertEquals(1, overflow.getInt8(1));
+    assertEquals(1, overflow.getInt8(2));
   }
 
   @Test
@@ -809,11 +809,11 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(3);
+    VTuple s = new VTuple(3);
     s.put(0, DatumFactory.createFloat8(1.1d));
     s.put(1, DatumFactory.createFloat8(1.1d));
     s.put(2, DatumFactory.createFloat8(1.1d));
-    Tuple e = new VTuple(3);
+    VTuple e = new VTuple(3);
     e.put(0, DatumFactory.createFloat8(4.1d)); // 4
     e.put(1, DatumFactory.createFloat8(2.1d)); // 2
     e.put(2, DatumFactory.createFloat8(3.1d)); //x3 = 24
@@ -824,13 +824,13 @@ public class TestUniformRangePartition {
     assertEquals(24, partitioner.getTotalCardinality().longValue());
 
     Tuple beforeOverflow = partitioner.increment(s, BigInteger.valueOf(5), 2);
-    assertTrue(1.1d == beforeOverflow.get(0).asFloat8());
-    assertTrue(2.1d == beforeOverflow.get(1).asFloat8());
-    assertTrue(3.1d == beforeOverflow.get(2).asFloat8());
+    assertTrue(1.1d == beforeOverflow.getFloat8(0));
+    assertTrue(2.1d == beforeOverflow.getFloat8(1));
+    assertTrue(3.1d == beforeOverflow.getFloat8(2));
     Tuple overflow = partitioner.increment(beforeOverflow, BigInteger.valueOf(1), 2);
-    assertTrue(2.1d == overflow.get(0).asFloat8());
-    assertTrue(1.1d == overflow.get(1).asFloat8());
-    assertTrue(1.1d == overflow.get(2).asFloat8());
+    assertTrue(2.1d == overflow.getFloat8(0));
+    assertTrue(1.1d == overflow.getFloat8(1));
+    assertTrue(1.1d == overflow.getFloat8(2));
   }
 
   @Test
@@ -842,11 +842,11 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(3);
+    VTuple s = new VTuple(3);
     s.put(0, DatumFactory.createInet4("127.0.1.1"));
     s.put(1, DatumFactory.createInet4("127.0.0.1"));
     s.put(2, DatumFactory.createInet4("128.0.0.253"));
-    Tuple e = new VTuple(3);
+    VTuple e = new VTuple(3);
     e.put(0, DatumFactory.createInet4("127.0.1.4")); // 4
     e.put(1, DatumFactory.createInet4("127.0.0.2")); // 2
     e.put(2, DatumFactory.createInet4("128.0.0.255")); //x3 = 24
@@ -857,13 +857,13 @@ public class TestUniformRangePartition {
     assertEquals(24, partitioner.getTotalCardinality().longValue());
 
     Tuple beforeOverflow = partitioner.increment(s, BigInteger.valueOf(5), 2);
-    assertTrue("127.0.1.1".equals(beforeOverflow.get(0).asChars()));
-    assertTrue("127.0.0.2".equals(beforeOverflow.get(1).asChars()));
-    assertTrue("128.0.0.255".equals(beforeOverflow.get(2).asChars()));
+    assertTrue("127.0.1.1".equals(beforeOverflow.getText(0)));
+    assertTrue("127.0.0.2".equals(beforeOverflow.getText(1)));
+    assertTrue("128.0.0.255".equals(beforeOverflow.getText(2)));
     Tuple overflow = partitioner.increment(beforeOverflow, BigInteger.valueOf(1), 2);
-    assertTrue("127.0.1.2".equals(overflow.get(0).asChars()));
-    assertTrue("127.0.0.1".equals(overflow.get(1).asChars()));
-    assertTrue("128.0.0.253".equals(overflow.get(2).asChars()));
+    assertTrue("127.0.1.2".equals(overflow.getText(0)));
+    assertTrue("127.0.0.1".equals(overflow.getText(1)));
+    assertTrue("128.0.0.253".equals(overflow.getText(2)));
   }
 
   @Test
@@ -874,10 +874,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createText("A"));
     s.put(1, DatumFactory.createText("F"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createText("R"));
     e.put(1, DatumFactory.createText("O"));
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -903,10 +903,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createText("A"));
     s.put(1, DatumFactory.createText("F"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createText("R"));
     e.put(1, DatumFactory.createText("O"));
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -925,10 +925,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createNullDatum());
     s.put(1, DatumFactory.createText("F"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createText("R"));
     e.put(1, DatumFactory.createNullDatum());
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -946,9 +946,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("AAA"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("ZZZ"));
 
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -975,9 +975,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("A1"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("A999975"));
 
     final int partNum = 2;
@@ -1007,9 +1007,9 @@ public class TestUniformRangePartition {
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
     sortSpecs[0].setDescOrder();
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("A999975"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("A1"));
 
     final int partNum = 48;
@@ -1038,9 +1038,9 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createText("AAA"));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createText("AAZ"));
 
     final int partNum = 4;
@@ -1070,10 +1070,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createNullDatum());
     s.put(1, DatumFactory.createNullDatum());
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createNullDatum());
     e.put(1, DatumFactory.createNullDatum());
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -1092,10 +1092,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createNullDatum());
     s.put(1, DatumFactory.createText("F"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createNullDatum());
     e.put(1, DatumFactory.createText("O"));
     TupleRange expected = new TupleRange(sortSpecs, s, e);
@@ -1121,10 +1121,10 @@ public class TestUniformRangePartition {
 
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(2);
+    VTuple s = new VTuple(2);
     s.put(0, DatumFactory.createInet4("127.0.1.10"));
     s.put(1, DatumFactory.createInet4("127.0.2.10"));
-    Tuple e = new VTuple(2);
+    VTuple e = new VTuple(2);
     e.put(0, DatumFactory.createInet4("127.0.1.20"));
     e.put(1, DatumFactory.createInet4("127.0.2.20"));
     TupleRange expected = new TupleRange(sortSpecs, s, e);

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
index ae28233..e7e4f7d 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
@@ -89,7 +89,7 @@ public class TestBNLJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, schema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < OUTER_TUPLE_NUM; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -212,10 +212,10 @@ public class TestBNLJoinExec {
     exec.init();
     while ((tuple = exec.next()) != null) {
       count++;
-      assertTrue(i == tuple.get(0).asInt4());
-      assertTrue(i == tuple.get(1).asInt4());
-      assertTrue(("dept_" + i).equals(tuple.get(2).asChars()));
-      assertTrue(10 + i == tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1));
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue(10 + i == tuple.getInt4(3));
       i += 2;
     }
     exec.close();

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
index 62144d2..5a7ba6a 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
@@ -118,10 +118,10 @@ public class TestBSTIndexExec {
 
     FileAppender appender = (FileAppender)sm.getAppender(meta, schema, tablePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 10000; i++) {
       
-      Tuple key = new VTuple(this.idxSchema.size());
+      VTuple key = new VTuple(this.idxSchema.size());
       int rndKey = rnd.nextInt(250);
       if(this.randomValues.containsKey(rndKey)) {
         int t = this.randomValues.remove(rndKey) + 1;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
index 8aea2b6..8e2f234 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
@@ -86,7 +86,7 @@ public class TestExternalSortExec {
         .getAppender(employeeMeta, schema, employeePath);
     appender.enableStats();
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < numTuple; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(rnd.nextInt(50)),

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
index 75ae439..fb6fd02 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
@@ -107,7 +107,7 @@ public class TestFullOuterHashJoinExec {
     Appender appender1 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.size());
+    VTuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -137,7 +137,7 @@ public class TestFullOuterHashJoinExec {
     Appender appender2 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.size());
+    VTuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -177,7 +177,7 @@ public class TestFullOuterHashJoinExec {
     Appender appender3 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.size());
+    VTuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
index 6804746..0963658 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
@@ -112,7 +112,7 @@ public class TestFullOuterMergeJoinExec {
     Appender appender1 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.size());
+    VTuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -151,7 +151,7 @@ public class TestFullOuterMergeJoinExec {
     Appender appender4 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep4Meta, dep4Schema, dep4Path);
     appender4.init();
-    Tuple tuple4 = new VTuple(dep4Schema.size());
+    VTuple tuple4 = new VTuple(dep4Schema.size());
     for (int i = 0; i < 11; i++) {
       tuple4.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -183,7 +183,7 @@ public class TestFullOuterMergeJoinExec {
     Appender appender2 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.size());
+    VTuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -223,7 +223,7 @@ public class TestFullOuterMergeJoinExec {
     Appender appender3 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.size());
+    VTuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
index b8f93e2..f1d4718 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
@@ -86,7 +86,7 @@ public class TestHashAntiJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, employeeSchema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.size());
+    VTuple tuple = new VTuple(employeeSchema.size());
 
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] {
@@ -199,10 +199,10 @@ public class TestHashAntiJoinExec {
     exec.init();
     while ((tuple = exec.next()) != null) {
       count++;
-      assertTrue(i == tuple.get(0).asInt4());
-      assertTrue(i == tuple.get(1).asInt4()); // expected empid [0, 2, 4, 6, 8]
-      assertTrue(("dept_" + i).equals(tuple.get(2).asChars()));
-      assertTrue(10 + i == tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1)); // expected empid [0, 2, 4, 6, 8]
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue(10 + i == tuple.getInt4(3));
 
       i += 2;
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
index acaf10c..77d524e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
@@ -88,7 +88,7 @@ public class TestHashJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, employeeSchema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.size());
+    VTuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -173,10 +173,10 @@ public class TestHashJoinExec {
     exec.init();
     while ((tuple = exec.next()) != null) {
       count++;
-      assertTrue(i == tuple.get(0).asInt4());
-      assertTrue(i == tuple.get(1).asInt4());
-      assertTrue(("dept_" + i).equals(tuple.get(2).asChars()));
-      assertTrue(10 + i == tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1));
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue(10 + i == tuple.getInt4(3));
 
       i += 2;
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashPartitioner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashPartitioner.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashPartitioner.java
index 2241870..1146e85 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashPartitioner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashPartitioner.java
@@ -46,31 +46,31 @@ public class TestHashPartitioner {
 
   @Test
   public final void testGetPartition() {   
-    Tuple tuple1 = new VTuple(3);    
+    VTuple tuple1 = new VTuple(3);
     tuple1.put(new Datum[] {
         DatumFactory.createInt4(1),
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(3)
     });
-    Tuple tuple2 = new VTuple(3);    
+    VTuple tuple2 = new VTuple(3);
     tuple2.put(new Datum[] {
         DatumFactory.createInt4(1),
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(4)
     });
-    Tuple tuple3 = new VTuple(3);    
+    VTuple tuple3 = new VTuple(3);
     tuple3.put(new Datum[] {
         DatumFactory.createInt4(1),
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(5)
     });
-    Tuple tuple4 = new VTuple(3);    
+    VTuple tuple4 = new VTuple(3);
     tuple4.put(new Datum[] {
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(3)
     });
-    Tuple tuple5 = new VTuple(3);    
+    VTuple tuple5 = new VTuple(3);
     tuple5.put(new Datum[] {
         DatumFactory.createInt4(2),
         DatumFactory.createInt4(2),

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
index b87799d..cc9560f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
@@ -87,7 +87,7 @@ public class TestHashSemiJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, employeeSchema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.size());
+    VTuple tuple = new VTuple(employeeSchema.size());
 
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] {
@@ -205,10 +205,10 @@ public class TestHashSemiJoinExec {
     // expect result without duplicated tuples.
     while ((tuple = exec.next()) != null) {
       count++;
-      assertEquals(i, tuple.get(0).asInt4());
-      assertEquals(i, tuple.get(1).asInt4());
-      assertEquals("dept_" + i, tuple.get(2).asChars());
-      assertEquals(10 + i, tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1));
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue(10 + i == tuple.getInt4(3));
 
       i += 2;
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
index 4a1ca32..4b4ed45 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
@@ -108,7 +108,7 @@ public class TestLeftOuterHashJoinExec {
     Appender appender1 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.size());
+    VTuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
                     DatumFactory.createText("dept_" + i),
@@ -138,7 +138,7 @@ public class TestLeftOuterHashJoinExec {
     Appender appender2 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.size());
+    VTuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -178,7 +178,7 @@ public class TestLeftOuterHashJoinExec {
     Appender appender3 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.size());
+    VTuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
index 5201774..370d03e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
@@ -88,7 +88,7 @@ public class TestMergeJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, employeeSchema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.size());
+    VTuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -184,10 +184,10 @@ public class TestMergeJoinExec {
     exec.init();
     while ((tuple = exec.next()) != null) {
       count++;
-      assertTrue(i == tuple.get(0).asInt4());
-      assertTrue(i == tuple.get(1).asInt4());
-      assertTrue(("dept_" + i).equals(tuple.get(2).asChars()));
-      assertTrue((10 + i) == tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1));
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue((10 + i) == tuple.getInt4(3));
 
       i += 2;
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
index 97cc216..c73b89f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
@@ -86,7 +86,7 @@ public class TestNLJoinExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, schema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 50; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(i),
@@ -196,10 +196,10 @@ public class TestNLJoinExec {
     exec.init();
     while ((tuple = exec.next()) != null) {
       count++;
-      assertTrue(i == tuple.get(0).asInt4());
-      assertTrue(i == tuple.get(1).asInt4());
-      assertTrue(("dept_" + i).equals(tuple.get(2).asChars()));
-      assertTrue(10 + i == tuple.get(3).asInt4());
+      assertTrue(i == tuple.getInt4(0));
+      assertTrue(i == tuple.getInt4(1));
+      assertTrue(("dept_" + i).equals(tuple.getText(2)));
+      assertTrue(10 + i == tuple.getInt4(3));
       i += 2;
     }
     exec.close();

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
index 7f92667..be519bf 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
@@ -123,7 +123,7 @@ public class TestPhysicalPlanner {
     Path employeePath = new Path(testDir, "employee.csv");
     Appender appender = sm.getAppender(employeeMeta, employeeSchema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.size());
+    VTuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 100; i++) {
       tuple.put(new Datum[] {DatumFactory.createText("name_" + i),
           DatumFactory.createInt4(i), DatumFactory.createText("dept_" + i)});
@@ -188,7 +188,7 @@ public class TestPhysicalPlanner {
         CatalogUtil.buildFQName(TajoConstants.DEFAULT_DATABASE_NAME, "score_large"), scoreSchmea, scoreLargeMeta,
         scoreLargePath.toUri());
 
-    Tuple tuple = new VTuple(scoreSchmea.size());
+    VTuple tuple = new VTuple(scoreSchmea.size());
     int m = 0;
     for (int i = 1; i <= 40000; i++) {
       for (int k = 3; k < 5; k++) { // |{3,4}| = 2
@@ -316,9 +316,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     exec.init();
     while ((tuple = exec.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     exec.close();
@@ -347,9 +347,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     exec.init();
     while ((tuple = exec.next()) != null) {
-      assertEquals(12, tuple.get(1).asInt4()); // sum
-      assertEquals(3, tuple.get(2).asInt4()); // max
-      assertEquals(1, tuple.get(3).asInt4()); // min
+      assertEquals(12, tuple.getInt4(1)); // sum
+      assertEquals(3, tuple.getInt4(2)); // max
+      assertEquals(1, tuple.getInt4(3)); // min
       i++;
     }
     exec.close();
@@ -391,9 +391,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     exec.init();
     while ((tuple = exec.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     assertEquals(10, i);
@@ -401,9 +401,9 @@ public class TestPhysicalPlanner {
     exec.rescan();
     i = 0;
     while ((tuple = exec.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     exec.close();
@@ -448,9 +448,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     int i = 0;
     while ((tuple = scanner.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     assertEquals(10, i);
@@ -545,9 +545,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     int i = 0;
     while ((tuple = scanner.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     assertEquals(10, i);
@@ -677,9 +677,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     int i = 0;
     while ((tuple = scanner.next()) != null) {
-      assertEquals(6, tuple.get(2).asInt4()); // sum
-      assertEquals(3, tuple.get(3).asInt4()); // max
-      assertEquals(1, tuple.get(4).asInt4()); // min
+      assertEquals(6, tuple.getInt4(2)); // sum
+      assertEquals(3, tuple.getInt4(3)); // max
+      assertEquals(1, tuple.getInt4(4)); // min
       i++;
     }
     assertEquals(10, i);
@@ -811,9 +811,9 @@ public class TestPhysicalPlanner {
     Tuple tuple;
     int i = 0;
     while ((tuple = scanner.next()) != null) {
-      assertEquals(60, tuple.get(0).asInt4()); // sum
-      assertEquals(3, tuple.get(1).asInt4()); // max
-      assertEquals(1, tuple.get(2).asInt4()); // min
+      assertEquals(60, tuple.getInt4(0)); // sum
+      assertEquals(3, tuple.getInt4(1)); // max
+      assertEquals(1, tuple.getInt4(2)); // min
       i++;
     }
     assertEquals(1, i);
@@ -848,9 +848,9 @@ public class TestPhysicalPlanner {
 
     exec.init();
     Tuple tuple = exec.next();
-    assertEquals(30, tuple.get(0).asInt8());
-    assertEquals(3, tuple.get(1).asInt4());
-    assertEquals(1, tuple.get(2).asInt4());
+    assertEquals(30, tuple.getInt8(0));
+    assertEquals(3, tuple.getInt4(1));
+    assertEquals(1, tuple.getInt4(2));
     assertNull(exec.next());
     exec.close();
   }
@@ -878,7 +878,7 @@ public class TestPhysicalPlanner {
     PhysicalExec exec = phyPlanner.createPlan(ctx, rootNode);
     exec.init();
     Tuple tuple = exec.next();
-    assertEquals(30, tuple.get(0).asInt8());
+    assertEquals(30, tuple.getInt8(0));
     assertNull(exec.next());
     exec.close();
   }
@@ -954,8 +954,8 @@ public class TestPhysicalPlanner {
     exec.init();
     tuple = exec.next();
     exec.close();
-    assertEquals(true, tuple.get(0).asBool());
-    assertTrue(7.0d == tuple.get(1).asFloat8());
+    assertEquals(true, tuple.getBool(0));
+    assertTrue(7.0d == tuple.getFloat8(1));
 
     expr = analyzer.parse(QUERIES[13]);
     plan = planner.createPlan(defaultContext, expr);
@@ -966,7 +966,7 @@ public class TestPhysicalPlanner {
     exec.init();
     tuple = exec.next();
     exec.close();
-    assertEquals(DatumFactory.createBool(true), tuple.get(0));
+    assertEquals(DatumFactory.createBool(true), tuple.asDatum(0));
   }
 
   public final String [] createIndexStmt = {
@@ -1023,7 +1023,7 @@ public class TestPhysicalPlanner {
         "name_1", "name_2", "name_3", "name_4", "name_5");
     exec.init();
     while ((tuple = exec.next()) != null) {
-      assertTrue(expected.contains(tuple.get(0).asChars()));
+      assertTrue(expected.contains(tuple.getText(0)));
       cnt++;
     }
     exec.close();

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
index 600f388..d7bc36b 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestProgressExternalSortExec.java
@@ -90,7 +90,7 @@ public class TestProgressExternalSortExec {
         .getAppender(employeeMeta, schema, employeePath);
     appender.enableStats();
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < numTuple; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(rnd.nextInt(50)),

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
index 79db3bf..088de50 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
@@ -103,7 +103,7 @@ public class TestRightOuterHashJoinExec {
     Appender appender1 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.size());
+    VTuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
                     DatumFactory.createText("dept_" + i),
@@ -133,7 +133,7 @@ public class TestRightOuterHashJoinExec {
     Appender appender2 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.size());
+    VTuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -173,7 +173,7 @@ public class TestRightOuterHashJoinExec {
     Appender appender3 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.size());
+    VTuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
index b67dc09..9d01c8f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
@@ -110,7 +110,7 @@ public class TestRightOuterMergeJoinExec {
     Appender appender1 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.size());
+    VTuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -149,7 +149,7 @@ public class TestRightOuterMergeJoinExec {
     Appender appender4 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(dep4Meta, dep4Schema, dep4Path);
     appender4.init();
-    Tuple tuple4 = new VTuple(dep4Schema.size());
+    VTuple tuple4 = new VTuple(dep4Schema.size());
     for (int i = 0; i < 11; i++) {
       tuple4.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -181,7 +181,7 @@ public class TestRightOuterMergeJoinExec {
     Appender appender2 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.size());
+    VTuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -221,7 +221,7 @@ public class TestRightOuterMergeJoinExec {
     Appender appender3 = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.size());
+    VTuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
index 6e0aa8e..0f92bec 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
@@ -84,7 +84,7 @@ public class TestSortExec {
     Appender appender = ((FileTablespace) TableSpaceManager.getFileStorageManager(conf))
         .getAppender(employeeMeta, schema, tablePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.size());
+    VTuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 100; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(rnd.nextInt(5)),
@@ -128,7 +128,7 @@ public class TestSortExec {
     Datum curVal;
     exec.init();
     while ((tuple = exec.next()) != null) {
-      curVal = tuple.get(0);
+      curVal = tuple.asDatum(0);
       if (preVal != null) {
         assertTrue(preVal.lessThanEqual(curVal).asBool());
       }
@@ -149,9 +149,9 @@ public class TestSortExec {
     schema.addColumn("l_orderkey", Type.INT8);
     SortSpec [] sortSpecs = PlannerUtil.schemaToSortSpecs(schema);
 
-    Tuple s = new VTuple(1);
+    VTuple s = new VTuple(1);
     s.put(0, DatumFactory.createInt8(0));
-    Tuple e = new VTuple(1);
+    VTuple e = new VTuple(1);
     e.put(0, DatumFactory.createInt8(6000000000l));
     TupleRange expected = new TupleRange(sortSpecs, s, e);
     RangePartitionAlgorithm partitioner

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestTupleSorter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestTupleSorter.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestTupleSorter.java
index 9cc477a..ea1214e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestTupleSorter.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestTupleSorter.java
@@ -100,7 +100,7 @@ public class TestTupleSorter {
         Tuple tuple = Iterators.get(iterator, LENGTH / result1.length - 1);
         StringBuilder builder = new StringBuilder();
         for (int keyIndex : keyIndices) {
-          builder.append(tuple.get(keyIndex).asChars());
+          builder.append(tuple.getText(keyIndex));
         }
         result1[i] = builder.toString();
       }
@@ -117,7 +117,7 @@ public class TestTupleSorter {
         Tuple tuple = Iterators.get(iterator, LENGTH / result2.length - 1);
         StringBuilder builder = new StringBuilder();
         for (int keyIndex : keyIndices) {
-          builder.append(tuple.get(keyIndex).asChars());
+          builder.append(tuple.getText(keyIndex));
         }
         result2[i] = builder.toString();
       }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/engine/util/TestTupleUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/util/TestTupleUtil.java b/tajo-core/src/test/java/org/apache/tajo/engine/util/TestTupleUtil.java
index c1c07b8..4a3565e 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/util/TestTupleUtil.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/util/TestTupleUtil.java
@@ -70,8 +70,7 @@ public class TestTupleUtil {
     schema.addColumn("col11", Type.INET4);
     //schema.addColumn("col11", DataType.IPv6);
     
-    Tuple tuple = new VTuple(11);
-    tuple.put(new Datum[] {
+    Tuple tuple = new VTuple(new Datum[] {
         DatumFactory.createBool(true),
         DatumFactory.createBit((byte) 0x99),
         DatumFactory.createChar('7'),
@@ -95,8 +94,8 @@ public class TestTupleUtil {
 
   @Test
   public final void testGetPartitions() {
-    Tuple sTuple = new VTuple(7);
-    Tuple eTuple = new VTuple(7);
+    VTuple sTuple = new VTuple(7);
+    VTuple eTuple = new VTuple(7);
 
     Schema schema = new Schema();
 
@@ -155,10 +154,10 @@ public class TestTupleUtil {
     path = new Path("hdfs://tajo/warehouse/partition_test/key1=123");
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, true);
     assertNotNull(tuple);
-    assertEquals(DatumFactory.createInt8(123), tuple.get(0));
+    assertEquals(DatumFactory.createInt8(123), tuple.asDatum(0));
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, false);
     assertNotNull(tuple);
-    assertEquals(DatumFactory.createInt8(123), tuple.get(0));
+    assertEquals(DatumFactory.createInt8(123), tuple.asDatum(0));
 
     path = new Path("hdfs://tajo/warehouse/partition_test/key1=123/part-0000"); // wrong cases;
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, true);
@@ -169,12 +168,12 @@ public class TestTupleUtil {
     path = new Path("hdfs://tajo/warehouse/partition_test/key1=123/key2=abc");
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, true);
     assertNotNull(tuple);
-    assertEquals(DatumFactory.createInt8(123), tuple.get(0));
-    assertEquals(DatumFactory.createText("abc"), tuple.get(1));
+    assertEquals(DatumFactory.createInt8(123), tuple.asDatum(0));
+    assertEquals(DatumFactory.createText("abc"), tuple.asDatum(1));
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, false);
     assertNotNull(tuple);
-    assertEquals(DatumFactory.createInt8(123), tuple.get(0));
-    assertEquals(DatumFactory.createText("abc"), tuple.get(1));
+    assertEquals(DatumFactory.createInt8(123), tuple.asDatum(0));
+    assertEquals(DatumFactory.createText("abc"), tuple.asDatum(1));
 
 
     path = new Path("hdfs://tajo/warehouse/partition_test/key1=123/key2=abc/part-0001");
@@ -183,7 +182,7 @@ public class TestTupleUtil {
 
     tuple = PartitionedTableRewriter.buildTupleFromPartitionPath(schema, path, false);
     assertNotNull(tuple);
-    assertEquals(DatumFactory.createInt8(123), tuple.get(0));
-    assertEquals(DatumFactory.createText("abc"), tuple.get(1));
+    assertEquals(DatumFactory.createInt8(123), tuple.asDatum(0));
+    assertEquals(DatumFactory.createText("abc"), tuple.asDatum(1));
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java b/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
index fb149b2..6322732 100644
--- a/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
+++ b/tajo-core/src/test/java/org/apache/tajo/master/TestNonForwardQueryResultSystemScanner.java
@@ -240,15 +240,15 @@ public class TestNonForwardQueryResultSystemScanner {
 
       @Override
       protected boolean matchesSafely(Tuple item, Description mismatchDescription) {
-        Datum datum = item.get(fieldId);
         Object itemValue = null;
-        
-        if (datum.type() == Type.TEXT) {
-          itemValue = datum.asChars();
-        } else if (datum.type() == Type.INT4) {
-          itemValue = datum.asInt4();
-        } else if (datum.type() == Type.INT8) {
-          itemValue = datum.asInt8();
+
+        Type type = item.type(fieldId);
+        if (type == Type.TEXT) {
+          itemValue = item.getText(fieldId);
+        } else if (type == Type.INT4) {
+          itemValue = item.getInt4(fieldId);
+        } else if (type == Type.INT8) {
+          itemValue = item.getInt8(fieldId);
         }
         
         if (itemValue != null && matcher.matches(itemValue)) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-core/src/test/java/org/apache/tajo/storage/TestRowFile.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/storage/TestRowFile.java b/tajo-core/src/test/java/org/apache/tajo/storage/TestRowFile.java
index 3ab2df6..b19a2e5 100644
--- a/tajo-core/src/test/java/org/apache/tajo/storage/TestRowFile.java
+++ b/tajo-core/src/test/java/org/apache/tajo/storage/TestRowFile.java
@@ -127,8 +127,8 @@ public class TestRowFile {
       scanner = new RowFile.RowFileScanner(conf, schema, meta, fragment);
       scanner.init();
       while ((tuple=scanner.next()) != null) {
-        if (!idSet.remove(tuple.get(0).asInt4())) {
-          System.out.println("duplicated! " + tuple.get(0).asInt4());
+        if (!idSet.remove(tuple.getInt4(0))) {
+          System.out.println("duplicated! " + tuple.getInt4(0));
         }
         tupleCnt++;
       }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
index 30fc9ee..9ae1837 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
@@ -18,12 +18,14 @@
 
 package org.apache.tajo.jdbc;
 
+import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.IntervalDatum;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.datum.ProtobufDatum;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -49,13 +51,18 @@ public class MetaDataTuple implements Tuple {
   }
 
   @Override
-  public boolean isNull(int fieldid) {
+  public boolean isBlank(int fieldid) {
+    return values.get(fieldid) == null;
+  }
+
+  @Override
+  public boolean isBlankOrNull(int fieldid) {
     return values.get(fieldid) == null || values.get(fieldid).isNull();
   }
 
   @Override
-  public boolean isNotNull(int fieldid) {
-    return !isNull(fieldid);
+  public void put(int fieldId, Tuple tuple) {
+    this.put(fieldId, tuple.asDatum(fieldId));
   }
 
   @Override
@@ -69,22 +76,24 @@ public class MetaDataTuple implements Tuple {
   }
 
   @Override
-  public void put(int fieldId, Datum[] values) {
-    throw new UnsupportedException("put");
+  public void put(Datum[] values) {
+    for (int i = 0; i < values.length; i++) {
+      this.values.set(i, values[i]);
+    }
   }
 
   @Override
-  public void put(int fieldId, Tuple tuple) {
-    throw new UnsupportedException("put");
+  public TajoDataTypes.Type type(int fieldId) {
+    return values.get(fieldId).type();
   }
 
   @Override
-  public void put(Datum[] values) {
-    throw new UnsupportedException("put");
+  public int size(int fieldId) {
+    return values.get(fieldId).size();
   }
 
   @Override
-  public Datum get(int fieldId) {
+  public Datum asDatum(int fieldId) {
     return values.get(fieldId);
   }
 
@@ -100,17 +109,17 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public boolean getBool(int fieldId) {
-    throw new UnsupportedException("getBool");
+    return values.get(fieldId).asBool();
   }
 
   @Override
   public byte getByte(int fieldId) {
-    throw new UnsupportedException("getByte");
+    return values.get(fieldId).asByte();
   }
 
   @Override
   public char getChar(int fieldId) {
-    throw new UnsupportedException("getChar");
+    return values.get(fieldId).asChar();
   }
 
   @Override
@@ -119,33 +128,43 @@ public class MetaDataTuple implements Tuple {
   }
 
   @Override
+  public byte[] getTextBytes(int fieldId) {
+    return values.get(fieldId).asTextBytes();
+  }
+
+  @Override
   public short getInt2(int fieldId) {
-    return (short)Integer.parseInt(values.get(fieldId).toString());
+    return values.get(fieldId).asInt2();
   }
 
   @Override
   public int getInt4(int fieldId) {
-    return Integer.parseInt(values.get(fieldId).toString());
+    return values.get(fieldId).asInt4();
   }
 
   @Override
   public long getInt8(int fieldId) {
-    return Long.parseLong(values.get(fieldId).toString());
+    return values.get(fieldId).asInt8();
   }
 
   @Override
   public float getFloat4(int fieldId) {
-    return Float.parseFloat(values.get(fieldId).toString());
+    return values.get(fieldId).asFloat4();
   }
 
   @Override
   public double getFloat8(int fieldId) {
-    return Float.parseFloat(values.get(fieldId).toString());
+    return values.get(fieldId).asFloat8();
   }
 
   @Override
   public String getText(int fieldId) {
-    return values.get(fieldId).toString();
+    return values.get(fieldId).asChars();
+  }
+
+  @Override
+  public TimeMeta getTimeDate(int fieldId) {
+    return values.get(fieldId).asTimeMeta();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
index 8f5bed6..eb3595f 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
@@ -20,7 +20,6 @@ package org.apache.tajo.jdbc;
 
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.datum.Datum;
 import org.apache.tajo.storage.Tuple;
 
 import java.io.IOException;
@@ -70,20 +69,11 @@ public class TajoMetaDataResultSet extends TajoResultSetBase {
 
   @Override
   public String getString(int fieldId) throws SQLException {
-    Datum datum = cur.get(fieldId - 1);
-    if(datum == null) {
-      return null;
-    }
-
-    return datum.asChars();
+    return cur.getText(fieldId - 1);
   }
 
   @Override
   public String getString(String name) throws SQLException {
-    Datum datum = cur.get(findColumn(name));
-    if(datum == null) {
-      return null;
-    }
-    return datum.asChars();
+    return cur.getText(findColumn(name));
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
index e24cf6e..7467dcd 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
@@ -882,7 +882,7 @@ public class ExprAnnotator extends BaseAlgebraVisitor<ExprAnnotator.Context, Eva
       time = DateTimeUtil.toTime(times[0], times[1], times[2], 0);
     }
     TimeDatum timeDatum = new TimeDatum(time);
-    TimeMeta tm = timeDatum.toTimeMeta();
+    TimeMeta tm = timeDatum.asTimeMeta();
 
     if (ctx.queryContext.containsKey(SessionVars.TIMEZONE)) {
       TimeZone tz = TimeZone.getTimeZone(ctx.queryContext.get(SessionVars.TIMEZONE));

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
index 870970b..2b301b6 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/FieldEval.java
@@ -58,7 +58,7 @@ public class FieldEval extends EvalNode implements Cloneable {
   @SuppressWarnings("unchecked")
 	public Datum eval(Tuple tuple) {
     super.eval(tuple);
-	  return tuple.get(fieldId);
+	  return tuple.asDatum(fieldId);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-plan/src/main/java/org/apache/tajo/plan/function/PythonAggFunctionInvoke.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/PythonAggFunctionInvoke.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/PythonAggFunctionInvoke.java
index c7fddf9..babc6ac 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/PythonAggFunctionInvoke.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/PythonAggFunctionInvoke.java
@@ -105,7 +105,7 @@ public class PythonAggFunctionInvoke extends AggFunctionInvoke implements Clonea
 
   @Override
   public void merge(FunctionContext context, Tuple params) {
-    if (params.get(0) instanceof NullDatum) {
+    if (params.isBlankOrNull(0)) {
       return;
     }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
index 0066c39..74c0e5a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
@@ -477,7 +477,7 @@ public class PythonScriptEngine extends TajoScriptEngine {
     }
     Datum result;
     try {
-      result = outputHandler.getNext().get(0);
+      result = outputHandler.getNext().asDatum(0);
     } catch (Exception e) {
       throw new RuntimeException("Problem getting output: " + e.getMessage(), e);
     }
@@ -594,7 +594,7 @@ public class PythonScriptEngine extends TajoScriptEngine {
     }
     Datum result;
     try {
-      result = outputHandler.getNext().get(0);
+      result = outputHandler.getNext().asDatum(0);
     } catch (Exception e) {
       throw new RuntimeException("Problem getting output: " + e.getMessage(), e);
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/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 9db6632..78404b0 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
@@ -56,7 +56,17 @@ public class CSVLineSerializer extends TextLineSerializer {
     int writtenBytes = 0;
 
     for (int i = 0; i < input.size(); i++) {
-      writtenBytes += serializeDatum(out, input.get(i), schema.getColumn(i).getDataType());
+      Datum datum = input.asDatum(i);
+      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());
+
+      writtenBytes += serde.serialize(out, datum, schema.getColumn(i).getDataType(), nullChars);
 
       if (input.size() - 1 > i) {
         out.write(delimiter);

http://git-wip-us.apache.org/repos/asf/tajo/blob/5c2aee23/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 879373b..c22a0f2 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
@@ -112,7 +112,7 @@ public class TextFieldSerializerDeserializer implements FieldSerializerDeseriali
         break;
       case TIME:
         if (hasTimezone) {
-          bytes = ((TimeDatum) datum).asChars(timezone, true).getBytes();
+          bytes = ((TimeDatum) datum).toString(timezone, true).getBytes();
         } else {
           bytes = datum.asTextBytes();
         }
@@ -121,7 +121,7 @@ public class TextFieldSerializerDeserializer implements FieldSerializerDeseriali
         break;
       case TIMESTAMP:
         if (hasTimezone) {
-          bytes = ((TimestampDatum) datum).asChars(timezone, true).getBytes();
+          bytes = ((TimestampDatum) datum).toString(timezone, true).getBytes();
         } else {
           bytes = datum.asTextBytes();
         }