You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2016/04/20 22:39:37 UTC

[4/6] tajo git commit: TAJO-2108: Refactor Schema to be immutable.

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestBuiltinFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestBuiltinFunctions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestBuiltinFunctions.java
index ae2de77..62cbd9e 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestBuiltinFunctions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestBuiltinFunctions.java
@@ -23,7 +23,7 @@ import org.apache.tajo.QueryTestCaseBase;
 import org.apache.tajo.TajoConstants;
 import org.apache.tajo.TajoTestingCluster;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.storage.StorageConstants;
 import org.apache.tajo.util.KeyValueSet;
@@ -54,9 +54,10 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value", TajoDataTypes.Type.INT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value", TajoDataTypes.Type.INT8)
+        .build();
     String[] data = new String[]{ "1|-111", "2|\\N", "3|-333" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -80,8 +81,9 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.DATE);
+    Schema schema = SchemaBuilder.builder()
+        .add("value", TajoDataTypes.Type.DATE)
+        .build();
     String[] data = new String[]{ "2014-01-02", "2014-12-01", "2015-01-01", "1999-08-09", "2000-03-01" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -104,8 +106,9 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.DATE);
+    Schema schema = SchemaBuilder.builder()
+        .add("value", TajoDataTypes.Type.DATE)
+        .build();
     String[] data = new String[]{ "2014-01-02", "2014-12-01", "\\N", "\\N", "2000-03-01" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -128,8 +131,9 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.TIME);
+    Schema schema = SchemaBuilder.builder()
+        .add("value", TajoDataTypes.Type.TIME)
+        .build();
     String[] data = new String[]{ "11:11:11", "23:12:50", "00:00:01", "09:59:59", "12:13:14" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -152,8 +156,9 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.TIME);
+    Schema schema = SchemaBuilder.builder()
+        .add("value", TajoDataTypes.Type.TIME)
+        .build();
     String[] data = new String[]{ "11:11:11", "\\N", "\\N", "09:59:59", "12:13:14" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -176,8 +181,9 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.TIMESTAMP);
+    Schema schema = SchemaBuilder.builder()
+        .add("value", TajoDataTypes.Type.TIMESTAMP)
+        .build();
     String[] data = new String[]{ "1999-01-01 11:11:11", "2015-01-01 23:12:50", "2016-12-24 00:00:01", 
             "1977-05-04 09:59:59", "2002-11-21 12:13:14" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
@@ -201,8 +207,7 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("value", TajoDataTypes.Type.TIMESTAMP);
+    Schema schema = SchemaBuilder.builder().add("value", TajoDataTypes.Type.TIMESTAMP).build();
     String[] data = new String[]{ "1999-01-01 11:11:11", "2015-01-01 23:12:50", "\\N",
             "\\N", "2002-11-21 12:13:14" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
@@ -233,9 +238,10 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value", TajoDataTypes.Type.INT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value", TajoDataTypes.Type.INT8)
+        .build();
     String[] data = new String[]{ "1|111", "2|\\N", "3|333" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -266,9 +272,10 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("name", TajoDataTypes.Type.TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("name", TajoDataTypes.Type.TEXT)
+        .build();
     String[] data = new String[]{ "1|\\N", "2|\\N", "3|\\N" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -299,9 +306,10 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("name", TajoDataTypes.Type.TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("name", TajoDataTypes.Type.TEXT)
+        .build();
     String[] data = new String[]{ "1|def", "2|\\N", "3|abc" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -360,12 +368,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{ "1|\\N|-111|1.2|-50.5", "2|1|\\N|\\N|52.5", "3|2|-333|2.8|\\N" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -389,12 +398,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{ "1|\\N|\\N|\\N|\\N", "2|\\N|\\N|\\N|\\N", "3|\\N|\\N|\\N|\\N" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -418,12 +428,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{ "1|\\N|-111|1.2|-50.5", "2|1|\\N|\\N|52.5", "3|2|-333|2.8|\\N" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -447,12 +458,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{ "1|\\N|\\N|\\N|\\N", "2|\\N|\\N|\\N|\\N", "3|\\N|\\N|\\N|\\N" };
     TajoTestingCluster.createTable("testbuiltin11", schema, tableOptions, data, 1);
 
@@ -476,12 +488,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
         "1|\\N|-111|1.2|-50.5",
         "2|1|\\N|\\N|52.5",
@@ -508,12 +521,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
         "1|\\N|\\N|\\N|-50.5",
         "2|1|\\N|\\N|\\N",
@@ -540,12 +554,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
         "1|\\N|-111|1.2|-50.5",
         "2|1|\\N|\\N|52.5",
@@ -572,12 +587,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
         "1|\\N|\\N|\\N|-50.5",
         "2|1|\\N|\\N|\\N",
@@ -604,12 +620,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
             "1|\\N|-111|1.2|-50.5",
             "2|1|\\N|\\N|52.5",
@@ -635,12 +652,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
             "1|\\N|\\N|\\N|-50.5",
             "2|1|\\N|\\N|\\N",
@@ -666,12 +684,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
             "1|\\N|-111|1.2|-50.5",
             "2|1|\\N|\\N|52.5",
@@ -697,12 +716,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
             "1|\\N|\\N|\\N|-50.5",
             "2|1|\\N|\\N|\\N",
@@ -757,14 +777,16 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     KeyValueSet tableOptions = new KeyValueSet();
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
-    
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
+
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .build();
     String[] data = new String[] {"1", "3", "2", "4"};
     TajoTestingCluster.createTable("rank_table1", schema, tableOptions, data, 1);
-    schema = SchemaFactory.newV1();
-    schema.addColumn("refid", TajoDataTypes.Type.INT4);
-    schema.addColumn("value", TajoDataTypes.Type.TEXT);
+    schema = SchemaBuilder.builder()
+        .add("refid", TajoDataTypes.Type.INT4)
+        .add("value", TajoDataTypes.Type.TEXT)
+        .build();
     data = new String[] {"1|efgh", "2|abcd", "4|erjk", "8|dfef"};
     TajoTestingCluster.createTable("rank_table2", schema, tableOptions, data, 1);
     ResultSet res = null;
@@ -796,12 +818,13 @@ public class TestBuiltinFunctions extends QueryTestCaseBase {
     tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
     tableOptions.set(StorageConstants.TEXT_NULL, "\\\\N");
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_int", TajoDataTypes.Type.INT4);
-    schema.addColumn("value_long", TajoDataTypes.Type.INT8);
-    schema.addColumn("value_float", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("value_double", TajoDataTypes.Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", TajoDataTypes.Type.INT4)
+        .add("value_int", TajoDataTypes.Type.INT4)
+        .add("value_long", TajoDataTypes.Type.INT8)
+        .add("value_float", TajoDataTypes.Type.FLOAT4)
+        .add("value_double", TajoDataTypes.Type.FLOAT8)
+        .build();
     String[] data = new String[]{
         "1|\\N|-111|1.2|-50.5",
         "2|1|\\N|\\N|52.5",

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
index 9a072ef..20045ad 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
@@ -20,12 +20,12 @@ package org.apache.tajo.engine.function;
 
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
-import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.exception.UndefinedFunctionException;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.junit.Test;
 
 import static org.junit.Assert.fail;
@@ -33,16 +33,17 @@ import static org.junit.Assert.fail;
 public class TestConditionalExpressions extends ExprTestBase {
   @Test
   public void testCaseWhens1() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TajoDataTypes.Type.INT1);
-    schema.addColumn("col2", TajoDataTypes.Type.INT2);
-    schema.addColumn("col3", TajoDataTypes.Type.INT4);
-    schema.addColumn("col4", TajoDataTypes.Type.INT8);
-    schema.addColumn("col5", TajoDataTypes.Type.FLOAT4);
-    schema.addColumn("col6", TajoDataTypes.Type.FLOAT8);
-    schema.addColumn("col7", TajoDataTypes.Type.TEXT);
-    schema.addColumn("col8", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3));
-    schema.addColumn("col9", TajoDataTypes.Type.INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TajoDataTypes.Type.INT1)
+        .add("col2", TajoDataTypes.Type.INT2)
+        .add("col3", TajoDataTypes.Type.INT4)
+        .add("col4", TajoDataTypes.Type.INT8)
+        .add("col5", TajoDataTypes.Type.FLOAT4)
+        .add("col6", TajoDataTypes.Type.FLOAT8)
+        .add("col7", TajoDataTypes.Type.TEXT)
+        .add("col8", CatalogUtil.newDataType(TajoDataTypes.Type.CHAR, "", 3))
+        .add("col9", TajoDataTypes.Type.INT4)
+        .build();
 
     testEval(schema, "table1", "1,2,3,4,5.0,6.0,text,abc,",
         "select case when col1 between 1 and 3 then 10 else 100 end from table1;",
@@ -60,9 +61,10 @@ public class TestConditionalExpressions extends ExprTestBase {
 
   @Test
   public void testCaseWhensWithNullReturn() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TajoDataTypes.Type.TEXT);
-    schema.addColumn("col2", TajoDataTypes.Type.TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TajoDataTypes.Type.TEXT)
+        .add("col2", TajoDataTypes.Type.TEXT)
+        .build();
 
     testEval(schema, "table1", "str1,str2",
         "SELECT CASE WHEN col1 IS NOT NULL THEN col2 ELSE NULL END FROM table1",
@@ -74,10 +76,11 @@ public class TestConditionalExpressions extends ExprTestBase {
 
   @Test
   public void testCaseWhensWithCommonExpression() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TajoDataTypes.Type.INT4);
-    schema.addColumn("col2", TajoDataTypes.Type.INT4);
-    schema.addColumn("col3", TajoDataTypes.Type.INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TajoDataTypes.Type.INT4)
+        .add("col2", TajoDataTypes.Type.INT4)
+        .add("col3", TajoDataTypes.Type.INT4)
+        .build();
 
     testEval(schema, "table1", "1,2,3",
         "SELECT CASE WHEN col1 = 1 THEN 1 WHEN col1 = 2 THEN 2 ELSE 3 END FROM table1",
@@ -112,10 +115,11 @@ public class TestConditionalExpressions extends ExprTestBase {
 
   @Test
   public void testCaseWhensWithCommonExpressionAndNull() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TajoDataTypes.Type.INT4);
-    schema.addColumn("col2", TajoDataTypes.Type.INT4);
-    schema.addColumn("col3", TajoDataTypes.Type.INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TajoDataTypes.Type.INT4)
+        .add("col2", TajoDataTypes.Type.INT4)
+        .add("col3", TajoDataTypes.Type.INT4)
+        .build();
 
     testEval(schema, "table1", "1,2,3",
         "SELECT CASE col1 WHEN 1 THEN NULL WHEN 2 THEN 2 ELSE 3 END FROM table1",

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestDateTimeFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestDateTimeFunctions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestDateTimeFunctions.java
index 36a4a60..3682006 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestDateTimeFunctions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestDateTimeFunctions.java
@@ -21,7 +21,7 @@ package org.apache.tajo.engine.function;
 
 import org.apache.tajo.SessionVars;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.TimestampDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
@@ -120,8 +120,9 @@ public class TestDateTimeFunctions extends ExprTestBase {
     TimeZone GMT = TimeZone.getTimeZone("GMT");
     TimeZone PST = TimeZone.getTimeZone("PST");
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", TIMESTAMP);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", TIMESTAMP)
+        .build();
     testEval(schema2, "table1",
         "1970-01-17 10:09:37",
         "select extract(year from col1), extract(month from col1), extract(day from col1) from table1;",
@@ -136,8 +137,9 @@ public class TestDateTimeFunctions extends ExprTestBase {
         new String[]{"1970.0", "1.0", "17.0"});
 
     // Currently TIME type can be loaded with INT8 type.
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("col1", TIME);
+    Schema schema3 = SchemaBuilder.builder()
+        .add("col1", TIME)
+        .build();
     testEval(schema3, "table1",
         "10:09:37.5",
         "select extract(hour from col1), extract(minute from col1), extract(second from col1) from table1;",
@@ -151,8 +153,9 @@ public class TestDateTimeFunctions extends ExprTestBase {
         "select extract(hour from col1), extract(minute from col1), extract(second from col1) from table1;",
         new String[]{"18.0", "9.0", "37.5"});
 
-    Schema schema4 = SchemaFactory.newV1();
-    schema4.addColumn("col1", DATE);
+    Schema schema4 = SchemaBuilder.builder()
+        .add("col1", DATE)
+        .build();
     testEval(schema4, "table1",
         "1970-01-17",
         "select extract(year from col1), extract(month from col1), extract(day from col1) from table1;",
@@ -236,8 +239,8 @@ public class TestDateTimeFunctions extends ExprTestBase {
     TimeZone GMT = TimeZone.getTimeZone("GMT");
     TimeZone PST = TimeZone.getTimeZone("PST");
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", TIMESTAMP);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", TIMESTAMP).build();
 
     testEval(schema2, "table1",
         "1970-01-17 22:09:37",
@@ -252,8 +255,9 @@ public class TestDateTimeFunctions extends ExprTestBase {
         "select date_part('year', col1), date_part('month', col1), date_part('day', col1) from table1;",
         new String[]{"1970.0", "1.0", "18.0"});
 
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("col1", TIME);
+    Schema schema3 = SchemaBuilder.builder()
+        .add("col1", TIME)
+        .build();
     testEval(schema3, "table1", "10:09:37.5",
         "select date_part('hour', col1), date_part('minute', col1), date_part('second', col1) from table1;",
         new String[]{"10.0", "9.0", "37.5"});
@@ -264,8 +268,9 @@ public class TestDateTimeFunctions extends ExprTestBase {
         "select date_part('hour', col1), date_part('minute', col1), date_part('second', col1) from table1;",
         new String[]{"18.0", "9.0", "37.5"});
 
-    Schema schema4 = SchemaFactory.newV1();
-    schema4.addColumn("col1", DATE);
+    Schema schema4 = SchemaBuilder.builder()
+        .add("col1", DATE)
+        .build();
     testEval(schema4, "table1",
         "1970-01-17",
         "select date_part('year', col1), date_part('month', col1), date_part('day', col1) from table1;",

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestMathFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestMathFunctions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestMathFunctions.java
index 1c07388..40d51ed 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestMathFunctions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestMathFunctions.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -19,7 +19,7 @@
 package org.apache.tajo.engine.function;
 
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;
@@ -38,23 +38,25 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select round(-5.5) as col1 ", new String[]{"-6"});
     testSimpleEval("select round(-5.6) as col1 ", new String[]{"-6"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.4", "select round(col1 + col2 + col3) from table1",
         new String[]{"2"});
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", INT4);
-    schema2.addColumn("col2", INT8);
-    schema2.addColumn("col3", FLOAT4);
-    schema2.addColumn("col4", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", INT4)
+        .add("col2", INT8)
+        .add("col3", FLOAT4)
+        .add("col4", FLOAT8)
+        .build();
 
     testEval(schema2, "table1", "9,9,9.5,9.5",
         "select round(col1), round (col2), round(col3), round(col4) from table1",
-        new String [] {"9", "9", "10", "10"});
+        new String[]{"9", "9", "10", "10"});
   }
 
   @Test
@@ -66,10 +68,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select floor(-5.1) as col1 ", new String[]{"-6"});
     testSimpleEval("select floor(-5.6) as col1 ", new String[]{"-6"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.4", "select floor(col1 + col2 + col3) from table1",
         new String[]{"1"});
@@ -85,10 +88,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select ceil(-5.1) as col1 ", new String[]{"-5"});
     testSimpleEval("select ceil(-5.6) as col1 ", new String[]{"-5"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select ceil(col1 + col2 + col3) from table1",
         new String[]{"2"});
@@ -104,10 +108,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select ceiling(-5.1) as col1 ", new String[]{"-5"});
     testSimpleEval("select ceiling(-5.6) as col1 ", new String[]{"-5"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select ceiling(col1 + col2 + col3) from table1",
         new String[]{"2"});
@@ -120,10 +125,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select sin(1.2) as col1 ", new String[]{"0.9320390859672263"});
     testSimpleEval("select sin(-0.5) as col1 ", new String[]{"-0.479425538604203"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select sin(col1 + col2 + col3) from table1",
         new String[]{"0.963558185417193"});
@@ -137,10 +143,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select cos(1.2) as col1 ", new String[]{"0.3623577544766736"});
     testSimpleEval("select cos(-0.5) as col1 ", new String[]{"0.8775825618903728"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select cos(col1 + col2 + col3) from table1",
         new String[]{"0.26749882862458735"});
@@ -153,10 +160,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select tan(0.8) as col1 ", new String[]{"1.0296385570503641"});
     testSimpleEval("select tan(-0.5) as col1 ", new String[]{"-0.5463024898437905"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select tan(col1 - col2 - col3) from table1",
         new String[]{"0.8422883804630795"});
@@ -169,10 +177,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select asin(0.8) as col1 ", new String[]{"0.9272952180016123"});
     testSimpleEval("select asin(-0.5) as col1 ", new String[]{"-0.5235987755982989"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select asin(col1 - col2 - col3) from table1",
         new String[]{"0.7753974966107532"});
@@ -185,10 +194,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select acos(0.8) as col1 ", new String[]{"0.6435011087932843"});
     testSimpleEval("select acos(-0.5) as col1 ", new String[]{"2.0943951023931957"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select acos(col1 - col2 - col3) from table1",
         new String[]{"0.7953988301841435"});
@@ -201,10 +211,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select atan(1.2) as col1 ", new String[]{"0.8760580505981934"});
     testSimpleEval("select atan(-0.5) as col1 ", new String[]{"-0.4636476090008061"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select atan(col1 + col2 + col3) from table1",
         new String[]{"0.9151007005533605"});
@@ -218,10 +229,11 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select atan2(-0.5, 0.3) as col1 ", new String[]{"-1.0303768265243125"});
     testSimpleEval("select atan2(-0.2, -1.3) as col1 ", new String[]{"-2.988943325194528"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select atan2(col1 + col2, col3) from table1",
         new String[]{"1.4876550949064553"});
@@ -234,12 +246,13 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select mod(200000000000,2) as col1 ", new String[]{"0"});
     testSimpleEval("select mod(2,200000000000) as col1 ", new String[]{"2"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", INT8);
-    schema.addColumn("col2", INT8);
-    schema.addColumn("col3", INT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", INT8)
+        .add("col2", INT8)
+        .add("col3", INT8)
+        .build();
 
-    testEval(schema, "table1", "9,2,3", "select mod(col1 + col2, col3) from table1", 
+    testEval(schema, "table1", "9,2,3", "select mod(col1 + col2, col3) from table1",
         new String[]{"2"});
   }
 
@@ -250,12 +263,13 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select div(200000000000,2) as col1 ", new String[]{"100000000000"});
     testSimpleEval("select div(2,200000000000) as col1 ", new String[]{"0"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", INT8);
-    schema.addColumn("col2", INT8);
-    schema.addColumn("col3", INT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", INT8)
+        .add("col2", INT8)
+        .add("col3", INT8)
+        .build();
 
-    testEval(schema, "table1", "9,2,3", "select div(col1 + col2, col3) from table1", 
+    testEval(schema, "table1", "9,2,3", "select div(col1 + col2, col3) from table1",
         new String[]{"3"});
   }
 
@@ -266,19 +280,21 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select sign(0.3) as col1 ", new String[]{"1.0"});
 
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT4);
-    schema.addColumn("col3", FLOAT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT4)
+        .add("col3", FLOAT4)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select sign(col1 + col2 + col3) from table1",
         new String[]{"1.0"});
 
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", FLOAT8);
-    schema2.addColumn("col2", FLOAT8);
-    schema2.addColumn("col3", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema2, "table1", "1.0, 0.2, 0.1", "select sign(col1 + col2 + col3) from table1",
         new String[]{"1.0"});
@@ -291,19 +307,21 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select sqrt(8.0) as col1 ", new String[]{"2.8284271247461903"});
 
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT4);
-    schema.addColumn("col3", FLOAT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT4)
+        .add("col3", FLOAT4)
+        .build();
 
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select sqrt(col1 + col2 + col3) from table1",
         new String[]{"1.1401754564651765"});
 
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", FLOAT8);
-    schema2.addColumn("col2", FLOAT8);
-    schema2.addColumn("col3", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema2, "table1", "1.0, 0.2, 0.1", "select sqrt(col1 + col2 + col3) from table1",
         new String[]{"1.140175425099138"});
@@ -316,14 +334,16 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select exp(1.2) as col1 ", new String[]{String.valueOf(Math.exp(1.2d))});
 
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .build();
 
     testEval(schema, "table1", "1.123", "select exp(col1) from table1",
         new String[]{String.valueOf(Math.exp(1.123f))});
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .build();
 
     testEval(schema2, "table1", "1.123", "select exp(col1) from table1",
         new String[]{String.valueOf(Math.exp(1.123d))});
@@ -339,14 +359,16 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select abs(2.0) as col1 ", new String[]{"2.0"});
     testSimpleEval("select abs(-2.0) as col1 ", new String[]{"2.0"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT4)
+        .build();
     testEval(schema, "table1", "0.39,-0.39", "select abs(col1), abs(col2) from table1", new String[]{"0.39", "0.39"});
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", FLOAT8);
-    schema2.addColumn("col2", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .build();
     testEval(schema2, "table1", "0.033312347,-0.033312347", "select abs(col1), abs(col2) from table1",
         new String[]{"0.033312347", "0.033312347"});
   }
@@ -358,17 +380,19 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select cbrt(8.0) as col1 ", new String[]{"2.0"});
 
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT4);
-    schema.addColumn("col3", FLOAT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT4)
+        .add("col3", FLOAT4)
+        .build();
     testEval(schema, "table1", "1.0, 0.2, 0.1", "select cbrt(col1 + col2 + col3) from table1",
         new String[]{"1.0913929030771317"});
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("col1", FLOAT8);
-    schema2.addColumn("col2", FLOAT8);
-    schema2.addColumn("col3", FLOAT8);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
     testEval(schema2, "table1", "1.0, 0.2, 0.1", "select cbrt(col1 + col2 + col3) from table1",
         new String[]{"1.091392883061106"});
   }
@@ -380,14 +404,15 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select degrees(2.7) as col1 ", new String[]{String.valueOf(Math.toDegrees(2.7))});
     testSimpleEval("select degrees(-0.8) as col1 ", new String[]{String.valueOf(Math.toDegrees(-0.8))});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "0.8,2.7,-0.8", "select degrees(col1), degrees(col2), degrees(col3) from table1",
         new String[]{
-            String.valueOf(Math.toDegrees((float)0.8)),
+            String.valueOf(Math.toDegrees((float) 0.8)),
             String.valueOf(Math.toDegrees(2.7)),
             String.valueOf(Math.toDegrees(-0.8))
         });
@@ -401,11 +426,12 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select pow(null,3.1) as col1 ", new String[]{NullDatum.get().toString()});
     testSimpleEval("select pow(20.1,null) as col1 ", new String[]{NullDatum.get().toString()});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", INT4);
-    schema.addColumn("col4", INT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT8)
+        .add("col3", INT4)
+        .add("col4", INT8)
+        .build();
 
     testEval(schema, "table1", "0.4,2.7,3,2", "select pow(col1, col2), pow(col3, col4) from table1",
         new String[]{
@@ -421,14 +447,15 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select radians(2.7) as col1 ", new String[]{String.valueOf(Math.toRadians(2.7))});
     testSimpleEval("select radians(-0.8) as col1 ", new String[]{String.valueOf(Math.toRadians(-0.8))});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT4);
-    schema.addColumn("col2", FLOAT8);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT4)
+        .add("col2", FLOAT8)
+        .add("col3", FLOAT8)
+        .build();
 
     testEval(schema, "table1", "0.8,2.7,-0.8", "select radians(col1), radians(col2), radians(col3) from table1",
         new String[]{
-            String.valueOf(Math.toRadians((float)0.8)),
+            String.valueOf(Math.toRadians((float) 0.8)),
             String.valueOf(Math.toRadians(2.7)),
             String.valueOf(Math.toRadians(-0.8))
         });
@@ -463,9 +490,10 @@ public class TestMathFunctions extends ExprTestBase {
     testSimpleEval("select round(1234567890.1234567,3) ", new String[]{"1.234567890123E9"});
     testSimpleEval("select round(1234567890.1234567,5) ", new String[]{"1.23456789012346E9"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", FLOAT8);
-    schema.addColumn("col2", INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", FLOAT8)
+        .add("col2", INT4)
+        .build();
 
     testEval(schema, "table1", ",", "select round(col1, col2) from table1", new String[]{NullDatum.get().toString()});
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestPatternMatchingPredicates.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestPatternMatchingPredicates.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestPatternMatchingPredicates.java
index 0cfbe1c..54907fc 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestPatternMatchingPredicates.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestPatternMatchingPredicates.java
@@ -19,7 +19,7 @@
 package org.apache.tajo.engine.function;
 
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;
@@ -31,8 +31,9 @@ public class TestPatternMatchingPredicates extends ExprTestBase {
 
   @Test
   public void testLike() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .build();
 
     // test for null values
     testEval(schema, "table1", ",", "select col1 like 'a%' from table1", new String[]{NullDatum.get().toString()});

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
index dd40822..203af8f 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestStringOperatorsAndFunctions.java
@@ -21,7 +21,7 @@ package org.apache.tajo.engine.function;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;
@@ -41,10 +41,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
 
   @Test
   public void testConcatenateOnExpressions() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", INT4);
-    schema.addColumn("col3", FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", INT4)
+        .add("col3", FLOAT8)
+        .build();
 
     testSimpleEval("select (1+3) || 2 as col1 ", new String[]{"42"});
 
@@ -62,9 +63,10 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
 
   @Test
   public void testLTrim() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .build();
 
     testSimpleEval("select ltrim(' trim') ", new String[]{"trim"});
     testSimpleEval("select ltrim('xxtrim', 'xx') ", new String[]{"trim"});
@@ -83,9 +85,10 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
 
   @Test
   public void testRTrim() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .build();
 
     testSimpleEval("select rtrim('trim ') ", new String[]{"trim"});
     testSimpleEval("select rtrim('trimxx', 'xx') ", new String[]{"trim"});
@@ -104,9 +107,10 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
 
   @Test
   public void testTrim() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .build();
 
     testSimpleEval("select trim(' trim ') ", new String[]{"trim"});
     testSimpleEval("select btrim('xxtrimxx', 'xx') ", new String[]{"trim"});
@@ -132,10 +136,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select regexp_replace('abcdef', null, '--') as col1 ", new String[]{NullDatum.get().toString()});
     testSimpleEval("select regexp_replace('abcdef','bc', null) as col1 ", new String[]{NullDatum.get().toString()});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
 
     // find matches and replace from column values
     testEval(schema, "table1", "------,(^--|--$),ab", "select regexp_replace(col1, col2, col3) as str from table1",
@@ -165,10 +170,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select left('abcdef',-5) as col1 ", new String[]{"a"});
     testSimpleEval("select left('abcdef',-6) as col1 ", new String[]{""});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", INT4);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", INT4)
+        .add("col3", TEXT)
+        .build();
 
     // for null tests
     testEval(schema, "table1", ",1,ghi", "select left(col1,1) is null from table1", new String[]{"t"});
@@ -194,10 +200,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select right('abcdef',-5) as col1 ", new String[]{"f"});
     testSimpleEval("select right('abcdef',-6) as col1 ", new String[]{""});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", INT4);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", INT4)
+        .add("col3", TEXT)
+        .build();
 
     // for null tests
     testEval(schema, "table1", ",1,ghi", "select right(col1,1) is null from table1", new String[]{"t"});
@@ -211,10 +218,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select reverse('abcdef') as col1 ", new String[]{"fedcba"});
     testSimpleEval("select reverse('가') as col1 ", new String[]{"가"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "abc,efg,3.14", "select reverse(col1) || reverse(col2) from table1",
         new String[]{"cbagfe"});
   }
@@ -225,10 +233,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select repeat('가',3) as col1 ", new String[]{"가가가"});
     testSimpleEval("select repeat('a',2) as col1 ", new String[]{"aa"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "abc,efg,3.14", "select repeat(col1,2) from table1", new String[]{"abcabc"});
   }
 
@@ -237,10 +246,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testUpper() throws TajoException {
     testSimpleEval("select upper('abcdef') as col1 ", new String[]{"ABCDEF"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "abc,efg,3.14", "select upper(col1), upper(col2) from table1",
         new String[]{"ABC", "EFG"});
     testEval(schema, "table1", "abc,efg,3.14", "select upper(col1) || upper(col2) from table1", new String[]{"ABCEFG"});
@@ -250,10 +260,12 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testLower() throws TajoException {
     testSimpleEval("select lower('ABCdEF') as col1 ", new String[]{"abcdef"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
+
     testEval(schema, "table1", "ABC,DEF,3.14", "select lower(col1), lower(col2) from table1",
         new String[]{"abc", "def"});
     testEval(schema, "table1", "ABC,DEF,3.14", "select lower(col1) || lower(col2) from table1", new String[]{"abcdef"});
@@ -263,10 +275,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testCharLength() throws TajoException {
     testSimpleEval("select char_length('123456') as col1 ", new String[]{"6"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABC,DEF,3.14", "select character_length(lower(col1) || lower(col2)) from table1",
         new String[]{"6"});
   }
@@ -275,10 +288,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testLength() throws TajoException {
     testSimpleEval("select length('123456') as col1 ", new String[]{"6"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABC,DEF,3.14", "select length(lower(col1) || lower(col2)) from table1",
         new String[]{"6"});
   }
@@ -288,10 +302,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select md5('1') as col1 ", new String[]{"c4ca4238a0b923820dcc509a6f75849b"});
     testSimpleEval("select md5('tajo') as col1 ", new String[]{"742721b3a79f71a9491681b8e8a7ce85"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "abc,efg,3.14", "select md5(col1) from table1",
         new String[]{"900150983cd24fb0d6963f7d28e17f72"});
   }
@@ -317,10 +332,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select to_hex(1234) as col1 ", new String[]{"4d2"});
     testSimpleEval("select to_hex(1023456788888888) as col1 ", new String[]{"3a2d41a583d38"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", ",abcdef,3.14", "select to_hex(10) from table1",
         new String[]{"a"});
   }
@@ -331,10 +347,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select to_bin(10) as col1 ", new String[]{"1010"});
     testSimpleEval("select to_bin(1234) as col1 ", new String[]{"10011010010"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", ",abcdef,3.14", "select to_bin(20) from table1",
         new String[]{"10100"});
   }
@@ -345,10 +362,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select octet_length('1') as col1 ", new String[]{"1"});
     testSimpleEval("select octet_length('가') as col1 ", new String[]{"3"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABC,DEF,3.14", "select octet_length(lower(col1) || lower(col2)) from table1",
         new String[]{"6"});
   }
@@ -361,10 +379,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select split_part('1386577650.123', '.', 3) is null", new String[]{"t"});
 
     // null handling tests
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "t1", ",.,1", "select split_part(col1, col2, col3::int) is null from t1", new String[]{"t"});
     testEval(schema, "t1", "1386577650.123,,1", "select split_part(col1, col2, col3::int) from t1",
         new String[]{"1386577650.123"});
@@ -390,10 +409,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select substr('abcdef', -1, 3) as col1 ", new String[]{"a"});
     testSimpleEval("select substr('abcdef', -1, 1) as col1 ", new String[]{""});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", ",abcdef,3.14", "select substr(lower(col2), 2, 3) from table1",
         new String[]{"bcd"});
   }
@@ -433,10 +453,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select locate('abcdef', 'a', -1) as col1 ", new String[]{"0"});
     testSimpleEval("select locate('abcdef', 'a', -5) as col1 ", new String[]{"0"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", ",abcdef,3.14", "select locate(col2, 'cd') from table1", new String[]{"3"});
     testEval(schema, "table1", ",abcdef,3.14", "select locate(col2, 'cd', 1) from table1", new String[]{"3"});
     testEval(schema, "table1", ",abcdef,3.14", "select locate(col2, 'cd', 4) from table1", new String[]{"0"});
@@ -451,10 +472,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testBitLength() throws TajoException {
     testSimpleEval("select bit_length('123456') as col1 ", new String[]{"48"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABC,DEF,3.14", "select bit_length(lower(col1) || lower(col2)) from table1",
         new String[]{"48"});
   }
@@ -467,10 +489,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select strpos('일이삼사오육','삼사') as col1 ", new String[]{"3"});
     testSimpleEval("select strpos('일이삼사오육','일이삼') as col1 ", new String[]{"1"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABCDEF,HIJKLMN,3.14", "select strpos(lower(col1) || lower(col2), 'fh') from table1",
         new String[]{"6"});
   }
@@ -483,10 +506,11 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select strposb('일이삼사오육','삼사') as col1 ", new String[]{"7"});    //utf8 1 korean word = 3 chars
     testSimpleEval("select strposb('일이삼사오육','삼사일') as col1 ", new String[]{"0"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
-    schema.addColumn("col3", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .add("col3", TEXT)
+        .build();
     testEval(schema, "table1", "ABCDEF,HIJKLMN,3.14", "select strposb(lower(col1) || lower(col2), 'fh') from table1",
         new String[]{"6"});
   }
@@ -501,8 +525,9 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
   public void testAscii() throws TajoException {
     testSimpleEval("select ascii('abc') as col1 ", new String[]{"97"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .build();
     testEval(schema, "table1", "abc", "select ascii(col1) from table1",
             new String[]{"97"});
     testEval(schema, "table1", "12", "select ascii(col1) from table1",
@@ -517,8 +542,8 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select chr(50) as col1 ", new String[]{"2"});
     testSimpleEval("select chr(64) as col1 ", new String[]{"@"});
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", INT4).build();
     testEval(schema, "table1", "65", "select chr(col1) from table1", new String[]{"A"});
     testEval(schema, "table1", "66", "select chr(col1) from table1", new String[]{"B"});
     testEval(schema, "table1", "52512", "select chr(col1) from table1", new String[]{"촠"});
@@ -588,9 +613,10 @@ public class TestStringOperatorsAndFunctions extends ExprTestBase {
     testSimpleEval("select find_in_set('딸기','사과,배,옥수수,감자,딸기,수박') as col1 ", new String[]{"5"});
 
     // null test
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", TEXT);
-    schema.addColumn("col2", TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", TEXT)
+        .add("col2", TEXT)
+        .build();
     testEval(schema, "table1", "|crt,c,cr,c,def", "select find_in_set(col1, col2) is null from table1",
         new String[]{"t"}, '|', true);
     testEval(schema, "table1", "cr|", "select find_in_set(col1, col2) is null from table1",

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestUserDefinedFunctions.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestUserDefinedFunctions.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestUserDefinedFunctions.java
index f66c6bb..4150289 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestUserDefinedFunctions.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/function/TestUserDefinedFunctions.java
@@ -19,7 +19,7 @@
 package org.apache.tajo.engine.function;
 
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.SchemaFactory;
+import org.apache.tajo.catalog.SchemaBuilder;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;
@@ -36,8 +36,9 @@ public class TestUserDefinedFunctions extends ExprTestBase {
 
   @Test
   public void testNullHandling2() throws TajoException {
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("col1", BOOLEAN);
+    Schema schema = SchemaBuilder.builder()
+        .add("col1", BOOLEAN)
+        .build();
 
     testEval(schema, "table1", "", "select null_test() from table1", new String[]{NullDatum.get().toString()});
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestJoinOrderAlgorithm.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestJoinOrderAlgorithm.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestJoinOrderAlgorithm.java
index ce5a6ab..bd9c5f9 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestJoinOrderAlgorithm.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestJoinOrderAlgorithm.java
@@ -28,12 +28,15 @@ import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.engine.function.FunctionLoader;
-import org.apache.tajo.parser.sql.SQLAnalyzer;
 import org.apache.tajo.engine.query.QueryContext;
+import org.apache.tajo.parser.sql.SQLAnalyzer;
 import org.apache.tajo.plan.LogicalOptimizer;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.LogicalPlanner;
-import org.apache.tajo.plan.logical.*;
+import org.apache.tajo.plan.logical.JoinNode;
+import org.apache.tajo.plan.logical.LogicalNode;
+import org.apache.tajo.plan.logical.NodeType;
+import org.apache.tajo.plan.logical.ScanNode;
 import org.apache.tajo.plan.util.PlannerUtil;
 import org.apache.tajo.storage.TablespaceManager;
 import org.apache.tajo.unit.StorageUnit;
@@ -45,7 +48,8 @@ import org.junit.Test;
 
 import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
 import static org.apache.tajo.TajoConstants.DEFAULT_TABLESPACE_NAME;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 public class TestJoinOrderAlgorithm {
 
@@ -67,19 +71,22 @@ public class TestJoinOrderAlgorithm {
       catalog.createFunction(funcDesc);
     }
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("name", Type.TEXT);
-    schema.addColumn("empid", Type.INT4);
-    schema.addColumn("deptname", Type.TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("empid", Type.INT4)
+        .add("deptname", Type.TEXT)
+        .build();
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("deptname", Type.TEXT);
-    schema2.addColumn("manager", Type.TEXT);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT)
+        .build();
 
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("deptname", Type.TEXT);
-    schema3.addColumn("score", Type.INT4);
-    schema3.addColumn("phone", Type.INT4);
+    Schema schema3 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("score", Type.INT4)
+        .add("phone", Type.INT4)
+        .build();
 
     TableMeta meta = CatalogUtil.newTableMeta("TEXT");
     TableDesc people = new TableDesc(
@@ -101,9 +108,10 @@ public class TestJoinOrderAlgorithm {
 
     ///////////////////////////////////////////////////////////////////////////
     // creating table for overflow in JoinOrderOptimizer.
-    Schema schema4 = SchemaFactory.newV1();
-    schema4.addColumn("deptname", Type.TEXT);
-    schema4.addColumn("manager", Type.TEXT);
+    Schema schema4 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT)
+        .build();
     // Set store type as FAKEFILE to prevent auto update of physical information in LogicalPlanner.updatePhysicalInfo()
     TableMeta largeTableMeta = CatalogUtil.newTableMeta("FAKEFILE");
     TableDesc largeDept;

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
index 56ef78b..e57921d 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
@@ -27,9 +27,9 @@ import org.apache.tajo.catalog.proto.CatalogProtos.FunctionType;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.engine.function.FunctionLoader;
 import org.apache.tajo.engine.function.builtin.SumInt;
-import org.apache.tajo.parser.sql.SQLAnalyzer;
 import org.apache.tajo.engine.query.QueryContext;
 import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.parser.sql.SQLAnalyzer;
 import org.apache.tajo.plan.LogicalOptimizer;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.LogicalPlanner;
@@ -65,19 +65,22 @@ public class TestLogicalOptimizer {
       catalog.createFunction(funcDesc);
     }
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("name", Type.TEXT);
-    schema.addColumn("empid", Type.INT4);
-    schema.addColumn("deptname", Type.TEXT);
-
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("deptname", Type.TEXT);
-    schema2.addColumn("manager", Type.TEXT);
-
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("deptname", Type.TEXT);
-    schema3.addColumn("score", Type.INT4);
-    schema3.addColumn("phone", Type.INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("empid", Type.INT4)
+        .add("deptname", Type.TEXT)
+        .build();
+
+    Schema schema2 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT)
+        .build();
+
+    Schema schema3 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("score", Type.INT4)
+        .add("phone", Type.INT4)
+        .build();
 
     TableMeta meta = CatalogUtil.newTableMeta("TEXT");
     TableDesc people = new TableDesc(

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
index d09ef77..d1c8384 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
@@ -86,18 +86,21 @@ public class TestLogicalPlanner {
       catalog.createFunction(funcDesc);
     }
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("name", Type.TEXT);
-    schema.addColumn("empid", Type.INT4);
-    schema.addColumn("deptname", Type.TEXT);
-
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("deptname", Type.TEXT);
-    schema2.addColumn("manager", Type.TEXT);
-
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("deptname", Type.TEXT);
-    schema3.addColumn("score", Type.INT4);
+    Schema schema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("empid", Type.INT4)
+        .add("deptname", Type.TEXT)
+        .build();
+
+    Schema schema2 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT)
+        .build();
+
+    Schema schema3 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("score", Type.INT4)
+        .build();
 
     TableMeta meta = CatalogUtil.newTableMeta("TEXT");
     TableDesc people = new TableDesc(
@@ -222,11 +225,12 @@ public class TestLogicalPlanner {
     testJsonSerDerObject(root);
     testCloneLogicalNode(root);
 
-    Schema expectedSchema = SchemaFactory.newV1();
-    expectedSchema.addColumn("name", Type.TEXT);
-    expectedSchema.addColumn("empid", Type.INT4);
-    expectedSchema.addColumn("deptname", Type.TEXT);
-    expectedSchema.addColumn("manager", Type.TEXT);
+    Schema expectedSchema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("empid", Type.INT4)
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT)
+        .build();
     for (int i = 0; i < expectedSchema.size(); i++) {
       Column found = root.getOutSchema().getColumn(expectedSchema.getColumn(i).getSimpleName());
       assertEquals(expectedSchema.getColumn(i).getDataType(), found.getDataType());
@@ -251,7 +255,9 @@ public class TestLogicalPlanner {
     testJsonSerDerObject(plan);
     testCloneLogicalNode(plan);
 
-    expectedSchema.addColumn("score", Type.INT4);
+    expectedSchema = SchemaBuilder.builder().addAll(expectedSchema.getRootColumns())
+        .add("score", Type.INT4)
+        .build();
     assertSchema(expectedSchema, plan.getOutSchema());
 
     assertEquals(NodeType.ROOT, plan.getType());
@@ -291,10 +297,11 @@ public class TestLogicalPlanner {
 
   static Schema expectedJoinSchema;
   static {
-    expectedJoinSchema = SchemaFactory.newV1();
-    expectedJoinSchema.addColumn("name", Type.TEXT);
-    expectedJoinSchema.addColumn("deptname", Type.TEXT);
-    expectedJoinSchema.addColumn("score", Type.INT4);
+    expectedJoinSchema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("deptname", Type.TEXT)
+        .add("score", Type.INT4)
+        .build();
   }
 
   @Test
@@ -1290,18 +1297,20 @@ public class TestLogicalPlanner {
     String tableName = CatalogUtil.normalizeIdentifier("partitioned_table");
     String qualifiedTableName = CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, tableName);
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("id", Type.INT4)
-      .addColumn("name", Type.TEXT)
-      .addColumn("age", Type.INT4)
-      .addColumn("score", Type.FLOAT8);
+    Schema schema = SchemaBuilder.builder()
+        .add("id", Type.INT4)
+        .add("name", Type.TEXT)
+        .add("age", Type.INT4)
+        .add("score", Type.FLOAT8)
+        .build();
 
     KeyValueSet opts = new KeyValueSet();
     opts.set("file.delimiter", ",");
 
-    Schema partSchema = SchemaFactory.newV1();
-    partSchema.addColumn("id", Type.INT4);
-    partSchema.addColumn("name", Type.TEXT);
+    Schema partSchema = SchemaBuilder.builder()
+        .add("id", Type.INT4)
+        .add("name", Type.TEXT)
+        .build();
 
     PartitionMethodDesc partitionMethodDesc =
       new PartitionMethodDesc(DEFAULT_DATABASE_NAME, tableName,

http://git-wip-us.apache.org/repos/asf/tajo/blob/4aef83a3/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
index 6479124..92557f1 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
@@ -72,18 +72,18 @@ public class TestPlannerUtil {
     catalog.createTablespace(DEFAULT_TABLESPACE_NAME, "hdfs://localhost:1234/warehouse");
     catalog.createDatabase(DEFAULT_DATABASE_NAME, DEFAULT_TABLESPACE_NAME);
 
-    Schema schema = SchemaFactory.newV1();
-    schema.addColumn("name", Type.TEXT);
-    schema.addColumn("empid", CatalogUtil.newSimpleDataType(Type.INT4));
-    schema.addColumn("deptname", Type.TEXT);
+    Schema schema = SchemaBuilder.builder()
+        .add("name", Type.TEXT)
+        .add("empid", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("deptname", Type.TEXT).build();
 
-    Schema schema2 = SchemaFactory.newV1();
-    schema2.addColumn("deptname", Type.TEXT);
-    schema2.addColumn("manager", Type.TEXT);
+    Schema schema2 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("manager", Type.TEXT).build();
 
-    Schema schema3 = SchemaFactory.newV1();
-    schema3.addColumn("deptname", Type.TEXT);
-    schema3.addColumn("score", CatalogUtil.newSimpleDataType(Type.INT4));
+    Schema schema3 = SchemaBuilder.builder()
+        .add("deptname", Type.TEXT)
+        .add("score", CatalogUtil.newSimpleDataType(Type.INT4)).build();
 
     TableMeta meta = CatalogUtil.newTableMeta("TEXT");
     TableDesc people = new TableDesc(
@@ -188,12 +188,12 @@ public class TestPlannerUtil {
 
   @Test
   public final void testGetJoinKeyPairs() {
-    Schema outerSchema = SchemaFactory.newV1();
-    outerSchema.addColumn("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
-    outerSchema.addColumn("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4));
-    Schema innerSchema = SchemaFactory.newV1();
-    innerSchema.addColumn("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));
-    innerSchema.addColumn("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4));
+    Schema outerSchema = SchemaBuilder.builder()
+        .add("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4)).build();
+    Schema innerSchema = SchemaBuilder.builder()
+        .add("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4)).build();
 
     FieldEval f1 = new FieldEval("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
     FieldEval f2 = new FieldEval("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));
@@ -250,12 +250,14 @@ public class TestPlannerUtil {
 
   @Test
   public final void testGetSortKeysFromJoinQual() {
-    Schema outerSchema = SchemaFactory.newV1();
-    outerSchema.addColumn("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
-    outerSchema.addColumn("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4));
-    Schema innerSchema = SchemaFactory.newV1();
-    innerSchema.addColumn("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));
-    innerSchema.addColumn("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4));
+    Schema outerSchema = SchemaBuilder.builder()
+        .add("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4))
+        .build();
+    Schema innerSchema = SchemaBuilder.builder()
+        .add("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4))
+        .build();
 
     FieldEval f1 = new FieldEval("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
     FieldEval f2 = new FieldEval("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));
@@ -286,12 +288,14 @@ public class TestPlannerUtil {
 
   @Test
   public final void testComparatorsFromJoinQual() {
-    Schema outerSchema = SchemaFactory.newV1();
-    outerSchema.addColumn("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
-    outerSchema.addColumn("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4));
-    Schema innerSchema = SchemaFactory.newV1();
-    innerSchema.addColumn("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));
-    innerSchema.addColumn("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4));
+    Schema outerSchema = SchemaBuilder.builder()
+        .add("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("employee.id2", CatalogUtil.newSimpleDataType(Type.INT4))
+        .build();
+    Schema innerSchema = SchemaBuilder.builder()
+        .add("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4))
+        .add("people.fid2", CatalogUtil.newSimpleDataType(Type.INT4))
+        .build();
 
     FieldEval f1 = new FieldEval("employee.id1", CatalogUtil.newSimpleDataType(Type.INT4));
     FieldEval f2 = new FieldEval("people.fid1", CatalogUtil.newSimpleDataType(Type.INT4));