http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java 
b/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
new file mode 100644
index 0000000..edbeff6
--- /dev/null
+++ b/tajo-core/src/test/java/org/apache/tajo/cli/tsql/TestTajoCliNegatives.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.cli.tsql;
+
+import org.apache.hadoop.fs.Path;
+import org.apache.tajo.ConfigKey;
+import org.apache.tajo.QueryTestCaseBase;
+import org.apache.tajo.SessionVars;
+import org.apache.tajo.client.QueryStatus;
+import org.apache.tajo.util.FileUtil;
+import org.junit.*;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import static org.junit.Assert.assertEquals;
+
+public class TestTajoCliNegatives extends QueryTestCaseBase {
+  private static TajoCli tajoCli;
+  private static ByteArrayOutputStream out;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    out = new ByteArrayOutputStream();
+    tajoCli = new TajoCli(testingCluster.getConfiguration(), new String[]{}, 
System.in, out);
+  }
+
+  @AfterClass
+  public static void tearDown() throws IOException {
+    out.close();
+    if (tajoCli != null) {
+      tajoCli.close();
+    }
+  }
+
+  @Before
+  public void resetConsole() throws IOException {
+    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());
+    assertEquals(expectedMsg, consoleResult);
+  }
+
+  public void assertScriptFailure(String cmd) throws Exception {
+    Path resultFile = getResultFile(getMethodName() + ".result");
+    String expected = FileUtil.readTextFile(new File(resultFile.toUri()));
+
+    tajoCli.executeScript(cmd);
+    String consoleResult = new String(out.toByteArray());
+    assertEquals(expected, consoleResult);
+  }
+
+  public void assertScriptFailure(String cmd, String expectedMsg) throws 
Exception {
+    tajoCli.executeScript(cmd);
+    String consoleResult = new String(out.toByteArray());
+    assertEquals(expectedMsg, consoleResult);
+  }
+
+  @Test
+  public void testConnectDatabase() throws Exception {
+    assertMetaCommandFailure("\\c unknown_db", "ERROR: database 'unknown_db' 
does not exist");
+  }
+
+  @Test
+  public void testDescTable() throws Exception {
+    assertMetaCommandFailure("\\d unknown_table", "ERROR: relation 
'unknown_table' does not exist\n");
+  }
+
+  @Test
+  public void testQueryVerification() throws Exception {
+    assertScriptFailure("select * from unknown_table", "ERROR: relation 
'default.unknown_table' does not exist\n");
+  }
+
+  @Test
+  public void testQuerySyntax() throws Exception {
+    assertScriptFailure("select * from unknown-table");
+  }
+
+  private static void setVar(TajoCli cli, ConfigKey key, String val) throws 
Exception {
+    cli.executeMetaCommand("\\set " + key.keyname() + " " + val);
+  }
+
+  public static class TajoCliOutputTestFormatter extends 
DefaultTajoCliOutputFormatter {
+    @Override
+    protected String getResponseTimeReadable(float responseTime) {
+      return "";
+    }
+    @Override
+    public void printProgress(PrintWriter sout, QueryStatus status) {
+      //nothing to do
+    }
+  }
+
+  @Test
+  public void testQueryNotImplementedFeature() throws Exception {
+
+    try {
+      client.updateQuery("CREATE DATABASE TestTajoCliNegatives");
+      client.updateQuery("CREATE TABLE TestTajoCliNegatives.table12u79 ( name 
RECORD(last TEXT, first TEXT) )");
+
+      assertScriptFailure("select name FROM TestTajoCliNegatives.table12u79",
+          "ERROR: not implemented feature: record field projection\n");
+
+    } finally {
+      client.updateQuery("DROP TABLE IF EXISTS 
TestTajoCliNegatives.table12u79");
+      client.updateQuery("DROP DATABASE IF EXISTS TestTajoCliNegatives");
+    }
+  }
+
+  @Test
+  public void testQueryFailure() throws Exception {
+    setVar(tajoCli, SessionVars.CLI_FORMATTER_CLASS, 
TajoCliOutputTestFormatter.class.getName());
+    assertScriptFailure("select fail(3, l_orderkey, 'testQueryFailure') from 
default.lineitem" ,
+        "ERROR: No error message\n");
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java
 
b/tajo-core/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java
new file mode 100644
index 0000000..a92af58
--- /dev/null
+++ 
b/tajo-core/src/test/java/org/apache/tajo/client/TestCatalogAdminClientExceptions.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.client;
+
+import org.apache.hadoop.fs.Path;
+import org.apache.tajo.LocalTajoTestingUtility;
+import org.apache.tajo.QueryTestCaseBase;
+import org.apache.tajo.TajoTestingCluster;
+import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.exception.*;
+import org.apache.tajo.util.CommonTestingUtil;
+import org.apache.tajo.util.KeyValueSet;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.net.URI;
+
+import static org.junit.Assert.assertFalse;
+
+public class TestCatalogAdminClientExceptions extends QueryTestCaseBase {
+  private static TajoTestingCluster cluster;
+  private static TajoClient client;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    cluster = TpchTestBase.getInstance().getTestingCluster();
+    client = cluster.newTajoClient();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    client.close();
+  }
+
+  @Test(expected = DuplicateDatabaseException.class)
+  public final void testCreateDatabase() throws TajoException {
+    client.createDatabase("default"); // duplicate database
+  }
+
+  @Test
+  public final void testExistDatabase() {
+    assertFalse(client.existDatabase("unknown-database")); // unknown database
+  }
+
+  @Test(expected = UndefinedDatabaseException.class)
+  public final void testDropDatabase() throws TajoException {
+    client.dropDatabase("unknown-database"); // unknown database
+  }
+
+  @Test(expected = UnavailableTableLocationException.class)
+  public final void testCreateExternalTableUnavailableLocation() throws 
TajoException {
+    client.createExternalTable("table128237", new Schema(), 
URI.create("/tajo/test1bcd"),
+        new TableMeta("TEXT", new KeyValueSet()));
+  }
+
+  @Test(expected = DuplicateTableException.class)
+  public final void testCreateExternalTableDuplicated() throws TajoException {
+    client.createExternalTable("default.lineitem", new Schema(), 
URI.create("/"),
+        new TableMeta("TEXT", new KeyValueSet()));
+  }
+
+  @Test(expected = InsufficientPrivilegeException.class)
+  public final void testCreateExternalTableInsufficientPrivilege() throws 
TajoException {
+    Path p = TajoConf.getWarehouseDir(conf);
+    client.createExternalTable("information_schema.table1237891", new 
Schema(), p.toUri(),
+        new TableMeta("TEXT", new KeyValueSet()));
+  }
+
+  @Test(expected = UndefinedTableException.class)
+  public final void testDropTableAbsent() throws UndefinedTableException, 
InsufficientPrivilegeException {
+    client.dropTable("unknown-table"); // unknown table
+  }
+
+  @Test(expected = InsufficientPrivilegeException.class)
+  public final void testDropTableInsufficient() throws 
UndefinedTableException, InsufficientPrivilegeException {
+    client.dropTable("information_schema.tables"); // cannot be dropped
+  }
+
+  @Test(expected = UndefinedTableException.class)
+  public final void testGetTableDesc() throws UndefinedTableException {
+    client.getTableDesc("unknown-table");
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/client/TestQueryClientExceptions.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/client/TestQueryClientExceptions.java 
b/tajo-core/src/test/java/org/apache/tajo/client/TestQueryClientExceptions.java
new file mode 100644
index 0000000..6b11846
--- /dev/null
+++ 
b/tajo-core/src/test/java/org/apache/tajo/client/TestQueryClientExceptions.java
@@ -0,0 +1,126 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.tajo.client;
+
+import com.facebook.presto.hive.shaded.com.google.common.collect.Maps;
+import net.jcip.annotations.NotThreadSafe;
+import org.apache.tajo.LocalTajoTestingUtility;
+import org.apache.tajo.QueryId;
+import org.apache.tajo.TajoTestingCluster;
+import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.error.Errors;
+import org.apache.tajo.exception.*;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+@NotThreadSafe
+public class TestQueryClientExceptions {
+  private static TajoTestingCluster cluster;
+  private static TajoClient client;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    cluster = TpchTestBase.getInstance().getTestingCluster();
+    client = cluster.newTajoClient();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    client.close();
+  }
+
+  @Test
+  public void testExecuteQuery() {
+    // This is just an error propagation unit test. Specified SQL errors will 
be addressed in other unit tests.
+    ReturnState state = client.executeQuery("select * from 
unknown_table").getState();
+    assertEquals(Errors.ResultCode.UNDEFINED_TABLE, state.getReturnCode());
+
+    state = client.executeQuery("create table default.lineitem (name 
int);").getState();
+    assertEquals(Errors.ResultCode.DUPLICATE_TABLE, state.getReturnCode());
+  }
+
+  @Test(expected = DuplicateTableException.class)
+  public void testUpdateQuery() throws TajoException {
+    client.updateQuery("create table default.lineitem (name int);");
+  }
+
+  @Test(expected = UndefinedTableException.class)
+  public void testExecuteQueryAndGetResult() throws TajoException {
+    // This is just an error propagation unit test. Specified SQL errors will 
be addressed in other unit tests.
+    client.executeQueryAndGetResult("select * from unknown_table");
+  }
+
+  @Test
+  public void testCloseQuery() {
+    // absent query id
+    client.closeQuery(LocalTajoTestingUtility.newQueryId());
+    client.closeNonForwardQuery(LocalTajoTestingUtility.newQueryId());
+  }
+
+  @Test(expected = UndefinedDatabaseException .class)
+  public void testSelectDatabase() throws UndefinedDatabaseException {
+    // absent database name
+    client.selectDatabase("unknown_db");
+  }
+
+  @Test(expected = NoSuchSessionVariableException.class)
+  public void testGetSessionVar() throws NoSuchSessionVariableException {
+    // absent session variable
+    client.getSessionVariable("unknown-var");
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testGetQueryResult() throws TajoException {
+    // absent query id
+    client.getQueryResult(LocalTajoTestingUtility.newQueryId());
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testGetResultResponse() throws TajoException {
+    // absent query id
+    client.getResultResponse(LocalTajoTestingUtility.newQueryId());
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testFetchNextQueryResult() throws TajoException {
+    client.fetchNextQueryResult(LocalTajoTestingUtility.newQueryId(), 100);
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testKillQuery() throws QueryNotFoundException {
+    client.killQuery(LocalTajoTestingUtility.newQueryId());
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testGetQueryInfo() throws QueryNotFoundException {
+    client.getQueryInfo(LocalTajoTestingUtility.newQueryId());
+  }
+
+  @Test(expected = QueryNotFoundException.class)
+  public void testGetQueryHistory() throws QueryNotFoundException {
+    client.getQueryHistory(LocalTajoTestingUtility.newQueryId());
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java 
b/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
index 0ba0d76..13e9de9 100644
--- a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
+++ b/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClient.java
@@ -96,7 +96,7 @@ public class TestTajoClient {
 
       // test existence
       assertFalse(client.existDatabase(prefix + i));
-      assertTrue(client.createDatabase(prefix + i));
+      client.createDatabase(prefix + i);
       assertTrue(client.existDatabase(prefix + i));
 
       // test allDatabaseNames
@@ -108,7 +108,7 @@ public class TestTajoClient {
     for (int i = 0; i < 10; i++) {
       assertTrue(client.existDatabase(prefix + i));
       assertTrue(client.getAllDatabaseNames().contains(prefix + i));
-      assertTrue(client.dropDatabase(prefix + i));
+      client.dropDatabase(prefix + i);
       assertFalse(client.existDatabase(prefix + i));
       assertFalse(client.getAllDatabaseNames().contains(prefix + i));
     }
@@ -122,13 +122,13 @@ public class TestTajoClient {
     assertEquals(TajoConstants.DEFAULT_DATABASE_NAME, 
client.getCurrentDatabase());
 
     String databaseName = 
CatalogUtil.normalizeIdentifier("testcurrentdatabase");
-    assertTrue(client.createDatabase(databaseName));
+    client.createDatabase(databaseName);
     assertEquals(currentNum + 1, client.getAllDatabaseNames().size());
     assertEquals(TajoConstants.DEFAULT_DATABASE_NAME, 
client.getCurrentDatabase());
-    assertTrue(client.selectDatabase(databaseName));
+    client.selectDatabase(databaseName);
     assertEquals(databaseName, client.getCurrentDatabase());
-    assertTrue(client.selectDatabase(TajoConstants.DEFAULT_DATABASE_NAME));
-    assertTrue(client.dropDatabase(databaseName));
+    client.selectDatabase(TajoConstants.DEFAULT_DATABASE_NAME);
+    client.dropDatabase(databaseName);
 
     assertEquals(currentNum, client.getAllDatabaseNames().size());
   }
@@ -139,7 +139,7 @@ public class TestTajoClient {
     assertFalse(client.existDatabase("invaliddatabase"));
 
     try {
-      assertTrue(client.selectDatabase("invaliddatabase"));
+      client.selectDatabase("invaliddatabase");
       assertFalse(true);
     } catch (Throwable t) {
       assertFalse(false);
@@ -152,8 +152,8 @@ public class TestTajoClient {
   public final void testDropCurrentDatabase() throws IOException, 
TajoException, InterruptedException {
     int currentNum = client.getAllDatabaseNames().size();
     String databaseName = 
CatalogUtil.normalizeIdentifier("testdropcurrentdatabase");
-    assertTrue(client.createDatabase(databaseName));
-    assertTrue(client.selectDatabase(databaseName));
+    client.createDatabase(databaseName);
+    client.selectDatabase(databaseName);
     assertEquals(databaseName, client.getCurrentDatabase());
 
     try {
@@ -163,8 +163,8 @@ public class TestTajoClient {
       assertFalse(false);
     }
 
-    assertTrue(client.selectDatabase(TajoConstants.DEFAULT_DATABASE_NAME));
-    assertTrue(client.dropDatabase(databaseName));
+    client.selectDatabase(TajoConstants.DEFAULT_DATABASE_NAME);
+    client.dropDatabase(databaseName);
     assertEquals(currentNum, client.getAllDatabaseNames().size());
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClientFailures.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClientFailures.java 
b/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClientFailures.java
deleted file mode 100644
index b745caa..0000000
--- a/tajo-core/src/test/java/org/apache/tajo/client/TestTajoClientFailures.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.tajo.client;
-
-import net.jcip.annotations.NotThreadSafe;
-import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.TpchTestBase;
-import org.apache.tajo.catalog.exception.DuplicateDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
-import org.apache.tajo.error.Errors;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.sql.SQLException;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-@NotThreadSafe
-public class TestTajoClientFailures {
-  private static TajoTestingCluster cluster;
-  private static TajoClient client;
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    cluster = TpchTestBase.getInstance().getTestingCluster();
-    client = cluster.newTajoClient();
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-    client.close();
-  }
-
-  @Test(expected = DuplicateDatabaseException.class)
-  public final void testCreateDatabase() throws TajoException {
-    assertFalse(client.createDatabase("default")); // duplicate database
-  }
-
-  @Test(expected = UndefinedDatabaseException.class)
-  public final void testDropDatabase() throws TajoException {
-    assertFalse(client.dropDatabase("unknown-database")); // unknown database
-  }
-
-  @Test(expected = UndefinedTableException.class)
-  public final void testDropTable() throws UndefinedTableException {
-    assertFalse(client.dropTable("unknown-table")); // unknown table
-  }
-
-  @Test
-  public void testExecuteSQL() throws SQLException {
-    // This is just an error propagation unit test. Specified SQL errors will 
be addressed in other unit tests.
-    ReturnState state = client.executeQuery("select * from 
unknown_table").getState();
-    assertEquals(Errors.ResultCode.UNDEFINED_TABLE, state.getReturnCode());
-
-    state = client.executeQuery("create table default.lineitem (name 
int);").getState();
-    assertEquals(Errors.ResultCode.DUPLICATE_TABLE, state.getReturnCode());
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/client/v2/TestTajoClientV2.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/client/v2/TestTajoClientV2.java 
b/tajo-core/src/test/java/org/apache/tajo/client/v2/TestTajoClientV2.java
index 99b7c15..e1fca63 100644
--- a/tajo-core/src/test/java/org/apache/tajo/client/v2/TestTajoClientV2.java
+++ b/tajo-core/src/test/java/org/apache/tajo/client/v2/TestTajoClientV2.java
@@ -20,10 +20,7 @@ package org.apache.tajo.client.v2;
 
 import com.facebook.presto.hive.shaded.com.google.common.collect.Lists;
 import org.apache.tajo.QueryTestCaseBase;
-import org.apache.tajo.catalog.exception.DuplicateDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
-import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.*;
 import org.apache.tajo.service.ServiceTracker;
 import org.apache.tajo.service.ServiceTrackerFactory;
 import org.junit.AfterClass;
@@ -196,8 +193,8 @@ public class TestTajoClientV2 extends QueryTestCaseBase {
     resultContainer.get(0).close();
   }
 
-  @Test(timeout = 10 * 1000)
-  public void testQueryFutureKill() throws TajoException, ExecutionException, 
InterruptedException, SQLException {
+  @Test(expected = QueryKilledException.class, timeout = 10 * 1000)
+  public void testQueryFutureKill() throws Throwable {
     QueryFuture future = clientv2.executeQueryAsync("select sleep(1) from 
lineitem where l_orderkey > 4");
 
     assertTrue(future.isOk());
@@ -216,6 +213,14 @@ public class TestTajoClientV2 extends QueryTestCaseBase {
     assertFalse(future.isSuccessful());
     assertFalse(future.isFailed());
     assertTrue(future.isKilled());
+
+    try {
+      future.get();
+    } catch (ExecutionException e) {
+      throw e.getCause();
+    } finally {
+      future.release();
+    }
   }
 
 
@@ -233,4 +238,37 @@ public class TestTajoClientV2 extends QueryTestCaseBase {
   public void testErrorOnExecuteQueryAsync() throws TajoException {
     clientv2.executeQueryAsync("select * from unknown_table");
   }
+
+  @Test(expected = SQLSyntaxError.class)
+  public void testSyntaxErrorOnUpdateQuery() throws TajoException {
+    clientv2.executeUpdate("drap table unknown-table");
+  }
+
+  @Test(expected = SQLSyntaxError.class)
+  public void testSyntaxErrorOnExecuteQuery() throws TajoException {
+    clientv2.executeQuery("select fail(3, ");
+  }
+
+  @Test(expected = SQLSyntaxError.class)
+  public void testSyntaxErrorOnExecuteQueryAsync() throws TajoException {
+    clientv2.executeQueryAsync("select fail(3, ");
+  }
+
+  @Test(expected = QueryFailedException.class)
+  public void testFailedExecuteQuery() throws TajoException {
+    clientv2.executeQuery("select fail(3, l_orderkey, 'testQueryFailure') from 
default.lineitem");
+  }
+
+  @Test(expected = QueryFailedException.class)
+  public void testFailedExecuteQueryAsync() throws Throwable {
+    QueryFuture future = clientv2.executeQueryAsync(
+            "select fail(3, l_orderkey, 'testQueryFailure') from 
default.lineitem");
+    try {
+      future.get();
+    } catch (ExecutionException e) {
+      throw e.getCause();
+    } finally {
+      future.release();
+    }
+  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
index c08ea87..8c31550 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestEvalTreeUtil.java
@@ -33,7 +33,6 @@ import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.engine.function.FunctionLoader;
 import org.apache.tajo.engine.parser.SQLAnalyzer;
 import org.apache.tajo.engine.query.QueryContext;
-import org.apache.tajo.exception.InternalException;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.LogicalPlanner;
@@ -212,7 +211,7 @@ public class TestEvalTreeUtil {
   };
   
   @Test
-  public final void testGetSchemaFromTargets() throws InternalException {
+  public final void testGetSchemaFromTargets() {
     Target [] targets = getRawTargets(QUERIES[0]);
     Schema schema = EvalTreeUtil.getSchemaByTargets(null, targets);
     Column col1 = schema.getColumn(0);

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
index 684f0f2..fe51aa4 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/eval/TestSQLExpression.java
@@ -21,7 +21,7 @@ package org.apache.tajo.engine.eval;
 import org.apache.tajo.SessionVars;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.DatumFactory;
 import org.apache.tajo.datum.TimestampDatum;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
 
b/tajo-core/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
index 7e63bc1..c214f66 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/function/TestConditionalExpressions.java
@@ -20,7 +20,7 @@ package org.apache.tajo.engine.function;
 
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.engine.eval.ExprTestBase;
 import org.apache.tajo.exception.TajoException;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
 
b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
index 0d4e6a4..69b36c5 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestPhysicalPlanner.java
@@ -41,7 +41,7 @@ import org.apache.tajo.engine.planner.enforce.Enforcer;
 import org.apache.tajo.engine.planner.global.DataChannel;
 import org.apache.tajo.engine.planner.global.MasterPlan;
 import org.apache.tajo.engine.query.QueryContext;
-import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.*;
 import org.apache.tajo.plan.LogicalOptimizer;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.LogicalPlanner;
@@ -173,7 +173,8 @@ public class TestPhysicalPlanner {
     createLargeScoreTable();
   }
 
-  public static void createLargeScoreTable() throws IOException {
+  public static void createLargeScoreTable() throws IOException, TajoException 
{
+
     // Preparing a large table
     Path scoreLargePath = new Path(testDir, "score_large");
     CommonTestingUtil.cleanupTestDir(scoreLargePath.toString());

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/query/TestAlterTablespace.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestAlterTablespace.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestAlterTablespace.java
index b0ec92d..8509b07 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestAlterTablespace.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestAlterTablespace.java
@@ -37,7 +37,7 @@ public class TestAlterTablespace extends QueryTestCaseBase {
       
//////////////////////////////////////////////////////////////////////////////
 
       assertFalse(catalog.existTablespace("space1"));
-      assertTrue(catalog.createTablespace("space1", 
"hdfs://xxx.com/warehouse"));
+      catalog.createTablespace("space1", "hdfs://xxx.com/warehouse");
       assertTrue(catalog.existTablespace("space1"));
 
       // pre verification
@@ -52,7 +52,7 @@ public class TestAlterTablespace extends QueryTestCaseBase {
       assertEquals("space1", space1.getSpaceName());
       assertEquals("hdfs://yyy.com/warehouse", space1.getUri());
 
-      assertTrue(catalog.dropTablespace("space1"));
+      catalog.dropTablespace("space1");
       assertFalse(catalog.existTablespace("space1"));
     }
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
index 7adb237..3a17c7b 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
@@ -35,6 +35,9 @@ import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.common.TajoDataTypes.Type;
 import org.apache.tajo.conf.TajoConf;
 import org.apache.tajo.datum.TextDatum;
+import org.apache.tajo.error.Errors;
+import org.apache.tajo.error.Errors.ResultCode;
+import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.expr.*;
 import org.apache.tajo.plan.logical.ScanNode;
 import org.apache.tajo.storage.StorageConstants;
@@ -98,10 +101,9 @@ public class TestHBaseTable extends QueryTestCaseBase {
   public void testVerifyCreateHBaseTableRequiredMeta() throws Exception {
     try {
       executeString("CREATE TABLE hbase_mapped_table1 (col1 text, col2 text) 
TABLESPACE cluster1 USING hbase").close();
-
       fail("hbase table must have 'table' meta");
-    } catch (Exception e) {
-      assertTrue(e.getMessage().indexOf("HBase mapped table") >= 0);
+    } catch (TajoException e) {
+      assertEquals(e.getErrorCode(), ResultCode.MISSING_TABLE_PROPERTY);
     }
 
     try {
@@ -110,8 +112,8 @@ public class TestHBaseTable extends QueryTestCaseBase {
           "WITH ('table'='hbase_table')").close();
 
       fail("hbase table must have 'columns' meta");
-    } catch (Exception e) {
-      assertTrue(e.getMessage().indexOf("'columns' property is required") >= 
0);
+    } catch (TajoException e) {
+      assertEquals(e.getErrorCode(), ResultCode.MISSING_TABLE_PROPERTY);
     }
   }
 
@@ -152,7 +154,7 @@ public class TestHBaseTable extends QueryTestCaseBase {
     try {
       executeString(sql).close();
       fail("External table should be a existed table.");
-    } catch (Exception e) {
+    } catch (Throwable e) {
       assertTrue(e.getMessage().indexOf("External table should be a existed 
table.") >= 0);
     }
   }
@@ -1126,8 +1128,8 @@ public class TestHBaseTable extends QueryTestCaseBase {
       executeString("insert into hbase_mapped_table " +
           "select id, name from base_table ").close();
       fail("If inserting data type different with target table data type, 
should throw exception");
-    } catch (Exception e) {
-      assertTrue(e.getMessage().indexOf("is different column type with") >= 0);
+    } catch (TajoException e) {
+      assertEquals(ResultCode.DATATYPE_MISMATCH, e.getErrorCode());
     } finally {
       executeString("DROP TABLE base_table PURGE").close();
       executeString("DROP TABLE hbase_mapped_table PURGE").close();

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
index 4fb2d31..2fddbfa 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
@@ -18,7 +18,6 @@
 
 package org.apache.tajo.engine.query;
 
-import com.google.protobuf.ServiceException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.fs.FileStatus;
@@ -31,7 +30,6 @@ import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.TableDesc;
 import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.conf.TajoConf.ConfVars;
 import org.apache.tajo.datum.Datum;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/java/org/apache/tajo/engine/query/TestTruncateTable.java
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestTruncateTable.java 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestTruncateTable.java
index 1be21e4..3ae0c60 100644
--- 
a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestTruncateTable.java
+++ 
b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestTruncateTable.java
@@ -18,23 +18,20 @@
 
 package org.apache.tajo.engine.query;
 
-import org.apache.tajo.IntegrationTest;
 import org.apache.tajo.QueryTestCaseBase;
-import org.apache.tajo.TajoConstants;
+import org.apache.tajo.exception.TajoException;
 import org.junit.Test;
-import org.junit.experimental.categories.Category;
 
 import java.sql.ResultSet;
+import java.sql.SQLException;
 import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.fail;
 
-@Category(IntegrationTest.class)
+
 public class TestTruncateTable extends QueryTestCaseBase {
-  public TestTruncateTable() {
-    super(TajoConstants.DEFAULT_DATABASE_NAME);
-  }
+
   @Test
   public final void testTruncateTable() throws Exception {
     try {
@@ -66,7 +63,7 @@ public class TestTruncateTable extends QueryTestCaseBase {
   }
 
   @Test
-  public final void testTruncateExternalTable() throws Exception {
+  public final void testTruncateExternalTable() throws TajoException, 
SQLException {
     try {
       List<String> createdNames = executeDDL("table2_ddl.sql", 
"truncate_table2", "truncate_table2");
       assertTableExists(createdNames.get(0));
@@ -80,7 +77,6 @@ public class TestTruncateTable extends QueryTestCaseBase {
       res.close();
 
       executeString("truncate table truncate_table2");
-
       fail("Can't truncate external table");
     } catch (Exception e) {
       // succeeded

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/resources/queries/TestTruncateTable/table1_ddl.sql
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/queries/TestTruncateTable/table1_ddl.sql 
b/tajo-core/src/test/resources/queries/TestTruncateTable/table1_ddl.sql
index dc67e75..b6196ec 100644
--- a/tajo-core/src/test/resources/queries/TestTruncateTable/table1_ddl.sql
+++ b/tajo-core/src/test/resources/queries/TestTruncateTable/table1_ddl.sql
@@ -1 +1 @@
-CREATE TABLE truncate_table1 AS SELECT * FROM lineitem;
\ No newline at end of file
+CREATE TABLE truncate_table1 AS SELECT * FROM default.lineitem;
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddDropPartition.result
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddDropPartition.result
 
b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddDropPartition.result
index b09f134..fdb620d 100644
--- 
a/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddDropPartition.result
+++ 
b/tajo-core/src/test/resources/results/TestTajoCli/testAlterTableAddDropPartition.result
@@ -1,5 +1,5 @@
 OK
-ERROR: 'key2' column is not the partition key
+ERROR: 'key2' column is not a partition key
 OK
 OK
 ERROR: partition 'key=0.1' does not exist

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQueryFailure.result
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQueryFailure.result
 
b/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQueryFailure.result
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQuerySyntax.result
----------------------------------------------------------------------
diff --git 
a/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQuerySyntax.result
 
b/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQuerySyntax.result
new file mode 100644
index 0000000..86b0b59
--- /dev/null
+++ 
b/tajo-core/src/test/resources/results/TestTajoCliNegatives/testQuerySyntax.result
@@ -0,0 +1,3 @@
+ERROR: mismatched input '-' expecting {<EOF>, EXCEPT, GROUP, HAVING, 
INTERSECT, LIMIT, ORDER, UNION, WHERE, WINDOW, ';', ','}
+LINE 1:21 select * from unknown-table
+                               ^

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
index bc6acbe..a44b526 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprAnnotator.java
@@ -27,12 +27,12 @@ import org.apache.tajo.catalog.CatalogService;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.datum.*;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.exception.UnimplementedException;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.algebra.BaseAlgebraVisitor;
 import org.apache.tajo.plan.expr.*;
@@ -53,6 +53,7 @@ import static 
org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType;
 import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType;
 import static org.apache.tajo.common.TajoDataTypes.DataType;
 import static org.apache.tajo.common.TajoDataTypes.Type;
+import static 
org.apache.tajo.function.FunctionUtil.buildSimpleFunctionSignature;
 import static org.apache.tajo.plan.logical.WindowSpec.*;
 import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeSyntaxError;
 
@@ -386,7 +387,7 @@ public class ExprAnnotator extends 
BaseAlgebraVisitor<ExprAnnotator.Context, Eva
 
   @Override
   public EvalNode visitExistsPredicate(Context ctx, Stack<Expr> stack, 
ExistsPredicate expr) throws TajoException {
-    throw new UnimplementedException("EXISTS clause");
+    throw new NotImplementedException("EXISTS clause");
   }
 
   
///////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -573,7 +574,7 @@ public class ExprAnnotator extends 
BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     stack.pop(); // <--- Pop
 
     if (!catalog.containFunction(expr.getSignature(), paramTypes)) {
-      throw new UndefinedFunctionException(expr.getSignature(), paramTypes);
+      throw new 
UndefinedFunctionException(buildSimpleFunctionSignature(expr.getSignature(), 
paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(expr.getSignature(), 
paramTypes);
@@ -623,7 +624,7 @@ public class ExprAnnotator extends 
BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     FunctionDesc countRows = catalog.getFunction("count", 
FunctionType.AGGREGATION,
         new DataType[] {});
     if (countRows == null) {
-      throw new UndefinedFunctionException(expr.getSignature(), new 
DataType[]{});
+      throw new 
UndefinedFunctionException(buildSimpleFunctionSignature(expr.getSignature(), 
new DataType[]{}));
     }
 
     ctx.currentBlock.setAggregationRequire();
@@ -648,7 +649,7 @@ public class ExprAnnotator extends 
BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     }
 
     if (!catalog.containFunction(setFunction.getSignature(), functionType, 
paramTypes)) {
-      throw new UndefinedFunctionException(setFunction.getSignature(), 
paramTypes);
+      throw new 
UndefinedFunctionException(buildSimpleFunctionSignature(setFunction.getSignature(),
 paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(setFunction.getSignature(), 
functionType, paramTypes);
@@ -737,7 +738,7 @@ public class ExprAnnotator extends 
BaseAlgebraVisitor<ExprAnnotator.Context, Eva
     }
 
     if (!catalog.containFunction(windowFunc.getSignature(), functionType, 
paramTypes)) {
-      throw new UndefinedFunctionException(funcName, paramTypes);
+      throw new 
UndefinedFunctionException(buildSimpleFunctionSignature(funcName, paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(funcName, functionType, 
paramTypes);

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/ExprNormalizer.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprNormalizer.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprNormalizer.java
index c89f10a..ff7eabd 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/ExprNormalizer.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/ExprNormalizer.java
@@ -21,7 +21,7 @@ package org.apache.tajo.plan;
 import com.google.common.collect.Sets;
 import org.apache.tajo.algebra.*;
 import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedColumnException;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.nameresolver.NameResolver;
 import org.apache.tajo.plan.nameresolver.NameResolvingMode;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanPreprocessor.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanPreprocessor.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanPreprocessor.java
index f3743ee..76907f2 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanPreprocessor.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanPreprocessor.java
@@ -21,7 +21,7 @@ package org.apache.tajo.plan;
 import org.apache.tajo.SessionVars;
 import org.apache.tajo.algebra.*;
 import org.apache.tajo.catalog.*;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedColumnException;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.LogicalPlan.QueryBlock;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
index b1d3e2e..9b114f1 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
@@ -35,8 +35,8 @@ import org.apache.tajo.SessionVars;
 import org.apache.tajo.algebra.*;
 import org.apache.tajo.algebra.WindowSpec;
 import org.apache.tajo.catalog.*;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
+import org.apache.tajo.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.catalog.partition.PartitionMethodDesc;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.catalog.proto.CatalogProtos.IndexMethod;
@@ -46,7 +46,7 @@ import org.apache.tajo.datum.NullDatum;
 import org.apache.tajo.exception.ExceptionUtil;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.exception.UnimplementedException;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.plan.LogicalPlan.QueryBlock;
 import org.apache.tajo.plan.algebra.BaseAlgebraVisitor;
 import org.apache.tajo.plan.expr.*;
@@ -553,7 +553,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
       throws TajoException {
     for (Target t : projectable.getTargets()) {
       if (t.getEvalTree().getValueType().getType() == 
TajoDataTypes.Type.RECORD) {
-        throw new UnimplementedException("record field projection");
+        throw new NotImplementedException("record field projection");
       }
     }
   }
@@ -2003,7 +2003,7 @@ public class LogicalPlanner extends 
BaseAlgebraVisitor<LogicalPlanner.PlanContex
       partitionMethodDesc = new 
PartitionMethodDesc(context.queryContext.get(SessionVars.CURRENT_DATABASE), 
tableName,
           CatalogProtos.PartitionType.COLUMN, partitionExpression, 
convertColumnsToSchema(partition.getColumns()));
     } else {
-      throw new UnimplementedException("partition type '" + 
expr.getPartitionType() + "'");
+      throw new NotImplementedException("partition type '" + 
expr.getPartitionType() + "'");
     }
     return partitionMethodDesc;
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
index a526efc..dfa8079 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/TypeDeterminant.java
@@ -25,11 +25,12 @@ import org.apache.tajo.catalog.CatalogService;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.FunctionDesc;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.common.TajoDataTypes;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
+import org.apache.tajo.function.FunctionUtil;
 import org.apache.tajo.plan.visitor.SimpleAlgebraVisitor;
 
 import java.util.Stack;
@@ -37,6 +38,7 @@ import java.util.Stack;
 import static org.apache.tajo.common.TajoDataTypes.DataType;
 import static org.apache.tajo.common.TajoDataTypes.Type.BOOLEAN;
 import static org.apache.tajo.common.TajoDataTypes.Type.NULL_TYPE;
+import static 
org.apache.tajo.function.FunctionUtil.buildSimpleFunctionSignature;
 
 public class TypeDeterminant extends 
SimpleAlgebraVisitor<LogicalPlanner.PlanContext, DataType> {
   private DataType BOOL_TYPE = CatalogUtil.newSimpleDataType(BOOLEAN);
@@ -171,7 +173,7 @@ public class TypeDeterminant extends 
SimpleAlgebraVisitor<LogicalPlanner.PlanCon
     stack.pop(); // <--- Pop
 
     if (!catalog.containFunction(expr.getSignature(), paramTypes)) {
-      throw new UndefinedFunctionException(expr.getSignature(), paramTypes);
+      throw new 
UndefinedFunctionException(FunctionUtil.buildSimpleFunctionSignature(expr.getSignature(),
 paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(expr.getSignature(), 
paramTypes);
@@ -207,7 +209,7 @@ public class TypeDeterminant extends 
SimpleAlgebraVisitor<LogicalPlanner.PlanCon
     stack.pop(); // <-- pop
 
     if (!catalog.containFunction(setFunction.getSignature(), functionType, 
paramTypes)) {
-      throw new UndefinedFunctionException(setFunction.getSignature(), 
paramTypes);
+      throw new 
UndefinedFunctionException(buildSimpleFunctionSignature(setFunction.getSignature(),
 paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(setFunction.getSignature(), 
functionType, paramTypes);
@@ -257,7 +259,7 @@ public class TypeDeterminant extends 
SimpleAlgebraVisitor<LogicalPlanner.PlanCon
     }
 
     if (!catalog.containFunction(windowFunc.getSignature(), functionType, 
paramTypes)) {
-      throw new UndefinedFunctionException(funcName, paramTypes);
+      throw new 
UndefinedFunctionException(FunctionUtil.buildSimpleFunctionSignature(funcName, 
paramTypes));
     }
 
     FunctionDesc funcDesc = catalog.getFunction(funcName, functionType, 
paramTypes);

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
index 1c29a6d..3ff0065 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/AggregationFunctionCallEval.java
@@ -23,7 +23,6 @@ import org.apache.tajo.catalog.FunctionDesc;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
-import org.apache.tajo.exception.InternalException;
 import org.apache.tajo.plan.function.AggFunctionInvoke;
 import org.apache.tajo.plan.function.FunctionContext;
 import org.apache.tajo.plan.function.FunctionInvokeContext;
@@ -45,11 +44,7 @@ public class AggregationFunctionCallEval extends 
FunctionEval implements Cloneab
   protected AggregationFunctionCallEval(EvalType type, FunctionDesc desc, 
EvalNode[] givenArgs) {
     super(type, desc, givenArgs);
     this.invokeContext = new FunctionInvokeContext(null, getParamType());
-    try {
-      this.functionInvoke = AggFunctionInvoke.newInstance(funcDesc);
-    } catch (InternalException e) {
-      throw new RuntimeException(e);
-    }
+    this.functionInvoke = AggFunctionInvoke.newInstance(funcDesc);
   }
 
   public AggregationFunctionCallEval(FunctionDesc desc, EvalNode[] givenArgs) {

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
index 7ff695b..51534e1 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/expr/EvalTreeUtil.java
@@ -29,10 +29,10 @@ import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.Datum;
-import org.apache.tajo.exception.InternalException;
-import org.apache.tajo.plan.util.ExprFinder;
+import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.Target;
+import org.apache.tajo.plan.util.ExprFinder;
 import org.apache.tajo.util.TUtil;
 
 import java.util.*;
@@ -144,8 +144,7 @@ public class EvalTreeUtil {
     return finder.getColumnRefs();
   }
   
-  public static Schema getSchemaByTargets(Schema inputSchema, Target[] targets)
-      throws InternalException {
+  public static Schema getSchemaByTargets(Schema inputSchema, Target[] 
targets) {
     Schema schema = new Schema();
     for (Target target : targets) {
       schema.addColumn(
@@ -167,8 +166,7 @@ public class EvalTreeUtil {
     return sb.toString();
   }
   
-  public static DataType getDomainByExpr(Schema inputSchema, EvalNode expr)
-      throws InternalException {
+  public static DataType getDomainByExpr(Schema inputSchema, EvalNode expr) {
     switch (expr.getType()) {
     case AND:      
     case OR:
@@ -192,8 +190,7 @@ public class EvalTreeUtil {
 
       
     default:
-      throw new InternalException("Unknown expr type: " 
-          + expr.getType().toString());
+      throw new TajoInternalError("Unknown expr type: " + 
expr.getType().toString());
     }
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 2c2afbe..4930938 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,7 +22,6 @@ 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.InternalException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 
@@ -35,7 +34,7 @@ public abstract class AggFunctionInvoke implements Cloneable {
     this.functionDesc = functionDesc;
   }
 
-  public static AggFunctionInvoke newInstance(FunctionDesc desc) throws 
InternalException {
+  public static AggFunctionInvoke newInstance(FunctionDesc desc) {
     // TODO: The below line is due to the bug in the function type. The type 
of class-based functions is not set properly.
     if (desc.getInvocation().hasLegacy()) {
       return new ClassBasedAggFunctionInvoke(desc);

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedAggFunctionInvoke.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedAggFunctionInvoke.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedAggFunctionInvoke.java
index 6657871..7caaef0 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedAggFunctionInvoke.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedAggFunctionInvoke.java
@@ -22,7 +22,6 @@ 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.InternalException;
 import org.apache.tajo.storage.Tuple;
 
 import java.io.IOException;
@@ -33,7 +32,7 @@ import java.io.IOException;
 public class ClassBasedAggFunctionInvoke extends AggFunctionInvoke implements 
Cloneable {
   @Expose private AggFunction function;
 
-  public ClassBasedAggFunctionInvoke(FunctionDesc functionDesc) throws 
InternalException {
+  public ClassBasedAggFunctionInvoke(FunctionDesc functionDesc) {
     super(functionDesc);
     function = (AggFunction) functionDesc.newInstance();
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedScalarFunctionInvoke.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedScalarFunctionInvoke.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedScalarFunctionInvoke.java
index c3f4ad9..fcdb261 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedScalarFunctionInvoke.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/function/ClassBasedScalarFunctionInvoke.java
@@ -21,7 +21,6 @@ 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.InternalException;
 import org.apache.tajo.storage.Tuple;
 import org.apache.tajo.util.TUtil;
 
@@ -35,13 +34,13 @@ public class ClassBasedScalarFunctionInvoke extends 
FunctionInvoke implements Cl
 
   }
 
-  public ClassBasedScalarFunctionInvoke(FunctionDesc funcDesc) throws 
InternalException {
+  public ClassBasedScalarFunctionInvoke(FunctionDesc funcDesc) {
     super(funcDesc);
     function = (GeneralFunction) funcDesc.newInstance();
   }
 
   @Override
-  public void setFunctionDesc(FunctionDesc desc) throws InternalException {
+  public void setFunctionDesc(FunctionDesc desc) {
     super.setFunctionDesc(desc);
     function = (GeneralFunction) functionDesc.newInstance();
   }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 b8b5cfe..b591b0a 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,7 +21,6 @@ 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.InternalException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.storage.Tuple;
 
@@ -42,7 +41,7 @@ public abstract class FunctionInvoke implements Cloneable {
     this.functionDesc = functionDesc;
   }
 
-  public static FunctionInvoke newInstance(FunctionDesc desc) throws 
InternalException {
+  public static FunctionInvoke newInstance(FunctionDesc desc) {
     if (desc.getInvocation().hasLegacy()) {
       return new ClassBasedScalarFunctionInvoke(desc);
     } else if (desc.getInvocation().hasPython()) {
@@ -52,7 +51,7 @@ public abstract class FunctionInvoke implements Cloneable {
     }
   }
 
-  public void setFunctionDesc(FunctionDesc functionDesc) throws 
InternalException {
+  public void setFunctionDesc(FunctionDesc functionDesc) {
     this.functionDesc = functionDesc;
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 c346ce9..3eb51ba 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
@@ -26,9 +26,9 @@ import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.NestedPathUtil;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.exception.AmbiguousTableException;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
+import org.apache.tajo.exception.AmbiguousTableException;
+import org.apache.tajo.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.exception.AmbiguousColumnException;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.LogicalPlan;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java
index 3bbb2be..8991b60 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByLegacy.java
@@ -22,11 +22,10 @@ import org.apache.tajo.algebra.ColumnReferenceExpr;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedColumnException;
 import org.apache.tajo.exception.AmbiguousColumnException;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
 import org.apache.tajo.plan.logical.LogicalNode;
 import org.apache.tajo.plan.logical.NodeType;
 import org.apache.tajo.plan.logical.RelationNode;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java
index aee131b..82fbc21 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRels.java
@@ -20,12 +20,11 @@ package org.apache.tajo.plan.nameresolver;
 
 import org.apache.tajo.algebra.ColumnReferenceExpr;
 import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.exception.AmbiguousTableException;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
+import org.apache.tajo.exception.AmbiguousTableException;
+import org.apache.tajo.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.exception.AmbiguousColumnException;
 import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
 
 public class ResolverByRels extends NameResolver {
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java
index 560ae50..4bfdaf6 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverByRelsAndSubExprs.java
@@ -20,12 +20,11 @@ package org.apache.tajo.plan.nameresolver;
 
 import org.apache.tajo.algebra.ColumnReferenceExpr;
 import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.exception.AmbiguousTableException;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
+import org.apache.tajo.exception.AmbiguousTableException;
+import org.apache.tajo.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.exception.AmbiguousColumnException;
 import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
 
 public class ResolverByRelsAndSubExprs extends NameResolver {
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java
index 39458ec..ea291f4 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/nameresolver/ResolverBySubExprsAndRels.java
@@ -20,12 +20,11 @@ package org.apache.tajo.plan.nameresolver;
 
 import org.apache.tajo.algebra.ColumnReferenceExpr;
 import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.exception.AmbiguousTableException;
-import org.apache.tajo.catalog.exception.UndefinedColumnException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
+import org.apache.tajo.exception.AmbiguousTableException;
+import org.apache.tajo.exception.UndefinedColumnException;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.exception.AmbiguousColumnException;
 import org.apache.tajo.plan.LogicalPlan;
-import org.apache.tajo.plan.PlanningException;
 
 public class ResolverBySubExprsAndRels extends NameResolver {
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
index 18e001e..a7cf85e 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/ProjectionPushDownRule.java
@@ -26,7 +26,7 @@ import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.SchemaUtil;
 import org.apache.tajo.catalog.SortSpec;
-import org.apache.tajo.catalog.exception.DuplicateColumnException;
+import org.apache.tajo.exception.DuplicateColumnException;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.plan.LogicalPlan;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
index 73a07d5..3a1d257 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/serder/EvalNodeDeserializer.java
@@ -27,21 +27,21 @@ import 
org.apache.tajo.algebra.WindowSpec.WindowFrameStartBoundType;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.FunctionDesc;
 import org.apache.tajo.catalog.SortSpec;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
+import org.apache.tajo.exception.UndefinedFunctionException;
 import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.catalog.proto.CatalogProtos.FunctionSignatureProto;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.datum.*;
-import org.apache.tajo.exception.InternalException;
 import org.apache.tajo.exception.TajoInternalError;
 import org.apache.tajo.plan.expr.*;
 import org.apache.tajo.plan.function.python.PythonScriptEngine;
 import org.apache.tajo.plan.logical.WindowSpec;
 import org.apache.tajo.plan.serder.PlanProto.WinFunctionEvalSpec;
 
-import java.io.IOException;
 import java.util.*;
 
+import static 
org.apache.tajo.function.FunctionUtil.buildSimpleFunctionSignature;
+
 /**
  * It deserializes a serialized eval tree consisting of a number of EvalNodes.
  *
@@ -238,7 +238,9 @@ public class EvalNodeDeserializer {
             parameterTypes = 
funcSignatureProto.getParameterTypesList().toArray(
                 new DataType[funcSignatureProto.getParameterTypesCount()]);
           }
-          throw new TajoInternalError(new 
UndefinedFunctionException(functionName, parameterTypes));
+          throw new TajoInternalError(
+              new 
UndefinedFunctionException(buildSimpleFunctionSignature(functionName, 
parameterTypes))
+          );
         }
       } else {
         throw new TajoInternalError("Unknown EvalType: " + type.name());

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 d298cc8..dad9893 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
@@ -30,7 +30,7 @@ import org.apache.tajo.catalog.SortSpec;
 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.UnimplementedException;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.expr.*;
 import org.apache.tajo.plan.logical.*;
@@ -596,7 +596,7 @@ public class LogicalNodeDeserializer {
       
alterTablespace.setLocation(alterTablespaceProto.getSetLocation().getLocation());
       break;
     default:
-      throw new UnimplementedException("Unknown SET type in ALTER TABLE: " + 
alterTablespaceProto.getSetType().name());
+      throw new NotImplementedException("Unknown SET type in ALTER TABLE: " + 
alterTablespaceProto.getSetType().name());
     }
 
     return alterTablespace;
@@ -645,7 +645,7 @@ public class LogicalNodeDeserializer {
       alterTable.setIfExists(alterPartition.getIfExists());
       break;
     default:
-      throw new UnimplementedException("Unknown SET type in ALTER TABLE: " + 
alterTableProto.getSetType().name());
+      throw new NotImplementedException("Unknown SET type in ALTER TABLE: " + 
alterTableProto.getSetType().name());
     }
 
     return alterTable;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 fe69fc1..ae74e30 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
@@ -23,10 +23,9 @@ import org.apache.hadoop.fs.Path;
 import org.apache.tajo.algebra.JoinType;
 import org.apache.tajo.catalog.SortSpec;
 import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.catalog.proto.CatalogProtos.SortSpecProto;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.exception.UnimplementedException;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.Target;
 import org.apache.tajo.plan.logical.*;
@@ -567,7 +566,7 @@ public class LogicalNodeSerializer extends 
BasicLogicalPlanVisitor<LogicalNodeSe
       break;
 
     default:
-      throw new UnimplementedException("Unknown SET type in ALTER TABLESPACE: 
" + node.getSetType().name());
+      throw new NotImplementedException("Unknown SET type in ALTER TABLESPACE: 
" + node.getSetType().name());
     }
 
     PlanProto.LogicalNode.Builder nodeBuilder = createNodeBuilder(context, 
node);
@@ -632,7 +631,7 @@ public class LogicalNodeSerializer extends 
BasicLogicalPlanVisitor<LogicalNodeSe
       alterTableBuilder.setAlterPartition(partitionBuilder);
       break;
     default:
-      throw new UnimplementedException("Unknown SET type in ALTER TABLE: " + 
node.getAlterTableOpType().name());
+      throw 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/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
index 445dc8a..e4bf8bc 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
@@ -27,6 +27,7 @@ import org.apache.tajo.catalog.*;
 import org.apache.tajo.common.TajoDataTypes.DataType;
 import org.apache.tajo.exception.TajoException;
 import org.apache.tajo.exception.TajoInternalError;
+import org.apache.tajo.exception.UndefinedTableException;
 import org.apache.tajo.plan.InvalidQueryException;
 import org.apache.tajo.plan.LogicalPlan;
 import org.apache.tajo.plan.Target;
@@ -923,7 +924,7 @@ public class PlannerUtil {
     }
   }
 
-  public static TableDesc getTableDesc(CatalogService catalog, LogicalNode 
node) throws IOException {
+  public static TableDesc getTableDesc(CatalogService catalog, LogicalNode 
node) throws UndefinedTableException {
     if (node.getType() == NodeType.ROOT) {
       node = ((LogicalRootNode)node).getChild();
     }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
index cfdb005..0ff6aba 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/PreLogicalPlanVerifier.java
@@ -26,14 +26,7 @@ import org.apache.tajo.algebra.*;
 import org.apache.tajo.catalog.CatalogService;
 import org.apache.tajo.catalog.CatalogUtil;
 import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.exception.CatalogExceptionUtil;
-import org.apache.tajo.catalog.exception.DuplicateDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
-import org.apache.tajo.catalog.exception.UndefinedTableException;
-import org.apache.tajo.exception.ExceptionUtil;
-import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.plan.PlanningException;
+import org.apache.tajo.exception.*;
 import org.apache.tajo.plan.algebra.BaseAlgebraVisitor;
 import org.apache.tajo.plan.util.ExprFinder;
 import org.apache.tajo.util.TUtil;
@@ -43,7 +36,6 @@ import java.util.Collection;
 import java.util.Set;
 import java.util.Stack;
 
-import static 
org.apache.tajo.catalog.exception.CatalogExceptionUtil.makeUndefinedTable;
 import static org.apache.tajo.plan.verifier.SyntaxErrorUtil.makeSyntaxError;
 
 public class PreLogicalPlanVerifier extends 
BaseAlgebraVisitor<PreLogicalPlanVerifier.Context, Expr> {
@@ -162,7 +154,7 @@ public class PreLogicalPlanVerifier extends 
BaseAlgebraVisitor<PreLogicalPlanVer
     }
 
     if (!catalog.existsTable(qualifiedName)) {
-      context.state.addVerification(makeUndefinedTable(qualifiedName));
+      context.state.addVerification(new 
UndefinedTableException(qualifiedName));
       return false;
     }
     return true;
@@ -180,7 +172,7 @@ public class PreLogicalPlanVerifier extends 
BaseAlgebraVisitor<PreLogicalPlanVer
       System.out.println("A");
     }
     if (catalog.existsTable(qualifiedName)) {
-      
context.state.addVerification(CatalogExceptionUtil.makeDuplicateTable(qualifiedName));
+      context.state.addVerification(new 
DuplicateTableException(qualifiedName));
       return false;
     }
     return true;

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java
----------------------------------------------------------------------
diff --git 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java
index fd16d11..8a6aea1 100644
--- 
a/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java
+++ 
b/tajo-plan/src/main/java/org/apache/tajo/plan/verifier/VerificationState.java
@@ -23,7 +23,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tajo.exception.TajoError;
 import org.apache.tajo.exception.TajoException;
-import org.apache.tajo.exception.TajoExceptionInterface;
 import org.apache.tajo.exception.TajoRuntimeException;
 import org.apache.tajo.util.TUtil;
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 07fe353..b57782c 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
@@ -21,7 +21,7 @@ package org.apache.tajo.storage;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.statistics.TableStats;
-import org.apache.tajo.exception.UnimplementedException;
+import org.apache.tajo.exception.NotImplementedException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.plan.expr.EvalNode;
 
@@ -34,22 +34,22 @@ public abstract class AbstractScanner implements Scanner {
 
   @Override
   public void init() throws IOException {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public void reset() throws IOException {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public void close() throws IOException {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public boolean isProjectable() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
@@ -59,7 +59,7 @@ public abstract class AbstractScanner implements Scanner {
 
   @Override
   public boolean isSelectable() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
@@ -69,21 +69,21 @@ public abstract class AbstractScanner implements Scanner {
 
   @Override
   public boolean isSplittable() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public float getProgress() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public TableStats getInputStats() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 
   @Override
   public Schema getSchema() {
-    throw new UnimplementedException();
+    throw new NotImplementedException();
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/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 bfe4e55..42c015e 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.UnknownDataTypeException;
+import org.apache.tajo.exception.UnsupportedDataTypeException;
 import org.apache.tajo.exception.UnsupportedException;
 import org.apache.tajo.exception.ValueTooLongForTypeCharactersException;
 import org.apache.tajo.tuple.offheap.RowWriter;
@@ -160,7 +160,7 @@ public class RowStoreUtil {
             // TODO - to be implemented
             throw new UnsupportedException(type.getType().name());
           default:
-            throw new RuntimeException(new 
UnknownDataTypeException(type.getType().name()));
+            throw new RuntimeException(new 
UnsupportedDataTypeException(type.getType().name()));
         }
       }
       return tuple;
@@ -261,7 +261,7 @@ public class RowStoreUtil {
           bb.put(tuple.getBytes(i));
           break;
         default:
-          throw new RuntimeException(new 
UnknownDataTypeException(col.getDataType().getType().name()));
+          throw new RuntimeException(new 
UnsupportedDataTypeException(col.getDataType().getType().name()));
         }
       }
 
@@ -322,7 +322,7 @@ public class RowStoreUtil {
           size += tuple.getBytes(i).length;
           break;
         default:
-          throw new RuntimeException(new 
UnknownDataTypeException(col.getDataType().getType().name()));
+          throw new RuntimeException(new 
UnsupportedDataTypeException(col.getDataType().getType().name()));
         }
       }
 

Reply via email to