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 2014/02/20 12:10:30 UTC

[1/3] TAJO-610: Refactor Column class.

Repository: incubator-tajo
Updated Branches:
  refs/heads/master e63f4b09f -> e2f4798b0


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/RawFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/RawFile.java b/tajo-storage/src/main/java/org/apache/tajo/storage/RawFile.java
index 1151a0a..5c29928 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/RawFile.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/RawFile.java
@@ -91,8 +91,8 @@ public class RawFile {
 
       buffer = ByteBuffer.allocateDirect(128 * 1024);
 
-      columnTypes = new DataType[schema.getColumnNum()];
-      for (int i = 0; i < schema.getColumnNum(); i++) {
+      columnTypes = new DataType[schema.size()];
+      for (int i = 0; i < schema.size(); i++) {
         columnTypes[i] = schema.getColumn(i).getDataType();
       }
 
@@ -102,7 +102,7 @@ public class RawFile {
       channel.read(buffer);
       buffer.flip();
 
-      nullFlags = new BitArray(schema.getColumnNum());
+      nullFlags = new BitArray(schema.size());
       headerSize = RECORD_SIZE + 2 + nullFlags.bytesLength();
 
       super.init();
@@ -423,8 +423,8 @@ public class RawFile {
       channel = randomAccessFile.getChannel();
       pos = 0;
 
-      columnTypes = new DataType[schema.getColumnNum()];
-      for (int i = 0; i < schema.getColumnNum(); i++) {
+      columnTypes = new DataType[schema.size()];
+      for (int i = 0; i < schema.size(); i++) {
         columnTypes[i] = schema.getColumn(i).getDataType();
       }
 
@@ -432,7 +432,7 @@ public class RawFile {
 
       // comput the number of bytes, representing the null flags
 
-      nullFlags = new BitArray(schema.getColumnNum());
+      nullFlags = new BitArray(schema.size());
       headerSize = RECORD_SIZE + 2 + nullFlags.bytesLength();
 
       if (enabledStats) {
@@ -559,7 +559,7 @@ public class RawFile {
       buffer.position(recordOffset + headerSize);
       // reset the null flags
       nullFlags.clear();
-      for (int i = 0; i < schema.getColumnNum(); i++) {
+      for (int i = 0; i < schema.size(); i++) {
         if (enabledStats) {
           stats.analyzeField(i, t.get(i));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java b/tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java
index 954eb54..30c321c 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/RowFile.java
@@ -75,7 +75,7 @@ public class RowFile {
           conf.getInt(ConfVars.RAWFILE_SYNC_INTERVAL.varname,
               SYNC_SIZE * 100);
 
-      nullFlags = new BitArray(schema.getColumnNum());
+      nullFlags = new BitArray(schema.size());
       tupleHeaderSize = nullFlags.bytesLength() + (2 * Short.SIZE / 8);
       this.start = fragment.getStartKey();
       this.end = this.start + fragment.getEndKey();
@@ -85,7 +85,7 @@ public class RowFile {
       // set default page size.
       fs = fragment.getPath().getFileSystem(conf);
       in = fs.open(fragment.getPath());
-      buffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE * schema.getColumnNum());
+      buffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE * schema.size());
       buffer.flip();
 
       readHeader();
@@ -180,7 +180,7 @@ public class RowFile {
       }
 
       int i;
-      tuple = new VTuple(schema.getColumnNum());
+      tuple = new VTuple(schema.size());
 
       int nullFlagSize = buffer.getShort();
       byte[] nullFlagBytes = new byte[nullFlagSize];
@@ -196,7 +196,7 @@ public class RowFile {
 
       Datum datum;
       Column col;
-      for (i = 0; i < schema.getColumnNum(); i++) {
+      for (i = 0; i < schema.size(); i++) {
         if (!nullFlags.get(i)) {
           col = schema.getColumn(i);
           switch (col.getDataType().getType()) {
@@ -351,7 +351,7 @@ public class RowFile {
 
       buffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE);
 
-      nullFlags = new BitArray(schema.getColumnNum());
+      nullFlags = new BitArray(schema.size());
 
       if (enabledStats) {
         this.stats = new TableStatistics(this.schema);
@@ -373,7 +373,7 @@ public class RowFile {
       buffer.clear();
       nullFlags.clear();
 
-      for (int i = 0; i < schema.getColumnNum(); i++) {
+      for (int i = 0; i < schema.size(); i++) {
         if (enabledStats) {
           stats.analyzeField(i, t.get(i));
         }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java b/tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
index b0cb09d..7a421a8 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
@@ -28,7 +28,7 @@ import java.nio.ByteBuffer;
 
 public class RowStoreUtil {
   public static int[] getTargetIds(Schema inSchema, Schema outSchema) {
-    int[] targetIds = new int[outSchema.getColumnNum()];
+    int[] targetIds = new int[outSchema.size()];
     int i = 0;
     for (Column target : outSchema.getColumns()) {
       targetIds[i] = inSchema.getColumnId(target.getQualifiedName());
@@ -50,10 +50,10 @@ public class RowStoreUtil {
 
     public static Tuple toTuple(Schema schema, byte [] bytes) {
       ByteBuffer bb = ByteBuffer.wrap(bytes);
-      Tuple tuple = new VTuple(schema.getColumnNum());
+      Tuple tuple = new VTuple(schema.size());
       Column col;
       TajoDataTypes.DataType type;
-      for (int i =0; i < schema.getColumnNum(); i++) {
+      for (int i =0; i < schema.size(); i++) {
         col = schema.getColumn(i);
         type = col.getDataType();
         switch (type.getType()) {
@@ -164,7 +164,7 @@ public class RowStoreUtil {
       int size = StorageUtil.getRowByteSize(schema);
       ByteBuffer bb = ByteBuffer.allocate(size);
       Column col;
-      for (int i = 0; i < schema.getColumnNum(); i++) {
+      for (int i = 0; i < schema.size(); i++) {
         col = schema.getColumn(i);
         switch (col.getDataType().getType()) {
           case BOOLEAN: bb.put(tuple.get(i).asByte()); break;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/TableStatistics.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/TableStatistics.java b/tajo-storage/src/main/java/org/apache/tajo/storage/TableStatistics.java
index 41c9d61..cbee95e 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/TableStatistics.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/TableStatistics.java
@@ -42,14 +42,14 @@ public class TableStatistics {
 
   public TableStatistics(Schema schema) {
     this.schema = schema;
-    minValues = new VTuple(schema.getColumnNum());
-    maxValues = new VTuple(schema.getColumnNum());
+    minValues = new VTuple(schema.size());
+    maxValues = new VTuple(schema.size());
 
-    numNulls = new long[schema.getColumnNum()];
-    comparable = new boolean[schema.getColumnNum()];
+    numNulls = new long[schema.size()];
+    comparable = new boolean[schema.size()];
 
     DataType type;
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       type = schema.getColumn(i).getDataType();
       if (type.getType() == Type.PROTOBUF) {
         comparable[i] = false;
@@ -101,7 +101,7 @@ public class TableStatistics {
     TableStats stat = new TableStats();
 
     ColumnStats columnStats;
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       columnStats = new ColumnStats(schema.getColumn(i));
       columnStats.setNumNulls(numNulls[i]);
       columnStats.setMinValue(minValues.get(i));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFile.java b/tajo-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFile.java
index a6b8781..afbcaa8 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFile.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/rcfile/RCFile.java
@@ -705,7 +705,7 @@ public class RCFile {
 
       RECORD_INTERVAL = conf.getInt(RECORD_INTERVAL_CONF_STR, RECORD_INTERVAL);
       COLUMNS_BUFFER_SIZE = conf.getInt(COLUMNS_BUFFER_SIZE_CONF_STR, COLUMNS_BUFFER_SIZE);
-      columnNumber = schema.getColumnNum();
+      columnNumber = schema.size();
     }
 
     public void init() throws IOException {
@@ -867,7 +867,7 @@ public class RCFile {
      * @throws IOException
      */
     public void append(Tuple tuple) throws IOException {
-      int size = schema.getColumnNum();
+      int size = schema.size();
 
       for (int i = 0; i < size; i++) {
         Datum datum = tuple.get(i);
@@ -1179,7 +1179,7 @@ public class RCFile {
 
       targetColumnIndexes = new int[targets.length];
       for (int i = 0; i < targets.length; i++) {
-        targetColumnIndexes[i] = schema.getColumnIdByName(targets[i].getColumnName());
+        targetColumnIndexes[i] = schema.getColumnIdByName(targets[i].getSimpleName());
       }
       Arrays.sort(targetColumnIndexes);
 
@@ -1592,7 +1592,7 @@ public class RCFile {
         return null;
       }
 
-      Tuple tuple = new VTuple(schema.getColumnNum());
+      Tuple tuple = new VTuple(schema.size());
       getCurrentRow(tuple);
       return tuple;
     }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
index 3209469..2c35148 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniAppender.java
@@ -61,10 +61,10 @@ public class TrevniAppender extends FileAppender {
     fos = fs.create(path);
 
     ColumnMetaData [] trevniMetas =
-        new ColumnMetaData[schema.getColumnNum()];
+        new ColumnMetaData[schema.size()];
     int i = 0;
     for (Column column : schema.getColumns()) {
-      trevniMetas[i++] = new ColumnMetaData(column.getColumnName(),
+      trevniMetas[i++] = new ColumnMetaData(column.getSimpleName(),
           getType(column.getDataType().getType()));
     }
 
@@ -127,7 +127,7 @@ public class TrevniAppender extends FileAppender {
   public void addTuple(Tuple t) throws IOException {
     Column col;
     writer.startRow();
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       if (enabledStats) {
         stats.analyzeField(i, t.get(i));
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
index 2c2037f..ed71730 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/trevni/TrevniScanner.java
@@ -28,9 +28,9 @@ import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.datum.ProtobufDatumFactory;
 import org.apache.tajo.storage.FileScanner;
-import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.storage.VTuple;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.trevni.ColumnFileReader;
 import org.apache.trevni.ColumnValues;
 import org.apache.trevni.avro.HadoopInput;
@@ -71,14 +71,14 @@ public class TrevniScanner extends FileScanner {
     projectionMap = new int[targets.length];
     int tid;
     for (int i = 0; i < targets.length; i++) {
-      tid = schema.getColumnIdByName(targets[i].getColumnName());
+      tid = schema.getColumnIdByName(targets[i].getSimpleName());
       projectionMap[i] = tid;
     }
   }
 
   @Override
   public Tuple next() throws IOException {
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
 
     if (!columns[0].hasNext()) {
       return null;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/CSVFileScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/CSVFileScanner.java b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/CSVFileScanner.java
index b93672b..79ddfdd 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/CSVFileScanner.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/CSVFileScanner.java
@@ -136,7 +136,7 @@ public class CSVFileScanner extends FileScannerV2 {
 
     targetColumnIndexes = new int[targets.length];
     for (int i = 0; i < targets.length; i++) {
-      targetColumnIndexes[i] = schema.getColumnIdByName(targets[i].getColumnName());
+      targetColumnIndexes[i] = schema.getColumnIdByName(targets[i].getSimpleName());
     }
 
     if (LOG.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/FileScannerV2.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/FileScannerV2.java b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/FileScannerV2.java
index 0d5b33d..f9ad2f7 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/FileScannerV2.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/FileScannerV2.java
@@ -26,9 +26,9 @@ import org.apache.hadoop.fs.Path;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.storage.Scanner;
 import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.storage.fragment.FileFragment;
 
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -78,7 +78,7 @@ public abstract class FileScannerV2 implements Scanner {
     this.meta = meta;
     this.schema = schema;
     this.fragment = fragment;
-    this.columnNum = this.schema.getColumnNum();
+    this.columnNum = this.schema.size();
 
     this.fs = fragment.getPath().getFileSystem(conf);
 	}

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/RCFileScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/RCFileScanner.java b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/RCFileScanner.java
index a549a51..5d2f861 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/v2/RCFileScanner.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/v2/RCFileScanner.java
@@ -30,7 +30,10 @@ import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.NullDatum;
-import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.BinarySerializerDeserializer;
+import org.apache.tajo.storage.SerializerDeserializer;
+import org.apache.tajo.storage.Tuple;
+import org.apache.tajo.storage.VTuple;
 import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.storage.rcfile.BytesRefArrayWritable;
 import org.apache.tajo.storage.rcfile.ColumnProjectionUtils;
@@ -106,9 +109,9 @@ public class RCFileScanner extends FileScannerV2 {
   }
 
   private Tuple makeTuple() throws IOException {
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     synchronized (lock) {
-      column.resetValid(schema.getColumnNum());
+      column.resetValid(schema.size());
       int tid; // target column id
       for (int i = 0; i < projectionMap.length; i++) {
         tid = projectionMap[i];
@@ -136,7 +139,7 @@ public class RCFileScanner extends FileScannerV2 {
     projectionMap = new Integer[targets.length];
     int tid;
     for (int i = 0; i < targets.length; i++) {
-      tid = schema.getColumnIdByName(targets[i].getColumnName());
+      tid = schema.getColumnIdByName(targets[i].getSimpleName());
       projectionMap[i] = tid;
     }
     ArrayList<Integer> projectionIdList = new ArrayList<Integer>(TUtil.newList(projectionMap));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java b/tajo-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
index 2618527..cb2f7a6 100644
--- a/tajo-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
+++ b/tajo-storage/src/test/java/org/apache/tajo/storage/TestLazyTuple.java
@@ -94,7 +94,7 @@ public class TestLazyTuple {
 
   @Test
   public void testContain() {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
 
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
     t1.put(0, DatumFactory.createInt4(1));
@@ -118,7 +118,7 @@ public class TestLazyTuple {
 
   @Test
   public void testPut() {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
     t1.put(0, DatumFactory.createText("str"));
     t1.put(1, DatumFactory.createInt4(2));
@@ -134,7 +134,7 @@ public class TestLazyTuple {
 
   @Test
   public void testEquals() {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
     LazyTuple t2 = new LazyTuple(schema, new byte[colNum][], -1);
 
@@ -161,7 +161,7 @@ public class TestLazyTuple {
 
   @Test
   public void testHashCode() {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
     LazyTuple t2 = new LazyTuple(schema, new byte[colNum][], -1);
 
@@ -195,7 +195,7 @@ public class TestLazyTuple {
 
   @Test
   public void testPutTuple() {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
 
     t1.put(0, DatumFactory.createInt4(1));
@@ -207,7 +207,7 @@ public class TestLazyTuple {
     schema2.addColumn("col1", TajoDataTypes.Type.INT8);
     schema2.addColumn("col2", TajoDataTypes.Type.INT8);
 
-    LazyTuple t2 = new LazyTuple(schema2, new byte[schema2.getColumnNum()][], -1);
+    LazyTuple t2 = new LazyTuple(schema2, new byte[schema2.size()][], -1);
     t2.put(0, DatumFactory.createInt4(4));
     t2.put(1, DatumFactory.createInt4(5));
 
@@ -238,7 +238,7 @@ public class TestLazyTuple {
 
   @Test
   public void testClone() throws CloneNotSupportedException {
-    int colNum = schema.getColumnNum();
+    int colNum = schema.size();
     LazyTuple t1 = new LazyTuple(schema, new byte[colNum][], -1);
 
     t1.put(0, DatumFactory.createInt4(1));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/test/java/org/apache/tajo/storage/TestTupleComparator.java b/tajo-storage/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
index 7092953..ab7c2b2 100644
--- a/tajo-storage/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
+++ b/tajo-storage/src/test/java/org/apache/tajo/storage/TestTupleComparator.java
@@ -18,14 +18,14 @@
 
 package org.apache.tajo.storage;
 
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.DatumFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 
@@ -66,8 +66,8 @@ public class TestTupleComparator {
         DatumFactory.createInt4(4),
         DatumFactory.createText("abd")});
 
-    SortSpec sortKey1 = new SortSpec(schema.getColumnByFQN("col4"), true, false);
-    SortSpec sortKey2 = new SortSpec(schema.getColumnByFQN("col5"), true, false);
+    SortSpec sortKey1 = new SortSpec(schema.getColumn("col4"), true, false);
+    SortSpec sortKey2 = new SortSpec(schema.getColumn("col5"), true, false);
 
     TupleComparator tc = new TupleComparator(schema,
         new SortSpec[] {sortKey1, sortKey2});

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
index 34c362c..54798a4 100644
--- a/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
+++ b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
@@ -42,9 +42,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Random;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 @RunWith(Parameterized.class)
 public class TestBSTIndex {
@@ -110,8 +108,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -146,7 +144,7 @@ public class TestBSTIndex {
     creater.close();
     scanner.close();
 
-    tuple = new VTuple(keySchema.getColumnNum());
+    tuple = new VTuple(keySchema.size());
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindValue_" + storeType + ".idx"), keySchema, comp);
     reader.open();
     scanner = StorageManagerFactory.getSeekableScanner(conf, meta, schema, tablet, schema);
@@ -184,8 +182,8 @@ public class TestBSTIndex {
     appender.init();
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -224,7 +222,7 @@ public class TestBSTIndex {
     long fileLen = status.getLen();
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
-    tuple = new VTuple(keySchema.getColumnNum());
+    tuple = new VTuple(keySchema.size());
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testBuildIndexWithAppender_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
@@ -276,8 +274,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, status.getLen());
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -347,8 +345,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));
@@ -437,8 +435,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));
@@ -517,8 +515,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -551,7 +549,7 @@ public class TestBSTIndex {
     creater.close();
     scanner.close();
 
-    tuple = new VTuple(keySchema.getColumnNum());
+    tuple = new VTuple(keySchema.size());
 
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindMinValue_" + storeType + ".idx"),
         keySchema, comp);
@@ -599,8 +597,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));
@@ -704,8 +702,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));
@@ -784,8 +782,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), false, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), false, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), false, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), false, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -820,7 +818,7 @@ public class TestBSTIndex {
     creater.close();
     scanner.close();
 
-    tuple = new VTuple(keySchema.getColumnNum());
+    tuple = new VTuple(keySchema.size());
 
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindValueDescOrder_" + storeType + ".idx"),
         keySchema, comp);
@@ -875,8 +873,8 @@ public class TestBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), false, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), false, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), false, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), false, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
index 6d5d90f..53a2531 100644
--- a/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
+++ b/tajo-storage/src/test/java/org/apache/tajo/storage/index/TestSingleCSVFileBSTIndex.java
@@ -97,8 +97,8 @@ public class TestSingleCSVFileBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
 
     SortSpec[] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("long"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("double"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("long"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("double"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("long", Type.INT8));
@@ -132,7 +132,7 @@ public class TestSingleCSVFileBSTIndex {
     creater.close();
     fileScanner.close();
 
-    tuple = new VTuple(keySchema.getColumnNum());
+    tuple = new VTuple(keySchema.size());
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir,
         "FindValueInCSV.idx"), keySchema, comp);
     reader.open();
@@ -186,8 +186,8 @@ public class TestSingleCSVFileBSTIndex {
     FileFragment tablet = new FileFragment("table1_1", status.getPath(), 0, fileLen);
     
     SortSpec [] sortKeys = new SortSpec[2];
-    sortKeys[0] = new SortSpec(schema.getColumnByFQN("int"), true, false);
-    sortKeys[1] = new SortSpec(schema.getColumnByFQN("long"), true, false);
+    sortKeys[0] = new SortSpec(schema.getColumn("int"), true, false);
+    sortKeys[1] = new SortSpec(schema.getColumn("long"), true, false);
 
     Schema keySchema = new Schema();
     keySchema.addColumn(new Column("int", Type.INT4));


[3/3] git commit: TAJO-610: Refactor Column class.

Posted by hy...@apache.org.
TAJO-610: Refactor Column class.


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

Branch: refs/heads/master
Commit: e2f4798b09b2efccfe14a6eac46055d3b6c72ffb
Parents: e63f4b0
Author: Hyunsik Choi <hy...@apache.org>
Authored: Thu Feb 20 20:02:24 2014 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Thu Feb 20 20:02:24 2014 +0900

----------------------------------------------------------------------
 CHANGES.txt                                     |   4 +-
 .../org/apache/tajo/catalog/CatalogUtil.java    |  61 +++++++-
 .../java/org/apache/tajo/catalog/Column.java    | 146 +++++++++----------
 .../org/apache/tajo/catalog/DDLBuilder.java     |   2 +-
 .../java/org/apache/tajo/catalog/Schema.java    |  65 ++++++---
 .../src/main/proto/CatalogProtos.proto          |   3 +-
 .../org/apache/tajo/catalog/TestColumn.java     |   5 +-
 .../org/apache/tajo/catalog/TestSchema.java     |  40 ++---
 .../tajo/catalog/store/HCatalogStore.java       |   2 +-
 .../tajo/catalog/store/TestHCatalogStore.java   |  26 ++--
 .../tajo/catalog/store/AbstractDBStore.java     |  28 +---
 .../org/apache/tajo/catalog/store/MemStore.java |   2 +-
 .../org/apache/tajo/catalog/TestCatalog.java    |  10 +-
 .../org/apache/tajo/catalog/TestDBStore.java    |  10 +-
 .../org/apache/tajo/cli/DescTableCommand.java   |   4 +-
 .../apache/tajo/jdbc/TajoResultSetMetaData.java |   4 +-
 .../java/org/apache/tajo/TajoConstants.java     |   2 +
 .../apache/tajo/engine/eval/EvalTreeUtil.java   |   4 +-
 .../org/apache/tajo/engine/eval/FieldEval.java  |   4 +-
 .../apache/tajo/engine/planner/LogicalPlan.java |  17 ++-
 .../engine/planner/LogicalPlanPreprocessor.java |  10 +-
 .../engine/planner/LogicalPlanVerifier.java     |  16 +-
 .../tajo/engine/planner/LogicalPlanner.java     |  16 +-
 .../apache/tajo/engine/planner/PlannerUtil.java |  89 +----------
 .../tajo/engine/planner/enforce/Enforcer.java   |   2 +-
 .../engine/planner/global/GlobalPlanner.java    |   2 +-
 .../engine/planner/logical/GroupbyNode.java     |   2 +-
 .../tajo/engine/planner/logical/ScanNode.java   |   3 +-
 .../tajo/engine/planner/logical/SortNode.java   |   2 +-
 .../planner/logical/TableSubQueryNode.java      |   3 +-
 .../engine/planner/logical/join/JoinGraph.java  |   8 +-
 .../engine/planner/physical/BNLJoinExec.java    |   2 +-
 .../planner/physical/BSTIndexScanExec.java      |   2 +-
 .../planner/physical/ColPartitionStoreExec.java |   4 +-
 .../planner/physical/HashAggregateExec.java     |   2 +-
 .../planner/physical/HashFullOuterJoinExec.java |   6 +-
 .../engine/planner/physical/HashJoinExec.java   |   2 +-
 .../planner/physical/HashLeftOuterJoinExec.java |   4 +-
 .../physical/MergeFullOuterJoinExec.java        |   6 +-
 .../engine/planner/physical/MergeJoinExec.java  |   2 +-
 .../engine/planner/physical/NLJoinExec.java     |   2 +-
 .../planner/physical/NLLeftOuterJoinExec.java   |   4 +-
 .../engine/planner/physical/PhysicalExec.java   |   2 +-
 .../engine/planner/physical/ProjectionExec.java |   2 +-
 .../physical/RangeShuffleFileWriteExec.java     |   2 +-
 .../physical/RightOuterMergeJoinExec.java       |   4 +-
 .../planner/physical/SortAggregateExec.java     |   4 +-
 .../rewrite/PartitionedTableRewriter.java       |  10 +-
 .../apache/tajo/engine/query/QueryContext.java  |   4 +-
 .../apache/tajo/engine/utils/SchemaUtil.java    |   4 +-
 .../org/apache/tajo/engine/utils/TupleUtil.java |  14 +-
 .../java/org/apache/tajo/util/IndexUtil.java    |   4 +-
 .../resources/webapps/admin/catalogview.jsp     |  14 +-
 .../apache/tajo/engine/eval/ExprTestBase.java   |   6 +-
 .../tajo/engine/eval/TestEvalTreeUtil.java      |   4 +-
 .../engine/planner/TestLogicalOptimizer.java    |   4 +-
 .../tajo/engine/planner/TestLogicalPlanner.java |  47 +++---
 .../tajo/engine/planner/TestPlannerUtil.java    |  12 +-
 .../planner/physical/TestBNLJoinExec.java       |   8 +-
 .../planner/physical/TestBSTIndexExec.java      |  12 +-
 .../planner/physical/TestExternalSortExec.java  |   2 +-
 .../physical/TestFullOuterHashJoinExec.java     |  10 +-
 .../physical/TestFullOuterMergeJoinExec.java    |  16 +-
 .../planner/physical/TestHashAntiJoinExec.java  |   8 +-
 .../planner/physical/TestHashJoinExec.java      |   4 +-
 .../planner/physical/TestHashSemiJoinExec.java  |   8 +-
 .../physical/TestLeftOuterHashJoinExec.java     |  12 +-
 .../physical/TestLeftOuterNLJoinExec.java       |   6 +-
 .../planner/physical/TestMergeJoinExec.java     |   8 +-
 .../engine/planner/physical/TestNLJoinExec.java |   8 +-
 .../planner/physical/TestPhysicalPlanner.java   |   4 +-
 .../physical/TestRightOuterHashJoinExec.java    |  14 +-
 .../physical/TestRightOuterMergeJoinExec.java   |  16 +-
 .../engine/planner/physical/TestSortExec.java   |   2 +-
 .../apache/tajo/engine/query/TestCTASQuery.java |   4 +-
 .../tajo/engine/query/TestTablePartitions.java  |   9 +-
 .../org/apache/tajo/jdbc/TestResultSet.java     |   9 +-
 .../java/org/apache/tajo/jdbc/TestTajoJdbc.java |   2 +-
 .../tajo/worker/TestRangeRetrieverHandler.java  |  12 +-
 .../apache/tajo/jdbc/TajoDatabaseMetaData.java  |   4 +-
 .../java/org/apache/tajo/storage/CSVFile.java   |   2 +-
 .../org/apache/tajo/storage/FileScanner.java    |   2 +-
 .../java/org/apache/tajo/storage/LazyTuple.java |   2 +-
 .../java/org/apache/tajo/storage/RawFile.java   |  14 +-
 .../java/org/apache/tajo/storage/RowFile.java   |  12 +-
 .../org/apache/tajo/storage/RowStoreUtil.java   |   8 +-
 .../apache/tajo/storage/TableStatistics.java    |  12 +-
 .../org/apache/tajo/storage/rcfile/RCFile.java  |   8 +-
 .../tajo/storage/trevni/TrevniAppender.java     |   6 +-
 .../tajo/storage/trevni/TrevniScanner.java      |   6 +-
 .../apache/tajo/storage/v2/CSVFileScanner.java  |   2 +-
 .../apache/tajo/storage/v2/FileScannerV2.java   |   4 +-
 .../apache/tajo/storage/v2/RCFileScanner.java   |  11 +-
 .../org/apache/tajo/storage/TestLazyTuple.java  |  14 +-
 .../tajo/storage/TestTupleComparator.java       |  10 +-
 .../apache/tajo/storage/index/TestBSTIndex.java |  52 ++++---
 .../index/TestSingleCSVFileBSTIndex.java        |  10 +-
 97 files changed, 543 insertions(+), 575 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d7125b0..0be4426 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -130,7 +130,9 @@ Release 0.8.0 - unreleased
 
   IMPROVEMENTS
 
-    TAJO-601: Improve distinct aggregation query processing.
+    TAJO-610: Refactor Column class. (hyunsik)
+
+    TAJO-601: Improve distinct aggregation query processing. (hyunsik)
 
     TAJO-305: Implement killQuery feature. (hyunsik)
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogUtil.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogUtil.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogUtil.java
index 9f143ac..2a6727e 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogUtil.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/CatalogUtil.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.catalog;
 
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.TajoConstants;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.catalog.proto.CatalogProtos.ColumnProto;
@@ -26,13 +27,66 @@ import org.apache.tajo.catalog.proto.CatalogProtos.SchemaProto;
 import org.apache.tajo.catalog.proto.CatalogProtos.TableDescProto;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.Collection;
 
 import static org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
 import static org.apache.tajo.common.TajoDataTypes.Type;
 
 public class CatalogUtil {
+  public final static String IDENTIFIER_DELIMITER = ".";
+  public final static String IDENTIFIER_DELIMITER_REGEXP = "\\.";
+
+  /**
+   * Normalize an identifier
+   *
+   * @param identifier The identifier to be normalized
+   * @return The normalized identifier
+   */
+  public static String normalizeIdentifier(String identifier) {
+    return identifier.toLowerCase();
+  }
+
+  /**
+   * Extract a qualification name from an identifier.
+   *
+   * For example, consider a table identifier like 'database1.table1'.
+   * In this case, this method extracts 'database1'.
+   *
+   * @param name The identifier to be extracted
+   * @return The extracted qualifier
+   */
+  public static String extractQualifier(String name) {
+    int lastDelimiterIdx = name.lastIndexOf(IDENTIFIER_DELIMITER);
+    if (lastDelimiterIdx > -1) {
+      return name.substring(0, lastDelimiterIdx);
+    } else {
+      return TajoConstants.EMPTY_STRING;
+    }
+  }
+
+  /**
+   * Extract a simple name from an identifier.
+   *
+   * For example, consider a table identifier like 'database1.table1'.
+   * In this case, this method extracts 'table1'.
+   *
+   * @param name The identifier to be extracted
+   * @return The extracted simple name
+   */
+  public static String extractSimpleName(String name) {
+    int lastDelimiterIdx = name.lastIndexOf(IDENTIFIER_DELIMITER);
+    if (lastDelimiterIdx > -1) {
+      // plus one means skipping a delimiter.
+      return name.substring(lastDelimiterIdx + 1, name.length());
+    } else {
+      return name;
+    }
+  }
+
   public static String getCanonicalName(String signature, Collection<DataType> paramTypes) {
     DataType [] types = paramTypes.toArray(new DataType[paramTypes.size()]);
     return getCanonicalName(signature, types);
@@ -108,8 +162,7 @@ public class CatalogUtil {
     revisedSchema.clearFields();
     for (ColumnProto col : schema.getFieldsList()) {
       ColumnProto.Builder builder = ColumnProto.newBuilder(col);
-      builder.setColumnName(col.getColumnName());
-      builder.setQualifier(tableName);
+      builder.setName(tableName + IDENTIFIER_DELIMITER + extractSimpleName(col.getName()));
       revisedSchema.addFields(builder.build());
     }
 
@@ -145,7 +198,7 @@ public class CatalogUtil {
   }
 
   public static String columnToDDLString(Column column) {
-    StringBuilder sb = new StringBuilder(column.getColumnName());
+    StringBuilder sb = new StringBuilder(column.getSimpleName());
     sb.append(" ").append(column.getDataType().getType());
     if (column.getDataType().hasLength()) {
       sb.append(" (").append(column.getDataType().getLength()).append(")");

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
index cb42086..b75cd1c 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Column.java
@@ -26,131 +26,114 @@ import org.apache.tajo.common.ProtoObject;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.json.GsonObject;
-import org.apache.tajo.util.TUtil;
 
 /**
- * It represents a column. It is usually used for relations.
+ * Describes a column. It is an immutable object.
  */
-public class Column implements ProtoObject<ColumnProto>, Cloneable, GsonObject {
-	private ColumnProto.Builder builder = null;
+public class Column implements ProtoObject<ColumnProto>, GsonObject {
+	@Expose protected String name;
+	@Expose protected DataType dataType;
 
-  @Expose protected String qualifier; // optional
-	@Expose protected String name; // required
-	@Expose protected DataType dataType; // required
-	
-	public Column() {
-		this.builder = ColumnProto.newBuilder();
-	}
-	  
-	public Column(String columnName, DataType dataType) {
-	  this();
-		checkAndSetName(columnName.toLowerCase());
+  /**
+   *
+   * @param name Column name
+   * @param dataType Data Type with length
+   */
+	public Column(String name, DataType dataType) {
+    this.name = CatalogUtil.normalizeIdentifier(name);
 		this.dataType = dataType;
 	}
 
-  public Column(String columnName, TajoDataTypes.Type type) {
-    this(columnName, CatalogUtil.newSimpleDataType(type));
+  /**
+   *
+   * @param name Column name
+   * @param type Data Type without length
+   */
+  public Column(String name, TajoDataTypes.Type type) {
+    this(name, CatalogUtil.newSimpleDataType(type));
   }
 
-  public Column(String columnName, TajoDataTypes.Type type, int typeLength) {
-    this(columnName, CatalogUtil.newDataTypeWithLen(type, typeLength));
+  /**
+   *
+   * @param name Column name
+   * @param type Data Type
+   * @param typeLength The length of type
+   */
+  public Column(String name, TajoDataTypes.Type type, int typeLength) {
+    this(name, CatalogUtil.newDataTypeWithLen(type, typeLength));
   }
-	
+
 	public Column(ColumnProto proto) {
-    this();
-    name = proto.getColumnName().toLowerCase();
+    name = CatalogUtil.normalizeIdentifier(proto.getName());
     dataType = proto.getDataType();
-    if (proto.hasQualifier()) {
-      qualifier = proto.getQualifier().toLowerCase();
-    }
 	}
 
-  private void checkAndSetName(String qualifiedOrName) {
-    String [] splits = qualifiedOrName.split("\\.");
-    if (splits.length > 1) {
-      qualifier = qualifiedOrName.substring(0, qualifiedOrName.lastIndexOf("."));
-      name = qualifiedOrName.substring(qualifiedOrName.lastIndexOf(".") + 1, qualifiedOrName.length());
-    } else {
-      qualifier = null;
-      name = qualifiedOrName;
-    }
+  /**
+   *
+   * @return True if a column includes a table name. Otherwise, it returns False.
+   */
+  public boolean hasQualifier() {
+    return name.split(CatalogUtil.IDENTIFIER_DELIMITER_REGEXP).length > 1;
   }
 
+  /**
+   *
+   * @return The full name of this column.
+   */
 	public String getQualifiedName() {
-    if (qualifier != null) {
-      return qualifier + "." + name;
-    } else {
-      return name;
-    }
+    return name;
 	}
-	
-  public boolean hasQualifier() {
-    return qualifier != null;
-  }
-
-  public void setQualifier(String qualifier) {
-    this.qualifier = qualifier.toLowerCase();
-  }
 
+  /**
+   *
+   * @return The qualifier
+   */
   public String getQualifier() {
-    if (qualifier != null) {
-      return qualifier;
-    } else {
-      return "";
-    }    
+    return CatalogUtil.extractQualifier(name);
   }
 
-  public String getColumnName() {
-    return name;
+  /**
+   *
+   * @return The simple name without qualifications
+   */
+  public String getSimpleName() {
+    return CatalogUtil.extractSimpleName(name);
   }
-	
-	public void setName(String name) {
-    checkAndSetName(name.toLowerCase());
-	}
-	
+
+  /**
+   *
+   * @return DataType which includes domain type and scale.
+   */
 	public DataType getDataType() {
 		return this.dataType;
 	}
 	
-	public void setDataType(DataType dataType) {
-		this.dataType = dataType;
-	}
-	
 	@Override
 	public boolean equals(Object o) {
 		if (o instanceof Column) {
 			Column another = (Column)o;
-			return name.equals(another.name) &&
-          dataType.equals(another.dataType) &&
-          TUtil.checkEquals(qualifier, another.qualifier);
+			return name.equals(another.name) && dataType.equals(another.dataType);
     }
 		return false;
 	}
 	
   public int hashCode() {
-    return Objects.hashCode(name, dataType, qualifier);
+    return Objects.hashCode(name, dataType);
 
   }
   
   @Override
-  public Object clone() throws CloneNotSupportedException {
-    Column column = (Column) super.clone();
-    column.builder = ColumnProto.newBuilder();
-    column.name = name;
-    column.dataType = dataType;
-    column.qualifier = qualifier != null ? qualifier : null;
-    return column;
+  public Object clone() {
+    return this;
   }
 
+  /**
+   *
+   * @return The protocol buffer object for Column
+   */
 	@Override
 	public ColumnProto getProto() {
-    builder.setColumnName(this.name);
-    builder.setDataType(this.dataType);
-    if (qualifier != null) {
-      builder.setQualifier(qualifier);
-    }
-
-    return builder.build();
+    return ColumnProto.newBuilder().setName(this.name).setDataType(this.dataType).build();
 	}
 	
 	public String toString() {
@@ -167,4 +150,5 @@ public class Column implements ProtoObject<ColumnProto>, Cloneable, GsonObject {
 	public String toJson() {
 		return CatalogGsonHelper.toJson(this, Column.class);
 	}
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
index 12a1f74..1e51cc2 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/DDLBuilder.java
@@ -59,7 +59,7 @@ public class DDLBuilder {
         sb.append(", ");
       }
 
-      sb.append(column.getColumnName()).append(" ");
+      sb.append(column.getSimpleName()).append(" ");
       TajoDataTypes.DataType dataType = column.getDataType();
       sb.append(dataType.getType().name());
       if (column.getDataType().hasLength() && column.getDataType().getLength() > 0) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java
index 5f1e8d7..725e9c3 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java
+++ b/tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/Schema.java
@@ -56,14 +56,14 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
       Column tobeAdded = new Column(colProto);
       fields.add(tobeAdded);
       if (tobeAdded.hasQualifier()) {
-        fieldsByQualifiedName.put(tobeAdded.getQualifier() + "." + tobeAdded.getColumnName(), fields.size() - 1);
+        fieldsByQualifiedName.put(tobeAdded.getQualifier() + "." + tobeAdded.getSimpleName(), fields.size() - 1);
       } else {
-        fieldsByQualifiedName.put(tobeAdded.getColumnName(), fields.size() - 1);
+        fieldsByQualifiedName.put(tobeAdded.getSimpleName(), fields.size() - 1);
       }
-      if (fieldsByName.containsKey(tobeAdded.getColumnName())) {
-        fieldsByName.get(tobeAdded.getColumnName()).add(fields.size() - 1);
+      if (fieldsByName.containsKey(tobeAdded.getSimpleName())) {
+        fieldsByName.get(tobeAdded.getSimpleName()).add(fields.size() - 1);
       } else {
-        fieldsByName.put(tobeAdded.getColumnName(), TUtil.newList(fields.size() - 1));
+        fieldsByName.put(tobeAdded.getSimpleName(), TUtil.newList(fields.size() - 1));
       }
     }
   }
@@ -96,13 +96,14 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
    */
   public void setQualifier(String qualifier) {
     fieldsByQualifiedName.clear();
-    for (int i = 0; i < getColumnNum(); i++) {
-      fields.get(i).setQualifier(qualifier);
+    for (int i = 0; i < size(); i++) {
+      Column column = fields.get(i);
+      fields.set(i, new Column(qualifier + "." + column.getSimpleName(), column.getDataType()));
       fieldsByQualifiedName.put(fields.get(i).getQualifiedName(), i);
     }
   }
 	
-	public int getColumnNum() {
+	public int size() {
 		return this.fields.size();
 	}
 
@@ -117,26 +118,47 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
     if (column.hasQualifier()) {
       return fields.get(fieldsByQualifiedName.get(column.getQualifiedName()));
     } else {
-      return fields.get(fieldsByName.get(column.getColumnName()).get(0));
+      return fields.get(fieldsByName.get(column.getSimpleName()).get(0));
     }
   }
 
+  /**
+   * Get a column by a given name.
+   *
+   * @param name The column name to be found.
+   * @return The column matched to a given column name.
+   */
   public Column getColumn(String name) {
     String [] parts = name.split("\\.");
     if (parts.length == 2) {
-      return getColumnByFQN(name);
+      return getColumnByQName(name);
     } else {
       return getColumnByName(name);
     }
   }
 
-	public Column getColumnByFQN(String qualifiedName) {
+  /**
+   * Find a column by a qualified name (e.g., table1.col1).
+   *
+   * @param qualifiedName The qualified name
+   * @return The Column matched to a given qualified name
+   */
+  private Column getColumnByQName(String qualifiedName) {
 		Integer cid = fieldsByQualifiedName.get(qualifiedName.toLowerCase());
 		return cid != null ? fields.get(cid) : null;
 	}
-	
-	public Column getColumnByName(String colName) {
-    String normalized = colName.toLowerCase();
+
+  /**
+   * Find a column by a name (e.g., col1).
+   * The same name columns can be exist in a schema. For example, table1.col1 and table2.col1 coexist in a schema.
+   * In this case, it will throw {@link java.lang.RuntimeException}. But, it occurs rarely because all column names
+   * except for alias have a qualified form.
+   *
+   * @param columnName The column name without qualifier
+   * @return The Column matched to a given name.
+   */
+	private Column getColumnByName(String columnName) {
+    String normalized = columnName.toLowerCase();
 	  List<Integer> list = fieldsByName.get(normalized);
 
     if (list == null || list.size() == 0) {
@@ -188,7 +210,7 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
 
   public int getColumnIdByName(String colName) {
     for (Column col : fields) {
-      if (col.getColumnName().equals(colName.toLowerCase())) {
+      if (col.getSimpleName().equals(colName.toLowerCase())) {
         String qualifiedName = col.getQualifiedName();
         return fieldsByQualifiedName.get(qualifiedName);
       }
@@ -218,13 +240,13 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
     if (column.hasQualifier()) {
       return fieldsByQualifiedName.containsKey(column.getQualifiedName());
     } else {
-      if (fieldsByName.containsKey(column.getColumnName())) {
-        int num = fieldsByName.get(column.getColumnName()).size();
+      if (fieldsByName.containsKey(column.getSimpleName())) {
+        int num = fieldsByName.get(column.getSimpleName()).size();
         if (num == 0) {
-          throw new IllegalStateException("No such column name: " + column.getColumnName());
+          throw new IllegalStateException("No such column name: " + column.getSimpleName());
         }
         if (num > 1) {
-          throw new RuntimeException("Ambiguous column name: " + column.getColumnName());
+          throw new RuntimeException("Ambiguous column name: " + column.getSimpleName());
         }
         return true;
       }
@@ -265,7 +287,7 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
 		Column newCol = new Column(normalized, dataType);
 		fields.add(newCol);
 		fieldsByQualifiedName.put(newCol.getQualifiedName(), fields.size() - 1);
-    fieldsByName.put(newCol.getColumnName(), TUtil.newList(fields.size() - 1));
+    fieldsByName.put(newCol.getSimpleName(), TUtil.newList(fields.size() - 1));
 		
 		return this;
 	}
@@ -320,7 +342,7 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
 
 	public String toString() {
 	  StringBuilder sb = new StringBuilder();
-	  sb.append("{(").append(getColumnNum()).append(") ");
+	  sb.append("{(").append(size()).append(") ");
 	  int i = 0;
 	  for(Column col : fields) {
 	    sb.append(col);
@@ -337,7 +359,6 @@ public class Schema implements ProtoObject<SchemaProto>, Cloneable, GsonObject {
   @Override
 	public String toJson() {
 	  return CatalogGsonHelper.toJson(this, Schema.class);
-		
 	}
 
   public Column [] toArray() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto b/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
index 47792a6..f5fff2c 100644
--- a/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
+++ b/tajo-catalog/tajo-catalog-common/src/main/proto/CatalogProtos.proto
@@ -70,8 +70,7 @@ message ColumnMetaProto {
 }
 
 message ColumnProto {
-	required string columnName = 1;
-	optional string qualifier = 2;
+	required string name = 1;
 	required DataType dataType = 3;
 }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java
index 81677c5..ef08d51 100644
--- a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java
+++ b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestColumn.java
@@ -76,9 +76,8 @@ public class TestColumn {
 	@Test
 	public final void testQualifiedName() {
 	  Column col = new Column("table_1.id", Type.INT4);
-	  
 	  assertTrue(col.hasQualifier());
-	  assertEquals("id", col.getColumnName());
+	  assertEquals("id", col.getSimpleName());
 	  assertEquals("table_1.id", col.getQualifiedName());
 	  assertEquals("table_1", col.getQualifier());
 	}
@@ -88,7 +87,7 @@ public class TestColumn {
     Column col = new Column("database1.table_1.id", Type.INT4);
 
     assertTrue(col.hasQualifier());
-    assertEquals("id", col.getColumnName());
+    assertEquals("id", col.getSimpleName());
     assertEquals("database1.table_1.id", col.getQualifiedName());
     assertEquals("database1.table_1", col.getQualifier());
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java
index c879ecb..a61b422 100644
--- a/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java
+++ b/tajo-catalog/tajo-catalog-common/src/test/java/org/apache/tajo/catalog/TestSchema.java
@@ -61,9 +61,9 @@ public class TestSchema {
 
 	@Test
 	public final void testGetColumnString() {
-		assertEquals(col1, schema.getColumnByFQN("name"));
-		assertEquals(col2, schema.getColumnByFQN("age"));
-		assertEquals(col3, schema.getColumnByFQN("addr"));
+		assertEquals(col1, schema.getColumn("name"));
+		assertEquals(col2, schema.getColumn("age"));
+		assertEquals(col3, schema.getColumn("addr"));
 	}
 
 	@Test
@@ -88,9 +88,9 @@ public class TestSchema {
 	public final void testGetProto() {
 		SchemaProto proto = schema.getProto();
 		
-		assertEquals("name", proto.getFields(0).getColumnName());
-		assertEquals("age", proto.getFields(1).getColumnName());
-		assertEquals("addr", proto.getFields(2).getColumnName());
+		assertEquals("name", proto.getFields(0).getName());
+		assertEquals("age", proto.getFields(1).getName());
+		assertEquals("addr", proto.getFields(2).getName());
 	}
 	
 	@Test
@@ -102,12 +102,12 @@ public class TestSchema {
 	  Schema schema2 = new Schema(schema.getProto());
 	  assertEquals(schema.getProto(), schema2.getProto());
 	  assertEquals(schema.getColumn(0), schema2.getColumn(0));
-	  assertEquals(schema.getColumnNum(), schema2.getColumnNum());
+	  assertEquals(schema.size(), schema2.size());
 	  
 	  Schema schema3 = (Schema) schema.clone();
 	  assertEquals(schema.getProto(), schema3.getProto());
     assertEquals(schema.getColumn(0), schema3.getColumn(0));
-    assertEquals(schema.getColumnNum(), schema3.getColumnNum());
+    assertEquals(schema.size(), schema3.size());
 	}
 	
 	@Test(expected = AlreadyExistsFieldException.class)
@@ -141,32 +141,32 @@ public class TestSchema {
     schema2.setQualifier("test1");
     Column column = schema2.getColumn(1);
     assertEquals(1, schema2.getColumnIdByName("age"));
-    assertEquals(column, schema2.getColumnByName("age"));
-    assertEquals(column, schema2.getColumnByFQN("test1.age"));
+    assertEquals(column, schema2.getColumn("age"));
+    assertEquals(column, schema2.getColumn("test1.age"));
 
     Schema schema3 = new Schema();
     schema3.addColumn("tb1.col1", Type.INT4);
     schema3.addColumn("col2", Type.INT4);
     assertEquals("tb1", schema3.getColumn(0).getQualifier());
     assertEquals("tb1.col1", schema3.getColumn(0).getQualifiedName());
-    assertEquals("col1", schema3.getColumn(0).getColumnName());
+    assertEquals("col1", schema3.getColumn(0).getSimpleName());
     assertEquals("col2", schema3.getColumn(1).getQualifiedName());
 
-    assertEquals(schema3.getColumn(0), schema3.getColumnByName("col1"));
-    assertEquals(schema3.getColumn(0), schema3.getColumnByFQN("tb1.col1"));
-    assertEquals(schema3.getColumn(1), schema3.getColumnByName("col2"));
-    assertEquals(schema3.getColumn(1), schema3.getColumnByFQN("col2"));
+    assertEquals(schema3.getColumn(0), schema3.getColumn("col1"));
+    assertEquals(schema3.getColumn(0), schema3.getColumn("tb1.col1"));
+    assertEquals(schema3.getColumn(1), schema3.getColumn("col2"));
+    assertEquals(schema3.getColumn(1), schema3.getColumn("col2"));
 
     schema3.setQualifier("tb2");
     assertEquals("tb2", schema3.getColumn(0).getQualifier());
     assertEquals("tb2.col1", schema3.getColumn(0).getQualifiedName());
-    assertEquals("col1", schema3.getColumn(0).getColumnName());
+    assertEquals("col1", schema3.getColumn(0).getSimpleName());
     assertEquals("tb2.col2", schema3.getColumn(1).getQualifiedName());
 
-    assertEquals(schema3.getColumn(0), schema3.getColumnByName("col1"));
-    assertEquals(schema3.getColumn(0), schema3.getColumnByFQN("tb2.col1"));
-    assertEquals(schema3.getColumn(1), schema3.getColumnByName("col2"));
-    assertEquals(schema3.getColumn(1), schema3.getColumnByFQN("tb2.col2"));
+    assertEquals(schema3.getColumn(0), schema3.getColumn("col1"));
+    assertEquals(schema3.getColumn(0), schema3.getColumn("tb2.col1"));
+    assertEquals(schema3.getColumn(1), schema3.getColumn("col2"));
+    assertEquals(schema3.getColumn(1), schema3.getColumn("tb2.col2"));
 
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/main/java/org/apache/tajo/catalog/store/HCatalogStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/main/java/org/apache/tajo/catalog/store/HCatalogStore.java b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/main/java/org/apache/tajo/catalog/store/HCatalogStore.java
index bc43f2c..3dc0908 100644
--- a/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/main/java/org/apache/tajo/catalog/store/HCatalogStore.java
+++ b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/main/java/org/apache/tajo/catalog/store/HCatalogStore.java
@@ -320,7 +320,7 @@ public class HCatalogStore extends CatalogConstants implements CatalogStore {
       ArrayList<FieldSchema> cols = new ArrayList<FieldSchema>(tableDesc.getSchema().getFieldsCount());
       for (CatalogProtos.ColumnProto col : tableDesc.getSchema().getFieldsList()) {
         cols.add(new FieldSchema(
-            col.getColumnName(),
+            col.getName(),
             HCatalogUtil.getHiveFieldType(col.getDataType().getType().name()),
             ""));
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/test/java/org/apache/tajo/catalog/store/TestHCatalogStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/test/java/org/apache/tajo/catalog/store/TestHCatalogStore.java b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/test/java/org/apache/tajo/catalog/store/TestHCatalogStore.java
index 1abf022..82a334b 100644
--- a/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/test/java/org/apache/tajo/catalog/store/TestHCatalogStore.java
+++ b/tajo-catalog/tajo-catalog-drivers/tajo-hcatalog/src/test/java/org/apache/tajo/catalog/store/TestHCatalogStore.java
@@ -253,21 +253,21 @@ public class TestHCatalogStore {
     List<Column> columns = table.getSchema().getColumns();
     assertEquals(DB_NAME + "." + CUSTOMER, table.getName());
     assertEquals(8, columns.size());
-    assertEquals("c_custkey", columns.get(0).getColumnName());
+    assertEquals("c_custkey", columns.get(0).getSimpleName());
     assertEquals(TajoDataTypes.Type.INT4, columns.get(0).getDataType().getType());
-    assertEquals("c_name", columns.get(1).getColumnName());
+    assertEquals("c_name", columns.get(1).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(1).getDataType().getType());
-    assertEquals("c_address", columns.get(2).getColumnName());
+    assertEquals("c_address", columns.get(2).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(2).getDataType().getType());
-    assertEquals("c_nationkey", columns.get(3).getColumnName());
+    assertEquals("c_nationkey", columns.get(3).getSimpleName());
     assertEquals(TajoDataTypes.Type.INT4, columns.get(3).getDataType().getType());
-    assertEquals("c_phone", columns.get(4).getColumnName());
+    assertEquals("c_phone", columns.get(4).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(4).getDataType().getType());
-    assertEquals("c_acctbal", columns.get(5).getColumnName());
+    assertEquals("c_acctbal", columns.get(5).getSimpleName());
     assertEquals(TajoDataTypes.Type.FLOAT8, columns.get(5).getDataType().getType());
-    assertEquals("c_mktsegment", columns.get(6).getColumnName());
+    assertEquals("c_mktsegment", columns.get(6).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(6).getDataType().getType());
-    assertEquals("c_comment", columns.get(7).getColumnName());
+    assertEquals("c_comment", columns.get(7).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(7).getDataType().getType());
     assertNull(table.getPartitionMethod());
     assertEquals(table.getMeta().getStoreType().name(), CatalogProtos.StoreType.RCFILE.name());
@@ -277,16 +277,16 @@ public class TestHCatalogStore {
     columns = table.getSchema().getColumns();
     assertEquals(DB_NAME + "." + NATION, table.getName());
     assertEquals(4, columns.size());
-    assertEquals("n_nationkey", columns.get(0).getColumnName());
+    assertEquals("n_nationkey", columns.get(0).getSimpleName());
     assertEquals(TajoDataTypes.Type.INT4, columns.get(0).getDataType().getType());
-    assertEquals("n_name", columns.get(1).getColumnName());
+    assertEquals("n_name", columns.get(1).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(1).getDataType().getType());
-    assertEquals("n_regionkey", columns.get(2).getColumnName());
+    assertEquals("n_regionkey", columns.get(2).getSimpleName());
     assertEquals(TajoDataTypes.Type.INT4, columns.get(2).getDataType().getType());
-    assertEquals("n_comment", columns.get(3).getColumnName());
+    assertEquals("n_comment", columns.get(3).getSimpleName());
     assertEquals(TajoDataTypes.Type.TEXT, columns.get(3).getDataType().getType());
     assertNotNull(table.getPartitionMethod());
-    assertEquals("type", table.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName());
+    assertEquals("type", table.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName());
     assertEquals(CatalogProtos.PartitionType.COLUMN, table.getPartitionMethod().getPartitionType());
 
     assertEquals(table.getMeta().getOption(HCatalogStore.CVSFILE_DELIMITER), "\\001");

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
index ae8a7d1..8c2c0c3 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
@@ -311,7 +311,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
         pstmt.setInt(1, tid);
         pstmt.setString(2, tableName);
         pstmt.setInt(3, i);
-        pstmt.setString(4, col.getColumnName());
+        pstmt.setString(4, CatalogUtil.extractSimpleName(col.getName()));
         pstmt.setString(5, col.getDataType().getType().name());
         pstmt.setInt(6, (col.getDataType().hasLength() ? col.getDataType().getLength() : 0));
         pstmt.addBatch();
@@ -1047,7 +1047,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
       sql.append("INSERT INTO indexes (index_name, ");
       sql.append(C_TABLE_ID);
       sql.append(", column_name, ");
-      sql.append( "data_type, index_type, is_unique, is_clustered, is_ascending) VALUES ");
+      sql.append("data_type, index_type, is_unique, is_clustered, is_ascending) VALUES ");
       sql.append("(?,?,?,?,?,?,?,?)");
 
       if (LOG.isDebugEnabled()) {
@@ -1059,7 +1059,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
 
       pstmt.setString(1, proto.getName());
       pstmt.setString(2, proto.getTableId());
-      pstmt.setString(3, proto.getColumn().getColumnName());
+      pstmt.setString(3, CatalogUtil.extractSimpleName(proto.getColumn().getName()));
       pstmt.setString(4, proto.getColumn().getDataType().getType().name());
       pstmt.setString(5, proto.getIndexMethod().toString());
       pstmt.setBoolean(6, proto.hasIsUnique() && proto.getIsUnique());
@@ -1306,7 +1306,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
    */
   private ColumnProto indexResultToColumnProto(final ResultSet res) throws SQLException {
     ColumnProto.Builder builder = ColumnProto.newBuilder();
-    builder.setColumnName(res.getString("column_name").trim());
+    builder.setName(res.getString("column_name").trim());
 
     Type type = getDataType(res.getString("data_type").trim());
     builder.setDataType(CatalogUtil.newSimpleDataType(type));
@@ -1316,7 +1316,7 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
 
   private ColumnProto resultToColumnProto(final ResultSet res) throws SQLException {
     ColumnProto.Builder builder = ColumnProto.newBuilder();
-    builder.setColumnName(res.getString("column_name").trim());
+    builder.setName(res.getString("column_name").trim());
 
     Type type = getDataType(res.getString("data_type").trim());
     int typeLength = res.getInt("type_length");
@@ -1340,24 +1340,6 @@ public abstract class AbstractDBStore extends CatalogConstants implements Catalo
     return setBuilder.build();
   }
 
-  private ColumnProto resultToQualifiedColumnProto(String tableName, final ResultSet res) throws SQLException {
-    ColumnProto.Builder builder = ColumnProto.newBuilder();
-
-    String columnName = tableName + "."
-        + res.getString("column_name").trim();
-    builder.setColumnName(columnName);
-
-    Type type = getDataType(res.getString("data_type").trim());
-    int typeLength = res.getInt("type_length");
-    if(typeLength > 0 ) {
-      builder.setDataType(CatalogUtil.newDataTypeWithLen(type, typeLength));
-    } else {
-      builder.setDataType(CatalogUtil.newSimpleDataType(type));
-    }
-
-    return builder.build();
-  }
-
   private IndexMethod getIndexMethod(final String typeStr) {
     if (typeStr.equals(IndexMethod.TWO_LEVEL_BIN_TREE.toString())) {
       return IndexMethod.TWO_LEVEL_BIN_TREE;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MemStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MemStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MemStore.java
index e05e0ae..1fef286 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MemStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/MemStore.java
@@ -172,7 +172,7 @@ public class MemStore implements CatalogStore {
     synchronized(indexes) {
       indexes.put(proto.getName(), proto);
       indexesByColumn.put(proto.getTableId() + "." 
-          + proto.getColumn().getColumnName(), proto);
+          + CatalogUtil.extractSimpleName(proto.getColumn().getName()), proto);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index 441ffe5..08905dd 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -276,7 +276,7 @@ public class TestCatalog {
 
     assertEquals(retrieved.getName(), tableName);
     assertEquals(retrieved.getPartitionMethod().getPartitionType(), CatalogProtos.PartitionType.HASH);
-    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName(), "id");
+    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName(), "id");
 
     catalog.deleteTable(tableName);
     assertFalse(catalog.existsTable(tableName));
@@ -315,7 +315,7 @@ public class TestCatalog {
 
     assertEquals(retrieved.getName(), tableName);
     assertEquals(retrieved.getPartitionMethod().getPartitionType(), CatalogProtos.PartitionType.HASH);
-    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName(), "id");
+    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName(), "id");
 
     catalog.deleteTable(tableName);
     assertFalse(catalog.existsTable(tableName));
@@ -352,7 +352,7 @@ public class TestCatalog {
 
     assertEquals(retrieved.getName(), tableName);
     assertEquals(retrieved.getPartitionMethod().getPartitionType(), CatalogProtos.PartitionType.LIST);
-    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName(), "id");
+    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName(), "id");
 
     catalog.deleteTable(tableName);
     assertFalse(catalog.existsTable(tableName));
@@ -390,7 +390,7 @@ public class TestCatalog {
 
     assertEquals(retrieved.getName(), tableName);
     assertEquals(retrieved.getPartitionMethod().getPartitionType(), CatalogProtos.PartitionType.RANGE);
-    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName(), "id");
+    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName(), "id");
 
     catalog.deleteTable(tableName);
     assertFalse(catalog.existsTable(tableName));
@@ -427,7 +427,7 @@ public class TestCatalog {
 
     assertEquals(retrieved.getName(), tableName);
     assertEquals(retrieved.getPartitionMethod().getPartitionType(), CatalogProtos.PartitionType.COLUMN);
-    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getColumnName(), "id");
+    assertEquals(retrieved.getPartitionMethod().getExpressionSchema().getColumn(0).getSimpleName(), "id");
 
     catalog.deleteTable(tableName);
     assertFalse(catalog.existsTable(tableName));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestDBStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestDBStore.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestDBStore.java
index 502daf0..a6b5b9a 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestDBStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestDBStore.java
@@ -213,12 +213,12 @@ public class TestDBStore {
 
   public static void assertSchemaOrder(Schema s1, Schema s2) {
     // Schema order check
-    assertEquals(s1.getColumnNum(),
-        s2.getColumnNum());
+    assertEquals(s1.size(),
+        s2.size());
 
-    for (int i = 0; i < s1.getColumnNum(); i++) {
-      assertEquals(s1.getColumn(i).getColumnName(),
-          s2.getColumn(i).getColumnName());
+    for (int i = 0; i < s1.size(); i++) {
+      assertEquals(s1.getColumn(i).getSimpleName(),
+          s2.getColumn(i).getSimpleName());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java b/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
index 8bf00e1..bdeb173 100644
--- a/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
+++ b/tajo-client/src/main/java/org/apache/tajo/cli/DescTableCommand.java
@@ -90,9 +90,9 @@ public class DescTableCommand extends TajoShellCommand {
     sb.append("\n");
     sb.append("schema: \n");
 
-    for(int i = 0; i < desc.getSchema().getColumnNum(); i++) {
+    for(int i = 0; i < desc.getSchema().size(); i++) {
       Column col = desc.getSchema().getColumn(i);
-      sb.append(col.getColumnName()).append("\t").append(col.getDataType().getType());
+      sb.append(col.getSimpleName()).append("\t").append(col.getDataType().getType());
       if (col.getDataType().hasLength()) {
         sb.append("(").append(col.getDataType().getLength()).append(")");
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetMetaData.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetMetaData.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetMetaData.java
index 98df048..4f2e586 100644
--- a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetMetaData.java
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoResultSetMetaData.java
@@ -62,7 +62,7 @@ public class TajoResultSetMetaData implements ResultSetMetaData {
     if(schema == null) {
       return 0;
     }
-    return schema.getColumnNum();
+    return schema.size();
   }
 
   @Override
@@ -77,7 +77,7 @@ public class TajoResultSetMetaData implements ResultSetMetaData {
 
   @Override
   public String getColumnName(int column) throws SQLException {
-    return schema.getColumn(column - 1).getColumnName();
+    return schema.getColumn(column - 1).getSimpleName();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-common/src/main/java/org/apache/tajo/TajoConstants.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/TajoConstants.java b/tajo-common/src/main/java/org/apache/tajo/TajoConstants.java
index 8cdc7bb..d4ce48f 100644
--- a/tajo-common/src/main/java/org/apache/tajo/TajoConstants.java
+++ b/tajo-common/src/main/java/org/apache/tajo/TajoConstants.java
@@ -27,5 +27,7 @@ public class TajoConstants {
   public static final String SYSTEM_RESOURCE_DIR_NAME = "resource";
   public static final String RESULT_DIR_NAME="RESULT";
 
+  public static final String EMPTY_STRING = "";
+
   private TajoConstants() {}
 }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
index 5f1035d..1e2298c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/EvalTreeUtil.java
@@ -116,7 +116,7 @@ public class EvalTreeUtil {
 
     case FIELD:
       FieldEval fieldEval = (FieldEval) expr;
-      return inputSchema.getColumnByFQN(fieldEval.getName()).getDataType();
+      return inputSchema.getColumn(fieldEval.getName()).getDataType();
 
       
     default:
@@ -180,7 +180,7 @@ public class EvalTreeUtil {
     switch (expr.getType()) {
     case FIELD:
       FieldEval field = (FieldEval) expr;
-      if (field.getColumnName().equals(target.getColumnName())) {
+      if (field.getColumnName().equals(target.getSimpleName())) {
         exprSet.add(field);
       }
       break;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
index dc9b35b..504023a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/eval/FieldEval.java
@@ -64,11 +64,11 @@ public class FieldEval extends EvalNode implements Cloneable {
 	}
 	
 	public String getColumnName() {
-	  return column.getColumnName();
+	  return column.getSimpleName();
 	}
 	
 	public void replaceColumnRef(String columnName) {
-	  this.column.setName(columnName);
+	  this.column = new Column(columnName, this.column.getDataType());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
index 47bd166..5491fef 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlan.java
@@ -22,6 +22,7 @@ import com.google.common.collect.Lists;
 import org.apache.commons.lang.ObjectUtils;
 import org.apache.tajo.algebra.*;
 import org.apache.tajo.annotation.NotThreadSafe;
+import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.engine.eval.EvalNode;
@@ -241,7 +242,7 @@ public class LogicalPlan {
       }
 
       Schema schema = relationOp.getTableSchema();
-      Column column = schema.getColumnByFQN(columnRef.getCanonicalName());
+      Column column = schema.getColumn(columnRef.getCanonicalName());
       if (column == null) {
         throw new NoSuchColumnException(columnRef.getCanonicalName());
       }
@@ -283,7 +284,7 @@ public class LogicalPlan {
       }
 
       if (block.getLatestNode() != null) {
-        Column found = block.getLatestNode().getOutSchema().getColumnByName(columnRef.getName());
+        Column found = block.getLatestNode().getOutSchema().getColumn(columnRef.getName());
         if (found != null) {
           return found;
         }
@@ -304,7 +305,7 @@ public class LogicalPlan {
 
       // Trying to find columns from other relations in the current block
       for (RelationNode rel : block.getRelations()) {
-        Column found = rel.getTableSchema().getColumnByName(columnRef.getName());
+        Column found = rel.getTableSchema().getColumn(columnRef.getName());
         if (found != null) {
           candidates.add(found);
         }
@@ -317,7 +318,7 @@ public class LogicalPlan {
       // Trying to find columns from other relations in other blocks
       for (QueryBlock eachBlock : queryBlocks.values()) {
         for (RelationNode rel : eachBlock.getRelations()) {
-          Column found = rel.getTableSchema().getColumnByName(columnRef.getName());
+          Column found = rel.getTableSchema().getColumn(columnRef.getName());
           if (found != null) {
             candidates.add(found);
           }
@@ -330,7 +331,7 @@ public class LogicalPlan {
 
       // Trying to find columns from schema in current block.
       if (block.getSchema() != null) {
-        Column found = block.getSchema().getColumnByName(columnRef.getName());
+        Column found = block.getSchema().getColumn(columnRef.getName());
         if (found != null) {
           candidates.add(found);
         }
@@ -528,15 +529,15 @@ public class LogicalPlan {
     }
 
     public boolean existsRelation(String name) {
-      return nameToRelationMap.containsKey(PlannerUtil.normalizeTableName(name));
+      return nameToRelationMap.containsKey(CatalogUtil.normalizeIdentifier(name));
     }
 
     public RelationNode getRelation(String name) {
-      return nameToRelationMap.get(PlannerUtil.normalizeTableName(name));
+      return nameToRelationMap.get(CatalogUtil.normalizeIdentifier(name));
     }
 
     public void addRelation(RelationNode relation) {
-      nameToRelationMap.put(PlannerUtil.normalizeTableName(relation.getCanonicalName()), relation);
+      nameToRelationMap.put(CatalogUtil.normalizeIdentifier(relation.getCanonicalName()), relation);
     }
 
     public Collection<RelationNode> getRelations() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanPreprocessor.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanPreprocessor.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanPreprocessor.java
index a6bedcf..818e01c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanPreprocessor.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanPreprocessor.java
@@ -32,11 +32,7 @@ import org.apache.tajo.engine.planner.logical.*;
 import org.apache.tajo.engine.utils.SchemaUtil;
 import org.apache.tajo.util.TUtil;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Stack;
+import java.util.*;
 
 /**
  * It finds all relations for each block and builds base schema information.
@@ -116,7 +112,7 @@ class LogicalPlanPreprocessor extends BaseAlgebraVisitor<LogicalPlanPreprocessor
       }
 
       Schema schema = relationOp.getTableSchema();
-      Column[] resolvedColumns = new Column[schema.getColumnNum()];
+      Column[] resolvedColumns = new Column[schema.size()];
       return schema.getColumns().toArray(resolvedColumns);
     } else { // if a column reference is not qualified
       // columns of every relation should be resolved.
@@ -151,7 +147,7 @@ class LogicalPlanPreprocessor extends BaseAlgebraVisitor<LogicalPlanPreprocessor
     List<NamedExpr> newTargetExprs = new ArrayList<NamedExpr>(columns.length);
     int i;
     for (i = 0; i < columns.length; i++) {
-      newTargetExprs.add(new NamedExpr(new ColumnReferenceExpr(columns[i].getQualifier(), columns[i].getColumnName())));
+      newTargetExprs.add(new NamedExpr(new ColumnReferenceExpr(columns[i].getQualifier(), columns[i].getSimpleName())));
     }
     return newTargetExprs;
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanVerifier.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanVerifier.java
index 6800519..305548c 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanVerifier.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanVerifier.java
@@ -44,18 +44,18 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<VerificationSta
     Schema outputSchema = node.getOutSchema();
     Schema targetSchema = PlannerUtil.targetToSchema(node.getTargets());
 
-    if (outputSchema.getColumnNum() != node.getTargets().length) {
+    if (outputSchema.size() != node.getTargets().length) {
       throw new PlanningException(String.format("Output schema and Target's schema are mismatched at Node (%d)",
           + node.getPID()));
     }
 
-    for (int i = 0; i < outputSchema.getColumnNum(); i++) {
+    for (int i = 0; i < outputSchema.size(); i++) {
       if (!outputSchema.getColumn(i).getDataType().equals(targetSchema.getColumn(i).getDataType())) {
         Column targetColumn = targetSchema.getColumn(i);
         Column insertColumn = outputSchema.getColumn(i);
         throw new PlanningException("ERROR: " +
-            insertColumn.getColumnName() + " is of type " + insertColumn.getDataType().getType().name() +
-            ", but target column '" + targetColumn.getColumnName() + "' is of type " +
+            insertColumn.getSimpleName() + " is of type " + insertColumn.getDataType().getType().name() +
+            ", but target column '" + targetColumn.getSimpleName() + "' is of type " +
             targetColumn.getDataType().getType().name());
       }
     }
@@ -126,7 +126,7 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<VerificationSta
     Schema right = setNode.getRightChild().getOutSchema();
     NodeType type = setNode.getType();
 
-    if (left.getColumnNum() != right.getColumnNum()) {
+    if (left.size() != right.size()) {
       state.addVerification("each " + type.name() + " query must have the same number of columns");
       return;
     }
@@ -203,13 +203,13 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<VerificationSta
    */
   private static void ensureDomains(VerificationState state, Schema targetTableScheme, Schema schema)
       throws PlanningException {
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       if (!schema.getColumn(i).getDataType().equals(targetTableScheme.getColumn(i).getDataType())) {
         Column targetColumn = targetTableScheme.getColumn(i);
         Column insertColumn = schema.getColumn(i);
         state.addVerification("ERROR: " +
-            insertColumn.getColumnName() + " is of type " + insertColumn.getDataType().getType().name() +
-            ", but target column '" + targetColumn.getColumnName() + "' is of type " +
+            insertColumn.getSimpleName() + " is of type " + insertColumn.getDataType().getType().name() +
+            ", but target column '" + targetColumn.getSimpleName() + "' is of type " +
             targetColumn.getDataType().getType().name());
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
index e5e84a7..2a4e151 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/LogicalPlanner.java
@@ -857,8 +857,8 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
     Column rightJoinKey;
 
     for (Column common : commons.getColumns()) {
-      leftJoinKey = leftSchema.getColumnByName(common.getColumnName());
-      rightJoinKey = rightSchema.getColumnByName(common.getColumnName());
+      leftJoinKey = leftSchema.getColumn(common.getQualifiedName());
+      rightJoinKey = rightSchema.getColumn(common.getQualifiedName());
       equiQual = new BinaryEval(EvalType.EQUAL,
           new FieldEval(leftJoinKey), new FieldEval(rightJoinKey));
       if (njQual == null) {
@@ -1177,7 +1177,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
 
     if (expr.hasTargetColumns()) { // when a user specified target columns
 
-      if (expr.getTargetColumns().length > insertNode.getChild().getOutSchema().getColumnNum()) {
+      if (expr.getTargetColumns().length > insertNode.getChild().getOutSchema().size()) {
         throw new PlanningException("Target columns and projected columns are mismatched to each other");
       }
 
@@ -1202,7 +1202,7 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
       Schema projectedSchema = insertNode.getChild().getOutSchema();
 
       Schema targetColumns = new Schema();
-      for (int i = 0; i < projectedSchema.getColumnNum(); i++) {
+      for (int i = 0; i < projectedSchema.size(); i++) {
         targetColumns.addColumn(tableSchema.getColumn(i));
       }
       insertNode.setTargetSchema(targetColumns);
@@ -1224,13 +1224,13 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
     // Modifying projected columns by adding NULL constants
     // It is because that table appender does not support target columns to be written.
     List<Target> targets = TUtil.newList();
-    for (int i = 0, j = 0; i < tableSchema.getColumnNum(); i++) {
+    for (int i = 0, j = 0; i < tableSchema.size(); i++) {
       Column column = tableSchema.getColumn(i);
 
       if(targetColumns.contains(column) && j < projectionNode.getTargets().length) {
         targets.add(projectionNode.getTargets()[j++]);
       } else {
-        targets.add(new Target(new ConstEval(NullDatum.get()), column.getColumnName()));
+        targets.add(new Target(new ConstEval(NullDatum.get()), column.getSimpleName()));
       }
     }
     projectionNode.setTargets(targets.toArray(new Target[targets.size()]));
@@ -1321,11 +1321,11 @@ public class LogicalPlanner extends BaseAlgebraVisitor<LogicalPlanner.PlanContex
           Schema queryOutputSchema = subQuery.getOutSchema();
           Schema partitionExpressionSchema = partitionMethod.getExpressionSchema();
           if (partitionMethod.getPartitionType() == CatalogProtos.PartitionType.COLUMN &&
-              queryOutputSchema.getColumnNum() < partitionExpressionSchema.getColumnNum()) {
+              queryOutputSchema.size() < partitionExpressionSchema.size()) {
             throw new VerifyException("Partition columns cannot be more than table columns.");
           }
           Schema tableSchema = new Schema();
-          for (int i = 0; i < queryOutputSchema.getColumnNum() - partitionExpressionSchema.getColumnNum(); i++) {
+          for (int i = 0; i < queryOutputSchema.size() - partitionExpressionSchema.size(); i++) {
             tableSchema.addColumn(queryOutputSchema.getColumn(i));
           }
           createTableNode.setOutSchema(tableSchema);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
index 8017331..4f1421b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/PlannerUtil.java
@@ -41,9 +41,6 @@ import org.apache.tajo.util.TUtil;
 import java.util.*;
 
 public class PlannerUtil {
-  public static String normalizeTableName(String tableName) {
-    return tableName.toLowerCase();
-  }
 
   public static boolean checkIfDDLPlan(LogicalNode node) {
     LogicalNode baseNode = node;
@@ -334,82 +331,6 @@ public class PlannerUtil {
     return (T) finder.getFoundNodes().get(0);
   }
 
-  public static boolean canBeEvaluated(EvalNode eval, LogicalNode node) {
-    Set<Column> columnRefs = EvalTreeUtil.findUniqueColumns(eval);
-
-    if (node.getType() == NodeType.JOIN) {
-      JoinNode joinNode = (JoinNode) node;
-      Set<String> tableIds = Sets.newHashSet();
-      // getting distinct table references
-      for (Column col : columnRefs) {
-        if (!tableIds.contains(col.getQualifier())) {
-          tableIds.add(col.getQualifier());
-        }
-      }
-
-      // if the references only indicate two relation, the condition can be
-      // pushed into a join operator.
-      if (tableIds.size() != 2) {
-        return false;
-      }
-
-      String [] outer = getRelationLineage(joinNode.getLeftChild());
-      String [] inner = getRelationLineage(joinNode.getRightChild());
-
-      Set<String> o = Sets.newHashSet(outer);
-      Set<String> i = Sets.newHashSet(inner);
-      if (outer == null || inner == null) {
-        throw new InvalidQueryException("ERROR: Unexpected logical plan");
-      }
-      Iterator<String> it = tableIds.iterator();
-      if (o.contains(it.next()) && i.contains(it.next())) {
-        return true;
-      }
-
-      it = tableIds.iterator();
-
-      return i.contains(it.next()) && o.contains(it.next());
-
-    } else if (node instanceof ScanNode) {
-
-      RelationNode scan = (RelationNode) node;
-
-      for (Column col : columnRefs) {
-        if (scan.getCanonicalName().equals(col.getQualifier())) {
-          Column found = scan.getTableSchema().getColumnByName(col.getColumnName());
-          if (found == null) {
-            return false;
-          }
-        } else {
-          return false;
-        }
-      }
-
-    } else if (node instanceof TableSubQueryNode) {
-      TableSubQueryNode subQueryNode = (TableSubQueryNode) node;
-      for (Column col : columnRefs) {
-        if (subQueryNode.getCanonicalName().equals(col.getQualifier())) {
-          Column found = node.getOutSchema().getColumnByName(col.getColumnName());
-          if (found == null) {
-            return false;
-          }
-        } else {
-          return false;
-        }
-      }
-
-    } else {
-
-      for (Column col : columnRefs) {
-        if (!node.getInSchema().containsByQualifiedName(col.getQualifiedName())) {
-          return false;
-        }
-      }
-    }
-
-    return true;
-  }
-
   private static class LogicalNodeFinder implements LogicalNodeVisitor {
     private List<LogicalNode> list = new ArrayList<LogicalNode>();
     private final NodeType[] tofind;
@@ -485,17 +406,17 @@ public class PlannerUtil {
    */
   public static void schemaToTargets(Schema schema, Target [] targets) {
     FieldEval eval;
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       eval = new FieldEval(schema.getColumn(i));
       targets[i] = new Target(eval);
     }
   }
 
   public static Target[] schemaToTargets(Schema schema) {
-    Target[] targets = new Target[schema.getColumnNum()];
+    Target[] targets = new Target[schema.size()];
 
     FieldEval eval;
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       eval = new FieldEval(schema.getColumn(i));
       targets[i] = new Target(eval);
     }
@@ -506,7 +427,7 @@ public class PlannerUtil {
     List<Target> targets = TUtil.newList();
 
     FieldEval eval;
-    for (int i = 0; i < schema.getColumnNum(); i++) {
+    for (int i = 0; i < schema.size(); i++) {
       eval = new FieldEval(schema.getColumn(i));
       targets.add(new Target(eval));
     }
@@ -683,7 +604,7 @@ public class PlannerUtil {
       if (copy[i].getEvalTree().getType() == EvalType.FIELD) {
         FieldEval fieldEval = copy[i].getEvalTree();
         if (fieldEval.getColumnRef().hasQualifier()) {
-          fieldEval.getColumnRef().setName(fieldEval.getColumnName());
+          fieldEval.replaceColumnRef(fieldEval.getColumnName());
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/enforce/Enforcer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/enforce/Enforcer.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/enforce/Enforcer.java
index da8cb01..91190f6 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/enforce/Enforcer.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/enforce/Enforcer.java
@@ -213,7 +213,7 @@ public class Enforcer implements ProtoObject<EnforcerProto> {
           } else {
             sb.append(", ");
           }
-          sb.append(sortSpec.getColumn().getColumnName());
+          sb.append(sortSpec.getColumn().getName());
           sb.append(" (").append(sortSpec.getAscending() ? "asc":"desc").append(")");
         }
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index 15aa00f..258a2e7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -847,7 +847,7 @@ public class GlobalPlanner {
     if (node.getType() == NodeType.INSERT) {
       InsertNode insertNode = (InsertNode) node;
       channel.setSchema(((InsertNode)node).getProjectedSchema());
-      Column [] shuffleKeys = new Column[partitionMethod.getExpressionSchema().getColumnNum()];
+      Column [] shuffleKeys = new Column[partitionMethod.getExpressionSchema().size()];
       int i = 0;
       for (Column column : partitionMethod.getExpressionSchema().getColumns()) {
         int id = insertNode.getTableSchema().getColumnId(column.getQualifiedName());

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
index a7f36ec..38ca29b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/GroupbyNode.java
@@ -171,7 +171,7 @@ public class GroupbyNode extends UnaryNode implements Projectable, Cloneable {
     sb.append("(");
     Column [] groupingColumns = this.groupingColumns;
     for (int j = 0; j < groupingColumns.length; j++) {
-      sb.append(groupingColumns[j].getColumnName());
+      sb.append(groupingColumns[j].getSimpleName());
       if(j < groupingColumns.length - 1) {
         sb.append(",");
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
index aa91090..0ec8110 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/ScanNode.java
@@ -20,6 +20,7 @@ package org.apache.tajo.engine.planner.logical;
 
 import com.google.common.base.Objects;
 import com.google.gson.annotations.Expose;
+import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.engine.eval.EvalNode;
@@ -51,7 +52,7 @@ public class ScanNode extends RelationNode implements Projectable {
   
 	public ScanNode(int pid, TableDesc desc, String alias) {
     this(pid, desc);
-    this.alias = PlannerUtil.normalizeTableName(alias);
+    this.alias = CatalogUtil.normalizeIdentifier(alias);
     this.setInSchema(tableDesc.getSchema());
     this.getInSchema().setQualifier(alias);
     this.setOutSchema(new Schema(getInSchema()));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
index 8154016..a732710 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/SortNode.java
@@ -65,7 +65,7 @@ public final class SortNode extends UnaryNode implements Cloneable {
     PlanString planStr = new PlanString(this);
     StringBuilder sb = new StringBuilder("Sort Keys: ");
     for (int i = 0; i < sortKeys.length; i++) {
-      sb.append(sortKeys[i].getSortKey().getColumnName()).append(" ")
+      sb.append(sortKeys[i].getSortKey().getSimpleName()).append(" ")
           .append(sortKeys[i].isAscending() ? "asc" : "desc");
       if( i < sortKeys.length - 1) {
         sb.append(",");

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
index e205454..3f251f8 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/TableSubQueryNode.java
@@ -20,6 +20,7 @@ package org.apache.tajo.engine.planner.logical;
 
 import com.google.common.base.Objects;
 import com.google.gson.annotations.Expose;
+import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.engine.planner.PlanString;
 import org.apache.tajo.engine.planner.PlannerUtil;
@@ -34,7 +35,7 @@ public class TableSubQueryNode extends RelationNode implements Projectable {
 
   public TableSubQueryNode(int pid, String tableName, LogicalNode subQuery) {
     super(pid, NodeType.TABLE_SUBQUERY);
-    this.tableName = PlannerUtil.normalizeTableName(tableName);
+    this.tableName = CatalogUtil.normalizeIdentifier(tableName);
     if (subQuery != null) {
       this.subQuery = subQuery;
       setOutSchema(SchemaUtil.clone(this.subQuery.getOutSchema()));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/join/JoinGraph.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/join/JoinGraph.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/join/JoinGraph.java
index 9d66dd5..b4f4d9d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/join/JoinGraph.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/logical/join/JoinGraph.java
@@ -51,8 +51,8 @@ public class JoinGraph extends SimpleUndirectedGraph<String, JoinEdge> {
     if (leftExpr.hasQualifier()) {
       relationNames[0] = leftExpr.getQualifier();
     } else {
-      if (namedExprsMgr.isAliasedName(leftExpr.getColumnName())) {
-        String columnName = namedExprsMgr.getOriginalName(leftExpr.getColumnName());
+      if (namedExprsMgr.isAliasedName(leftExpr.getSimpleName())) {
+        String columnName = namedExprsMgr.getOriginalName(leftExpr.getSimpleName());
         String [] parts = columnName.split("\\.");
 
         if (parts.length != 2) {
@@ -68,8 +68,8 @@ public class JoinGraph extends SimpleUndirectedGraph<String, JoinEdge> {
     if (rightExpr.hasQualifier()) {
       relationNames[1] = rightExpr.getQualifier();
     } else {
-      if (namedExprsMgr.isAliasedName(rightExpr.getColumnName())) {
-        String columnName = namedExprsMgr.getOriginalName(rightExpr.getColumnName());
+      if (namedExprsMgr.isAliasedName(rightExpr.getSimpleName())) {
+        String columnName = namedExprsMgr.getOriginalName(rightExpr.getSimpleName());
         String [] parts = columnName.split("\\.");
         if (parts.length != 2) {
           throw new PlanningException("Cannot expect a referenced relation: " + leftExpr);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BNLJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BNLJoinExec.java
index 71581e3..60a7c19 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BNLJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BNLJoinExec.java
@@ -83,7 +83,7 @@ public class BNLJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outputTuple = new VTuple(outSchema.getColumnNum());
+    outputTuple = new VTuple(outSchema.size());
   }
 
   public JoinNode getPlan() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
index 753dcc8..d2f0922 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
@@ -98,7 +98,7 @@ public class BSTIndexScanExec extends PhysicalExec {
       }
     }
     Tuple tuple;
-    Tuple outTuple = new VTuple(this.outSchema.getColumnNum());
+    Tuple outTuple = new VTuple(this.outSchema.size());
     if (!scanNode.hasQual()) {
       if ((tuple = fileScanner.next()) != null) {
         projector.eval(tuple, outTuple);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
index c81f3bd..2ec0315 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
@@ -58,13 +58,13 @@ public abstract class ColPartitionStoreExec extends UnaryPhysicalExec {
     }
 
     // Find column index to name subpartition directory path
-    keyNum = this.plan.getPartitionMethod().getExpressionSchema().getColumnNum();
+    keyNum = this.plan.getPartitionMethod().getExpressionSchema().size();
 
     keyIds = new int[keyNum];
     keyNames = new String[keyNum];
     for (int i = 0; i < keyNum; i++) {
       Column column = this.plan.getPartitionMethod().getExpressionSchema().getColumn(i);
-      keyNames[i] = column.getColumnName();
+      keyNames[i] = column.getSimpleName();
 
       if (this.plan.getType() == NodeType.INSERT) {
         InsertNode insertNode = ((InsertNode)plan);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashAggregateExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashAggregateExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashAggregateExec.java
index 1f8d000..a31ad90 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashAggregateExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashAggregateExec.java
@@ -42,7 +42,7 @@ public class HashAggregateExec extends AggregationExec {
   public HashAggregateExec(TaskAttemptContext ctx, GroupbyNode plan, PhysicalExec subOp) throws IOException {
     super(ctx, plan, subOp);
     hashTable = new HashMap<Tuple, FunctionContext []>(100000);
-    this.tuple = new VTuple(plan.getOutSchema().getColumnNum());
+    this.tuple = new VTuple(plan.getOutSchema().size());
   }
 
   private void compute() throws IOException {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashFullOuterJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashFullOuterJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashFullOuterJoinExec.java
index 70dd10b..3875b6d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashFullOuterJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashFullOuterJoinExec.java
@@ -94,11 +94,11 @@ public class HashFullOuterJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
     leftKeyTuple = new VTuple(leftKeyList.length);
 
-    leftNumCols = outer.getSchema().getColumnNum();
-    rightNumCols = inner.getSchema().getColumnNum();
+    leftNumCols = outer.getSchema().size();
+    rightNumCols = inner.getSchema().size();
   }
 
   protected void getKeyLeftTuple(final Tuple outerTuple, Tuple keyTuple) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashJoinExec.java
index 51d0b4c..9f576a7 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashJoinExec.java
@@ -84,7 +84,7 @@ public class HashJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
     leftKeyTuple = new VTuple(leftKeyList.length);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashLeftOuterJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashLeftOuterJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashLeftOuterJoinExec.java
index 93383a3..9afe8e6 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashLeftOuterJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/HashLeftOuterJoinExec.java
@@ -90,10 +90,10 @@ public class HashLeftOuterJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
     leftKeyTuple = new VTuple(leftKeyList.length);
 
-    rightNumCols = rightChild.getSchema().getColumnNum();
+    rightNumCols = rightChild.getSchema().size();
   }
 
   protected void getKeyLeftTuple(final Tuple outerTuple, Tuple keyTuple) {


[2/3] TAJO-610: Refactor Column class.

Posted by hy...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeFullOuterJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeFullOuterJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeFullOuterJoinExec.java
index 613e072..ff1f7b3 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeFullOuterJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeFullOuterJoinExec.java
@@ -92,10 +92,10 @@ public class MergeFullOuterJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
 
-    leftNumCols = leftChild.getSchema().getColumnNum();
-    rightNumCols = rightChild.getSchema().getColumnNum();
+    leftNumCols = leftChild.getSchema().size();
+    rightNumCols = rightChild.getSchema().size();
   }
 
   public JoinNode getPlan(){

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeJoinExec.java
index f72e87e..470e1c9 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/MergeJoinExec.java
@@ -88,7 +88,7 @@ public class MergeJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
   }
 
   public JoinNode getPlan(){

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLJoinExec.java
index 961be93..6e5900e 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLJoinExec.java
@@ -59,7 +59,7 @@ public class NLJoinExec extends BinaryPhysicalExec {
     // for join
     needNewOuter = true;
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
   }
 
   public JoinNode getPlan() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLLeftOuterJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLLeftOuterJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLLeftOuterJoinExec.java
index 4abe570..5c17c40 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLLeftOuterJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/NLLeftOuterJoinExec.java
@@ -62,10 +62,10 @@ public class NLLeftOuterJoinExec extends BinaryPhysicalExec {
     // for join
     needNextRightTuple = true;
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
 
     foundAtLeastOneMatch = false;
-    rightNumCols = rightChild.getSchema().getColumnNum();
+    rightNumCols = rightChild.getSchema().size();
   }
 
   public JoinNode getPlan() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/PhysicalExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/PhysicalExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/PhysicalExec.java
index 033dcd9..0b9bc95 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/PhysicalExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/PhysicalExec.java
@@ -39,7 +39,7 @@ public abstract class PhysicalExec implements SchemaObject {
     this.context = context;
     this.inSchema = inSchema;
     this.outSchema = outSchema;
-    this.outColumnNum = outSchema.getColumnNum();
+    this.outColumnNum = outSchema.size();
   }
 
   public final Schema getSchema() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ProjectionExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ProjectionExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ProjectionExec.java
index e205751..ee6ef1d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ProjectionExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/ProjectionExec.java
@@ -45,7 +45,7 @@ public class ProjectionExec extends UnaryPhysicalExec {
   public void init() throws IOException {
     super.init();
 
-    this.outTuple = new VTuple(outSchema.getColumnNum());
+    this.outTuple = new VTuple(outSchema.size());
     this.projector = new Projector(inSchema, outSchema, this.plan.getTargets());
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java
index 698e46e..68379d1 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RangeShuffleFileWriteExec.java
@@ -99,7 +99,7 @@ public class RangeShuffleFileWriteExec extends UnaryPhysicalExec {
     while((tuple = child.next()) != null) {
       offset = appender.getOffset();
       appender.addTuple(tuple);
-      keyTuple = new VTuple(keySchema.getColumnNum());
+      keyTuple = new VTuple(keySchema.size());
       RowStoreUtil.project(tuple, keyTuple, indexKeys);
       if (prevKeyTuple == null || !prevKeyTuple.equals(keyTuple)) {
         indexWriter.write(keyTuple, offset);

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RightOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RightOuterMergeJoinExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RightOuterMergeJoinExec.java
index b494544..c70174a 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RightOuterMergeJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/RightOuterMergeJoinExec.java
@@ -90,9 +90,9 @@ public class RightOuterMergeJoinExec extends BinaryPhysicalExec {
 
     // for join
     frameTuple = new FrameTuple();
-    outTuple = new VTuple(outSchema.getColumnNum());
+    outTuple = new VTuple(outSchema.size());
 
-    leftNumCols = outer.getSchema().getColumnNum();
+    leftNumCols = outer.getSchema().size();
   }
 
   public JoinNode getPlan() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
index dbe45dc..629889d 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/physical/SortAggregateExec.java
@@ -81,7 +81,7 @@ public class SortAggregateExec extends AggregationExec {
 
       } else { /** Finalization State */
         // finalize aggregate and return
-        outputTuple = new VTuple(outSchema.getColumnNum());
+        outputTuple = new VTuple(outSchema.size());
         int tupleIdx = 0;
 
         for(; tupleIdx < groupingKeyNum; tupleIdx++) {
@@ -102,7 +102,7 @@ public class SortAggregateExec extends AggregationExec {
     } // while loop
 
     if (!finished) {
-      outputTuple = new VTuple(outSchema.getColumnNum());
+      outputTuple = new VTuple(outSchema.size());
       int tupleIdx = 0;
       for(; tupleIdx < groupingKeyNum; tupleIdx++) {
         outputTuple.put(tupleIdx, lastKey.get(tupleIdx));

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
index faef37d..d701935 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/planner/rewrite/PartitionedTableRewriter.java
@@ -145,7 +145,7 @@ public class PartitionedTableRewriter implements RewriteRule {
     // loop from one to the number of partition columns
     Path [] filteredPaths = toPathArray(fs.listStatus(tablePath, filters[0]));
 
-    for (int i = 1; i < partitionColumns.getColumnNum(); i++) {
+    for (int i = 1; i < partitionColumns.size(); i++) {
       // Get all file status matched to a ith level path filter.
       filteredPaths = toPathArray(fs.listStatus(filteredPaths, filters[i]));
     }
@@ -182,9 +182,9 @@ public class PartitionedTableRewriter implements RewriteRule {
                                                      EvalNode [] conjunctiveForms) {
     // Building partition path filters for all levels
     Column target;
-    PathFilter [] filters = new PathFilter[partitionColumns.getColumnNum()];
+    PathFilter [] filters = new PathFilter[partitionColumns.size()];
     List<EvalNode> accumulatedFilters = Lists.newArrayList();
-    for (int i = 0; i < partitionColumns.getColumnNum(); i++) { // loop from one to level
+    for (int i = 0; i < partitionColumns.size(); i++) { // loop from one to level
       target = partitionColumns.getColumn(i);
 
       for (EvalNode expr : conjunctiveForms) {
@@ -212,9 +212,9 @@ public class PartitionedTableRewriter implements RewriteRule {
    */
   private static PathFilter [] buildAllAcceptingPathFilters(Schema partitionColumns) {
     Column target;
-    PathFilter [] filters = new PathFilter[partitionColumns.getColumnNum()];
+    PathFilter [] filters = new PathFilter[partitionColumns.size()];
     List<EvalNode> accumulatedFilters = Lists.newArrayList();
-    for (int i = 0; i < partitionColumns.getColumnNum(); i++) { // loop from one to level
+    for (int i = 0; i < partitionColumns.size(); i++) { // loop from one to level
       target = partitionColumns.getColumn(i);
       accumulatedFilters.add(new IsNullEval(true, new FieldEval(target)));
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryContext.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryContext.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryContext.java
index 4a3bf46..1db4c4b 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryContext.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/query/QueryContext.java
@@ -19,10 +19,10 @@
 package org.apache.tajo.engine.query;
 
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Options;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.engine.planner.PlannerUtil;
 import org.apache.tajo.engine.planner.logical.NodeType;
 
 import static org.apache.tajo.catalog.proto.CatalogProtos.KeyValueSetProto;
@@ -103,7 +103,7 @@ public class QueryContext extends Options {
    * @param tableName The target table name
    */
   public void setOutputTable(String tableName) {
-    put(OUTPUT_TABLE_NAME, PlannerUtil.normalizeTableName(tableName));
+    put(OUTPUT_TABLE_NAME, CatalogUtil.normalizeIdentifier(tableName));
   }
 
   public String getOutputTable() {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/SchemaUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/SchemaUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/SchemaUtil.java
index c9ab823..c882607 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/SchemaUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/SchemaUtil.java
@@ -45,8 +45,8 @@ public class SchemaUtil {
   public static Schema getNaturalJoinColumns(Schema left, Schema right) {
     Schema common = new Schema();
     for (Column outer : left.getColumns()) {
-      if (!common.containsByName(outer.getColumnName()) && right.containsByName(outer.getColumnName())) {
-        common.addColumn(new Column(outer.getColumnName(), outer.getDataType()));
+      if (!common.containsByName(outer.getSimpleName()) && right.containsByName(outer.getSimpleName())) {
+        common.addColumn(new Column(outer.getSimpleName(), outer.getDataType()));
       }
     }
     

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
index b96b65e..6d801dd 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/engine/utils/TupleUtil.java
@@ -80,8 +80,8 @@ public class TupleUtil {
           "ERROR: Invalid Column Stats (column stats: " + colStats + ", there exists not target " + col);
     }
 
-    Tuple startTuple = new VTuple(target.getColumnNum());
-    Tuple endTuple = new VTuple(target.getColumnNum());
+    Tuple startTuple = new VTuple(target.size());
+    Tuple endTuple = new VTuple(target.size());
     int i = 0;
     for (Column col : target.getColumns()) {
       if (sortSpecs[i].isAscending()) {
@@ -173,13 +173,13 @@ public class TupleUtil {
     String [] columnValues = columnValuesPart.split("/");
 
     // true means this is a file.
-    if (beNullIfFile && partitionColumnSchema.getColumnNum() < columnValues.length) {
+    if (beNullIfFile && partitionColumnSchema.size() < columnValues.length) {
       return null;
     }
 
-    Tuple tuple = new VTuple(partitionColumnSchema.getColumnNum());
+    Tuple tuple = new VTuple(partitionColumnSchema.size());
     int i = 0;
-    for (; i < columnValues.length && i < partitionColumnSchema.getColumnNum(); i++) {
+    for (; i < columnValues.length && i < partitionColumnSchema.size(); i++) {
       String [] parts = columnValues[i].split("=");
       if (parts.length != 2) {
         return null;
@@ -188,7 +188,7 @@ public class TupleUtil {
       Column keyColumn = partitionColumnSchema.getColumn(columnId);
       tuple.put(columnId, DatumFactory.createFromString(keyColumn.getDataType(), parts[1]));
     }
-    for (; i < partitionColumnSchema.getColumnNum(); i++) {
+    for (; i < partitionColumnSchema.size(); i++) {
       tuple.put(i, NullDatum.get());
     }
     return tuple;
@@ -203,7 +203,7 @@ public class TupleUtil {
    */
   private static String getColumnPartitionPathPrefix(Schema partitionColumn) {
     StringBuilder sb = new StringBuilder();
-    sb.append(partitionColumn.getColumn(0).getColumnName()).append("=");
+    sb.append(partitionColumn.getColumn(0).getSimpleName()).append("=");
     return sb.toString();
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java
index dc77700..8816f8f 100644
--- a/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java
+++ b/tajo-core/tajo-core-backend/src/main/java/org/apache/tajo/util/IndexUtil.java
@@ -40,7 +40,7 @@ public class IndexUtil {
     builder.append(fragment.getPath().getName() + "_");
     builder.append(fragment.getStartKey() + "_" + fragment.getEndKey() + "_");
     for(int i = 0 ; i < keys.length ; i ++) {
-      builder.append(keys[i].getSortKey().getColumnName()+"_");
+      builder.append(keys[i].getSortKey().getSimpleName()+"_");
     }
     builder.append("_index");
     return builder.toString();
@@ -51,7 +51,7 @@ public class IndexUtil {
     StringBuilder builder = new StringBuilder();
     builder.append(indexName + "_");
     for(int i = 0 ; i < keys.length ; i ++) {
-      builder.append(keys[i].getSortKey().getColumnName() + "_");
+      builder.append(keys[i].getSortKey().getSimpleName() + "_");
     }
     return builder.toString();
   }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/catalogview.jsp
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/catalogview.jsp b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/catalogview.jsp
index 26212f0..397146a 100644
--- a/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/catalogview.jsp
+++ b/tajo-core/tajo-core-backend/src/main/resources/webapps/admin/catalogview.jsp
@@ -19,11 +19,15 @@
 %>
 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
 
-<%@ page import="java.util.*" %>
-<%@ page import="org.apache.tajo.webapp.StaticHttpServer" %>
-<%@ page import="org.apache.tajo.master.*" %>
-<%@ page import="org.apache.tajo.catalog.*" %>
+<%@ page import="org.apache.tajo.catalog.CatalogService" %>
+<%@ page import="org.apache.tajo.catalog.Column" %>
+<%@ page import="org.apache.tajo.catalog.TableDesc" %>
+<%@ page import="org.apache.tajo.master.TajoMaster" %>
 <%@ page import="org.apache.tajo.util.FileUtil" %>
+<%@ page import="org.apache.tajo.webapp.StaticHttpServer" %>
+<%@ page import="java.util.Collection" %>
+<%@ page import="java.util.List" %>
+<%@ page import="java.util.Map" %>
 <%
   TajoMaster master = (TajoMaster) StaticHttpServer.getInstance().getAttribute("tajo.info.server.object");
   CatalogService catalog = master.getCatalog();
@@ -119,7 +123,7 @@
       out.write("<table border='1' class='border_table'><tr><th>No</th><th>Column name</th><th>Type</th></tr>");
       int columnIndex = 1;
       for(Column eachColumn: columns) {
-        out.write("<tr><td width='30' align='right'>" + columnIndex + "</td><td width='320'>" + eachColumn.getColumnName() + "</td><td width='150'>" + eachColumn.getDataType().getType() + "</td></tr>");
+        out.write("<tr><td width='30' align='right'>" + columnIndex + "</td><td width='320'>" + eachColumn.getSimpleName() + "</td><td width='150'>" + eachColumn.getDataType().getType() + "</td></tr>");
         columnIndex++;
       }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
index dea4fc8..7e721c5 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/ExprTestBase.java
@@ -106,15 +106,15 @@ public class ExprTestBase {
       inputSchema = SchemaUtil.clone(schema);
       inputSchema.setQualifier(tableName);
 
-      int targetIdx [] = new int[inputSchema.getColumnNum()];
+      int targetIdx [] = new int[inputSchema.size()];
       for (int i = 0; i < targetIdx.length; i++) {
         targetIdx[i] = i;
       }
 
       lazyTuple =
           new LazyTuple(inputSchema, Bytes.splitPreserveAllTokens(csvTuple.getBytes(), delimiter, targetIdx),0);
-      vtuple = new VTuple(inputSchema.getColumnNum());
-      for (int i = 0; i < inputSchema.getColumnNum(); i++) {
+      vtuple = new VTuple(inputSchema.size());
+      for (int i = 0; i < inputSchema.size(); i++) {
         // If null value occurs, null datum is manually inserted to an input tuple.
         if (lazyTuple.get(i) instanceof TextDatum && lazyTuple.get(i).asChars().equals("")) {
           vtuple.put(i, NullDatum.get());

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
index 6038124..f9c50ac 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
@@ -204,9 +204,9 @@ public class TestEvalTreeUtil {
     Schema schema = EvalTreeUtil.getSchemaByTargets(null, targets);
     Column col1 = schema.getColumn(0);
     Column col2 = schema.getColumn(1);
-    assertEquals("plus", col1.getColumnName());
+    assertEquals("plus", col1.getSimpleName());
     assertEquals(TajoDataTypes.Type.INT4, col1.getDataType().getType());
-    assertEquals("mul", col2.getColumnName());
+    assertEquals("mul", col2.getSimpleName());
     assertEquals(TajoDataTypes.Type.FLOAT8, col2.getDataType().getType());
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
index 92faec0..6107ca7 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalOptimizer.java
@@ -206,7 +206,7 @@ public class TestLogicalOptimizer {
     assertFalse(joinNode.hasJoinQual());
     
     // Test for Pushable
-    assertTrue(PlannerUtil.canBeEvaluated(selNode.getQual(), joinNode));
+    assertTrue(LogicalPlanner.checkIfBeEvaluatedAtJoin(newPlan.getRootBlock(), selNode.getQual(), joinNode, false));
     
     // Optimized plan
     LogicalNode optimized = optimizer.optimize(newPlan);
@@ -235,7 +235,7 @@ public class TestLogicalOptimizer {
     assertEquals(NodeType.SCAN, selNode.getChild().getType());
     ScanNode scanNode = selNode.getChild();
     // Test for Join Node
-    assertTrue(PlannerUtil.canBeEvaluated(selNode.getQual(), scanNode));
+    assertTrue(LogicalPlanner.checkIfBeEvaluatedAtRelation(newPlan.getRootBlock(), selNode.getQual(), scanNode));
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
index f9cbcf9..228d42d 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestLogicalPlanner.java
@@ -154,10 +154,10 @@ public class TestLogicalPlanner {
   public static void assertSchema(Schema expected, Schema schema) {
     Column expectedColumn;
     Column column;
-    for (int i = 0; i < expected.getColumnNum(); i++) {
+    for (int i = 0; i < expected.size(); i++) {
       expectedColumn = expected.getColumn(i);
-      column = schema.getColumnByName(expectedColumn.getColumnName());
-      assertEquals(expectedColumn.getColumnName(), column.getColumnName());
+      column = schema.getColumn(expectedColumn.getSimpleName());
+      assertEquals(expectedColumn.getSimpleName(), column.getSimpleName());
       assertEquals(expectedColumn.getDataType(), column.getDataType());
     }
   }
@@ -179,9 +179,8 @@ public class TestLogicalPlanner {
     expectedSchema.addColumn("empid", Type.INT4);
     expectedSchema.addColumn("deptname", Type.TEXT);
     expectedSchema.addColumn("manager", Type.TEXT);
-    for (int i = 0; i < expectedSchema.getColumnNum(); i++) {
-      Column found = root.getOutSchema().getColumnByName(expectedSchema.getColumn(i).
-          getColumnName());
+    for (int i = 0; i < expectedSchema.size(); i++) {
+      Column found = root.getOutSchema().getColumn(expectedSchema.getColumn(i).getSimpleName());
       assertEquals(expectedSchema.getColumn(i).getDataType(), found.getDataType());
     }
 
@@ -562,11 +561,11 @@ public class TestLogicalPlanner {
 
     Iterator<Column> it = out.getColumns().iterator();
     Column col = it.next();
-    assertEquals("res1", col.getColumnName());
+    assertEquals("res1", col.getSimpleName());
     col = it.next();
-    assertEquals("res2", col.getColumnName());
+    assertEquals("res2", col.getSimpleName());
     col = it.next();
-    assertEquals("res3", col.getColumnName());
+    assertEquals("res3", col.getSimpleName());
   }
 
   @Test
@@ -581,7 +580,7 @@ public class TestLogicalPlanner {
 
     assertEquals(NodeType.PROJECTION, root.getChild().getType());
     ProjectionNode projNode = root.getChild();
-    assertEquals(6, projNode.getOutSchema().getColumnNum());
+    assertEquals(6, projNode.getOutSchema().size());
 
     assertEquals(NodeType.SELECTION, projNode.getChild().getType());
     SelectionNode selNode = projNode.getChild();
@@ -607,9 +606,9 @@ public class TestLogicalPlanner {
     Schema finalSchema = root.getOutSchema();
     Iterator<Column> it = finalSchema.getColumns().iterator();
     Column col = it.next();
-    assertEquals("deptname", col.getColumnName());
+    assertEquals("deptname", col.getSimpleName());
     col = it.next();
-    assertEquals("total", col.getColumnName());
+    assertEquals("total", col.getSimpleName());
 
     expr = sqlAnalyzer.parse(ALIAS[1]);
     plan = planner.createPlan(expr).getRootBlock().getRoot();
@@ -618,9 +617,9 @@ public class TestLogicalPlanner {
     finalSchema = root.getOutSchema();
     it = finalSchema.getColumns().iterator();
     col = it.next();
-    assertEquals("id", col.getColumnName());
+    assertEquals("id", col.getSimpleName());
     col = it.next();
-    assertEquals("total", col.getColumnName());
+    assertEquals("total", col.getSimpleName());
   }
 
   @Test
@@ -633,9 +632,9 @@ public class TestLogicalPlanner {
     Schema finalSchema = root.getOutSchema();
     Iterator<Column> it = finalSchema.getColumns().iterator();
     Column col = it.next();
-    assertEquals("id", col.getColumnName());
+    assertEquals("id", col.getSimpleName());
     col = it.next();
-    assertEquals("total", col.getColumnName());
+    assertEquals("total", col.getSimpleName());
   }
 
   static final String CREATE_TABLE [] = {
@@ -652,13 +651,13 @@ public class TestLogicalPlanner {
     CreateTableNode createTable = root.getChild();
 
     Schema def = createTable.getTableSchema();
-    assertEquals("name", def.getColumn(0).getColumnName());
+    assertEquals("name", def.getColumn(0).getSimpleName());
     assertEquals(Type.TEXT, def.getColumn(0).getDataType().getType());
-    assertEquals("age", def.getColumn(1).getColumnName());
+    assertEquals("age", def.getColumn(1).getSimpleName());
     assertEquals(Type.INT4, def.getColumn(1).getDataType().getType());
-    assertEquals("earn", def.getColumn(2).getColumnName());
+    assertEquals("earn", def.getColumn(2).getSimpleName());
     assertEquals(Type.INT8, def.getColumn(2).getDataType().getType());
-    assertEquals("score", def.getColumn(3).getColumnName());
+    assertEquals("score", def.getColumn(3).getSimpleName());
     assertEquals(Type.FLOAT4, def.getColumn(3).getDataType().getType());
     assertEquals(StoreType.CSV, createTable.getStorageType());
     assertEquals("/tmp/data", createTable.getPath().toString());
@@ -825,8 +824,8 @@ public class TestLogicalPlanner {
     assertFalse(insertNode.isOverwrite());
     assertEquals("employee", insertNode.getTableName());
     assertTrue(insertNode.hasTargetSchema());
-    assertEquals(insertNode.getTargetSchema().getColumn(0).getColumnName(), "name");
-    assertEquals(insertNode.getTargetSchema().getColumn(1).getColumnName(), "deptname");
+    assertEquals(insertNode.getTargetSchema().getColumn(0).getSimpleName(), "name");
+    assertEquals(insertNode.getTargetSchema().getColumn(1).getSimpleName(), "deptname");
   }
 
   @Test
@@ -849,8 +848,8 @@ public class TestLogicalPlanner {
     assertTrue(insertNode.hasTargetTable());
     assertEquals("employee", insertNode.getTableName());
     assertTrue(insertNode.hasTargetSchema());
-    assertEquals(insertNode.getTargetSchema().getColumn(0).getColumnName(), "name");
-    assertEquals(insertNode.getTargetSchema().getColumn(1).getColumnName(), "deptname");
+    assertEquals(insertNode.getTargetSchema().getColumn(0).getSimpleName(), "name");
+    assertEquals(insertNode.getTargetSchema().getColumn(1).getSimpleName(), "deptname");
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
index 00ce501..c113559 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/TestPlannerUtil.java
@@ -223,8 +223,8 @@ public class TestPlannerUtil {
     assertEquals(2, sortSpecs.length);
     assertEquals(1, sortSpecs[0].length);
     assertEquals(1, sortSpecs[1].length);
-    assertEquals(outerSchema.getColumnByName("id1"), sortSpecs[0][0].getSortKey());
-    assertEquals(innerSchema.getColumnByName("fid1"), sortSpecs[1][0].getSortKey());
+    assertEquals(outerSchema.getColumn("id1"), sortSpecs[0][0].getSortKey());
+    assertEquals(innerSchema.getColumn("fid1"), sortSpecs[1][0].getSortKey());
 
     // tests for composited join key
     EvalNode joinQual2 = new BinaryEval(EvalType.EQUAL, f3, f4);
@@ -234,10 +234,10 @@ public class TestPlannerUtil {
     assertEquals(2, sortSpecs.length);
     assertEquals(2, sortSpecs[0].length);
     assertEquals(2, sortSpecs[1].length);
-    assertEquals(outerSchema.getColumnByName("id1"), sortSpecs[0][0].getSortKey());
-    assertEquals(outerSchema.getColumnByName("id2"), sortSpecs[0][1].getSortKey());
-    assertEquals(innerSchema.getColumnByName("fid1"), sortSpecs[1][0].getSortKey());
-    assertEquals(innerSchema.getColumnByName("fid2"), sortSpecs[1][1].getSortKey());
+    assertEquals(outerSchema.getColumn("id1"), sortSpecs[0][0].getSortKey());
+    assertEquals(outerSchema.getColumn("id2"), sortSpecs[0][1].getSortKey());
+    assertEquals(innerSchema.getColumn("fid1"), sortSpecs[1][0].getSortKey());
+    assertEquals(innerSchema.getColumn("fid2"), sortSpecs[1][1].getSortKey());
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
index 235fbcf..572a60a 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBNLJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -37,8 +35,10 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -83,7 +83,7 @@ public class TestBNLJoinExec {
     Path employeePath = new Path(testDir, "employee.csv");
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, schema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < OUTER_TUPLE_NUM; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -104,7 +104,7 @@ public class TestBNLJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     for (int i = 1; i < INNER_TUPLE_NUM; i += 2) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(10 + i),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
index 97932e7..4839451 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestBSTIndexExec.java
@@ -23,9 +23,6 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.storage.fragment.FragmentConvertor;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -41,8 +38,11 @@ import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.ScanNode;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
+import org.apache.tajo.storage.fragment.FragmentConvertor;
 import org.apache.tajo.storage.index.bst.BSTIndex;
 import org.apache.tajo.util.CommonTestingUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -98,7 +98,7 @@ public class TestBSTIndexExec {
     this.idxSchema = new Schema();
     idxSchema.addColumn("managerId", Type.INT4);
     SortSpec[] sortKeys = new SortSpec[1];
-    sortKeys[0] = new SortSpec(idxSchema.getColumnByFQN("managerId"), true, false);
+    sortKeys[0] = new SortSpec(idxSchema.getColumn("managerId"), true, false);
     this.comp = new TupleComparator(idxSchema, sortKeys);
 
     this.writer = new BSTIndex(conf).getIndexWriter(idxPath,
@@ -115,10 +115,10 @@ public class TestBSTIndexExec {
     FileAppender appender = (FileAppender)StorageManagerFactory.getStorageManager(conf).getAppender(meta, schema,
         tablePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 10000; i++) {
       
-      Tuple key = new VTuple(this.idxSchema.getColumnNum());
+      Tuple key = new VTuple(this.idxSchema.size());
       int rndKey = rnd.nextInt(250);
       if(this.randomValues.containsKey(rndKey)) {
         int t = this.randomValues.remove(rndKey) + 1;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
index a2a2b54..61d56fc 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestExternalSortExec.java
@@ -80,7 +80,7 @@ public class TestExternalSortExec {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, schema, employeePath);
     appender.enableStats();
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < numTuple; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(rnd.nextInt(50)),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
index 63f14b7..e6ffac2 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterHashJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -37,8 +35,10 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -96,7 +96,7 @@ public class TestFullOuterHashJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -125,7 +125,7 @@ public class TestFullOuterHashJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -164,7 +164,7 @@ public class TestFullOuterHashJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
index c92d1c9..3519d1c 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestFullOuterMergeJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -37,8 +35,10 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -46,9 +46,7 @@ import org.junit.Test;
 import java.io.IOException;
 
 import static org.apache.tajo.ipc.TajoWorkerProtocol.JoinEnforce.JoinAlgorithm;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 public class TestFullOuterMergeJoinExec {
   private TajoConf conf;
@@ -99,7 +97,7 @@ public class TestFullOuterMergeJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -137,7 +135,7 @@ public class TestFullOuterMergeJoinExec {
     Path dep4Path = new Path(testDir, "dep4.csv");
     Appender appender4 = StorageManagerFactory.getStorageManager(conf).getAppender(dep4Meta, dep4Schema, dep4Path);
     appender4.init();
-    Tuple tuple4 = new VTuple(dep4Schema.getColumnNum());
+    Tuple tuple4 = new VTuple(dep4Schema.size());
     for (int i = 0; i < 11; i++) {
       tuple4.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -168,7 +166,7 @@ public class TestFullOuterMergeJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -207,7 +205,7 @@ public class TestFullOuterMergeJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
index f4350fb..60d90d9 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashAntiJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -35,8 +33,10 @@ import org.apache.tajo.engine.planner.*;
 import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -80,7 +80,7 @@ public class TestHashAntiJoinExec {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, employeeSchema,
         employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.getColumnNum());
+    Tuple tuple = new VTuple(employeeSchema.size());
 
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] {
@@ -105,7 +105,7 @@ public class TestHashAntiJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     for (int i = 1; i < 10; i += 2) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(i), // empid [1, 3, 5, 7, 9]

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
index 8d319ee..6f0b4e2 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashJoinExec.java
@@ -81,7 +81,7 @@ public class TestHashJoinExec {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, employeeSchema,
         employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.getColumnNum());
+    Tuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -103,7 +103,7 @@ public class TestHashJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     for (int i = 1; i < 10; i += 2) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(10 + i),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
index 8eec324..ebc35d3 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestHashSemiJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -35,8 +33,10 @@ import org.apache.tajo.engine.planner.*;
 import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -80,7 +80,7 @@ public class TestHashSemiJoinExec {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, employeeSchema,
         employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.getColumnNum());
+    Tuple tuple = new VTuple(employeeSchema.size());
 
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] {
@@ -105,7 +105,7 @@ public class TestHashSemiJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     // make 27 tuples
     for (int i = 1; i < 10; i += 2) {
       // make three duplicated tuples for each tuples

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
index e163a29..bee7547 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterHashJoinExec.java
@@ -19,9 +19,8 @@
 package org.apache.tajo.engine.planner.physical;
 
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -36,12 +35,13 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.apache.tajo.LocalTajoTestingUtility;
 
 import java.io.IOException;
 
@@ -96,7 +96,7 @@ public class TestLeftOuterHashJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
                     DatumFactory.createText("dept_" + i),
@@ -125,7 +125,7 @@ public class TestLeftOuterHashJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -164,7 +164,7 @@ public class TestLeftOuterHashJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
index 0540bc1..1ac202e 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestLeftOuterNLJoinExec.java
@@ -95,7 +95,7 @@ public class TestLeftOuterNLJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
                     DatumFactory.createText("dept_" + i),
@@ -124,7 +124,7 @@ public class TestLeftOuterNLJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -163,7 +163,7 @@ public class TestLeftOuterNLJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
index af72541..5977c95 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestMergeJoinExec.java
@@ -22,8 +22,6 @@ import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -38,8 +36,10 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -83,7 +83,7 @@ public class TestMergeJoinExec {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, employeeSchema,
         employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.getColumnNum());
+    Tuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(i), DatumFactory.createInt4(10 + i),
@@ -111,7 +111,7 @@ public class TestMergeJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     for (int i = 1; i < 10; i += 2) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createInt4(10 + i),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
index 004cb57..601621d 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestNLJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -39,8 +37,10 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.global.MasterPlan;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -83,7 +83,7 @@ public class TestNLJoinExec {
     Path employeePath = new Path(testDir, "employee.csv");
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, schema, employeePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 50; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(i),
@@ -106,7 +106,7 @@ public class TestNLJoinExec {
     Path peoplePath = new Path(testDir, "people.csv");
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(peopleMeta, peopleSchema, peoplePath);
     appender.init();
-    tuple = new VTuple(peopleSchema.getColumnNum());
+    tuple = new VTuple(peopleSchema.size());
     for (int i = 1; i < 50; i += 2) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(i),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
index 72462de..7e3bd2b 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
@@ -114,7 +114,7 @@ public class TestPhysicalPlanner {
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, employeeSchema,
         employeePath);
     appender.init();
-    Tuple tuple = new VTuple(employeeSchema.getColumnNum());
+    Tuple tuple = new VTuple(employeeSchema.size());
     for (int i = 0; i < 100; i++) {
       tuple.put(new Datum[] {DatumFactory.createText("name_" + i),
           DatumFactory.createInt4(i), DatumFactory.createText("dept_" + i)});
@@ -131,7 +131,7 @@ public class TestPhysicalPlanner {
     appender = StorageManagerFactory.getStorageManager(conf).getAppender(scoreMeta, scoreSchema, scorePath);
     appender.init();
     score = new TableDesc("score", scoreSchema, scoreMeta, scorePath);
-    tuple = new VTuple(scoreSchema.getColumnNum());
+    tuple = new VTuple(scoreSchema.size());
     int m = 0;
     for (int i = 1; i <= 5; i++) {
       for (int k = 3; k < 5; k++) {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
index b52a37a..d2c29a3 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterHashJoinExec.java
@@ -19,10 +19,8 @@
 package org.apache.tajo.engine.planner.physical;
 
 import org.apache.hadoop.fs.Path;
+import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.engine.planner.enforce.Enforcer;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -35,14 +33,16 @@ import org.apache.tajo.engine.planner.LogicalPlanner;
 import org.apache.tajo.engine.planner.PhysicalPlanner;
 import org.apache.tajo.engine.planner.PhysicalPlannerImpl;
 import org.apache.tajo.engine.planner.PlanningException;
+import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
-import org.apache.tajo.LocalTajoTestingUtility;
 
 import java.io.IOException;
 
@@ -96,7 +96,7 @@ public class TestRightOuterHashJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
                     DatumFactory.createText("dept_" + i),
@@ -125,7 +125,7 @@ public class TestRightOuterHashJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -164,7 +164,7 @@ public class TestRightOuterHashJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
index 5bbb4aa..b4b588d 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestRightOuterMergeJoinExec.java
@@ -21,8 +21,6 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.fs.Path;
 import org.apache.tajo.LocalTajoTestingUtility;
 import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.storage.fragment.FileFragment;
-import org.apache.tajo.worker.TaskAttemptContext;
 import org.apache.tajo.algebra.Expr;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
@@ -37,8 +35,10 @@ import org.apache.tajo.engine.planner.logical.JoinNode;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
 import org.apache.tajo.engine.planner.logical.NodeType;
 import org.apache.tajo.storage.*;
+import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.util.CommonTestingUtil;
 import org.apache.tajo.util.TUtil;
+import org.apache.tajo.worker.TaskAttemptContext;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -46,9 +46,7 @@ import org.junit.Test;
 import java.io.IOException;
 
 import static org.apache.tajo.ipc.TajoWorkerProtocol.JoinEnforce.JoinAlgorithm;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.*;
 
 public class TestRightOuterMergeJoinExec {
   private TajoConf conf;
@@ -99,7 +97,7 @@ public class TestRightOuterMergeJoinExec {
     Path dep3Path = new Path(testDir, "dep3.csv");
     Appender appender1 = StorageManagerFactory.getStorageManager(conf).getAppender(dep3Meta, dep3Schema, dep3Path);
     appender1.init();
-    Tuple tuple = new VTuple(dep3Schema.getColumnNum());
+    Tuple tuple = new VTuple(dep3Schema.size());
     for (int i = 0; i < 10; i++) {
       tuple.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -137,7 +135,7 @@ public class TestRightOuterMergeJoinExec {
     Path dep4Path = new Path(testDir, "dep4.csv");
     Appender appender4 = StorageManagerFactory.getStorageManager(conf).getAppender(dep4Meta, dep4Schema, dep4Path);
     appender4.init();
-    Tuple tuple4 = new VTuple(dep4Schema.getColumnNum());
+    Tuple tuple4 = new VTuple(dep4Schema.size());
     for (int i = 0; i < 11; i++) {
       tuple4.put(new Datum[] { DatumFactory.createInt4(i),
           DatumFactory.createText("dept_" + i),
@@ -168,7 +166,7 @@ public class TestRightOuterMergeJoinExec {
     Path job3Path = new Path(testDir, "job3.csv");
     Appender appender2 = StorageManagerFactory.getStorageManager(conf).getAppender(job3Meta, job3Schema, job3Path);
     appender2.init();
-    Tuple tuple2 = new VTuple(job3Schema.getColumnNum());
+    Tuple tuple2 = new VTuple(job3Schema.size());
     for (int i = 1; i < 4; i++) {
       int x = 100 + i;
       tuple2.put(new Datum[] { DatumFactory.createInt4(100 + i),
@@ -207,7 +205,7 @@ public class TestRightOuterMergeJoinExec {
     Path emp3Path = new Path(testDir, "emp3.csv");
     Appender appender3 = StorageManagerFactory.getStorageManager(conf).getAppender(emp3Meta, emp3Schema, emp3Path);
     appender3.init();
-    Tuple tuple3 = new VTuple(emp3Schema.getColumnNum());
+    Tuple tuple3 = new VTuple(emp3Schema.size());
 
     for (int i = 1; i < 4; i += 2) {
       int x = 10 + i;

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
index 7e8c118..00fb386 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/planner/physical/TestSortExec.java
@@ -80,7 +80,7 @@ public class TestSortExec {
 
     Appender appender = StorageManagerFactory.getStorageManager(conf).getAppender(employeeMeta, schema, tablePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < 100; i++) {
       tuple.put(new Datum[] {
           DatumFactory.createInt4(rnd.nextInt(5)),

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
index 9b940da..902a73a 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestCTASQuery.java
@@ -56,7 +56,7 @@ public class TestCTASQuery extends QueryTestCaseBase {
     assertTrue(desc.getSchema().contains("testCtasWithoutTableDefinition.col1"));
     PartitionMethodDesc partitionDesc = desc.getPartitionMethod();
     assertEquals(partitionDesc.getPartitionType(), CatalogProtos.PartitionType.COLUMN);
-    assertEquals("key", partitionDesc.getExpressionSchema().getColumns().get(0).getColumnName());
+    assertEquals("key", partitionDesc.getExpressionSchema().getColumns().get(0).getSimpleName());
 
     FileSystem fs = FileSystem.get(testBase.getTestingCluster().getConfiguration());
     Path path = desc.getPath();
@@ -95,7 +95,7 @@ public class TestCTASQuery extends QueryTestCaseBase {
     assertTrue(catalog.existsTable("testCtasWithColumnedPartition"));
     PartitionMethodDesc partitionDesc = desc.getPartitionMethod();
     assertEquals(partitionDesc.getPartitionType(), CatalogProtos.PartitionType.COLUMN);
-    assertEquals("key", partitionDesc.getExpressionSchema().getColumns().get(0).getColumnName());
+    assertEquals("key", partitionDesc.getExpressionSchema().getColumns().get(0).getSimpleName());
 
     FileSystem fs = FileSystem.get(cluster.getConfiguration());
     Path path = desc.getPath();

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestTablePartitions.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestTablePartitions.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestTablePartitions.java
index f775acb..60c8497 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestTablePartitions.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/engine/query/TestTablePartitions.java
@@ -36,7 +36,6 @@ import java.sql.ResultSet;
 import java.util.Map;
 
 import static org.junit.Assert.*;
-import static org.junit.Assert.assertEquals;
 
 public class TestTablePartitions extends QueryTestCaseBase {
 
@@ -53,8 +52,8 @@ public class TestTablePartitions extends QueryTestCaseBase {
     res.close();
 
     assertTrue(catalog.existsTable(tableName));
-    assertEquals(2, catalog.getTableDesc(tableName).getSchema().getColumnNum());
-    assertEquals(3, catalog.getTableDesc(tableName).getLogicalSchema().getColumnNum());
+    assertEquals(2, catalog.getTableDesc(tableName).getSchema().size());
+    assertEquals(3, catalog.getTableDesc(tableName).getLogicalSchema().size());
 
     res = testBase.execute(
         "insert overwrite into " + tableName + " select l_orderkey, l_partkey, l_quantity from lineitem");
@@ -69,8 +68,8 @@ public class TestTablePartitions extends QueryTestCaseBase {
     res.close();
 
     assertTrue(catalog.existsTable(tableName));
-    assertEquals(3, catalog.getTableDesc(tableName).getSchema().getColumnNum());
-    assertEquals(4, catalog.getTableDesc(tableName).getLogicalSchema().getColumnNum());
+    assertEquals(3, catalog.getTableDesc(tableName).getSchema().size());
+    assertEquals(4, catalog.getTableDesc(tableName).getLogicalSchema().size());
 
     res = executeString("insert overwrite into " + tableName + " (col1, col2, key) select l_orderkey, " +
         "l_partkey, l_quantity from lineitem");

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestResultSet.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
index aff996b..3610382 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
@@ -25,7 +25,10 @@ import org.apache.hadoop.fs.Path;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.TajoTestingCluster;
 import org.apache.tajo.TpchTestBase;
-import org.apache.tajo.catalog.*;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.proto.CatalogProtos.StoreType;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.common.TajoDataTypes.Type;
@@ -102,9 +105,9 @@ public class TestResultSet {
     ResultSetMetaData meta = rs.getMetaData();
     assertNotNull(meta);
     Schema schema = scoreSchema;
-    assertEquals(schema.getColumnNum(), meta.getColumnCount());
+    assertEquals(schema.size(), meta.getColumnCount());
     for (int i = 0; i < meta.getColumnCount(); i++) {
-      assertEquals(schema.getColumn(i).getColumnName(), meta.getColumnName(i + 1));
+      assertEquals(schema.getColumn(i).getSimpleName(), meta.getColumnName(i + 1));
       assertEquals(schema.getColumn(i).getQualifier(), meta.getTableName(i + 1));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
index 2313388..445cd69 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
@@ -238,7 +238,7 @@ public class TestTajoJdbc {
 
       while(rs.next()) {
         assertEquals(tableName, rs.getString("TABLE_NAME"));
-        assertEquals(columns.get(numColumns).getColumnName(), rs.getString("COLUMN_NAME"));
+        assertEquals(columns.get(numColumns).getSimpleName(), rs.getString("COLUMN_NAME"));
         //TODO assert type
         numColumns++;
       }

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TestRangeRetrieverHandler.java
----------------------------------------------------------------------
diff --git a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TestRangeRetrieverHandler.java b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TestRangeRetrieverHandler.java
index b18f706..65b7d1e 100644
--- a/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TestRangeRetrieverHandler.java
+++ b/tajo-core/tajo-core-backend/src/test/java/org/apache/tajo/worker/TestRangeRetrieverHandler.java
@@ -36,7 +36,10 @@ import org.apache.tajo.engine.parser.SQLAnalyzer;
 import org.apache.tajo.engine.planner.*;
 import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.logical.LogicalNode;
-import org.apache.tajo.engine.planner.physical.*;
+import org.apache.tajo.engine.planner.physical.ExternalSortExec;
+import org.apache.tajo.engine.planner.physical.PhysicalExec;
+import org.apache.tajo.engine.planner.physical.ProjectionExec;
+import org.apache.tajo.engine.planner.physical.RangeShuffleFileWriteExec;
 import org.apache.tajo.storage.*;
 import org.apache.tajo.storage.fragment.FileFragment;
 import org.apache.tajo.storage.index.bst.BSTIndex;
@@ -52,7 +55,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public class TestRangeRetrieverHandler {
   private TajoTestingCluster util;
@@ -108,7 +112,7 @@ public class TestRangeRetrieverHandler {
     Appender appender = sm.getAppender(employeeMeta, schema, tableDir);
     appender.init();
 
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = 0; i < TEST_TUPLE; i++) {
       tuple.put(
           new Datum[] {
@@ -229,7 +233,7 @@ public class TestRangeRetrieverHandler {
     fs.mkdirs(tablePath.getParent());
     Appender appender = sm.getAppender(meta, schema, tablePath);
     appender.init();
-    Tuple tuple = new VTuple(schema.getColumnNum());
+    Tuple tuple = new VTuple(schema.size());
     for (int i = (TEST_TUPLE - 1); i >= 0 ; i--) {
       tuple.put(
           new Datum[] {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/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 2637e6b..b3e67bc 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
@@ -494,14 +494,14 @@ public class TajoDatabaseMetaData implements DatabaseMetaData {
           TableDesc tableDesc = conn.getTajoClient().getTableDesc(table);
           int pos = 0;
           for (Column column: tableDesc.getSchema().getColumns()) {
-            if (column.getColumnName().matches(regcolumnNamePattern)) {
+            if (column.getSimpleName().matches(regcolumnNamePattern)) {
               MetaDataTuple tuple = new MetaDataTuple(22);
 
               int index = 0;
               tuple.put(index++, new TextDatum(catalog));  //TABLE_CAT
               tuple.put(index++, NullDatum.get());  //TABLE_SCHEM
               tuple.put(index++, new TextDatum(table));  //TABLE_NAME
-              tuple.put(index++, new TextDatum(column.getColumnName()));  //COLUMN_NAME
+              tuple.put(index++, new TextDatum(column.getSimpleName()));  //COLUMN_NAME
               // TODO - DATA_TYPE
               tuple.put(index++, new TextDatum("" + ResultSetUtil.tajoTypeToSqlType(column.getDataType())));
               tuple.put(index++, new TextDatum(ResultSetUtil.toSqlType(column.getDataType())));  //TYPE_NAME

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/CSVFile.java b/tajo-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
index 490787f..ed65af6 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/CSVFile.java
@@ -84,7 +84,7 @@ public class CSVFile {
       this.meta = meta;
       this.schema = schema;
       this.delimiter = StringEscapeUtils.unescapeJava(this.meta.getOption(DELIMITER, DELIMITER_DEFAULT)).charAt(0);
-      this.columnNum = schema.getColumnNum();
+      this.columnNum = schema.size();
       String nullCharacters = StringEscapeUtils.unescapeJava(this.meta.getOption(NULL));
       if (StringUtils.isEmpty(nullCharacters)) {
         nullChars = NullDatum.get().asTextBytes();

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/FileScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/FileScanner.java b/tajo-storage/src/main/java/org/apache/tajo/storage/FileScanner.java
index c831822..553fec9 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/FileScanner.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/FileScanner.java
@@ -48,7 +48,7 @@ public abstract class FileScanner implements Scanner {
     this.meta = meta;
     this.schema = schema;
     this.fragment = fragment;
-    this.columnNum = this.schema.getColumnNum();
+    this.columnNum = this.schema.size();
   }
 
   public void init() throws IOException {

http://git-wip-us.apache.org/repos/asf/incubator-tajo/blob/e2f4798b/tajo-storage/src/main/java/org/apache/tajo/storage/LazyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/src/main/java/org/apache/tajo/storage/LazyTuple.java b/tajo-storage/src/main/java/org/apache/tajo/storage/LazyTuple.java
index 7878004..3e7ca5f 100644
--- a/tajo-storage/src/main/java/org/apache/tajo/storage/LazyTuple.java
+++ b/tajo-storage/src/main/java/org/apache/tajo/storage/LazyTuple.java
@@ -39,7 +39,7 @@ public class LazyTuple implements Tuple, Cloneable {
   public LazyTuple(Schema schema, byte[][] textBytes, long offset, byte[] nullBytes, SerializerDeserializer serde) {
     this.schema = schema;
     this.textBytes = textBytes;
-    this.values = new Datum[schema.getColumnNum()];
+    this.values = new Datum[schema.size()];
     this.offset = offset;
     this.nullBytes = nullBytes;
     this.serializeDeserialize = serde;