http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core-tests/src/test/java/org/apache/tajo/ws/rs/resources/TestTablesResource.java
----------------------------------------------------------------------
diff --git 
a/tajo-core-tests/src/test/java/org/apache/tajo/ws/rs/resources/TestTablesResource.java
 
b/tajo-core-tests/src/test/java/org/apache/tajo/ws/rs/resources/TestTablesResource.java
index 9d42102..381c044 100644
--- 
a/tajo-core-tests/src/test/java/org/apache/tajo/ws/rs/resources/TestTablesResource.java
+++ 
b/tajo-core-tests/src/test/java/org/apache/tajo/ws/rs/resources/TestTablesResource.java
@@ -23,6 +23,7 @@ import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.conf.TajoConf.ConfVars;
 import org.apache.tajo.error.Errors.ResultCode;
+import org.apache.tajo.plan.serder.PlanGsonHelper;
 import org.apache.tajo.ws.rs.netty.gson.GsonFeature;
 import org.apache.tajo.ws.rs.requests.NewSessionRequest;
 import org.apache.tajo.ws.rs.requests.SubmitQueryRequest;
@@ -74,7 +75,7 @@ public class TestTablesResource extends QueryTestCaseBase {
                queriesURI = new URI(restServiceURI + "/queries");
                sessionsURI = new URI(restServiceURI + "/sessions");
                restClient = ClientBuilder.newBuilder()
-        .register(new GsonFeature(RestTestUtils.registerTypeAdapterMap()))
+        .register(new GsonFeature(PlanGsonHelper.registerAdapters()))
         .register(LoggingFilter.class)
         .property(ClientProperties.FEATURE_AUTO_DISCOVERY_DISABLE, true)
         .property(ClientProperties.METAINF_SERVICES_LOOKUP_DISABLE, true)

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java 
b/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
index 8472020..9ccfeb7 100644
--- a/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
+++ b/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
@@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.catalog.proto.CatalogProtos;
@@ -69,7 +70,7 @@ public class TPCH extends BenchmarkSet {
 
   @Override
   public void loadSchemas() {
-    Schema lineitem = new Schema()
+    Schema lineitem = SchemaFactory.newV1()
         .addColumn("l_orderkey", Type.INT4) // 0
         .addColumn("l_partkey", Type.INT4) // 1
         .addColumn("l_suppkey", Type.INT4) // 2
@@ -90,7 +91,7 @@ public class TPCH extends BenchmarkSet {
         .addColumn("l_comment", Type.TEXT); // 15
     schemas.put(LINEITEM, lineitem);
 
-    Schema customer = new Schema()
+    Schema customer = SchemaFactory.newV1()
         .addColumn("c_custkey", Type.INT4) // 0
         .addColumn("c_name", Type.TEXT) // 1
         .addColumn("c_address", Type.TEXT) // 2
@@ -101,7 +102,7 @@ public class TPCH extends BenchmarkSet {
         .addColumn("c_comment", Type.TEXT); // 7
     schemas.put(CUSTOMER, customer);
 
-    Schema customerParts = new Schema()
+    Schema customerParts = SchemaFactory.newV1()
         .addColumn("c_custkey", Type.INT4) // 0
         .addColumn("c_name", Type.TEXT) // 1
         .addColumn("c_address", Type.TEXT) // 2
@@ -111,14 +112,14 @@ public class TPCH extends BenchmarkSet {
         .addColumn("c_comment", Type.TEXT); // 6
     schemas.put(CUSTOMER_PARTS, customerParts);
 
-    Schema nation = new Schema()
+    Schema nation = SchemaFactory.newV1()
         .addColumn("n_nationkey", Type.INT4) // 0
         .addColumn("n_name", Type.TEXT) // 1
         .addColumn("n_regionkey", Type.INT4) // 2
         .addColumn("n_comment", Type.TEXT); // 3
     schemas.put(NATION, nation);
 
-    Schema part = new Schema()
+    Schema part = SchemaFactory.newV1()
         .addColumn("p_partkey", Type.INT4) // 0
         .addColumn("p_name", Type.TEXT) // 1
         .addColumn("p_mfgr", Type.TEXT) // 2
@@ -130,13 +131,13 @@ public class TPCH extends BenchmarkSet {
         .addColumn("p_comment", Type.TEXT); // 8
     schemas.put(PART, part);
 
-    Schema region = new Schema()
+    Schema region = SchemaFactory.newV1()
         .addColumn("r_regionkey", Type.INT4) // 0
         .addColumn("r_name", Type.TEXT) // 1
         .addColumn("r_comment", Type.TEXT); // 2
     schemas.put(REGION, region);
 
-    Schema orders = new Schema()
+    Schema orders = SchemaFactory.newV1()
         .addColumn("o_orderkey", Type.INT4) // 0
         .addColumn("o_custkey", Type.INT4) // 1
         .addColumn("o_orderstatus", Type.TEXT) // 2
@@ -151,7 +152,7 @@ public class TPCH extends BenchmarkSet {
     schemas.put(EMPTY_ORDERS, orders);
 
 
-    Schema partsupp = new Schema()
+    Schema partsupp = SchemaFactory.newV1()
         .addColumn("ps_partkey", Type.INT4) // 0
         .addColumn("ps_suppkey", Type.INT4) // 1
         .addColumn("ps_availqty", Type.INT4) // 2
@@ -159,7 +160,7 @@ public class TPCH extends BenchmarkSet {
         .addColumn("ps_comment", Type.TEXT); // 4
     schemas.put(PARTSUPP, partsupp);
 
-    Schema supplier = new Schema()
+    Schema supplier = SchemaFactory.newV1()
         .addColumn("s_suppkey", Type.INT4) // 0
         .addColumn("s_name", Type.TEXT) // 1
         .addColumn("s_address", Type.TEXT) // 2
@@ -171,7 +172,7 @@ public class TPCH extends BenchmarkSet {
   }
 
   public void loadOutSchema() {
-    Schema q2 = new Schema()
+    Schema q2 = SchemaFactory.newV1()
         .addColumn("s_acctbal", Type.FLOAT8)
         .addColumn("s_name", Type.TEXT)
         .addColumn("n_name", Type.TEXT)
@@ -207,7 +208,7 @@ public class TPCH extends BenchmarkSet {
 
     PartitionMethodDesc partitionMethodDesc = null;
     if (tableName.equals(CUSTOMER_PARTS)) {
-      Schema expressionSchema = new Schema();
+      Schema expressionSchema = SchemaFactory.newV1();
       expressionSchema.addColumn("c_nationkey", TajoDataTypes.Type.INT4);
       partitionMethodDesc = new PartitionMethodDesc(
           tajo.getCurrentDatabase(),

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java 
b/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
index ea5e13d..a922ca8 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/json/CoreGsonHelper.java
@@ -21,8 +21,10 @@ package org.apache.tajo.engine.json;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.json.FunctionAdapter;
+import org.apache.tajo.catalog.json.SchemaAdapter;
 import org.apache.tajo.catalog.json.TableMetaAdapter;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
@@ -34,6 +36,7 @@ import org.apache.tajo.plan.logical.LogicalNode;
 import org.apache.tajo.function.Function;
 import org.apache.tajo.plan.serder.EvalNodeAdapter;
 import org.apache.tajo.plan.serder.LogicalNodeAdapter;
+import org.apache.tajo.plan.serder.PlanGsonHelper;
 
 import java.lang.reflect.Type;
 import java.util.HashMap;
@@ -46,27 +49,10 @@ public class CoreGsonHelper {
 
   private CoreGsonHelper() {
   }
-       
-       private static Map<Type, GsonSerDerAdapter> registerAdapters() {
-    Map<Type, GsonSerDerAdapter> adapters = new HashMap<>();
-    adapters.put(Path.class, new PathSerializer());
-    adapters.put(Class.class, new ClassNameSerializer());
-    adapters.put(LogicalNode.class, new LogicalNodeAdapter());
-    adapters.put(EvalNode.class, new EvalNodeAdapter());
-    adapters.put(TableMeta.class, new TableMetaAdapter());
-    adapters.put(Function.class, new FunctionAdapter());
-    adapters.put(GeneralFunction.class, new FunctionAdapter());
-    adapters.put(AggFunction.class, new FunctionAdapter());
-    adapters.put(Datum.class, new DatumAdapter());
-    adapters.put(DataType.class, new DataTypeAdapter());
-    adapters.put(TimeZone.class, new TimeZoneGsonSerdeAdapter());
-
-    return adapters;
-       }
 
        public static Gson getInstance() {
          if (gson == null ) {
-      GsonHelper helper = new GsonHelper(registerAdapters());
+      GsonHelper helper = new GsonHelper(PlanGsonHelper.registerAdapters());
       gson = helper.getGson();
          }
          return gson;
@@ -77,7 +63,7 @@ public class CoreGsonHelper {
       GsonBuilder prettyBuilder = new GsonBuilder()
           .setPrettyPrinting()
           .excludeFieldsWithoutExposeAnnotation();
-      GsonHelper.registerAdapters(prettyBuilder, registerAdapters());
+      GsonHelper.registerAdapters(prettyBuilder, 
PlanGsonHelper.registerAdapters());
       gsonPretty = prettyBuilder.create();
     }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/DataChannel.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/DataChannel.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/DataChannel.java
index 10e9973..3e6e6bf 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/DataChannel.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/DataChannel.java
@@ -23,6 +23,7 @@ import org.apache.tajo.BuiltinStorages;
 import org.apache.tajo.ExecutionBlockId;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SchemaUtil;
 import org.apache.tajo.util.StringUtils;
 
@@ -68,7 +69,7 @@ public class DataChannel {
     this.transmitType = proto.getTransmitType();
     this.shuffleType = proto.getShuffleType();
     if (proto.hasSchema()) {
-      this.setSchema(new Schema(proto.getSchema()));
+      this.setSchema(SchemaFactory.newV1(proto.getSchema()));
     }
     if (proto.getShuffleKeysCount() > 0) {
       shuffleKeys = new Column[proto.getShuffleKeysCount()];

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
index 8f7673b..eb8f7ad 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/builder/DistinctGroupbyBuilder.java
@@ -23,6 +23,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.proto.CatalogProtos.SortSpecProto;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.engine.planner.global.DataChannel;
@@ -644,7 +645,7 @@ public class DistinctGroupbyBuilder {
     //Set SecondStage ColumnId and Input schema
     secondStageDistinctNode.setResultColumnIds(secondStageColumnIds);
 
-    Schema secondStageInSchema = new Schema();
+    Schema secondStageInSchema = SchemaFactory.newV1();
     //TODO merged tuple schema
     int index = 0;
     for(GroupbyNode eachNode: secondStageDistinctNode.getSubPlans()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
index 89c5b3d..8002989 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.IOUtils;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.catalog.proto.CatalogProtos.FragmentProto;
@@ -93,7 +94,7 @@ public class BSTIndexScanExec extends ScanExec {
   }
 
   private static Schema mergeSubSchemas(Schema originalSchema, Schema 
subSchema, List<Target> targets, EvalNode qual) {
-    Schema mergedSchema = new Schema();
+    Schema mergedSchema = SchemaFactory.newV1();
     Set<Column> qualAndTargets = new HashSet<>();
     qualAndTargets.addAll(EvalTreeUtil.findUniqueColumns(qual));
     for (Target target : targets) {
@@ -131,7 +132,7 @@ public class BSTIndexScanExec extends ScanExec {
     // in the case where projected column or expression are given
     // the target can be an empty list.
     if (plan.hasTargets()) {
-      projected = new Schema();
+      projected = SchemaFactory.newV1();
       Set<Column> columnSet = new HashSet<>();
 
       if (plan.hasQual()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
index bc667cb..1142095 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
@@ -25,10 +25,7 @@ import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.SessionVars;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.PartitionDescProto;
 import org.apache.tajo.catalog.proto.CatalogProtos.PartitionKeyProto;
 import org.apache.tajo.catalog.statistics.TableStats;
@@ -87,7 +84,7 @@ public abstract class ColPartitionStoreExec extends 
UnaryPhysicalExec {
     if (plan.getType() == NodeType.INSERT && keyNum > 0) {
       Column[] removedPartitionColumns = new Column[this.outSchema.size() - 
keyNum];
       System.arraycopy(this.outSchema.toArray(), 0, removedPartitionColumns, 
0, removedPartitionColumns.length);
-      this.outSchema = new Schema(removedPartitionColumns);
+      this.outSchema = SchemaFactory.newV1(removedPartitionColumns);
     }
 
     keyIds = new int[keyNum];

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
index 3ddad1e..04b23f8 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
@@ -142,7 +142,7 @@ public class SeqScanExec extends ScanExec {
     // in the case where projected column or expression are given
     // the target can be an empty list.
     if (plan.hasTargets()) {
-      projected = new Schema();
+      projected = SchemaFactory.newV1();
       Set<Column> columnSet = new HashSet<>();
 
       if (plan.hasQual()) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/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 44845e7..04a4a19 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
@@ -21,6 +21,7 @@ package org.apache.tajo.engine.planner.physical;
 import com.google.common.collect.Lists;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.plan.expr.EvalNode;
@@ -119,7 +120,7 @@ public class WindowAggExec extends UnaryPhysicalExec {
       endCurrentRowFlags = new boolean[functions.length];
 
       List<Column> additionalSortKeyColumns = Lists.newArrayList();
-      Schema rewrittenSchema = new Schema(outSchema);
+      Schema rewrittenSchema = SchemaFactory.newV1(outSchema);
       for (int i = 0; i < functions.length; i++) {
         WindowSpec.WindowEndBound endBound = 
functions[i].getWindowFrame().getEndBound();
         switch (endBound.getBoundType()) {
@@ -160,7 +161,7 @@ public class WindowAggExec extends UnaryPhysicalExec {
       }
 
       sortKeyColumns = new int[additionalSortKeyColumns.size()];
-      schemaForOrderBy = new Schema(outSchema);
+      schemaForOrderBy = SchemaFactory.newV1(outSchema);
       for (int i = 0; i < additionalSortKeyColumns.size(); i++) {
         sortKeyColumns[i] = i;
         schemaForOrderBy.addColumn(additionalSortKeyColumns.get(i));

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java 
b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
index bfba51d..205329b 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
@@ -876,7 +876,7 @@ public class TajoMasterClientService extends 
AbstractService {
 
         Schema schema = null;
         if (request.hasSchema()) {
-          schema = new Schema(request.getSchema());
+          schema = SchemaFactory.newV1(request.getSchema());
         }
 
         TableMeta meta = new TableMeta(request.getMeta());

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
 
b/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
index 2740728..47d4b4f 100644
--- 
a/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
@@ -21,6 +21,7 @@ package org.apache.tajo.master.exec;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.Target;
@@ -154,7 +155,7 @@ public class ExplainPlanPreprocessorForTest {
       Column[] columns = schema.toArray();
       Arrays.sort(columns, columnComparator);
 
-      Schema sorted = new Schema();
+      Schema sorted = SchemaFactory.newV1();
       for (Column col : columns) {
         sorted.addColumn(col);
       }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/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 641e2b9..da11bd8 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
@@ -218,7 +218,7 @@ public class QueryExecutor {
       explainStr = 
PlannerUtil.buildExplainString(plan.getRootBlock().getRoot());
     }
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("explain", TajoDataTypes.Type.TEXT);
 
     SerializedResultSet.Builder serializedResBuilder = 
SerializedResultSet.newBuilder();

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java 
b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
index 4e4251a..8fdd6ce 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
@@ -634,7 +634,7 @@ public class Repartitioner {
     ExecutionBlock sampleChildBlock = masterPlan.getChild(stage.getId(), 0);
     SortNode sortNode = PlannerUtil.findTopNode(sampleChildBlock.getPlan(), 
NodeType.SORT);
     SortSpec [] sortSpecs = sortNode.getSortKeys();
-    Schema sortSchema = new Schema(channel.getShuffleKeys());
+    Schema sortSchema = SchemaFactory.newV1(channel.getShuffleKeys());
 
     TupleRange[] ranges;
     int determinedTaskNum;

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-core/src/main/java/org/apache/tajo/ws/rs/TajoRestService.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/ws/rs/TajoRestService.java 
b/tajo-core/src/main/java/org/apache/tajo/ws/rs/TajoRestService.java
index 293192c..ba106d2 100644
--- a/tajo-core/src/main/java/org/apache/tajo/ws/rs/TajoRestService.java
+++ b/tajo-core/src/main/java/org/apache/tajo/ws/rs/TajoRestService.java
@@ -21,28 +21,10 @@ package org.apache.tajo.ws.rs;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.service.CompositeService;
-import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.json.FunctionAdapter;
-import org.apache.tajo.catalog.json.TableMetaAdapter;
-import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.datum.Datum;
-import org.apache.tajo.function.Function;
-import org.apache.tajo.json.ClassNameSerializer;
-import org.apache.tajo.json.DataTypeAdapter;
-import org.apache.tajo.json.DatumAdapter;
-import org.apache.tajo.json.GsonSerDerAdapter;
-import org.apache.tajo.json.PathSerializer;
-import org.apache.tajo.json.TimeZoneGsonSerdeAdapter;
 import org.apache.tajo.master.TajoMaster.MasterContext;
-import org.apache.tajo.plan.expr.EvalNode;
-import org.apache.tajo.plan.function.AggFunction;
-import org.apache.tajo.plan.function.GeneralFunction;
-import org.apache.tajo.plan.logical.LogicalNode;
-import org.apache.tajo.plan.serder.EvalNodeAdapter;
-import org.apache.tajo.plan.serder.LogicalNodeAdapter;
+import org.apache.tajo.plan.serder.PlanGsonHelper;
 import org.apache.tajo.ws.rs.netty.NettyRestServer;
 import org.apache.tajo.ws.rs.netty.NettyRestServerFactory;
 import org.apache.tajo.ws.rs.netty.gson.GsonFeature;
@@ -50,12 +32,8 @@ import org.glassfish.jersey.filter.LoggingFilter;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.ServerProperties;
 
-import java.lang.reflect.Type;
 import java.net.InetSocketAddress;
 import java.net.URI;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TimeZone;
 
 public class TajoRestService extends CompositeService {
   
@@ -69,27 +47,10 @@ public class TajoRestService extends CompositeService {
     
     this.masterContext = masterContext;
   }
-  
-  private Map<Type, GsonSerDerAdapter<?>> registerTypeAdapterMap() {
-    Map<Type, GsonSerDerAdapter<?>> adapters = new HashMap<>();
-    adapters.put(Path.class, new PathSerializer());
-    adapters.put(Class.class, new ClassNameSerializer());
-    adapters.put(LogicalNode.class, new LogicalNodeAdapter());
-    adapters.put(EvalNode.class, new EvalNodeAdapter());
-    adapters.put(TableMeta.class, new TableMetaAdapter());
-    adapters.put(Function.class, new FunctionAdapter());
-    adapters.put(GeneralFunction.class, new FunctionAdapter());
-    adapters.put(AggFunction.class, new FunctionAdapter());
-    adapters.put(Datum.class, new DatumAdapter());
-    adapters.put(DataType.class, new DataTypeAdapter());
-    adapters.put(TimeZone.class, new TimeZoneGsonSerdeAdapter());
-
-    return adapters;
-  }
 
   @Override
   protected void serviceInit(Configuration conf) throws Exception {
-    GsonFeature gsonFeature = new GsonFeature(registerTypeAdapterMap());
+    GsonFeature gsonFeature = new 
GsonFeature(PlanGsonHelper.registerAdapters());
     
     ClientApplication clientApplication = new ClientApplication(masterContext);
     ResourceConfig resourceConfig = 
ResourceConfig.forApplication(clientApplication)

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
----------------------------------------------------------------------
diff --git 
a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java 
b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
index acb5b69..f4bf2b0 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
@@ -605,7 +605,7 @@ public class TajoDatabaseMetaData implements 
DatabaseMetaData {
         , new ArrayList<MetaDataTuple>());
   }
 
-  private final static Schema importedExportedSchema = new Schema()
+  private final static Schema importedExportedSchema = SchemaFactory.newV1()
       .addColumn("PKTABLE_CAT", Type.VARCHAR)   // 0
       .addColumn("PKTABLE_SCHEM", Type.VARCHAR) // 1
       .addColumn("PKTABLE_NAME", Type.VARCHAR)  // 2

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java 
b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
index 4c926bb..0fbb9aa 100644
--- a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
@@ -69,7 +69,7 @@ public class TestResultSet {
     conf = util.getConfiguration();
     sm = TablespaceManager.getDefault();
 
-    scoreSchema = new Schema();
+    scoreSchema = SchemaFactory.newV1();
     scoreSchema.addColumn("deptname", Type.TEXT);
     scoreSchema.addColumn("score", Type.INT4);
     scoreMeta = CatalogUtil.newTableMeta("TEXT");
@@ -197,7 +197,7 @@ public class TestResultSet {
       String query = "select col1, col2, col3 from " + tableName;
 
       String [] table = new String[] {tableName};
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("col1", Type.DATE);
       schema.addColumn("col2", Type.TIME);
       schema.addColumn("col3", Type.TIMESTAMP);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/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 3d8ad41..f791a3d 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
@@ -1228,7 +1228,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
   }
 
   private static Schema getNaturalJoinSchema(LogicalNode left, LogicalNode 
right) {
-    Schema joinSchema = new Schema();
+    Schema joinSchema = SchemaFactory.newV1();
     Schema commons = SchemaUtil.getNaturalJoinColumns(left.getOutSchema(), 
right.getOutSchema());
     joinSchema.addColumns(commons);
     for (Column c : left.getOutSchema().getRootColumns()) {
@@ -1677,7 +1677,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
       // See PreLogicalPlanVerifier.visitInsert.
       // It guarantees that the equivalence between the numbers of target and 
projected columns.
       ColumnReferenceExpr [] targets = expr.getTargetColumns();
-      Schema targetColumns = new Schema();
+      Schema targetColumns = SchemaFactory.newV1();
       for (ColumnReferenceExpr target : targets) {
         Column targetColumn = 
desc.getLogicalSchema().getColumn(target.getCanonicalName().replace(".", "/"));
 
@@ -1697,7 +1697,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
       Schema tableSchema = desc.getLogicalSchema();
       Schema projectedSchema = insertNode.getChild().getOutSchema();
 
-      Schema targetColumns = new Schema();
+      Schema targetColumns = SchemaFactory.newV1();
       for (int i = 0; i < projectedSchema.size(); i++) {
         targetColumns.addColumn(tableSchema.getColumn(i));
       }
@@ -1956,7 +1956,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
               queryOutputSchema.size() < partitionExpressionSchema.size()) {
             throw makeSyntaxError("Partition columns cannot be more than table 
columns.");
           }
-          Schema tableSchema = new Schema();
+          Schema tableSchema = SchemaFactory.newV1();
           for (int i = 0; i < queryOutputSchema.size() - 
partitionExpressionSchema.size(); i++) {
             tableSchema.addColumn(queryOutputSchema.getColumn(i));
           }
@@ -1964,7 +1964,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
           createTableNode.setTableSchema(tableSchema);
         } else {
           // Convert the schema of subquery into the target table's one.
-          Schema schema = new Schema(subQuery.getOutSchema());
+          Schema schema = SchemaFactory.newV1(subQuery.getOutSchema());
           schema.setQualifier(createTableNode.getTableName());
           createTableNode.setOutSchema(schema);
           createTableNode.setTableSchema(schema);
@@ -2040,7 +2040,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
    * @return schema transformed from table definition elements
    */
   private Schema convertColumnsToSchema(ColumnDefinition[] elements) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
 
     for (ColumnDefinition columnDefinition: elements) {
       schema.addColumn(convertColumn(columnDefinition));
@@ -2056,7 +2056,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
    * @return schema transformed from table definition elements
    */
   private static Schema convertTableElementsSchema(ColumnDefinition[] 
elements) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
 
     for (ColumnDefinition columnDefinition: elements) {
       schema.addColumn(convertColumn(columnDefinition));

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
index 3318d35..31cd1c6 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
@@ -27,6 +27,7 @@ import org.apache.tajo.annotation.Nullable;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.exception.TajoInternalError;
@@ -144,7 +145,7 @@ public class EvalTreeUtil {
   }
   
   public static Schema getSchemaByTargets(Schema inputSchema, List<Target> 
targets) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     for (Target target : targets) {
       schema.addColumn(
           target.hasAlias() ? target.getAlias() : 
target.getEvalTree().getName(),

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/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 05a72fe..8bccdc4 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
@@ -290,7 +290,7 @@ public class PythonScriptEngine extends TajoScriptEngine {
   private final TableMeta pipeMeta = CatalogUtil.newTableMeta("TEXT");
 
   private final Tuple EMPTY_INPUT = new VTuple(0);
-  private final Schema EMPTY_SCHEMA = new Schema();
+  private final Schema EMPTY_SCHEMA = SchemaFactory.newV1();
 
   public PythonScriptEngine(FunctionDesc functionDesc) {
     if (!functionDesc.getInvocation().hasPython() && 
!functionDesc.getInvocation().hasPythonAggregation()) {
@@ -388,27 +388,27 @@ public class PythonScriptEngine extends TajoScriptEngine {
   private void setSchema() {
     if (invocationDesc.isScalarFunction()) {
       TajoDataTypes.DataType[] paramTypes = functionSignature.getParamTypes();
-      inSchema = new Schema();
+      inSchema = SchemaFactory.newV1();
       for (int i = 0; i < paramTypes.length; i++) {
         inSchema.addColumn(new Column("in_" + i, paramTypes[i]));
       }
-      outSchema = new Schema(new Column[]{new Column("out", 
functionSignature.getReturnType())});
+      outSchema = SchemaFactory.newV1(new Column[]{new Column("out", 
functionSignature.getReturnType())});
     } else {
       // UDAF
       if (firstPhase) {
         // first phase
         TajoDataTypes.DataType[] paramTypes = 
functionSignature.getParamTypes();
-        inSchema = new Schema();
+        inSchema = SchemaFactory.newV1();
         for (int i = 0; i < paramTypes.length; i++) {
           inSchema.addColumn(new Column("in_" + i, paramTypes[i]));
         }
-        outSchema = new Schema(new Column[]{new Column("json", 
TajoDataTypes.Type.TEXT)});
+        outSchema = SchemaFactory.newV1(new Column[]{new Column("json", 
TajoDataTypes.Type.TEXT)});
       } else if (lastPhase) {
-        inSchema = new Schema(new Column[]{new Column("json", 
TajoDataTypes.Type.TEXT)});
-        outSchema = new Schema(new Column[]{new Column("out", 
functionSignature.getReturnType())});
+        inSchema = SchemaFactory.newV1(new Column[]{new Column("json", 
TajoDataTypes.Type.TEXT)});
+        outSchema = SchemaFactory.newV1(new Column[]{new Column("out", 
functionSignature.getReturnType())});
       } else {
         // intermediate phase
-        inSchema = outSchema = new Schema(new Column[]{new Column("json", 
TajoDataTypes.Type.TEXT)});
+        inSchema = outSchema = SchemaFactory.newV1(new Column[]{new 
Column("json", TajoDataTypes.Type.TEXT)});
       }
     }
     projectionCols = new int[outSchema.size()];

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
index c863034..3fed563 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/CreateTableNode.java
@@ -21,6 +21,7 @@ package org.apache.tajo.plan.logical;
 import com.google.common.base.Objects;
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.plan.PlanString;
 import org.apache.tajo.util.TUtil;
 
@@ -41,7 +42,7 @@ public class CreateTableNode extends StoreTableNode 
implements Cloneable {
 
   public Schema getLogicalSchema() {
     if (hasPartition()) {
-      Schema logicalSchema = new Schema(tableSchema);
+      Schema logicalSchema = SchemaFactory.newV1(tableSchema);
       logicalSchema.addColumns(getPartitionMethod().getExpressionSchema());
       return logicalSchema;
     } else {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
index eae18bb..a993d64 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/InsertNode.java
@@ -21,6 +21,7 @@ package org.apache.tajo.plan.logical;
 import com.google.gson.annotations.Expose;
 
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.plan.PlanString;
 import org.apache.tajo.util.TUtil;
@@ -123,9 +124,9 @@ public class InsertNode extends StoreTableNode implements 
Cloneable {
   public Object clone() throws CloneNotSupportedException {
     InsertNode insertNode = (InsertNode) super.clone();
     insertNode.overwrite = overwrite;
-    insertNode.tableSchema = new Schema(tableSchema);
-    insertNode.targetSchema = targetSchema != null ? new Schema(targetSchema) 
: null;
-    insertNode.projectedSchema = projectedSchema != null ? new 
Schema(projectedSchema) : null;
+    insertNode.tableSchema = SchemaFactory.newV1(tableSchema);
+    insertNode.targetSchema = targetSchema != null ? 
SchemaFactory.newV1(targetSchema) : null;
+    insertNode.projectedSchema = projectedSchema != null ? 
SchemaFactory.newV1(projectedSchema) : null;
     insertNode.uri = uri != null ? uri : null;
     return insertNode;
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
index a3b8001..5427ba6 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
@@ -22,10 +22,7 @@ import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.gson.annotations.Expose;
 import org.apache.commons.lang.StringUtils;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaUtil;
-import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.*;
 import org.apache.tajo.plan.PlanString;
 import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.expr.EvalNode;
@@ -84,7 +81,7 @@ public class ScanNode extends RelationNode implements 
Projectable, SelectableNod
     String qualifiedAlias = CatalogUtil.buildFQName(databaseName, alias);
     this.setInSchema(tableDesc.getSchema());
     this.getInSchema().setQualifier(qualifiedAlias);
-    this.setOutSchema(new Schema(getInSchema()));
+    this.setOutSchema(SchemaFactory.newV1(getInSchema()));
     logicalSchema = SchemaUtil.getQualifiedLogicalSchema(tableDesc, 
qualifiedAlias);
        }
        

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/SelfDescSchemaBuildPhase.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/SelfDescSchemaBuildPhase.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/SelfDescSchemaBuildPhase.java
index 59adfc5..c5ca1ef 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/SelfDescSchemaBuildPhase.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/SelfDescSchemaBuildPhase.java
@@ -401,7 +401,7 @@ public class SelfDescSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
     private Schema buildSchemaFromColumnSet(Set<Column> columns) throws 
TajoException {
       SchemaGraph schemaGraph = new SchemaGraph();
       Set<ColumnVertex> rootVertexes = new HashSet<>();
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
 
       Set<Column> simpleColumns = new HashSet<>();
       List<Column> columnList = new ArrayList<>(columns);
@@ -523,7 +523,7 @@ public class SelfDescSchemaBuildPhase extends 
LogicalPlanPreprocessPhase {
         if (graph.isLeaf(schemaVertex)) {
           schemaVertex.column = new Column(schemaVertex.name, 
schemaVertex.type);
         } else {
-          Schema schema = new Schema();
+          Schema schema = SchemaFactory.newV1();
           for (ColumnVertex eachChild : graph.getChilds(schemaVertex)) {
             schema.addColumn(eachChild.column);
           }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/IndexScanInfo.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/IndexScanInfo.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/IndexScanInfo.java
index 9ac8ccf..26c27b3 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/IndexScanInfo.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/IndexScanInfo.java
@@ -21,6 +21,7 @@ package org.apache.tajo.plan.rewrite.rules;
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.catalog.IndexDesc;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.ProtoObject;
@@ -92,7 +93,7 @@ public class IndexScanInfo extends AccessPathInfo {
   public IndexScanInfo(TableStats tableStats, IndexDesc indexDesc, 
SimplePredicate[] predicates) {
     super(ScanTypeControl.INDEX_SCAN, tableStats);
     this.indexPath = indexDesc.getIndexPath();
-    keySchema = new Schema();
+    keySchema = SchemaFactory.newV1();
     this.predicates = predicates;
     for (SimplePredicate predicate : predicates) {
       keySchema.addColumn(predicate.getKeySortSpec().getSortKey());

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
index cf54f7b..00580ae 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/PartitionedTableRewriter.java
@@ -334,7 +334,7 @@ public class PartitionedTableRewriter implements 
LogicalPlanRewriteRule {
     TableDesc table = scanNode.getTableDesc();
     PartitionMethodDesc partitionDesc = 
scanNode.getTableDesc().getPartitionMethod();
 
-    Schema paritionValuesSchema = new Schema();
+    Schema paritionValuesSchema = SchemaFactory.newV1();
     for (Column column : partitionDesc.getExpressionSchema().getRootColumns()) 
{
       paritionValuesSchema.addColumn(column);
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
index e8c0d4f..4b47e4a 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
@@ -24,10 +24,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.tajo.OverridableConf;
 import org.apache.tajo.algebra.JoinType;
 import org.apache.tajo.annotation.Nullable;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SortSpec;
-import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.exception.NotImplementedException;
@@ -449,7 +446,7 @@ public class LogicalNodeDeserializer {
       predicates[i] = new SimplePredicate(indexScanSpec.getPredicates(i));
     }
 
-    indexScan.set(new Schema(indexScanSpec.getKeySchema()), predicates,
+    indexScan.set(SchemaFactory.newV1(indexScanSpec.getKeySchema()), 
predicates,
         TUtil.stringToURI(indexScanSpec.getIndexPath()));
 
     return indexScan;
@@ -683,7 +680,7 @@ public class LogicalNodeDeserializer {
     for (int i = 0; i < keySortSpecs.length; i++) {
       keySortSpecs[i] = new SortSpec(createIndexProto.getKeySortSpecs(i));
     }
-    createIndex.setKeySortSpecs(new 
Schema(createIndexProto.getTargetRelationSchema()),
+    
createIndex.setKeySortSpecs(SchemaFactory.newV1(createIndexProto.getTargetRelationSchema()),
         keySortSpecs);
     createIndex.setUnique(createIndexProto.getIsUnique());
     createIndex.setClustered(createIndexProto.getIsClustered());
@@ -727,7 +724,7 @@ public class LogicalNodeDeserializer {
   }
 
   public static Schema convertSchema(CatalogProtos.SchemaProto proto) {
-    return new Schema(proto);
+    return SchemaFactory.newV1(proto);
   }
 
   public static Column[] convertColumns(List<CatalogProtos.ColumnProto> 
columnProtos) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/serder/PlanGsonHelper.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/PlanGsonHelper.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/PlanGsonHelper.java
index 875f1d1..77bf103 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/PlanGsonHelper.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/PlanGsonHelper.java
@@ -21,8 +21,10 @@ package org.apache.tajo.plan.serder;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.json.FunctionAdapter;
+import org.apache.tajo.catalog.json.SchemaAdapter;
 import org.apache.tajo.catalog.json.TableMetaAdapter;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
@@ -45,8 +47,8 @@ public class PlanGsonHelper {
   private PlanGsonHelper() {
   }
        
-       private static Map<Type, GsonSerDerAdapter> registerAdapters() {
-    Map<Type, GsonSerDerAdapter> adapters = new HashMap<>();
+       public static Map<Type, GsonSerDerAdapter<?>> registerAdapters() {
+    Map<Type, GsonSerDerAdapter<?>> adapters = new HashMap<>();
     adapters.put(Path.class, new PathSerializer());
     adapters.put(Class.class, new ClassNameSerializer());
     adapters.put(LogicalNode.class, new LogicalNodeAdapter());
@@ -58,6 +60,7 @@ public class PlanGsonHelper {
     adapters.put(Datum.class, new DatumAdapter());
     adapters.put(DataType.class, new DataTypeAdapter());
     adapters.put(TimeZone.class, new TimeZoneGsonSerdeAdapter());
+    adapters.put(Schema.class, new SchemaAdapter());
 
     return adapters;
        }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
index 6897e17..eccd37a 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
@@ -565,7 +565,7 @@ public class PlannerUtil {
   }
 
   public static Schema sortSpecsToSchema(SortSpec[] sortSpecs) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     for (SortSpec spec : sortSpecs) {
       schema.addColumn(spec.getSortKey());
     }
@@ -656,7 +656,7 @@ public class PlannerUtil {
   }
 
   public static Schema targetToSchema(List<Target> targets) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     for (Target t : targets) {
       DataType type = t.getEvalTree().getValueType();
       String name;

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-plan/src/test/java/org/apache/tajo/plan/TestLogicalNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/test/java/org/apache/tajo/plan/TestLogicalNode.java 
b/tajo-plan/src/test/java/org/apache/tajo/plan/TestLogicalNode.java
index 56edccc..f3acb00 100644
--- a/tajo-plan/src/test/java/org/apache/tajo/plan/TestLogicalNode.java
+++ b/tajo-plan/src/test/java/org/apache/tajo/plan/TestLogicalNode.java
@@ -22,6 +22,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.plan.logical.GroupbyNode;
 import org.apache.tajo.plan.logical.JoinNode;
@@ -35,7 +36,7 @@ public class TestLogicalNode {
 
   @Test
   public void testEquals() {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("name", Type.TEXT);
     schema.addColumn("age", Type.INT2);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/BaseTupleComparator.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/BaseTupleComparator.java
 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/BaseTupleComparator.java
index 921563a..2d6d398 100644
--- 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/BaseTupleComparator.java
+++ 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/BaseTupleComparator.java
@@ -20,6 +20,7 @@ package org.apache.tajo.storage;
 
 import com.google.common.base.Preconditions;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.common.ProtoObject;
 import org.apache.tajo.datum.Datum;
@@ -68,7 +69,7 @@ public class BaseTupleComparator extends TupleComparator 
implements ProtoObject<
   }
 
   public BaseTupleComparator(TupleComparatorProto proto) {
-    this.schema = new Schema(proto.getSchema());
+    this.schema = SchemaFactory.newV1(proto.getSchema());
 
     this.sortSpecs = new SortSpec[proto.getSortSpecsCount()];
     for (int i = 0; i < proto.getSortSpecsCount(); i++) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
index 04d7fed..ec20aca 100644
--- 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
+++ 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
@@ -21,6 +21,7 @@ package org.apache.tajo.storage;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.ColumnStats;
 import org.apache.tajo.catalog.statistics.TableStats;
@@ -165,7 +166,7 @@ public class MergeScanner implements Scanner {
 
   @Override
   public void setTarget(Column[] targets) {
-    this.target = new Schema(targets);
+    this.target = SchemaFactory.newV1(targets);
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TupleRange.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TupleRange.java
 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TupleRange.java
index c42cdd6..560e642 100644
--- 
a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TupleRange.java
+++ 
b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TupleRange.java
@@ -20,6 +20,7 @@ package org.apache.tajo.storage;
 
 import com.google.common.base.Objects;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 
 /**
@@ -38,7 +39,7 @@ public class TupleRange implements Comparable<TupleRange>, 
Cloneable {
   }
 
   public static Schema sortSpecsToSchema(SortSpec[] sortSpecs) {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     for (SortSpec spec : sortSpecs) {
       schema.addColumn(spec.getSortKey());
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
 
b/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
index 96f90e7..df5d3b0 100644
--- 
a/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
+++ 
b/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
@@ -20,6 +20,7 @@ package org.apache.tajo.storage;
 
 
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.NullDatum;
@@ -40,7 +41,7 @@ public class TestLazyTuple {
   public void setUp() {
     nullbytes = "\\N".getBytes();
 
-    schema = new Schema();
+    schema = SchemaFactory.newV1();
     schema.addColumn("col1", TajoDataTypes.Type.BOOLEAN);
     schema.addColumn("col2", TajoDataTypes.Type.BIT);
     schema.addColumn("col3", TajoDataTypes.Type.CHAR, 7);
@@ -197,7 +198,7 @@ public class TestLazyTuple {
   @Test
   public void testInvalidNumber() {
     byte[][] bytes = BytesUtils.splitPreserveAllTokens(" 1| |2 ||".getBytes(), 
'|', 5);
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", TajoDataTypes.Type.INT2);
     schema.addColumn("col2", TajoDataTypes.Type.INT4);
     schema.addColumn("col3", TajoDataTypes.Type.INT8);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
 
b/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
index 52622ee..e5d8464 100644
--- 
a/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
+++ 
b/tajo-storage/tajo-storage-common/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.storage;
 
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.datum.*;
@@ -44,7 +45,7 @@ public class TestTupleComparator {
 
   @Test
   public final void testCompare() {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.INT4);
     schema.addColumn("col2", Type.INT4);
     schema.addColumn("col3", Type.INT4);
@@ -77,7 +78,7 @@ public class TestTupleComparator {
 
   @Test
   public void testNullFirst() throws Exception {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("name", Type.TEXT);
 
@@ -117,7 +118,7 @@ public class TestTupleComparator {
 
   @Test
   public void testNullLast() throws Exception {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("name", Type.TEXT);
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestColumnMapping.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestColumnMapping.java
 
b/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestColumnMapping.java
index bfdc8ca..6713519 100644
--- 
a/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestColumnMapping.java
+++ 
b/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestColumnMapping.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.storage.hbase;
 
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.util.KeyValueSet;
@@ -35,7 +36,7 @@ public class TestColumnMapping {
     keyValueSet.set(HBaseStorageConstants.META_TABLE_KEY, "test");
     keyValueSet.set(HBaseStorageConstants.META_COLUMNS_KEY, 
":key,col2:key:,col2:value:#b,col3:");
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("c1", Type.TEXT);
     schema.addColumn("c2", Type.TEXT);
     schema.addColumn("c3", Type.TEXT);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/index/bst/BSTIndex.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/index/bst/BSTIndex.java
 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/index/bst/BSTIndex.java
index e0051f4..01a6e7f 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/index/bst/BSTIndex.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/index/bst/BSTIndex.java
@@ -26,6 +26,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.*;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.proto.CatalogProtos.SchemaProto;
 import org.apache.tajo.storage.*;
 import org.apache.tajo.storage.RowStoreUtil.RowStoreDecoder;
@@ -543,7 +544,7 @@ public class BSTIndex implements IndexMethod {
       SchemaProto.Builder builder = SchemaProto.newBuilder();
       builder.mergeFrom(schemaBytes);
       SchemaProto proto = builder.build();
-      this.keySchema = new Schema(proto);
+      this.keySchema = SchemaFactory.newV1(proto);
       this.rowStoreDecoder = RowStoreUtil.createDecoder(keySchema);
 
       // comparator

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/ParquetScanner.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/ParquetScanner.java
 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/ParquetScanner.java
index 0c4749c..4bdb4f4 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/ParquetScanner.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/ParquetScanner.java
@@ -20,6 +20,7 @@ package org.apache.tajo.storage.parquet;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.exception.TajoRuntimeException;
@@ -63,7 +64,7 @@ public class ParquetScanner extends FileScanner {
     if (targets == null) {
       targets = schema.toArray();
     }
-    reader = new TajoParquetReader(conf, fragment.getPath(), schema, new 
Schema(targets));
+    reader = new TajoParquetReader(conf, fragment.getPath(), schema, 
SchemaFactory.newV1(targets));
     totalRowCount = reader.getTotalRowCount();
     currentRowCount = 0;
     closed = false;

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/TajoSchemaConverter.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/TajoSchemaConverter.java
 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/TajoSchemaConverter.java
index dfe6af8..b2f3f34 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/TajoSchemaConverter.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/parquet/TajoSchemaConverter.java
@@ -25,6 +25,7 @@ import 
org.apache.parquet.schema.PrimitiveType.PrimitiveTypeName;
 import org.apache.parquet.schema.Type;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.common.TajoDataTypes;
 
 import java.util.ArrayList;
@@ -64,7 +65,7 @@ public class TajoSchemaConverter {
     }
     Column[] columnsArray = new Column[columns.size()];
     columnsArray = columns.toArray(columnsArray);
-    return new Schema(columnsArray);
+    return SchemaFactory.newV1(columnsArray);
   }
 
   private Column convertField(final Type fieldType) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/thirdparty/orc/OrcRecordReader.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/thirdparty/orc/OrcRecordReader.java
 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/thirdparty/orc/OrcRecordReader.java
index 7194bf4..df9a7c7 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/thirdparty/orc/OrcRecordReader.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/thirdparty/orc/OrcRecordReader.java
@@ -31,6 +31,7 @@ import org.apache.orc.impl.*;
 import org.apache.orc.impl.StreamName;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.storage.VTuple;
@@ -91,7 +92,7 @@ public class OrcRecordReader implements Closeable {
     this.bufferSize = bufferSize;
     this.included = new boolean[schema.size() + 1];
     included[0] = target.length > 0; // always include root column except when 
target schema size is 0
-    Schema targetSchema = new Schema(target);
+    Schema targetSchema = SchemaFactory.newV1(target);
     for (int i = 1; i < included.length; i++) {
       included[i] = targetSchema.contains(schema.getColumn(i - 1));
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestCompressionStorages.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestCompressionStorages.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestCompressionStorages.java
index 608d066..d18961f 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestCompressionStorages.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestCompressionStorages.java
@@ -31,6 +31,7 @@ import org.apache.orc.OrcConf;
 import org.apache.tajo.BuiltinStorages;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.TajoDataTypes.Type;
@@ -112,7 +113,7 @@ public class TestCompressionStorages {
   }
 
   private void storageCompressionTest(String dataFormat, Class<? extends 
CompressionCodec> codec) throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.FLOAT4);
     schema.addColumn("name", Type.TEXT);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestDelimitedTextFile.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestDelimitedTextFile.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestDelimitedTextFile.java
index 6ff291c..523a0d0 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestDelimitedTextFile.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestDelimitedTextFile.java
@@ -25,6 +25,7 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
@@ -41,7 +42,7 @@ import static org.junit.Assert.*;
 public class TestDelimitedTextFile {
   private static final Log LOG = 
LogFactory.getLog(TestDelimitedTextFile.class);
 
-  private static Schema schema = new Schema();
+  private static Schema schema = SchemaFactory.newV1();
 
   private static Tuple baseTuple;
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileSystems.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileSystems.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileSystems.java
index e9e44b5..59ff6f6 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileSystems.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileSystems.java
@@ -24,6 +24,7 @@ import org.apache.hadoop.fs.LocalFileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
@@ -97,7 +98,7 @@ public class TestFileSystems {
   @Test
   public void testBlockSplit() throws IOException {
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT4);
     schema.addColumn("name", Type.TEXT);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
index 58025c3..b8f9893 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.hdfs.*;
 import org.apache.tajo.BuiltinStorages;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
@@ -81,7 +82,7 @@ public class TestFileTablespace {
 
   @Test
        public final void testGetScannerAndAppender() throws IOException {
-               Schema schema = new Schema();
+               Schema schema = SchemaFactory.newV1();
                schema.addColumn("id", Type.INT4);
                schema.addColumn("age",Type.INT4);
                schema.addColumn("name",Type.TEXT);
@@ -144,7 +145,7 @@ public class TestFileTablespace {
       TablespaceManager.addTableSpaceForTest(space);
       assertEquals(fs.getUri(), space.getUri());
 
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("id", Type.INT4);
       schema.addColumn("age",Type.INT4);
       schema.addColumn("name",Type.TEXT);
@@ -198,7 +199,7 @@ public class TestFileTablespace {
       TablespaceManager.addTableSpaceForTest(space);
       assertEquals(fs.getUri(), space.getUri());
 
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("id", Type.INT4);
       schema.addColumn("age",Type.INT4);
       schema.addColumn("name",Type.TEXT);
@@ -241,7 +242,7 @@ public class TestFileTablespace {
       TablespaceManager.addTableSpaceForTest(sm);
       assertEquals(fs.getUri(), sm.getUri());
 
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("id", Type.INT4);
       schema.addColumn("age", Type.INT4);
       schema.addColumn("name", Type.TEXT);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestLineReader.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestLineReader.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestLineReader.java
index a478538..e47741c 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestLineReader.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestLineReader.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.io.IOUtils;
 import org.apache.hadoop.io.compress.DeflateCodec;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
@@ -58,7 +59,7 @@ public class TestLineReader {
     Path testDir = CommonTestingUtil.getTestDir(TEST_PATH);
     FileSystem fs = testDir.getFileSystem(conf);
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("comment", Type.TEXT);
@@ -110,7 +111,7 @@ public class TestLineReader {
     Path testDir = CommonTestingUtil.getTestDir(TEST_PATH);
     FileSystem fs = testDir.getFileSystem(conf);
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("comment", Type.TEXT);
@@ -169,7 +170,7 @@ public class TestLineReader {
     Path testDir = CommonTestingUtil.getTestDir(TEST_PATH);
     FileSystem fs = testDir.getFileSystem(conf);
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("comment", Type.TEXT);
@@ -275,7 +276,7 @@ public class TestLineReader {
     Path testDir = CommonTestingUtil.getTestDir(TEST_PATH);
     FileSystem fs = testDir.getFileSystem(conf);
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("comment", Type.TEXT);

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
index d8d3359..a04867e 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestMergeScanner.java
@@ -23,6 +23,7 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.TajoDataTypes.Type;
@@ -98,7 +99,7 @@ public class TestMergeScanner {
 
   @Test
   public void testMultipleFiles() throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("file", Type.TEXT);
     schema.addColumn("name", Type.TEXT);
@@ -160,7 +161,7 @@ public class TestMergeScanner {
     fragment[0] = new FileFragment("tablet1", table1Path, 0, status1.getLen());
     fragment[1] = new FileFragment("tablet1", table2Path, 0, status2.getLen());
 
-    Schema targetSchema = new Schema();
+    Schema targetSchema = SchemaFactory.newV1();
     targetSchema.addColumn(schema.getColumn(0));
     targetSchema.addColumn(schema.getColumn(2));
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/8dad551e/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestStorages.java
----------------------------------------------------------------------
diff --git 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestStorages.java
 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestStorages.java
index a9d61d5..64316d1 100644
--- 
a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestStorages.java
+++ 
b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestStorages.java
@@ -31,6 +31,7 @@ import org.apache.tajo.QueryId;
 import org.apache.tajo.TajoIdProtos;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SchemaFactory;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.TajoDataTypes.Type;
@@ -185,7 +186,7 @@ public class TestStorages {
   @Test
   public void testSplitable() throws IOException {
     if (splitable) {
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("id", Type.INT4);
       schema.addColumn("age", Type.INT8);
 
@@ -239,7 +240,7 @@ public class TestStorages {
 
   @Test
   public void testZeroRows() throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("score", Type.FLOAT4);
@@ -283,7 +284,7 @@ public class TestStorages {
   @Test
   public void testRCFileSplitable() throws IOException {
     if (dataFormat.equalsIgnoreCase(BuiltinStorages.RCFILE)) {
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("id", Type.INT4);
       schema.addColumn("age", Type.INT8);
 
@@ -337,7 +338,7 @@ public class TestStorages {
 
   @Test
   public void testProjection() throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("score", Type.FLOAT4);
@@ -368,7 +369,7 @@ public class TestStorages {
     FileStatus status = fs.getFileStatus(tablePath);
     FileFragment fragment = new FileFragment("testReadAndWrite", tablePath, 0, 
status.getLen());
 
-    Schema target = new Schema();
+    Schema target = SchemaFactory.newV1();
     target.addColumn("age", Type.INT8);
     target.addColumn("score", Type.FLOAT4);
     Scanner scanner = sm.getScanner(meta, schema, fragment, target);
@@ -400,7 +401,7 @@ public class TestStorages {
 
   @Test
   public void testVariousTypes() throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.CHAR, 7);
     schema.addColumn("col3", Type.INT2);
@@ -469,7 +470,7 @@ public class TestStorages {
 
   @Test
   public void testNullHandlingTypes() throws IOException {
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.CHAR, 7);
     schema.addColumn("col3", Type.INT2);
@@ -564,7 +565,7 @@ public class TestStorages {
   public void testNullHandlingTypesWithProjection() throws IOException {
     if (internalType) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.CHAR, 7);
     schema.addColumn("col3", Type.INT2);
@@ -635,7 +636,7 @@ public class TestStorages {
 
 
     // Making projection schema with different column positions
-    Schema target = new Schema();
+    Schema target = SchemaFactory.newV1();
     Random random = new Random();
     for (int i = 1; i < schema.size(); i++) {
       int num = random.nextInt(schema.size() - 1) + 1;
@@ -670,7 +671,7 @@ public class TestStorages {
   public void testRCFileTextSerializeDeserialize() throws IOException {
     if(!dataFormat.equalsIgnoreCase(BuiltinStorages.RCFILE)) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.BIT);
     schema.addColumn("col3", Type.CHAR, 7);
@@ -737,7 +738,7 @@ public class TestStorages {
   public void testRCFileBinarySerializeDeserialize() throws IOException {
     if(!dataFormat.equalsIgnoreCase(BuiltinStorages.RCFILE)) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.BIT);
     schema.addColumn("col3", Type.CHAR, 7);
@@ -804,7 +805,7 @@ public class TestStorages {
   public void testSequenceFileTextSerializeDeserialize() throws IOException {
     if(!dataFormat.equalsIgnoreCase(BuiltinStorages.SEQUENCE_FILE)) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.BIT);
     schema.addColumn("col3", Type.CHAR, 7);
@@ -874,7 +875,7 @@ public class TestStorages {
   public void testSequenceFileBinarySerializeDeserialize() throws IOException {
     if(!dataFormat.equalsIgnoreCase(BuiltinStorages.SEQUENCE_FILE)) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.BOOLEAN);
     schema.addColumn("col2", Type.BIT);
     schema.addColumn("col3", Type.CHAR, 7);
@@ -945,7 +946,7 @@ public class TestStorages {
     if (dateTypeSupport() || timeTypeSupport()) {
 
       int index = 2;
-      Schema schema = new Schema();
+      Schema schema = SchemaFactory.newV1();
       schema.addColumn("col1", Type.TIMESTAMP);
       if (dateTypeSupport()) {
         schema.addColumn("col" + index++, Type.DATE);
@@ -996,7 +997,7 @@ public class TestStorages {
       return;
     }
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("comment", Type.TEXT);
@@ -1071,7 +1072,7 @@ public class TestStorages {
   @Test
   public void testMaxValue() throws IOException {
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.FLOAT4);
     schema.addColumn("col2", Type.FLOAT8);
     schema.addColumn("col3", Type.INT2);
@@ -1138,7 +1139,7 @@ public class TestStorages {
       return;
     }
 
-    Schema dataSchema = new Schema();
+    Schema dataSchema = SchemaFactory.newV1();
     dataSchema.addColumn("col1", Type.FLOAT4);
     dataSchema.addColumn("col2", Type.FLOAT8);
     dataSchema.addColumn("col3", Type.INT2);
@@ -1166,7 +1167,7 @@ public class TestStorages {
 
     assertTrue(fs.exists(tablePath));
     FileStatus status = fs.getFileStatus(tablePath);
-    Schema inSchema = new Schema();
+    Schema inSchema = SchemaFactory.newV1();
     inSchema.addColumn("col1", Type.FLOAT4);
     inSchema.addColumn("col2", Type.FLOAT8);
     inSchema.addColumn("col3", Type.INT2);
@@ -1176,7 +1177,7 @@ public class TestStorages {
     FileFragment fragment = new FileFragment("table", tablePath, 0, 
status.getLen());
     Scanner scanner = TablespaceManager.getLocalFs().getScanner(meta, 
inSchema, fragment, null);
 
-    Schema target = new Schema();
+    Schema target = SchemaFactory.newV1();
 
     target.addColumn("col2", Type.FLOAT8);
     target.addColumn("col5", Type.INT8);
@@ -1204,7 +1205,7 @@ public class TestStorages {
       return;
     }
 
-    Schema dataSchema = new Schema();
+    Schema dataSchema = SchemaFactory.newV1();
     dataSchema.addColumn("col1", Type.CHAR);
 
     KeyValueSet options = new KeyValueSet();
@@ -1247,7 +1248,7 @@ public class TestStorages {
       return;
     }
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.TEXT);
 
     KeyValueSet options = new KeyValueSet();
@@ -1288,7 +1289,7 @@ public class TestStorages {
 
     if (internalType) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("score", Type.FLOAT4);
@@ -1323,7 +1324,7 @@ public class TestStorages {
   @Test
   public void testProgress() throws IOException {
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("col1", Type.FLOAT4);
     schema.addColumn("col2", Type.FLOAT8);
     schema.addColumn("col3", Type.INT2);
@@ -1371,7 +1372,7 @@ public class TestStorages {
   public void testEmptySchema() throws IOException {
     if (internalType) return;
 
-    Schema schema = new Schema();
+    Schema schema = SchemaFactory.newV1();
     schema.addColumn("id", Type.INT4);
     schema.addColumn("age", Type.INT8);
     schema.addColumn("score", Type.FLOAT4);
@@ -1409,7 +1410,7 @@ public class TestStorages {
     }
 
     //e,g select count(*) from table
-    Schema target = new Schema();
+    Schema target = SchemaFactory.newV1();
     assertEquals(0, target.size());
 
     FileFragment fragment = new FileFragment("table", tablePath, 0, 
status.getLen());

Reply via email to