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 2015/08/19 16:13:37 UTC

[2/2] tajo git commit: TAJO-1758: Some TajoRuntimeException should be restored as TajoException in client side.

TAJO-1758: Some TajoRuntimeException should be restored as TajoException in client side.

Closes #700


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

Branch: refs/heads/master
Commit: de1ca380e599ec01a8dae673c36b496c5850c446
Parents: 2a850cf
Author: Hyunsik Choi <hy...@apache.org>
Authored: Wed Aug 19 23:11:29 2015 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Wed Aug 19 23:11:29 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |  3 ++
 .../tajo/catalog/store/HiveCatalogStore.java    | 22 +++++++++------
 .../tajo/catalog/store/HiveCatalogUtil.java     | 19 ++++++-------
 .../apache/tajo/client/DummyServiceTracker.java | 11 ++++----
 .../org/apache/tajo/client/ResultSetUtil.java   |  3 +-
 .../tajo/client/v2/LegacyClientDelegate.java    | 20 +++++++-------
 .../org/apache/tajo/storage/RowStoreUtil.java   | 15 +++++-----
 .../apache/tajo/exception/ExceptionUtil.java    |  9 ++----
 .../exception/InvalidDataTypeException.java     |  3 +-
 .../tajo/exception/NotImplementedException.java |  2 +-
 .../apache/tajo/exception/SQLSyntaxError.java   |  2 +-
 .../tajo/exception/TajoRuntimeException.java    | 20 ++++++++------
 .../exception/UnsupportedDataTypeException.java |  2 +-
 .../tajo/exception/UnsupportedException.java    | 10 +++----
 .../java/org/apache/tajo/storage/VTuple.java    |  5 ++--
 .../tajo/cli/tsql/TestTajoCliNegatives.java     |  9 ------
 .../org/apache/tajo/client/TestTajoClient.java  |  1 -
 .../tajo/engine/eval/TestEvalTreeUtil.java      |  2 +-
 .../tajo/engine/query/TestInSubquery.java       | 10 ++-----
 .../engine/codegen/TajoGeneratorAdapter.java    |  3 +-
 .../apache/tajo/engine/parser/SQLAnalyzer.java  | 13 +++++----
 .../engine/planner/global/GlobalPlanner.java    |  2 +-
 .../planner/physical/ComparableVector.java      |  6 ++--
 .../planner/physical/VectorizedSorter.java      |  3 +-
 .../org/apache/tajo/master/GlobalEngine.java    | 29 ++++++++++++--------
 .../apache/tajo/master/exec/DDLExecutor.java    |  6 ++--
 .../tajo/session/InvalidSessionException.java   |  3 +-
 .../org/apache/tajo/jdbc/MetaDataTuple.java     | 16 +++++------
 .../tajo/plan/expr/BasicEvalNodeVisitor.java    |  3 +-
 .../org/apache/tajo/plan/expr/SubqueryEval.java |  7 +++--
 .../tajo/plan/function/AggFunctionInvoke.java   |  3 +-
 .../tajo/plan/function/FunctionInvoke.java      |  3 +-
 .../plan/function/stream/CSVLineSerializer.java |  3 +-
 .../stream/TextFieldSerializerDeserializer.java |  3 +-
 .../tajo/plan/logical/SetSessionNode.java       |  5 ++--
 .../tajo/plan/nameresolver/NameResolver.java    |  2 +-
 .../plan/serder/LogicalNodeDeserializer.java    |  7 +++--
 .../tajo/plan/serder/LogicalNodeSerializer.java |  4 ++-
 .../tajo/plan/verifier/LogicalPlanVerifier.java |  2 +-
 .../apache/tajo/storage/AbstractScanner.java    | 23 ++++++++--------
 .../org/apache/tajo/storage/FrameTuple.java     | 17 ++++++------
 .../java/org/apache/tajo/storage/LazyTuple.java |  3 +-
 .../org/apache/tajo/storage/MergeScanner.java   |  3 +-
 .../org/apache/tajo/storage/NullScanner.java    |  3 +-
 .../org/apache/tajo/storage/RowStoreUtil.java   | 17 ++++++------
 .../org/apache/tajo/storage/Tablespace.java     |  3 +-
 .../apache/tajo/tuple/offheap/HeapTuple.java    |  9 +++---
 .../apache/tajo/tuple/offheap/UnSafeTuple.java  |  9 +++---
 .../apache/tajo/storage/hbase/HBaseScanner.java |  2 +-
 .../java/org/apache/tajo/storage/RawFile.java   |  3 +-
 .../java/org/apache/tajo/storage/RowFile.java   |  3 +-
 .../apache/tajo/storage/avro/AvroScanner.java   |  3 +-
 .../tajo/storage/json/JsonLineDeserializer.java |  4 ++-
 .../tajo/storage/json/JsonLineSerializer.java   |  4 ++-
 .../org/apache/tajo/storage/orc/ORCScanner.java |  6 ++--
 .../tajo/storage/parquet/ParquetScanner.java    |  3 +-
 .../org/apache/tajo/storage/rcfile/RCFile.java  |  3 +-
 .../sequencefile/SequenceFileScanner.java       |  3 +-
 .../tajo/storage/text/DelimitedLineReader.java  |  6 ++--
 .../tajo/storage/text/DelimitedTextFile.java    |  3 +-
 60 files changed, 230 insertions(+), 191 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index b77a3b0..fd8830b 100644
--- a/CHANGES
+++ b/CHANGES
@@ -499,6 +499,9 @@ Release 0.11.0 - unreleased
 
   SUB TASKS
 
+    TAJO-1758: Some TajoRuntimeException should be restored as TajoException 
+    in client side. (hyunsik)
+
     TAJO-1754: Implement several functions to handle json array. (jihoon)
 
     TAJO-1748: Refine client APIs to throw specific exceptions. (hyunsik)

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
index b3e2b8e..2b03fec 100644
--- a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
+++ b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogStore.java
@@ -190,7 +190,7 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
           } else if (ColumnarSerDe.class.getName().equals(serde)) {
             options.set(StorageConstants.RCFILE_SERDE, StorageConstants.DEFAULT_TEXT_SERDE);
           }
-        } else if (storeType.equals("SEQUENCEFILE") ) {
+        } else if (storeType.equals("SEQUENCEFILE")) {
           options.set(StorageConstants.SEQUENCEFILE_DELIMITER, StringEscapeUtils.escapeJava(fieldDelimiter));
           options.set(StorageConstants.SEQUENCEFILE_NULL, StringEscapeUtils.escapeJava(nullFormat));
           String serde = properties.getProperty(serdeConstants.SERIALIZATION_LIB);
@@ -244,6 +244,8 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
               expressionSchema);
         }
       }
+    } catch (Throwable t) {
+      throw new TajoInternalError(t);
     } finally {
       if(client != null) client.release();
     }
@@ -314,7 +316,7 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
       builder.setUri(defaultTableSpaceUri);
       return builder.build();
     } else {
-      throw new UnsupportedException("Tablespace in HiveMeta");
+      throw new TajoRuntimeException(new UnsupportedException("Tablespace in HiveMeta"));
     }
   }
 
@@ -325,7 +327,7 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
 
   @Override
   public void alterTablespace(CatalogProtos.AlterTablespaceProto alterProto) {
-    throw new UnsupportedException("Tablespace in HiveMeta");
+    throw new TajoRuntimeException(new UnsupportedException("Tablespace in HiveMeta"));
   }
 
   @Override
@@ -780,7 +782,7 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
             FieldSchema fieldSchema = partitionKeys.get(i);
             TajoDataTypes.Type dataType = HiveCatalogUtil.getTajoFieldType(fieldSchema.getType().toString());
             String fieldName = databaseName + CatalogConstants.IDENTIFIER_DELIMITER + tableName +
-              CatalogConstants.IDENTIFIER_DELIMITER + fieldSchema.getName();
+                CatalogConstants.IDENTIFIER_DELIMITER + fieldSchema.getName();
             expressionSchema.addColumn(new Column(fieldName, dataType));
             if (i > 0) {
               sb.append(",");
@@ -788,15 +790,17 @@ public class HiveCatalogStore extends CatalogConstants implements CatalogStore {
             sb.append(fieldSchema.getName());
           }
           partitionMethodDesc = new PartitionMethodDesc(
-            databaseName,
-            tableName,
-            PartitionType.COLUMN,
-            sb.toString(),
-            expressionSchema);
+              databaseName,
+              tableName,
+              PartitionType.COLUMN,
+              sb.toString(),
+              expressionSchema);
         }
       } else {
         throw new UndefinedPartitionMethodException(tableName);
       }
+    } catch (Throwable t) {
+      throw new TajoInternalError(t);
     } finally {
       if(client != null) client.release();
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogUtil.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogUtil.java b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogUtil.java
index 7779b4f..67a1488 100644
--- a/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogUtil.java
+++ b/tajo-catalog/tajo-catalog-drivers/tajo-hive/src/main/java/org/apache/tajo/catalog/store/HiveCatalogUtil.java
@@ -28,10 +28,7 @@ import org.apache.hadoop.hive.serde.serdeConstants;
 import org.apache.tajo.BuiltinStorages;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.common.TajoDataTypes;
-import org.apache.tajo.exception.ExceptionUtil;
-import org.apache.tajo.exception.LMDNoMatchedDatatypeException;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.exception.TajoRuntimeException;
+import org.apache.tajo.exception.*;
 import org.apache.thrift.TException;
 import parquet.hadoop.mapred.DeprecatedParquetOutputFormat;
 
@@ -43,12 +40,12 @@ public class HiveCatalogUtil {
       String fieldType = fieldSchema.getType();
       if (fieldType.equalsIgnoreCase("ARRAY") || fieldType.equalsIgnoreCase("STRUCT")
         || fieldType.equalsIgnoreCase("MAP")) {
-        throw makeNotSupported(fieldType.toUpperCase());
+        throw new TajoRuntimeException(new UnsupportedException("data type '" + fieldType.toUpperCase() + "'"));
       }
     }
   }
 
-  public static TajoDataTypes.Type getTajoFieldType(String dataType) {
+  public static TajoDataTypes.Type getTajoFieldType(String dataType) throws LMDNoMatchedDatatypeException {
     Preconditions.checkNotNull(dataType);
 
     if(dataType.equalsIgnoreCase(serdeConstants.INT_TYPE_NAME)) {
@@ -74,11 +71,11 @@ public class HiveCatalogUtil {
     } else if(dataType.equalsIgnoreCase(serdeConstants.DATE_TYPE_NAME)) {
       return TajoDataTypes.Type.DATE;
     } else {
-      throw new TajoRuntimeException(new LMDNoMatchedDatatypeException(dataType));
+      throw new LMDNoMatchedDatatypeException(dataType);
     }
   }
 
-  public static String getHiveFieldType(TajoDataTypes.DataType dataType) {
+  public static String getHiveFieldType(TajoDataTypes.DataType dataType) throws LMDNoMatchedDatatypeException {
     Preconditions.checkNotNull(dataType);
 
     switch (dataType.getType()) {
@@ -100,7 +97,7 @@ public class HiveCatalogUtil {
     case DATE: return serdeConstants.DATE_TYPE_NAME;
     case TIMESTAMP: return serdeConstants.TIMESTAMP_TYPE_NAME;
     default:
-      throw ExceptionUtil.makeInvalidDataType(dataType);
+      throw new LMDNoMatchedDatatypeException(dataType.getType().name());
     }
   }
 
@@ -109,7 +106,7 @@ public class HiveCatalogUtil {
 
     String[] fileFormatArrary = fileFormat.split("\\.");
     if(fileFormatArrary.length < 1) {
-      throw makeNotSupported(fileFormat);
+      throw new TajoRuntimeException(new UnknownDataFormatException(fileFormat));
     }
 
     String outputFormatClass = fileFormatArrary[fileFormatArrary.length-1];
@@ -122,7 +119,7 @@ public class HiveCatalogUtil {
     } else if(outputFormatClass.equals(DeprecatedParquetOutputFormat.class.getSimpleName())) {
       return CatalogProtos.StoreType.PARQUET.name();
     } else {
-      throw makeNotSupported(fileFormat);
+      throw new TajoRuntimeException(new UnknownDataFormatException(fileFormat));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-client/src/main/java/org/apache/tajo/client/DummyServiceTracker.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/DummyServiceTracker.java b/tajo-client/src/main/java/org/apache/tajo/client/DummyServiceTracker.java
index cf826ea..fb2ba0c 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/DummyServiceTracker.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/DummyServiceTracker.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.client;
 
 import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.service.ServiceTracker;
 import org.apache.tajo.service.ServiceTrackerException;
@@ -43,7 +44,7 @@ public class DummyServiceTracker implements ServiceTracker {
 
   @Override
   public InetSocketAddress getUmbilicalAddress() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -53,17 +54,17 @@ public class DummyServiceTracker implements ServiceTracker {
 
   @Override
   public InetSocketAddress getResourceTrackerAddress() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public InetSocketAddress getCatalogAddress() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public InetSocketAddress getMasterHttpInfo() throws ServiceTrackerException {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -96,6 +97,6 @@ public class DummyServiceTracker implements ServiceTracker {
 
   @Override
   public List<TajoMasterInfo> getMasters() throws IOException {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-client/src/main/java/org/apache/tajo/client/ResultSetUtil.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/ResultSetUtil.java b/tajo-client/src/main/java/org/apache/tajo/client/ResultSetUtil.java
index 9211a1b..7f4746c 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/ResultSetUtil.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/ResultSetUtil.java
@@ -19,6 +19,7 @@
 package org.apache.tajo.client;
 
 import org.apache.tajo.common.TajoDataTypes;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 
 import java.sql.ResultSet;
@@ -84,7 +85,7 @@ public class ResultSetUtil {
     case TEXT:
       return "varchar";
     default:
-      throw new UnsupportedException("Unrecognized column type:" + type);
+      throw new TajoRuntimeException(new UnsupportedException("unknown data type '" + type.getType().name() + "'"));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-client/src/main/java/org/apache/tajo/client/v2/LegacyClientDelegate.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/v2/LegacyClientDelegate.java b/tajo-client/src/main/java/org/apache/tajo/client/v2/LegacyClientDelegate.java
index 12f8812..42edadf 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/v2/LegacyClientDelegate.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/v2/LegacyClientDelegate.java
@@ -434,52 +434,52 @@ public class LegacyClientDelegate extends SessionConnection implements ClientDel
 
     @Override
     public InetSocketAddress getResourceTrackerAddress() throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public InetSocketAddress getCatalogAddress() throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public InetSocketAddress getMasterHttpInfo() throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public int getState(String masterName, TajoConf conf) throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public int formatHA(TajoConf conf) throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public List<String> getMasters(TajoConf conf) throws ServiceTrackerException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public void register() throws IOException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public void delete() throws IOException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public boolean isActiveMaster() {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
 
     @Override
     public List<TajoMasterInfo> getMasters() throws IOException {
-      throw new NotImplementedException();
+      throw new TajoRuntimeException(new NotImplementedException());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java b/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
index 13b0201..4c7fe0a 100644
--- a/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
+++ b/tajo-client/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
@@ -23,7 +23,7 @@ import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.IntervalDatum;
-import org.apache.tajo.exception.UnsupportedDataTypeException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.exception.ValueTooLongForTypeCharactersException;
 import org.apache.tajo.util.BitArray;
@@ -153,11 +153,10 @@ public class RowStoreUtil {
             bb.get(_ipv4);
             tuple.put(i, DatumFactory.createInet4(_ipv4));
             break;
-          case INET6:
-            // TODO - to be implemented
-            throw new UnsupportedException(type.getType().name());
+
           default:
-            throw new RuntimeException(new UnsupportedDataTypeException(type.getType().name()));
+            throw new TajoRuntimeException(
+                new UnsupportedException("data type '" + col.getDataType().getType().name() + "'"));
         }
       }
       return tuple;
@@ -258,7 +257,8 @@ public class RowStoreUtil {
             bb.put(tuple.getBytes(i));
             break;
           default:
-            throw new RuntimeException(new UnsupportedDataTypeException(col.getDataType().getType().name()));
+            throw new TajoRuntimeException(
+                new UnsupportedException("data type '" + col.getDataType().getType().name() + "'"));
         }
       }
 
@@ -319,7 +319,8 @@ public class RowStoreUtil {
             size += tuple.getBytes(i).length;
             break;
           default:
-            throw new RuntimeException(new UnsupportedDataTypeException(col.getDataType().getType().name()));
+            throw new TajoRuntimeException(
+                new UnsupportedException("data type '" + col.getDataType().getType().name() + "'"));
         }
       }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java b/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
index 71dcfc4..2fd49ac 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
@@ -21,7 +21,6 @@ package org.apache.tajo.exception;
 import com.google.common.collect.Maps;
 import org.apache.commons.logging.Log;
 import org.apache.hadoop.util.StringUtils;
-import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.error.Errors;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
@@ -78,6 +77,7 @@ public class ExceptionUtil {
     ADD_EXCEPTION(UNAVAILABLE_TABLE_LOCATION, UnavailableTableLocationException.class);
     ADD_EXCEPTION(UNKNOWN_DATAFORMAT, UnknownDataFormatException.class);
     ADD_EXCEPTION(UNSUPPORTED_DATATYPE, UnsupportedDataTypeException.class);
+    ADD_EXCEPTION(INVALID_DATATYPE, InvalidDataTypeException.class);
     ADD_EXCEPTION(INVALID_TABLE_PROPERTY, InvalidTablePropertyException.class);
     ADD_EXCEPTION(MISSING_TABLE_PROPERTY, MissingTablePropertyException.class);
   }
@@ -139,7 +139,8 @@ public class ExceptionUtil {
       }
 
     } else {
-      throw new TajoInternalError("Unknown exception: [" + state.getReturnCode().name() +"] " + state.getMessage());
+      throw new TajoInternalError(
+          "Cannot restore the exception for [" + state.getReturnCode().name() +"] '" + state.getMessage() +"'");
     }
   }
 
@@ -188,8 +189,4 @@ public class ExceptionUtil {
   public static UnsupportedException makeNotSupported(String feature) {
     return new UnsupportedException(feature);
   }
-
-  public static InvalidDataTypeException makeInvalidDataType(DataType dataType) {
-    return new InvalidDataTypeException(dataType);
-  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/InvalidDataTypeException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidDataTypeException.java b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidDataTypeException.java
index fd2f0de..d231762 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/InvalidDataTypeException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/InvalidDataTypeException.java
@@ -20,10 +20,9 @@ package org.apache.tajo.exception;
 
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.error.Errors;
-import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
-public class InvalidDataTypeException extends TajoRuntimeException {
+public class InvalidDataTypeException extends TajoException {
 
   public InvalidDataTypeException(ReturnState state) {
     super(state);

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/NotImplementedException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/NotImplementedException.java b/tajo-common/src/main/java/org/apache/tajo/exception/NotImplementedException.java
index 822eea1..3ba6739 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/NotImplementedException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/NotImplementedException.java
@@ -21,7 +21,7 @@ package org.apache.tajo.exception;
 import org.apache.tajo.error.Errors;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
-public class NotImplementedException extends TajoRuntimeException {
+public class NotImplementedException extends TajoException {
   private static final long serialVersionUID = -5467580471721530536L;
 
   public NotImplementedException() {

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/SQLSyntaxError.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/SQLSyntaxError.java b/tajo-common/src/main/java/org/apache/tajo/exception/SQLSyntaxError.java
index 512ba36..8860321 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/SQLSyntaxError.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/SQLSyntaxError.java
@@ -22,7 +22,7 @@ package org.apache.tajo.exception;
 import org.apache.tajo.error.Errors;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
-public class SQLSyntaxError extends TajoRuntimeException {
+public class SQLSyntaxError extends TajoException {
   private static final long serialVersionUID = 5388279335175632067L;
 
   public SQLSyntaxError(ReturnState state) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/TajoRuntimeException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/TajoRuntimeException.java b/tajo-common/src/main/java/org/apache/tajo/exception/TajoRuntimeException.java
index 071efa0..300f677 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/TajoRuntimeException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/TajoRuntimeException.java
@@ -22,7 +22,7 @@ import org.apache.tajo.error.Errors.ResultCode;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
 /**
- * It is used in unexpected cases or error that we know the cause.
+ * This is an runtime exception container to enclose a TajoException, an actual cause.
  *
  * @see @{link TajoException}
  */
@@ -30,22 +30,24 @@ public class TajoRuntimeException extends RuntimeException implements DefaultTaj
   private ResultCode code;
 
   public TajoRuntimeException(ReturnState state) {
-    super(state.getMessage());
+    super(ExceptionUtil.toTajoException(state));
     this.code = state.getReturnCode();
   }
 
-  public TajoRuntimeException(ResultCode code) {
-    super(ErrorMessages.getMessage(code));
-    this.code = code;
-  }
-
   public TajoRuntimeException(ResultCode code, String ... args) {
-    super(ErrorMessages.getMessage(code, args));
+    super(
+        ExceptionUtil.toTajoException(
+            ReturnState.newBuilder()
+                .setReturnCode(code)
+                .setMessage(ErrorMessages.getMessage(code, args))
+                .build()
+        )
+    );
     this.code = code;
   }
 
   public TajoRuntimeException(TajoException e) {
-    super(e.getMessage());
+    super(e);
     this.code = e.getErrorCode();
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedDataTypeException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedDataTypeException.java b/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedDataTypeException.java
index 65ec777..b45199b 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedDataTypeException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedDataTypeException.java
@@ -30,6 +30,6 @@ public class UnsupportedDataTypeException extends TajoException {
   }
 
   public UnsupportedDataTypeException(String dataType) {
-    super(Errors.ResultCode.UNKNOWN_DATAFORMAT, dataType);
+    super(Errors.ResultCode.UNSUPPORTED_DATATYPE, dataType);
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedException.java b/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedException.java
index a7a3915..6b98d9c 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedException.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/UnsupportedException.java
@@ -21,18 +21,18 @@ package org.apache.tajo.exception;
 import org.apache.tajo.error.Errors;
 import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
 
-public class UnsupportedException extends TajoRuntimeException {
+public class UnsupportedException extends TajoException {
   private static final long serialVersionUID = 6702291354858193578L;
 
   public UnsupportedException(ReturnState state) {
     super(state);
   }
 
-  public UnsupportedException(String featureName) {
-    super(Errors.ResultCode.FEATURE_NOT_SUPPORTED, featureName);
-  }
-
   public UnsupportedException() {
     super(Errors.ResultCode.FEATURE_NOT_SUPPORTED, Thread.currentThread().getStackTrace()[1].getClassName());
   }
+
+  public UnsupportedException(String featureName) {
+    super(Errors.ResultCode.FEATURE_NOT_SUPPORTED, featureName);
+  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
index 90bb7fa..e8d0b05 100644
--- a/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
+++ b/tajo-common/src/main/java/org/apache/tajo/storage/VTuple.java
@@ -25,6 +25,7 @@ import org.apache.tajo.datum.Inet4Datum;
 import org.apache.tajo.datum.IntervalDatum;
 import org.apache.tajo.datum.ProtobufDatum;
 import org.apache.tajo.exception.NotImplementedException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.datetime.TimeMeta;
 
 import java.net.InetAddress;
@@ -185,11 +186,11 @@ public class VTuple implements Tuple, Cloneable {
   }
 
   public InetAddress getIPv6(int fieldId) {
-    throw new NotImplementedException("IPv6 is unsupported yet");
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   public byte[] getIPv6Bytes(int fieldId) {
-    throw new NotImplementedException("IPv6 is unsupported yet");
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
index edbeff6..c593859 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
@@ -56,15 +56,6 @@ public class TestTajoCliNegatives extends QueryTestCaseBase {
     out.reset();
   }
 
-  public void assertMetaCommandFailures(String cmd) throws Exception {
-    Path resultFile = getResultFile(getMethodName() + ".result");
-    String expected = FileUtil.readTextFile(new File(resultFile.toUri()));
-
-    tajoCli.executeMetaCommand(cmd);
-    String consoleResult = new String(out.toByteArray());
-    assertEquals(expected, consoleResult);
-  }
-
   public void assertMetaCommandFailure(String cmd, String expectedMsg) throws Exception {
     tajoCli.executeMetaCommand(cmd);
     String consoleResult = new String(out.toByteArray());

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
index 93a48f0..efadc7a 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
@@ -527,7 +527,6 @@ public class TestTajoClient {
 
   @Test
   public final void testFailCreateTablePartitionedOtherExceptColumn() throws IOException, TajoException {
-    TajoConf conf = cluster.getConfiguration();
     final String tableName = "testFailCreateTablePartitionedOtherExceptColumn";
 
     assertFalse(client.existTable(tableName));

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
index 8c31550..5b6fda4 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
@@ -136,9 +136,9 @@ public class TestEvalTreeUtil {
   }
 
   public static Target [] getRawTargets(String query) {
-    Expr expr = analyzer.parse(query);
     LogicalPlan plan = null;
     try {
+      Expr expr = analyzer.parse(query);
       plan = planner.createPlan(defaultContext, expr);
     } catch (TajoException e) {
       throw new RuntimeException(e);

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestInSubquery.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestInSubquery.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestInSubquery.java
index fe465f1..3d7152a 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestInSubquery.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestInSubquery.java
@@ -21,6 +21,7 @@ package org.apache.tajo.engine.query;
 import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.NamedTest;
 import org.apache.tajo.error.Errors.ResultCode;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -148,15 +149,10 @@ public class TestInSubquery extends TestJoinQuery {
     runSimpleTests();
   }
 
-  @Test()
+  @Test(expected = NotImplementedException.class)
   public final void testCorrelatedSubQuery() throws Exception {
     // Use try-catch clause to verify the exact error message
-    try {
-      executeString("select * from nation where n_regionkey in (select r_regionkey from region where n_name > r_name)");
-      fail("Correlated subquery must raise the UnimplementedException.");
-    } catch (TajoRuntimeException e) {
-      assertEquals(ResultCode.NOT_IMPLEMENTED, e.getErrorCode());
-    }
+    executeString("select * from nation where n_regionkey in (select r_regionkey from region where n_name > r_name)");
   }
 
   @Test

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
index 8c45fae..2fdafa0 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/codegen/TajoGeneratorAdapter.java
@@ -23,6 +23,7 @@ import com.google.common.collect.Maps;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
 import org.apache.tajo.exception.InvalidCastException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.org.objectweb.asm.Label;
 import org.apache.tajo.org.objectweb.asm.MethodVisitor;
@@ -620,7 +621,7 @@ class TajoGeneratorAdapter {
       invokeVirtual(Datum.class, "asChars", String.class, new Class[]{});
       break;
     default:
-      throw new UnsupportedException("Unsupported type: " + type);
+      throw new TajoRuntimeException(new UnsupportedException("data type '" + type + "'"));
     }
 
     pushNullFlag(true);

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
index 6d00dde..357c176 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
@@ -32,6 +32,7 @@ import org.apache.tajo.algebra.LiteralValue.LiteralType;
 import org.apache.tajo.algebra.Sort.SortSpec;
 import org.apache.tajo.engine.parser.SQLParser.*;
 import org.apache.tajo.exception.SQLSyntaxError;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.storage.StorageConstants;
 import org.apache.tajo.util.StringUtils;
 
@@ -46,7 +47,7 @@ import static org.apache.tajo.engine.parser.SQLParser.*;
 
 public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
 
-  public Expr parse(String sql) {
+  public Expr parse(String sql) throws SQLSyntaxError {
     ANTLRInputStream input = new ANTLRInputStream(sql);
     SQLLexer lexer = new SQLLexer(input);
     CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -113,7 +114,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
       return new SetSession(SessionVars.TIMEZONE.name(), value);
 
     } else {
-      throw new SQLSyntaxError("Unsupported session statement");
+      throw new TajoRuntimeException(new SQLSyntaxError("Unsupported session statement"));
     }
   }
 
@@ -1016,7 +1017,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
       } else if (checkIfExist(matcher.REGEXP()) || checkIfExist(matcher.RLIKE())) {
         return new PatternMatchPredicate(OpType.Regexp, not, predicand, pattern);
       } else {
-        throw new SQLSyntaxError("Unsupported predicate: " + matcher.getText());
+        throw new TajoRuntimeException(new SQLSyntaxError("Unsupported predicate: " + matcher.getText()));
       }
     } else if (checkIfExist(ctx.pattern_matcher().regex_matcher())) {
       Regex_matcherContext matcher = ctx.pattern_matcher().regex_matcher();
@@ -1029,10 +1030,10 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
       } else if (checkIfExist(matcher.Not_Similar_To_Case_Insensitive())) {
         return new PatternMatchPredicate(OpType.Regexp, true, predicand, pattern, true);
       } else {
-        throw new SQLSyntaxError("Unsupported predicate: " + matcher.getText());
+        throw new TajoRuntimeException(new SQLSyntaxError("Unsupported predicate: " + matcher.getText()));
       }
     } else {
-      throw new SQLSyntaxError("Unsupported predicate: " + ctx.pattern_matcher().getText());
+      throw new TajoRuntimeException(new SQLSyntaxError("Unsupported predicate: " + ctx.pattern_matcher().getText()));
     }
   }
 
@@ -1413,7 +1414,7 @@ public class SQLAnalyzer extends SQLParserBaseVisitor<Expr> {
     } else if (checkIfExist(ctx.column_partitions())) { // For Column Partition (Hive Style)
       return new CreateTable.ColumnPartition(getDefinitions(ctx.column_partitions().table_elements()));
     } else {
-      throw new SQLSyntaxError("Invalid Partition Type: " + ctx.toStringTree());
+      throw new TajoRuntimeException(new SQLSyntaxError("Invalid Partition Type: " + ctx.toStringTree()));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
index b10dd1b..8c6aa8c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/global/GlobalPlanner.java
@@ -474,7 +474,7 @@ public class GlobalPlanner {
       rewritten.secondStageEvals = createMinFunction(new EvalNode[]{fieldEval});
 
     } else {
-      throw new UnsupportedException("Cannot support a mix of other functions");
+      throw new UnsupportedException("a mix of other functions");
     }
 
     return rewritten;

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ComparableVector.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ComparableVector.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ComparableVector.java
index a298564..7f39850 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ComparableVector.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ComparableVector.java
@@ -32,6 +32,7 @@ import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.datum.TextDatum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.storage.VTuple;
@@ -356,9 +357,10 @@ public class ComparableVector {
       case TEXT: case CHAR: case BLOB: return 7;
       case INET4: return 8;
       case NULL_TYPE: return -1;
+      default:
+        throw new TajoRuntimeException(new UnsupportedException("data type '" + type.name() + "'"));
     }
-    // todo
-    throw new UnsupportedException(type.name());
+
   }
 
   private static TupleType[] tupleTypes(Schema schema, int[] keyIndex) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/VectorizedSorter.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/VectorizedSorter.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/VectorizedSorter.java
index d750f15..82f7153 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/VectorizedSorter.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/VectorizedSorter.java
@@ -21,6 +21,7 @@ package org.apache.tajo.engine.planner.physical;
 import org.apache.hadoop.util.IndexedSortable;
 import org.apache.hadoop.util.QuickSort;
 import org.apache.tajo.catalog.SortSpec;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 
@@ -68,7 +69,7 @@ public class VectorizedSorter extends ComparableVector implements IndexedSortabl
           int index;
           public boolean hasNext() { return index < mappings.length; }
           public Tuple next() { return tuples[mappings[index++]]; }
-          public void remove() { throw new UnsupportedException(); }
+          public void remove() { throw new TajoRuntimeException(new UnsupportedException()); }
         };
       }
     };

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
index f1f1e3e..11bbe33 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
@@ -36,12 +36,8 @@ import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.engine.parser.SQLAnalyzer;
-import org.apache.tajo.exception.SQLSyntaxError;
+import org.apache.tajo.exception.*;
 import org.apache.tajo.engine.query.QueryContext;
-import org.apache.tajo.exception.ExceptionUtil;
-import org.apache.tajo.exception.ReturnStateUtil;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.master.TajoMaster.MasterContext;
 import org.apache.tajo.master.exec.DDLExecutor;
 import org.apache.tajo.master.exec.QueryExecutor;
@@ -64,6 +60,7 @@ import org.apache.tajo.util.CommonTestingUtil;
 
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
 import static org.apache.tajo.ipc.ClientProtos.SubmitQueryResponse;
@@ -215,19 +212,27 @@ public class GlobalEngine extends AbstractService {
     return JsonHelper.fromJson(json, Expr.class);
   }
 
-  public Expr buildExpressionFromSql(String sql, Session session) throws InterruptedException, IOException,
-      IllegalQueryStatusException {
+  public Expr buildExpressionFromSql(String sql, Session session) throws TajoException {
     try {
+
       if (session.getQueryCache() == null) {
         return analyzer.parse(sql);
+
       } else {
-        return (Expr) session.getQueryCache().get(sql.trim()).clone();
+        try {
+          return (Expr) session.getQueryCache().get(sql.trim()).clone();
+        } catch (ExecutionException e) {
+          throw e.getCause();
+        }
       }
-    } catch (Exception e) {
-      if (e.getCause() instanceof SQLSyntaxError) {
-        throw (SQLSyntaxError) e.getCause();
+
+    } catch (Throwable t) {
+      if (t instanceof TajoException) {
+        throw (TajoException)t;
+      } else if (t instanceof TajoRuntimeException) {
+        throw (TajoException)t.getCause();
       } else {
-        throw new SQLSyntaxError(e.getCause().getMessage());
+        throw new TajoInternalError(t);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
index f7e2fe9..09bef44 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
@@ -359,7 +359,8 @@ public class DDLExecutor {
       TableDesc tableDesc = catalog.getTableDesc(databaseName, simpleTableName);
 
       if (tableDesc.isExternal()) {
-        throw new UnsupportedException("table truncation on an external table '" + eachTableName + "'");
+        throw new TajoRuntimeException(
+            new UnsupportedException("table truncation on an external table '" + eachTableName + "'"));
       }
 
       Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
@@ -367,7 +368,8 @@ public class DDLExecutor {
       if (space instanceof FileTablespace) {
         tableDescList.add(tableDesc);
       } else {
-        throw new UnsupportedException("table truncation on " + space.getName() + " storage");
+        throw new TajoRuntimeException(
+            new UnsupportedException("table truncation on " + space.getName() + " storage"));
       }
     }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-core/src/main/java/org/apache/tajo/session/InvalidSessionException.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/session/InvalidSessionException.java b/tajo-core/src/main/java/org/apache/tajo/session/InvalidSessionException.java
index 5aedffb..00085e5 100644
--- a/tajo-core/src/main/java/org/apache/tajo/session/InvalidSessionException.java
+++ b/tajo-core/src/main/java/org/apache/tajo/session/InvalidSessionException.java
@@ -19,9 +19,10 @@
 package org.apache.tajo.session;
 
 import org.apache.tajo.error.Errors;
+import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoRuntimeException;
 
-public class InvalidSessionException extends TajoRuntimeException {
+public class InvalidSessionException extends TajoException {
   public InvalidSessionException(String sessionId) {
     super(Errors.ResultCode.INVALID_SESSION, sessionId);
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
index 28b6b3c..bd078f6 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
@@ -95,7 +95,7 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public void clearOffset() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -105,12 +105,12 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public void setOffset(long offset) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public long getOffset() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -130,7 +130,7 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public byte [] getBytes(int fieldId) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -175,12 +175,12 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public ProtobufDatum getProtobufDatum(int fieldId) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public IntervalDatum getInterval(int fieldId) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -190,11 +190,11 @@ public class MetaDataTuple implements Tuple {
 
   @Override
   public Tuple clone() throws CloneNotSupportedException {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public Datum[] getValues(){
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BasicEvalNodeVisitor.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BasicEvalNodeVisitor.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BasicEvalNodeVisitor.java
index 84da79e..b0df318 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BasicEvalNodeVisitor.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/BasicEvalNodeVisitor.java
@@ -18,6 +18,7 @@
 
 package org.apache.tajo.plan.expr;
 
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 
 import java.util.Stack;
@@ -141,7 +142,7 @@ public class BasicEvalNodeVisitor<CONTEXT, RESULT> implements EvalNodeVisitor2<C
         break;
 
       default:
-        throw new UnsupportedException("Unknown EvalType: " + evalNode);
+        throw new TajoRuntimeException(new UnsupportedException("EvalType '" + evalNode + "'"));
     }
 
     return result;

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
index 98c36a1..f2af073 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/SubqueryEval.java
@@ -22,6 +22,7 @@ import org.apache.tajo.annotation.Nullable;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.logical.TableSubQueryNode;
 import org.apache.tajo.storage.Tuple;
@@ -54,12 +55,12 @@ public class SubqueryEval extends ValueSetEval {
 
   @Override
   public EvalNode bind(@Nullable EvalContext evalContext, Schema schema) {
-    throw new UnsupportedException("Cannot call bind()");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public Datum eval(Tuple tuple) {
-    throw new UnsupportedException("Cannot call eval()");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   public TableSubQueryNode getSubQueryNode() {
@@ -94,6 +95,6 @@ public class SubqueryEval extends ValueSetEval {
 
   @Override
   public Datum[] getValues() {
-    throw new UnsupportedException("Cannot call getValues()");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/function/AggFunctionInvoke.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/AggFunctionInvoke.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/AggFunctionInvoke.java
index 4930938..bed7dd6 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/AggFunctionInvoke.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/AggFunctionInvoke.java
@@ -22,6 +22,7 @@ import com.google.gson.annotations.Expose;
 import org.apache.tajo.catalog.FunctionDesc;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.Datum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 
@@ -41,7 +42,7 @@ public abstract class AggFunctionInvoke implements Cloneable {
     } else if (desc.getInvocation().hasPythonAggregation()) {
       return new PythonAggFunctionInvoke(desc);
     } else {
-      throw new UnsupportedException(desc.getInvocation() + " is not supported");
+      throw new TajoRuntimeException(new UnsupportedException(desc.getInvocation().toString()));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/function/FunctionInvoke.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/FunctionInvoke.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/FunctionInvoke.java
index b591b0a..8db90ec 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/FunctionInvoke.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/FunctionInvoke.java
@@ -21,6 +21,7 @@ package org.apache.tajo.plan.function;
 import com.google.gson.annotations.Expose;
 import org.apache.tajo.catalog.FunctionDesc;
 import org.apache.tajo.datum.Datum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 
@@ -47,7 +48,7 @@ public abstract class FunctionInvoke implements Cloneable {
     } else if (desc.getInvocation().hasPython()) {
       return new PythonFunctionInvoke(desc);
     } else {
-      throw new UnsupportedException(desc.getInvocation() + " is not supported");
+      throw new TajoRuntimeException(new UnsupportedException("function invocation '" + desc.getInvocation() + "'"));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
index 77f0a03..08874fd 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/CSVLineSerializer.java
@@ -23,6 +23,7 @@ import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.AnyDatum;
 import org.apache.tajo.datum.Datum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.function.FunctionContext;
 import org.apache.tajo.plan.function.PythonAggFunctionInvoke.PythonAggFunctionContext;
@@ -142,7 +143,7 @@ public class CSVLineSerializer extends TextLineSerializer {
       case INET6:
         return "A";
       default:
-        throw new UnsupportedException(val.type().name());
+        throw new TajoRuntimeException(new UnsupportedException("data type '" + val.type().name() + "'"));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
index c22a0f2..5bd157b 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/stream/TextFieldSerializerDeserializer.java
@@ -28,6 +28,7 @@ import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
 import org.apache.tajo.datum.protobuf.ProtobufJsonFormat;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.exception.ValueTooLongForTypeCharactersException;
 import org.apache.tajo.storage.StorageConstants;
@@ -148,7 +149,7 @@ public class TextFieldSerializerDeserializer implements FieldSerializerDeseriali
             nullChars);
         break;
       default:
-        throw new UnsupportedException(dataType.getType().name());
+        throw new TajoRuntimeException(new UnsupportedException("data type '" + dataType.getType().name() + "'"));
     }
     return length;
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SetSessionNode.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SetSessionNode.java b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SetSessionNode.java
index 117315f..4876845 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SetSessionNode.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/logical/SetSessionNode.java
@@ -19,7 +19,8 @@
 package org.apache.tajo.plan.logical;
 
 import com.google.gson.annotations.Expose;
-import org.apache.tajo.exception.UnsupportedException;
+import org.apache.tajo.exception.NotImplementedException;
+import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.plan.PlanString;
 
 public class SetSessionNode extends LogicalNode {
@@ -61,7 +62,7 @@ public class SetSessionNode extends LogicalNode {
 
   @Override
   public LogicalNode getChild(int idx) {
-    throw new UnsupportedException();
+    throw new TajoInternalError(new NotImplementedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
index f5b9c43..3b39a10 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/NameResolver.java
@@ -163,7 +163,7 @@ public abstract class NameResolver {
           LogicalPlan.QueryBlock parentBlock = plan.getParentBlock(current);
           for (RelationNode relationNode : parentBlock.getRelations()) {
             if (relationNode.getLogicalSchema().containsByQualifiedName(columnRef.getCanonicalName())) {
-              throw new NotImplementedException("Correlated subquery");
+              throw new TajoRuntimeException(new NotImplementedException("Correlated subquery"));
             }
           }
           current = parentBlock;

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
index 6ba525d..d90f1b0 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeDeserializer.java
@@ -31,6 +31,7 @@ import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.exception.NotImplementedException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.expr.*;
 import org.apache.tajo.plan.logical.*;
@@ -598,7 +599,8 @@ public class LogicalNodeDeserializer {
       alterTablespace.setLocation(alterTablespaceProto.getSetLocation().getLocation());
       break;
     default:
-      throw new NotImplementedException("Unknown SET type in ALTER TABLE: " + alterTablespaceProto.getSetType().name());
+      throw new TajoRuntimeException(
+          new NotImplementedException("Unknown SET type in ALTER TABLE: " + alterTablespaceProto.getSetType().name()));
     }
 
     return alterTablespace;
@@ -647,7 +649,8 @@ public class LogicalNodeDeserializer {
       alterTable.setIfExists(alterPartition.getIfExists());
       break;
     default:
-      throw new NotImplementedException("Unknown SET type in ALTER TABLE: " + alterTableProto.getSetType().name());
+      throw new TajoRuntimeException(
+          new NotImplementedException("Unknown SET type in ALTER TABLE: " + alterTableProto.getSetType().name()));
     }
 
     return alterTable;

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
index 13d6433..7e61f30 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/LogicalNodeSerializer.java
@@ -26,6 +26,7 @@ import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.exception.NotImplementedException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.logical.*;
@@ -633,7 +634,8 @@ public class LogicalNodeSerializer extends BasicLogicalPlanVisitor<LogicalNodeSe
       alterTableBuilder.setAlterPartition(partitionBuilder);
       break;
     default:
-      throw new NotImplementedException("Unknown SET type in ALTER TABLE: " + node.getAlterTableOpType().name());
+      throw new TajoRuntimeException(
+          new NotImplementedException("Unknown SET type in ALTER TABLE: " + node.getAlterTableOpType().name()));
     }
 
     PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, node);

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
index 57e8e3e..0b0968e 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/LogicalPlanVerifier.java
@@ -72,7 +72,7 @@ public class LogicalPlanVerifier extends BasicLogicalPlanVisitor<LogicalPlanVeri
       Column outputColumn = outputSchema.getColumn(i);
 
       if (outputColumn.getDataType().getType() == Type.RECORD) {
-        context.state.addVerification(new UnsupportedException("RECORD field projection"));
+        context.state.addVerification(new UnsupportedException("record field in select list"));
       }
 
       if (!outputColumn.getDataType().equals(targetSchema.getColumn(i).getDataType())) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/AbstractScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/AbstractScanner.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/AbstractScanner.java
index b57782c..c3dc959 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/AbstractScanner.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/AbstractScanner.java
@@ -22,6 +22,7 @@ import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.exception.NotImplementedException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 
@@ -34,56 +35,56 @@ public abstract class AbstractScanner implements Scanner {
 
   @Override
   public void init() throws IOException {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public void reset() throws IOException {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public void close() throws IOException {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public boolean isProjectable() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public void setTarget(Column[] targets) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public boolean isSelectable() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public void setFilter(EvalNode filter) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public boolean isSplittable() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public float getProgress() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public TableStats getInputStats() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 
   @Override
   public Schema getSchema() {
-    throw new NotImplementedException();
+    throw new TajoRuntimeException(new NotImplementedException());
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/FrameTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/FrameTuple.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/FrameTuple.java
index de39d08..ce47337 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/FrameTuple.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/FrameTuple.java
@@ -26,6 +26,7 @@ import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.IntervalDatum;
 import org.apache.tajo.datum.ProtobufDatum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.util.datetime.TimeMeta;
 
@@ -96,22 +97,22 @@ public class FrameTuple implements Tuple, Cloneable {
 
   @Override
   public void put(int fieldId, Tuple tuple) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void clear() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void put(int fieldId, Datum value) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void put(Datum[] values) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -126,17 +127,17 @@ public class FrameTuple implements Tuple, Cloneable {
 
   @Override
   public void clearOffset() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void setOffset(long offset) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
   
   @Override
   public long getOffset() {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -235,7 +236,7 @@ public class FrameTuple implements Tuple, Cloneable {
 
   @Override
   public Datum[] getValues(){
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   public String toString() {

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
index d4597fa..819e4d0 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/LazyTuple.java
@@ -24,6 +24,7 @@ import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.IntervalDatum;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.datum.ProtobufDatum;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.util.datetime.TimeMeta;
 
@@ -222,7 +223,7 @@ public class LazyTuple implements Tuple, Cloneable {
 
   @Override
   public ProtobufDatum getProtobufDatum(int fieldId) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
index 87f0310..db64992 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/MergeScanner.java
@@ -25,6 +25,7 @@ import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.ColumnStats;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.storage.fragment.Fragment;
@@ -168,7 +169,7 @@ public class MergeScanner implements Scanner {
 
   @Override
   public void setFilter(EvalNode filter) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/NullScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/NullScanner.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/NullScanner.java
index 46b1726..9c025f7 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/NullScanner.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/NullScanner.java
@@ -23,6 +23,7 @@ import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.statistics.TableStats;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.storage.fragment.Fragment;
@@ -88,7 +89,7 @@ public class NullScanner implements Scanner {
 
   @Override
   public void setFilter(EvalNode filter) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
index 42c015e..7708d52 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/RowStoreUtil.java
@@ -24,7 +24,7 @@ import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.IntervalDatum;
 import org.apache.tajo.datum.ProtobufDatum;
-import org.apache.tajo.exception.UnsupportedDataTypeException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.exception.ValueTooLongForTypeCharactersException;
 import org.apache.tajo.tuple.offheap.RowWriter;
@@ -156,11 +156,9 @@ public class RowStoreUtil {
             bb.get(_ipv4);
             tuple.put(i, DatumFactory.createInet4(_ipv4));
             break;
-          case INET6:
-            // TODO - to be implemented
-            throw new UnsupportedException(type.getType().name());
           default:
-            throw new RuntimeException(new UnsupportedDataTypeException(type.getType().name()));
+            throw new TajoRuntimeException(
+                new UnsupportedException("data type '" + type.getType().name() + "'"));
         }
       }
       return tuple;
@@ -261,7 +259,8 @@ public class RowStoreUtil {
           bb.put(tuple.getBytes(i));
           break;
         default:
-          throw new RuntimeException(new UnsupportedDataTypeException(col.getDataType().getType().name()));
+          throw new TajoRuntimeException(
+              new UnsupportedException("data type '" + col.getDataType().getType().name() + "'"));
         }
       }
 
@@ -322,7 +321,8 @@ public class RowStoreUtil {
           size += tuple.getBytes(i).length;
           break;
         default:
-          throw new RuntimeException(new UnsupportedDataTypeException(col.getDataType().getType().name()));
+          throw new TajoRuntimeException(
+              new UnsupportedException("data type '" + col.getDataType().getType().name() + "'"));
         }
       }
 
@@ -381,7 +381,8 @@ public class RowStoreUtil {
         writer.skipField();
         break;
       default:
-        throw new UnsupportedException("data type " + writer.dataTypes()[i]);
+        throw new TajoRuntimeException(
+            new UnsupportedException("unknown data type '" + writer.dataTypes()[i].getType().name() + "'"));
       }
     }
     writer.endRow();

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java
index 0094310..09d8deb 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/Tablespace.java
@@ -29,6 +29,7 @@ import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.catalog.proto.CatalogProtos.FragmentProto;
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.logical.LogicalNode;
@@ -107,7 +108,7 @@ public abstract class Tablespace {
    * @return Root URI
    */
   public URI getRootUri() {
-    throw new UnsupportedException(String.format("artibrary path '%s'", uri.toString()));
+    throw new TajoRuntimeException(new UnsupportedException(String.format("artibrary path '%s'", uri.toString())));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/HeapTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/HeapTuple.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/HeapTuple.java
index 97be316..9b69536 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/HeapTuple.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/HeapTuple.java
@@ -22,6 +22,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
 import com.google.protobuf.Message;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.storage.VTuple;
@@ -100,7 +101,7 @@ public class HeapTuple implements Tuple {
 
   @Override
   public void put(int fieldId, Tuple tuple) {
-    throw new UnsupportedException("UnSafeTuple does not support put(int, Tuple).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -110,12 +111,12 @@ public class HeapTuple implements Tuple {
 
   @Override
   public void put(int fieldId, Datum value) {
-    throw new UnsupportedException("UnSafeTuple does not support put(int, Datum).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void put(Datum[] values) {
-    throw new UnsupportedException("UnSafeTuple does not support put(Datum[]).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -153,7 +154,7 @@ public class HeapTuple implements Tuple {
     case PROTOBUF:
       return getProtobufDatum(fieldId);
     default:
-      throw new UnsupportedException("Unknown type: " + types[fieldId]);
+      throw new TajoRuntimeException(new UnsupportedException("data type '" + types[fieldId] + "'"));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/UnSafeTuple.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/UnSafeTuple.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/UnSafeTuple.java
index 167519b..3756064 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/UnSafeTuple.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/tuple/offheap/UnSafeTuple.java
@@ -23,6 +23,7 @@ import com.google.protobuf.InvalidProtocolBufferException;
 import com.google.protobuf.Message;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.storage.VTuple;
@@ -131,17 +132,17 @@ public abstract class UnSafeTuple implements Tuple {
 
   @Override
   public void put(int fieldId, Datum value) {
-    throw new UnsupportedException("UnSafeTuple does not support put(int, Datum).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void put(int fieldId, Tuple tuple) {
-    throw new UnsupportedException("UnSafeTuple does not support put(int, Tuple).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
   public void put(Datum[] values) {
-    throw new UnsupportedException("UnSafeTuple does not support put(Datum[]).");
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override
@@ -179,7 +180,7 @@ public abstract class UnSafeTuple implements Tuple {
     case PROTOBUF:
       return getProtobufDatum(fieldId);
     default:
-      throw new UnsupportedException("Unknown type: " + types[fieldId]);
+      throw new TajoRuntimeException(new UnsupportedException("data type '" + types[fieldId] + "'"));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
index beae592..7fc6d2a 100644
--- a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
+++ b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
@@ -434,7 +434,7 @@ public class HBaseScanner implements Scanner {
 
   @Override
   public void setFilter(EvalNode filter) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RawFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RawFile.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RawFile.java
index 20c5d6d..4994b0e 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RawFile.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RawFile.java
@@ -33,6 +33,7 @@ import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.datum.ProtobufDatumFactory;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.serder.PlanProto.ShuffleType;
@@ -431,7 +432,7 @@ public class RawFile {
 
     @Override
     public void setFilter(EvalNode filter) {
-      throw new UnsupportedException();
+      throw new TajoRuntimeException(new UnsupportedException());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RowFile.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RowFile.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RowFile.java
index dbe438c..45206f5 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RowFile.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/RowFile.java
@@ -34,6 +34,7 @@ import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.conf.TajoConf.ConfVars;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.serder.PlanProto.ShuffleType;
@@ -305,7 +306,7 @@ public class RowFile {
 
     @Override
     public void setFilter(EvalNode filter) {
-      throw new UnsupportedException();
+      throw new TajoRuntimeException(new UnsupportedException());
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/de1ca380/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/avro/AvroScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/avro/AvroScanner.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/avro/AvroScanner.java
index 217acba..5946e08 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/avro/AvroScanner.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/avro/AvroScanner.java
@@ -35,6 +35,7 @@ import org.apache.tajo.catalog.TableMeta;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.*;
+import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.storage.FileScanner;
@@ -279,7 +280,7 @@ public class AvroScanner extends FileScanner {
 
   @Override
   public void setFilter(EvalNode filter) {
-    throw new UnsupportedException();
+    throw new TajoRuntimeException(new UnsupportedException());
   }
 
   /**