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/20 15:36:37 UTC

[1/3] tajo git commit: TAJO-1792: tajo-cluster-tests is not available when it is used as an external maven module.

Repository: tajo
Updated Branches:
  refs/heads/master 2d2f192d7 -> e296a0d1f


http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
----------------------------------------------------------------------
diff --git a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
index 74c0e5a..02dff19 100644
--- a/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
+++ b/tajo-plan/src/main/java/org/apache/tajo/plan/function/python/PythonScriptEngine.java
@@ -75,28 +75,35 @@ public class PythonScriptEngine extends TajoScriptEngine {
     } finally {
       in.close();
     }
+
     for(FunctionInfo funcInfo : functions) {
-      FunctionSignature signature;
-      FunctionInvocation invocation = new FunctionInvocation();
-      FunctionSupplement supplement = new FunctionSupplement();
-      if (funcInfo instanceof ScalarFuncInfo) {
-        ScalarFuncInfo scalarFuncInfo = (ScalarFuncInfo) funcInfo;
-        TajoDataTypes.DataType returnType = getReturnTypes(scalarFuncInfo)[0];
-        signature = new FunctionSignature(CatalogProtos.FunctionType.UDF, scalarFuncInfo.funcName,
-            returnType, createParamTypes(scalarFuncInfo.paramNum));
-        PythonInvocationDesc invocationDesc = new PythonInvocationDesc(scalarFuncInfo.funcName, path.getPath(), true);
-        invocation.setPython(invocationDesc);
-        functionDescs.add(new FunctionDesc(signature, invocation, supplement));
-      } else {
-        AggFuncInfo aggFuncInfo = (AggFuncInfo) funcInfo;
-        if (isValidUdaf(aggFuncInfo)) {
-          TajoDataTypes.DataType returnType = getReturnTypes(aggFuncInfo.getFinalResultInfo)[0];
-          signature = new FunctionSignature(CatalogProtos.FunctionType.UDA, aggFuncInfo.funcName,
-              returnType, createParamTypes(aggFuncInfo.evalInfo.paramNum));
-          PythonInvocationDesc invocationDesc = new PythonInvocationDesc(aggFuncInfo.className, path.getPath(), false);
-          invocation.setPythonAggregation(invocationDesc);
+      try {
+        FunctionSignature signature;
+        FunctionInvocation invocation = new FunctionInvocation();
+        FunctionSupplement supplement = new FunctionSupplement();
+        if (funcInfo instanceof ScalarFuncInfo) {
+          ScalarFuncInfo scalarFuncInfo = (ScalarFuncInfo) funcInfo;
+          TajoDataTypes.DataType returnType = getReturnTypes(scalarFuncInfo)[0];
+          signature = new FunctionSignature(CatalogProtos.FunctionType.UDF, scalarFuncInfo.funcName,
+              returnType, createParamTypes(scalarFuncInfo.paramNum));
+          PythonInvocationDesc invocationDesc = new PythonInvocationDesc(scalarFuncInfo.funcName, path.getPath(), true);
+          invocation.setPython(invocationDesc);
           functionDescs.add(new FunctionDesc(signature, invocation, supplement));
+        } else {
+          AggFuncInfo aggFuncInfo = (AggFuncInfo) funcInfo;
+          if (isValidUdaf(aggFuncInfo)) {
+            TajoDataTypes.DataType returnType = getReturnTypes(aggFuncInfo.getFinalResultInfo)[0];
+            signature = new FunctionSignature(CatalogProtos.FunctionType.UDA, aggFuncInfo.funcName,
+                returnType, createParamTypes(aggFuncInfo.evalInfo.paramNum));
+            PythonInvocationDesc invocationDesc = new PythonInvocationDesc(aggFuncInfo.className, path.getPath(), false);
+
+            invocation.setPythonAggregation(invocationDesc);
+            functionDescs.add(new FunctionDesc(signature, invocation, supplement));
+          }
         }
+      } catch (Throwable t) {
+        // ignore invalid functions
+        LOG.warn(t);
       }
     }
     return functionDescs;
@@ -168,59 +175,65 @@ public class PythonScriptEngine extends TajoScriptEngine {
     String line = br.readLine();
     String[] quotedSchemaStrings = null;
     AggFuncInfo aggFuncInfo = null;
+
     while (line != null) {
-      if (pSchema.matcher(line).matches()) {
-        int start = line.indexOf("(") + 1; //drop brackets
-        int end = line.lastIndexOf(")");
-        quotedSchemaStrings = line.substring(start,end).trim().split(",");
-      } else if (pDef.matcher(line).matches()) {
-        boolean isUdaf = aggFuncInfo != null && line.indexOf("def ") > 0;
-        int nameStart = line.indexOf("def ") + "def ".length();
-        int nameEnd = line.indexOf('(');
-        int signatureEnd = line.indexOf(')');
-        String[] params = line.substring(nameEnd+1, signatureEnd).split(",");
-        int paramNum;
-        if (params.length == 1) {
-          paramNum = params[0].equals("") ? 0 : 1;
-        } else {
-          paramNum = params.length;
-        }
-        if (params[0].trim().equals("self")) {
-          paramNum--;
-        }
+      try {
+        if (pSchema.matcher(line).matches()) {
+          int start = line.indexOf("(") + 1; //drop brackets
+          int end = line.lastIndexOf(")");
+          quotedSchemaStrings = line.substring(start, end).trim().split(",");
+        } else if (pDef.matcher(line).matches()) {
+          boolean isUdaf = aggFuncInfo != null && line.indexOf("def ") > 0;
+          int nameStart = line.indexOf("def ") + "def ".length();
+          int nameEnd = line.indexOf('(');
+          int signatureEnd = line.indexOf(')');
+          String[] params = line.substring(nameEnd + 1, signatureEnd).split(",");
+          int paramNum;
+          if (params.length == 1) {
+            paramNum = params[0].equals("") ? 0 : 1;
+          } else {
+            paramNum = params.length;
+          }
+          if (params[0].trim().equals("self")) {
+            paramNum--;
+          }
 
-        String functionName = line.substring(nameStart, nameEnd).trim();
-        quotedSchemaStrings = quotedSchemaStrings == null ? new String[] {"'blob'"} : quotedSchemaStrings;
-
-        if (isUdaf) {
-          if (functionName.equals("eval")) {
-            aggFuncInfo.evalInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
-          } else if (functionName.equals("merge")) {
-            aggFuncInfo.mergeInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
-          } else if (functionName.equals("get_partial_result")) {
-            aggFuncInfo.getPartialResultInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
-          } else if (functionName.equals("get_final_result")) {
-            aggFuncInfo.getFinalResultInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
+          String functionName = line.substring(nameStart, nameEnd).trim();
+          quotedSchemaStrings = quotedSchemaStrings == null ? new String[]{"'blob'"} : quotedSchemaStrings;
+
+          if (isUdaf) {
+            if (functionName.equals("eval")) {
+              aggFuncInfo.evalInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
+            } else if (functionName.equals("merge")) {
+              aggFuncInfo.mergeInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
+            } else if (functionName.equals("get_partial_result")) {
+              aggFuncInfo.getPartialResultInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
+            } else if (functionName.equals("get_final_result")) {
+              aggFuncInfo.getFinalResultInfo = new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum);
+            }
+          } else {
+            aggFuncInfo = null;
+            functions.add(new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum));
           }
-        } else {
-          aggFuncInfo = null;
-          functions.add(new ScalarFuncInfo(quotedSchemaStrings, functionName, paramNum));
-        }
 
-        quotedSchemaStrings = null;
-      } else if (pClass.matcher(line).matches()) {
-        // UDAF
-        if (aggFuncInfo != null) {
-          functions.add(aggFuncInfo);
-        }
-        aggFuncInfo = new AggFuncInfo();
-        int classNameStart = line.indexOf("class ") + "class ".length();
-        int classNameEnd = line.indexOf("(");
-        if (classNameEnd < 0) {
-          classNameEnd = line.indexOf(":");
+          quotedSchemaStrings = null;
+        } else if (pClass.matcher(line).matches()) {
+          // UDAF
+          if (aggFuncInfo != null) {
+            functions.add(aggFuncInfo);
+          }
+          aggFuncInfo = new AggFuncInfo();
+          int classNameStart = line.indexOf("class ") + "class ".length();
+          int classNameEnd = line.indexOf("(");
+          if (classNameEnd < 0) {
+            classNameEnd = line.indexOf(":");
+          }
+          aggFuncInfo.className = line.substring(classNameStart, classNameEnd).trim();
+          aggFuncInfo.funcName = aggFuncInfo.className.toLowerCase();
         }
-        aggFuncInfo.className = line.substring(classNameStart, classNameEnd).trim();
-        aggFuncInfo.funcName = aggFuncInfo.className.toLowerCase();
+      } catch (Throwable t) {
+        // ignore unexpected function and source lines
+        LOG.warn(t);
       }
       line = br.readLine();
     }


[3/3] tajo git commit: TAJO-1792: tajo-cluster-tests is not available when it is used as an external maven module.

Posted by hy...@apache.org.
TAJO-1792: tajo-cluster-tests is not available when it is used as an external maven module.

Closes #704


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

Branch: refs/heads/master
Commit: e296a0d1f0696a52e95d8b34e016d7a272c9a1a6
Parents: 2d2f192
Author: Hyunsik Choi <hy...@apache.org>
Authored: Thu Aug 20 22:34:35 2015 +0900
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Thu Aug 20 22:34:35 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |   3 +
 .../org/apache/tajo/jdbc/MetaDataTuple.java     | 200 ++++++
 .../apache/tajo/jdbc/TajoMetaDataResultSet.java |  74 +++
 tajo-cluster-tests/pom.xml                      |   7 +-
 .../java/org/apache/tajo/QueryTestCaseBase.java |  21 +-
 .../test/java/org/apache/tajo/TpchTestBase.java |  23 +-
 .../src/test/resources/tpch/customer.tbl        |   5 +
 .../src/test/resources/tpch/empty_orders.tbl    |   0
 .../src/test/resources/tpch/lineitem.tbl        |   5 +
 .../src/test/resources/tpch/nation.tbl          |  25 +
 .../src/test/resources/tpch/orders.tbl          |   3 +
 .../src/test/resources/tpch/part.tbl            |   4 +
 .../src/test/resources/tpch/partsupp.tbl        |   3 +
 .../src/test/resources/tpch/region.tbl          |   5 +
 .../src/test/resources/tpch/supplier.tbl        |   3 +
 .../java/org/apache/tajo/util/FileUtil.java     |  18 +-
 tajo-core-tests/pom.xml                         |   4 +
 .../apache/tajo/engine/query/TestJoinQuery.java |   1 -
 .../org/apache/tajo/jdbc/TestResultSet.java     | 224 -------
 .../java/org/apache/tajo/jdbc/TestSQLState.java |  91 ---
 .../tajo/jdbc/TestTajoDatabaseMetaData.java     | 504 ---------------
 .../java/org/apache/tajo/jdbc/TestTajoJdbc.java | 607 -------------------
 .../apache/tajo/querymaster/TestKillQuery.java  |   6 +-
 .../dataset/TestTajoJdbc/table1/table1.tbl      |   5 -
 .../TestTajoJdbc/create_table_with_date_ddl.sql |  10 -
 .../TestTajoDatabaseMetaData/getSchemas1.result |   3 -
 .../TestTajoDatabaseMetaData/getSchemas2.result |   3 -
 .../getTableTypes.result                        |   3 -
 .../TestTajoDatabaseMetaData/getTables1.result  |   4 -
 .../TestTajoDatabaseMetaData/getTables2.result  |   4 -
 .../TestTajoJdbc/testSortWithDateTime.result    |   7 -
 .../src/test/resources/tpch/customer.tbl        |   5 -
 .../src/test/resources/tpch/empty_orders.tbl    |   0
 .../src/test/resources/tpch/lineitem.tbl        |   5 -
 .../src/test/resources/tpch/nation.tbl          |  25 -
 .../src/test/resources/tpch/orders.tbl          |   3 -
 .../src/test/resources/tpch/part.tbl            |   4 -
 .../src/test/resources/tpch/partsupp.tbl        |   3 -
 .../src/test/resources/tpch/region.tbl          |   5 -
 .../src/test/resources/tpch/supplier.tbl        |   3 -
 tajo-core/pom.xml                               |  12 +-
 .../java/org/apache/tajo/benchmark/TPCH.java    |   8 -
 .../tajo/engine/function/FunctionLoader.java    |  11 +-
 tajo-jdbc/pom.xml                               |  78 +++
 .../org/apache/tajo/jdbc/MetaDataTuple.java     | 200 ------
 .../apache/tajo/jdbc/TajoDatabaseMetaData.java  |   1 -
 .../apache/tajo/jdbc/TajoMetaDataResultSet.java |  74 ---
 .../org/apache/tajo/jdbc/TestResultSet.java     | 224 +++++++
 .../java/org/apache/tajo/jdbc/TestSQLState.java |  91 +++
 .../tajo/jdbc/TestTajoDatabaseMetaData.java     | 504 +++++++++++++++
 .../java/org/apache/tajo/jdbc/TestTajoJdbc.java | 607 +++++++++++++++++++
 .../dataset/TestTajoJdbc/table1/table1.tbl      |   5 +
 .../TestTajoJdbc/create_table_with_date_ddl.sql |  10 +
 .../TestTajoDatabaseMetaData/getSchemas1.result |   3 +
 .../TestTajoDatabaseMetaData/getSchemas2.result |   3 +
 .../getTableTypes.result                        |   3 +
 .../TestTajoDatabaseMetaData/getTables1.result  |   4 +
 .../TestTajoDatabaseMetaData/getTables2.result  |   4 +
 .../TestTajoJdbc/testSortWithDateTime.result    |   7 +
 .../function/python/PythonScriptEngine.java     | 147 +++--
 60 files changed, 2012 insertions(+), 1912 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 1c2a9e7..d7baf63 100644
--- a/CHANGES
+++ b/CHANGES
@@ -34,6 +34,9 @@ Release 0.11.0 - unreleased
 
   IMPROVEMENT
 
+    TAJO-1792: tajo-cluster-tests is not available when it is used as an 
+    external maven module. (hyunsik)
+
     TAJO-1775: TAJO-1775: HCatalogStore need to be deprecated. (jaehwa)
 
     TAJO-1745: Add positive and negative test methods. (hyunsik)

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
new file mode 100644
index 0000000..bd078f6
--- /dev/null
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
@@ -0,0 +1,200 @@
+/**
+ * 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.jdbc;
+
+import org.apache.tajo.common.TajoDataTypes;
+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.storage.Tuple;
+import org.apache.tajo.util.datetime.TimeMeta;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MetaDataTuple implements Tuple {
+  List<Datum> values = new ArrayList<Datum>();
+
+  public MetaDataTuple(int size) {
+    values = new ArrayList<Datum>(size);
+    for(int i = 0; i < size; i++) {
+      values.add(NullDatum.get());
+    }
+  }
+
+  @Override
+  public int size() {
+    return values.size();
+  }
+
+  @Override
+  public boolean contains(int fieldid) {
+    return false;
+  }
+
+  @Override
+  public boolean isBlank(int fieldid) {
+    return values.get(fieldid) == null;
+  }
+
+  @Override
+  public boolean isBlankOrNull(int fieldid) {
+    return values.get(fieldid) == null || values.get(fieldid).isNull();
+  }
+
+  @Override
+  public void put(int fieldId, Tuple tuple) {
+    this.put(fieldId, tuple.asDatum(fieldId));
+  }
+
+  @Override
+  public void clear() {
+    values.clear();
+  }
+
+  @Override
+  public void put(int fieldId, Datum value) {
+    values.set(fieldId, value);
+  }
+
+  @Override
+  public void put(Datum[] values) {
+    for (int i = 0; i < values.length; i++) {
+      this.values.set(i, values[i]);
+    }
+  }
+
+  @Override
+  public TajoDataTypes.Type type(int fieldId) {
+    return values.get(fieldId).type();
+  }
+
+  @Override
+  public int size(int fieldId) {
+    return values.get(fieldId).size();
+  }
+
+  @Override
+  public void clearOffset() {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public Datum asDatum(int fieldId) {
+    return values.get(fieldId);
+  }
+
+  @Override
+  public void setOffset(long offset) {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public long getOffset() {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public boolean getBool(int fieldId) {
+    return values.get(fieldId).asBool();
+  }
+
+  @Override
+  public byte getByte(int fieldId) {
+    return values.get(fieldId).asByte();
+  }
+
+  @Override
+  public char getChar(int fieldId) {
+    return values.get(fieldId).asChar();
+  }
+
+  @Override
+  public byte [] getBytes(int fieldId) {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public byte[] getTextBytes(int fieldId) {
+    return values.get(fieldId).asTextBytes();
+  }
+
+  @Override
+  public short getInt2(int fieldId) {
+    return values.get(fieldId).asInt2();
+  }
+
+  @Override
+  public int getInt4(int fieldId) {
+    return values.get(fieldId).asInt4();
+  }
+
+  @Override
+  public long getInt8(int fieldId) {
+    return values.get(fieldId).asInt8();
+  }
+
+  @Override
+  public float getFloat4(int fieldId) {
+    return values.get(fieldId).asFloat4();
+  }
+
+  @Override
+  public double getFloat8(int fieldId) {
+    return values.get(fieldId).asFloat8();
+  }
+
+  @Override
+  public String getText(int fieldId) {
+    return values.get(fieldId).asChars();
+  }
+
+  @Override
+  public TimeMeta getTimeDate(int fieldId) {
+    return values.get(fieldId).asTimeMeta();
+  }
+
+  @Override
+  public ProtobufDatum getProtobufDatum(int fieldId) {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public IntervalDatum getInterval(int fieldId) {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public char[] getUnicodeChars(int fieldId) {
+    return values.get(fieldId).asUnicodeChars();
+  }
+
+  @Override
+  public Tuple clone() throws CloneNotSupportedException {
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+
+  @Override
+  public Datum[] getValues(){
+    throw new TajoRuntimeException(new UnsupportedException());
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
new file mode 100644
index 0000000..9fba40a
--- /dev/null
+++ b/tajo-client/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
@@ -0,0 +1,74 @@
+/**
+ * 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.jdbc;
+
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.common.TajoDataTypes.Type;
+import org.apache.tajo.storage.Tuple;
+
+import java.io.IOException;
+import java.sql.SQLException;
+import java.util.List;
+
+public class TajoMetaDataResultSet extends TajoResultSetBase {
+  private List<MetaDataTuple> values;
+
+  public TajoMetaDataResultSet(Schema schema, List<MetaDataTuple> values) {
+    super(null, schema, null);
+    setDataTuples(values);
+  }
+
+  public TajoMetaDataResultSet(List<String> columns, List<Type> types, List<MetaDataTuple> values) {
+    super(null, new Schema(), null);
+    int index = 0;
+    if(columns != null) {
+      for(String columnName: columns) {
+        schema.addColumn(columnName, types.get(index++));
+      }
+    }
+    setDataTuples(values);
+  }
+
+  protected void setDataTuples(List<MetaDataTuple> values) {
+    this.values = values;
+    this.totalRow = values == null ? 0 : values.size();
+  }
+
+  @Override
+  protected Tuple nextTuple() throws IOException {
+    if(curRow >= totalRow) {
+      return null;
+    }
+    return values.get(curRow);
+  }
+
+  @Override
+  public void close() throws SQLException {
+  }
+
+  @Override
+  public String getString(int fieldId) throws SQLException {
+    return cur.getText(fieldId - 1);
+  }
+
+  @Override
+  public String getString(String name) throws SQLException {
+    return cur.getText(findColumn(name));
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/pom.xml b/tajo-cluster-tests/pom.xml
index 6fbd5d8..2816048 100644
--- a/tajo-cluster-tests/pom.xml
+++ b/tajo-cluster-tests/pom.xml
@@ -57,12 +57,7 @@
           <excludes>
             <exclude>derby.log</exclude>
             <exclude>benchmark/**</exclude>
-            <exclude>src/test/tpch/**</exclude>
-            <exclude>src/test/resources/dataset/**</exclude>
-            <exclude>src/test/resources/queries/**</exclude>
-            <exclude>src/test/resources/results/**</exclude>
-            <exclude>src/main/resources/META-INF/services/*</exclude>
-            <exclude>src/main/resources/webapps/static/js/*</exclude>
+            <exclude>src/test/resources/tpch/**</exclude>
           </excludes>
         </configuration>
       </plugin>

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/java/org/apache/tajo/QueryTestCaseBase.java
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/java/org/apache/tajo/QueryTestCaseBase.java b/tajo-cluster-tests/src/test/java/org/apache/tajo/QueryTestCaseBase.java
index bfc7d7b..85b72f2 100644
--- a/tajo-cluster-tests/src/test/java/org/apache/tajo/QueryTestCaseBase.java
+++ b/tajo-cluster-tests/src/test/java/org/apache/tajo/QueryTestCaseBase.java
@@ -161,23 +161,18 @@ public class QueryTestCaseBase {
   protected static LogicalPlanVerifier postVerifier;
 
   /** the base path of dataset directories */
-  protected static final Path datasetBasePath;
+  protected static Path datasetBasePath;
   /** the base path of query directories */
-  protected static final Path queryBasePath;
+  protected static Path queryBasePath;
   /** the base path of result directories */
-  protected static final Path resultBasePath;
+  protected static Path resultBasePath;
 
   static {
     testBase = TpchTestBase.getInstance();
     testingCluster = testBase.getTestingCluster();
     conf = testBase.getTestingCluster().getConfiguration();
     catalog = testBase.getTestingCluster().getMaster().getCatalog();
-    URL datasetBaseURL = ClassLoader.getSystemResource("dataset");
-    datasetBasePath = new Path(datasetBaseURL.toString());
-    URL queryBaseURL = ClassLoader.getSystemResource("queries");
-    queryBasePath = new Path(queryBaseURL.toString());
-    URL resultBaseURL = ClassLoader.getSystemResource("results");
-    resultBasePath = new Path(resultBaseURL.toString());
+
 
     GlobalEngine engine = testingCluster.getMaster().getContext().getGlobalEngine();
     sqlParser = engine.getAnalyzer();
@@ -206,8 +201,14 @@ public class QueryTestCaseBase {
 
   @BeforeClass
   public static void setUpClass() throws Exception {
-    conf = testBase.getTestingCluster().getConfiguration();
     client = testBase.getTestingCluster().newTajoClient();
+
+    URL datasetBaseURL = ClassLoader.getSystemResource("dataset");
+    datasetBasePath = new Path(datasetBaseURL.toString());
+    URL queryBaseURL = ClassLoader.getSystemResource("queries");
+    queryBasePath = new Path(queryBaseURL.toString());
+    URL resultBaseURL = ClassLoader.getSystemResource("results");
+    resultBasePath = new Path(resultBaseURL.toString());
   }
 
   @AfterClass

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/java/org/apache/tajo/TpchTestBase.java
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/java/org/apache/tajo/TpchTestBase.java b/tajo-cluster-tests/src/test/java/org/apache/tajo/TpchTestBase.java
index 2824f9a..027e735 100644
--- a/tajo-cluster-tests/src/test/java/org/apache/tajo/TpchTestBase.java
+++ b/tajo-cluster-tests/src/test/java/org/apache/tajo/TpchTestBase.java
@@ -21,12 +21,16 @@ package org.apache.tajo;
 import com.google.common.collect.Maps;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.fs.Path;
 import org.apache.tajo.benchmark.TPCH;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.storage.StorageConstants;
+import org.apache.tajo.util.CommonTestingUtil;
+import org.apache.tajo.util.FileUtil;
 import org.apache.tajo.util.KeyValueSet;
 
 import java.io.File;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.sql.ResultSet;
 import java.util.Map;
@@ -68,10 +72,14 @@ public class TpchTestBase {
       schemas[i] = tpch.getSchema(names[i]);
     }
 
-    File file;
+    // create a temporal table
+    File tpchTablesDir = new File(new File(CommonTestingUtil.getTestDir().toUri()), "tpch");
+
     for (int i = 0; i < names.length; i++) {
-      file = TPCH.getDataFile(names[i]);
-      paths[i] = file.getAbsolutePath();
+      String str = FileUtil.readTextFileFromResource("tpch/" + names[i] + ".tbl");
+      Path tablePath = new Path(new Path(tpchTablesDir.toURI()), names[i] + ".tbl");
+      FileUtil.writeTextToFile(str, tablePath);
+      paths[i] = tablePath.toString();
     }
     try {
       Thread.sleep(1000);
@@ -99,11 +107,10 @@ public class TpchTestBase {
     return util.getTestingCluster();
   }
 
-  public void tearDown() throws IOException {
-    try {
-      Thread.sleep(2000);
-    } catch (InterruptedException e) {
+  public String getPath(String tableName) {
+    if (!nameMap.containsKey(tableName)) {
+      throw new RuntimeException("No such a table name '" + tableName + "'");
     }
-    util.shutdown();
+    return paths[nameMap.get(tableName)];
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/customer.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/customer.tbl b/tajo-cluster-tests/src/test/resources/tpch/customer.tbl
new file mode 100644
index 0000000..4f684c6
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/customer.tbl
@@ -0,0 +1,5 @@
+1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e|
+2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref|
+3|Customer#000000003|MG9kdTD2WBHm|1|11-719-748-3364|7498.12|AUTOMOBILE| deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov|
+4|Customer#000000004|XxVSJsLAGtn|4|14-128-190-5944|2866.83|MACHINERY| requests. final, regular ideas sleep final accou|
+5|Customer#000000005|KvpyuHCplrB84WgAiGV6sYpZq7Tj|3|13-750-942-6364|794.47|HOUSEHOLD|n accounts will have to unwind. foxes cajole accor|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/empty_orders.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/empty_orders.tbl b/tajo-cluster-tests/src/test/resources/tpch/empty_orders.tbl
new file mode 100644
index 0000000..e69de29

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/lineitem.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/lineitem.tbl b/tajo-cluster-tests/src/test/resources/tpch/lineitem.tbl
new file mode 100644
index 0000000..e3beac9
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/lineitem.tbl
@@ -0,0 +1,5 @@
+1|1|7706|1|17|21168.23|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVER IN PERSON|TRUCK|egular courts above the|
+1|1|7311|2|36|45983.16|0.09|0.06|N|O|1996-04-12|1996-02-28|1996-04-20|TAKE BACK RETURN|MAIL|ly final dependencies: slyly bold |
+2|2|1191|1|38|44694.46|0.00|0.05|N|O|1997-01-28|1997-01-14|1997-02-02|TAKE BACK RETURN|RAIL|ven requests. deposits breach a|
+3|2|1798|1|45|54058.05|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-23|NONE|AIR|ongside of the furiously brave acco|
+3|3|6540|2|49|46796.47|0.10|0.00|R|F|1993-11-09|1993-12-20|1993-11-24|TAKE BACK RETURN|RAIL| unusual accounts. eve|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/nation.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/nation.tbl b/tajo-cluster-tests/src/test/resources/tpch/nation.tbl
new file mode 100644
index 0000000..ed3fd5b
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/nation.tbl
@@ -0,0 +1,25 @@
+0|ALGERIA|0| haggle. carefully final deposits detect slyly agai|
+1|ARGENTINA|1|al foxes promise slyly according to the regular accounts. bold requests alon|
+2|BRAZIL|1|y alongside of the pending deposits. carefully special packages are about the ironic forges. slyly special |
+3|CANADA|1|eas hang ironic, silent packages. slyly regular packages are furiously over the tithes. fluffily bold|
+4|EGYPT|4|y above the carefully unusual theodolites. final dugouts are quickly across the furiously regular d|
+5|ETHIOPIA|0|ven packages wake quickly. regu|
+6|FRANCE|3|refully final requests. regular, ironi|
+7|GERMANY|3|l platelets. regular accounts x-ray: unusual, regular acco|
+8|INDIA|2|ss excuses cajole slyly across the packages. deposits print aroun|
+9|INDONESIA|2| slyly express asymptotes. regular deposits haggle slyly. carefully ironic hockey players sleep blithely. carefull|
+10|IRAN|4|efully alongside of the slyly final dependencies. |
+11|IRAQ|4|nic deposits boost atop the quickly final requests? quickly regula|
+12|JAPAN|2|ously. final, express gifts cajole a|
+13|JORDAN|4|ic deposits are blithely about the carefully regular pa|
+14|KENYA|0| pending excuses haggle furiously deposits. pending, express pinto beans wake fluffily past t|
+15|MOROCCO|0|rns. blithely bold courts among the closely regular packages use furiously bold platelets?|
+16|MOZAMBIQUE|0|s. ironic, unusual asymptotes wake blithely r|
+17|PERU|1|platelets. blithely pending dependencies use fluffily across the even pinto beans. carefully silent accoun|
+18|CHINA|2|c dependencies. furiously express notornis sleep slyly regular accounts. ideas sleep. depos|
+19|ROMANIA|3|ular asymptotes are about the furious multipliers. express dependencies nag above the ironically ironic account|
+20|SAUDI ARABIA|4|ts. silent requests haggle. closely express packages sleep across the blithely|
+21|VIETNAM|2|hely enticingly express accounts. even, final |
+22|RUSSIA|3| requests against the platelets use never according to the quickly regular pint|
+23|UNITED KINGDOM|3|eans boost carefully special requests. accounts are. carefull|
+24|UNITED STATES|1|y final packages. slow foxes cajole quickly. quickly silent platelets breach ironic accounts. unusual pinto be|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/orders.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/orders.tbl b/tajo-cluster-tests/src/test/resources/tpch/orders.tbl
new file mode 100644
index 0000000..15a1b6f
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/orders.tbl
@@ -0,0 +1,3 @@
+1|3|O|173665.47|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among |
+2|4|O|46929.18|1996-12-01|1-URGENT|Clerk#000000880|0| foxes. pending accounts at the pending, silent asymptot|
+3|2|F|193846.25|1993-10-14|5-LOW|Clerk#000000955|0|sly final accounts boost. carefully regular ideas cajole carefully. depos|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/part.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/part.tbl b/tajo-cluster-tests/src/test/resources/tpch/part.tbl
new file mode 100644
index 0000000..6e6fa72
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/part.tbl
@@ -0,0 +1,4 @@
+1|goldenrod lavender spring chocolate lace|Manufacturer#1|Brand#13|PROMO BURNISHED COPPER|7|JUMBO PKG|901.00|ly. slyly ironi
+2|blush thistle blue yellow saddle|Manufacturer#1|Brand#13|LARGE BRUSHED BRASS|15|LG CASE|902.00|lar accounts amo
+3|spring green yellow purple cornsilk|Manufacturer#4|Brand#42|STANDARD POLISHED BRASS|21|WRAP CASE|903.00|egular deposits hag
+4|cornflower chocolate smoke green pink|Manufacturer#3|Brand#34|SMALL PLATED BRASS|14|MED DRUM|904.00|p furiously r
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/partsupp.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/partsupp.tbl b/tajo-cluster-tests/src/test/resources/tpch/partsupp.tbl
new file mode 100644
index 0000000..a6211e6
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/partsupp.tbl
@@ -0,0 +1,3 @@
+1|2|3325|771.64|, even theodolites. regular, final theodolites eat after the carefully pending foxes. furiously regular deposits sleep slyly. carefully bold realms above the ironic dependencies haggle careful|
+2|3|8895|1.01|nic accounts. final accounts sleep furiously about the ironic, bold packages. regular, regular accounts|
+3|4|4651|920.92|ilent foxes affix furiously quickly unusual requests. even packages across the carefully even theodolites nag above the sp|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/region.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/region.tbl b/tajo-cluster-tests/src/test/resources/tpch/region.tbl
new file mode 100644
index 0000000..c5ebb63
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/region.tbl
@@ -0,0 +1,5 @@
+0|AFRICA|lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to |
+1|AMERICA|hs use ironic, even requests. s|
+2|ASIA|ges. thinly even pinto beans ca|
+3|EUROPE|ly final courts cajole furiously final excuse|
+4|MIDDLE EAST|uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-cluster-tests/src/test/resources/tpch/supplier.tbl
----------------------------------------------------------------------
diff --git a/tajo-cluster-tests/src/test/resources/tpch/supplier.tbl b/tajo-cluster-tests/src/test/resources/tpch/supplier.tbl
new file mode 100644
index 0000000..a6fafb3
--- /dev/null
+++ b/tajo-cluster-tests/src/test/resources/tpch/supplier.tbl
@@ -0,0 +1,3 @@
+2|Supplier#000000002|89eJ5ksX3ImxJQBvxObC,|5|15-679-861-2259|4032.68| slyly bold instructions. idle dependen|
+3|Supplier#000000003|q1,G3Pj6OjIuUYfUoH18BFTKP5aU9bEV3|1|11-383-516-1199|4192.40|blithely silent requests after the express dependencies are sl|
+4|Supplier#000000004|Bk7ah4CK8SYQTepEmvMkkgMwg|15|25-843-787-7479|4641.08|riously even requests above the exp|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java b/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java
index a7f8691..5216eb8 100644
--- a/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/util/FileUtil.java
@@ -22,6 +22,7 @@ import com.google.protobuf.Message;
 import org.apache.commons.logging.Log;
 import org.apache.hadoop.fs.*;
 import org.apache.hadoop.io.IOUtils;
+import org.apache.tajo.conf.TajoConf;
 
 import java.io.*;
 import java.net.URL;
@@ -132,8 +133,17 @@ public class FileUtil {
     return fileData.toString();
   }
 
-  public static void writeTextToStream(String text, OutputStream outputStream)
-      throws IOException {
+  public static void writeTextToFile(String text, Path path) throws IOException {
+    FileSystem fs = path.getFileSystem(new TajoConf());
+    if (!fs.exists(path.getParent())) {
+      fs.mkdirs(path.getParent());
+    }
+    FSDataOutputStream out = fs.create(path);
+    out.write(text.getBytes());
+    out.close();
+  }
+
+  public static void writeTextToStream(String text, OutputStream outputStream) throws IOException {
     try {
       outputStream.write(text.getBytes());
     } finally {
@@ -149,10 +159,6 @@ public class FileUtil {
     return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
   }
 
-  public static boolean isLocalPath(Path path) {
-    return path.toUri().getScheme().equals("file");
-  }
-
 
   /**
    * Close the Closeable objects and <b>ignore</b> any {@link IOException} or

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-core-tests/pom.xml b/tajo-core-tests/pom.xml
index 38ce8be..a4c0587 100644
--- a/tajo-core-tests/pom.xml
+++ b/tajo-core-tests/pom.xml
@@ -253,6 +253,10 @@
           <groupId>com.sun.jersey.jersey-test-framework</groupId>
           <artifactId>jersey-test-framework-grizzly2</artifactId>
         </exclusion>
+        <exclusion>
+          <artifactId>netty-all</artifactId>
+          <groupId>io.netty</groupId>
+        </exclusion>
       </exclusions>
     </dependency>
     <dependency>

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
index 177d1cb..e5b9b98 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestJoinQuery.java
@@ -41,7 +41,6 @@ import org.apache.tajo.util.FileUtil;
 import org.apache.tajo.util.KeyValueSet;
 import org.junit.runners.Parameterized.Parameters;
 
-import java.io.File;
 import java.io.OutputStream;
 import java.sql.SQLException;
 import java.util.ArrayList;

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestResultSet.java b/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
deleted file mode 100644
index 0c83fd0..0000000
--- a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
+++ /dev/null
@@ -1,224 +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.jdbc;
-
-import com.google.common.collect.Lists;
-import com.google.protobuf.ByteString;
-import org.apache.hadoop.fs.Path;
-import org.apache.tajo.IntegrationTest;
-import org.apache.tajo.TajoConstants;
-import org.apache.tajo.TajoTestingCluster;
-import org.apache.tajo.TpchTestBase;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.statistics.TableStats;
-import org.apache.tajo.client.TajoClient;
-import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.conf.TajoConf;
-import org.apache.tajo.datum.DatumFactory;
-import org.apache.tajo.storage.*;
-import org.apache.tajo.util.KeyValueSet;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.io.IOException;
-import java.sql.*;
-import java.util.Calendar;
-import java.util.List;
-import java.util.TimeZone;
-
-import static org.junit.Assert.*;
-
-@Category(IntegrationTest.class)
-public class TestResultSet {
-  private static TajoTestingCluster util;
-  private static TajoConf conf;
-  private static TableDesc desc;
-  private static FileTablespace sm;
-  private static TableMeta scoreMeta;
-  private static Schema scoreSchema;
-  private static List<ByteString> serializedData;
-
-  @BeforeClass
-  public static void setup() throws Exception {
-    util = TpchTestBase.getInstance().getTestingCluster();
-    conf = util.getConfiguration();
-    sm = TablespaceManager.getDefault();
-
-    scoreSchema = new Schema();
-    scoreSchema.addColumn("deptname", Type.TEXT);
-    scoreSchema.addColumn("score", Type.INT4);
-    scoreMeta = CatalogUtil.newTableMeta("TEXT");
-    TableStats stats = new TableStats();
-
-    Path p = new Path(sm.getTableUri("default", "score"));
-    sm.getFileSystem().mkdirs(p);
-    Appender appender = sm.getAppender(scoreMeta, scoreSchema, new Path(p, "score"));
-    RowStoreUtil.RowStoreEncoder encoder = RowStoreUtil.createEncoder(scoreSchema);
-    serializedData = Lists.newArrayList();
-    appender.init();
-
-    int deptSize = 100;
-    int tupleNum = 10000;
-    Tuple tuple;
-    long written = 0;
-    for (int i = 0; i < tupleNum; i++) {
-      tuple = new VTuple(2);
-      String key = "test" + (i % deptSize);
-      tuple.put(0, DatumFactory.createText(key));
-      tuple.put(1, DatumFactory.createInt4(i + 1));
-      written += key.length() + Integer.SIZE;
-      appender.addTuple(tuple);
-      serializedData.add(ByteString.copyFrom(encoder.toBytes(tuple)));
-    }
-    appender.close();
-    stats.setNumRows(tupleNum);
-    stats.setNumBytes(written);
-    stats.setAvgRows(tupleNum);
-    stats.setNumBlocks(1000);
-    stats.setNumShuffleOutputs(100);
-    desc = new TableDesc(CatalogUtil.buildFQName(TajoConstants.DEFAULT_DATABASE_NAME, "score"),
-        scoreSchema, scoreMeta, p.toUri());
-    desc.setStats(stats);
-  }
-
-  @AfterClass
-  public static void terminate() throws IOException {
-
-  }
-
-  @Test
-  public void testMemoryResultSet() throws Exception {
-    TajoMemoryResultSet rs = new TajoMemoryResultSet(null, desc.getSchema(),
-        serializedData, desc.getStats().getNumRows().intValue(), null);
-
-    ResultSetMetaData meta = rs.getMetaData();
-    assertNotNull(meta);
-    Schema schema = scoreSchema;
-    assertEquals(schema.size(), meta.getColumnCount());
-    for (int i = 0; i < meta.getColumnCount(); i++) {
-      assertEquals(schema.getColumn(i).getSimpleName(), meta.getColumnName(i + 1));
-      assertEquals(schema.getColumn(i).getQualifier(), meta.getTableName(i + 1));
-    }
-
-    int i = 0;
-    assertTrue(rs.isBeforeFirst());
-    for (; rs.next(); i++) {
-      assertEquals("test"+i%100, rs.getString(1));
-      assertEquals("test"+i%100, rs.getString("deptname"));
-      assertEquals(i+1, rs.getInt(2));
-      assertEquals(i+1, rs.getInt("score"));
-    }
-    assertEquals(10000, i);
-    assertTrue(rs.isAfterLast());
-  }
-
-  @Test
-  public void testDateTimeType() throws Exception {
-    // HiveCatalog does not support date type, time type in hive-0.12.0
-    if(util.isHiveCatalogStoreRunning()) return;
-
-    ResultSet res = null;
-    TajoClient client = util.newTajoClient();
-    try {
-      String tableName = "datetimetable";
-      String query = "select col1, col2, col3 from " + tableName;
-
-      String [] table = new String[] {tableName};
-      Schema schema = new Schema();
-      schema.addColumn("col1", Type.DATE);
-      schema.addColumn("col2", Type.TIME);
-      schema.addColumn("col3", Type.TIMESTAMP);
-      Schema [] schemas = new Schema[] {schema};
-      String [] data = {
-          "2014-01-01|01:00:00|2014-01-01 01:00:00"
-      };
-      KeyValueSet tableOptions = new KeyValueSet();
-      tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
-
-      res = TajoTestingCluster
-          .run(table, schemas, tableOptions, new String[][]{data}, query, client);
-
-      assertTrue(res.next());
-
-      Date date = res.getDate(1);
-      assertNotNull(date);
-      assertEquals(Date.valueOf("2014-01-01"), date);
-
-      date = res.getDate("col1");
-      assertNotNull(date);
-      assertEquals(Date.valueOf("2014-01-01"), date);
-
-      Time time = res.getTime(2);
-      assertNotNull(time);
-      assertEquals(Time.valueOf("01:00:00"), time);
-
-      time = res.getTime("col2");
-      assertNotNull(time);
-      assertEquals(Time.valueOf("01:00:00"), time);
-
-      Timestamp timestamp = res.getTimestamp(3);
-      assertNotNull(timestamp);
-      assertEquals(Timestamp.valueOf("2014-01-01 01:00:00"), timestamp);
-
-      timestamp = res.getTimestamp("col3");
-      assertNotNull(timestamp);
-      assertEquals(Timestamp.valueOf("2014-01-01 01:00:00"), timestamp);
-
-      // assert with timezone
-      Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+9"));
-      date = res.getDate(1, cal);
-      assertNotNull(date);
-      assertEquals("2014-01-01", date.toString());
-
-      date = res.getDate("col1", cal);
-      assertNotNull(date);
-      assertEquals("2014-01-01", date.toString());
-
-      time = res.getTime(2, cal);
-      assertNotNull(time);
-      assertEquals("10:00:00", time.toString());
-
-      time = res.getTime("col2", cal);
-      assertNotNull(time);
-      assertEquals("10:00:00", time.toString());
-
-      timestamp = res.getTimestamp(3, cal);
-      assertNotNull(timestamp);
-      assertEquals("2014-01-01 10:00:00.0", timestamp.toString());
-
-      timestamp = res.getTimestamp("col3", cal);
-      assertNotNull(timestamp);
-      assertEquals("2014-01-01 10:00:00.0", timestamp.toString());
-    } finally {
-      if (res != null) {
-        res.close();
-      }
-
-      client.close();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestSQLState.java b/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
deleted file mode 100644
index e711524..0000000
--- a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
+++ /dev/null
@@ -1,91 +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.jdbc;
-
-import com.google.common.collect.Maps;
-import org.apache.hadoop.io.IOUtils;
-import org.apache.tajo.*;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.client.QueryClient;
-import org.apache.tajo.client.QueryStatus;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.net.InetSocketAddress;
-import java.sql.*;
-import java.util.*;
-
-import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
-import static org.junit.Assert.*;
-
-@Category(IntegrationTest.class)
-public class TestSQLState extends QueryTestCaseBase {
-  private static InetSocketAddress tajoMasterAddress;
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
-    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-  }
-
-  static String buildConnectionUri(String hostName, int port, String databaseName) {
-    return "jdbc:tajo://" + hostName + ":" + port + "/" + databaseName;
-  }
-
-  private Connection makeConnection() throws SQLException {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-
-    return conn;
-  }
-
-  public void assertSQLState(String sql, String sqlState) throws SQLException {
-    Connection conn = null;
-    Statement stmt = null;
-    ResultSet res = null;
-
-    try {
-      conn = makeConnection();
-      stmt = conn.createStatement();
-      res = stmt.executeQuery(sql);
-    } catch (SQLException se) {
-      assertEquals(sqlState, se.getSQLState());
-    } catch (Throwable t) {
-      fail(t.getMessage());
-    } finally {
-      CatalogUtil.closeQuietly(stmt, res);
-      CatalogUtil.closeQuietly(conn);
-    }
-  }
-
-  @Test
-  public void testSyntaxError() throws Exception {
-    assertSQLState("selec x,y,x from lineitem", "42601");
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java b/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
deleted file mode 100644
index 8ee6755..0000000
--- a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
+++ /dev/null
@@ -1,504 +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.jdbc;
-
-import com.google.common.collect.Sets;
-import org.apache.tajo.QueryTestCaseBase;
-import org.apache.tajo.TajoConstants;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.common.type.TajoTypeUtil;
-import org.apache.tajo.util.TUtil;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.net.InetSocketAddress;
-import java.sql.*;
-import java.util.*;
-
-import static org.junit.Assert.*;
-
-public class TestTajoDatabaseMetaData extends QueryTestCaseBase {
-  private static InetSocketAddress tajoMasterAddress;
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
-    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
-  }
-
-  public static List<String> getListFromResultSet(ResultSet resultSet, String columnName) throws SQLException {
-    List<String> list = new ArrayList<String>();
-    while(resultSet.next()) {
-      list.add(resultSet.getString(columnName));
-    }
-    return list;
-  }
-
-  @Test
-  public void testSetAndGetCatalogAndSchema() throws Exception {
-    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-
-    assertDatabaseNotExists("jdbc_test1");
-    PreparedStatement pstmt = conn.prepareStatement("CREATE DATABASE jdbc_test1");
-    pstmt.executeUpdate();
-    assertDatabaseExists("jdbc_test1");
-    pstmt.close();
-
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      assertDatabaseNotExists("Jdbc_Test2");
-      pstmt = conn.prepareStatement("CREATE DATABASE \"Jdbc_Test2\"");
-      pstmt.executeUpdate();
-      assertDatabaseExists("Jdbc_Test2");
-      pstmt.close();
-    }
-
-    conn.setCatalog("jdbc_test1");
-    assertEquals("jdbc_test1", conn.getCatalog());
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      conn.setCatalog("Jdbc_Test2");
-      assertEquals("Jdbc_Test2", conn.getCatalog());
-    }
-    conn.setCatalog("jdbc_test1");
-    assertEquals("jdbc_test1", conn.getCatalog());
-
-    ResultSet resultSet = conn.getMetaData().getSchemas();
-    assertResultSet(resultSet, "getSchemas1.result");
-    resultSet.close();
-
-    resultSet = conn.getMetaData().getSchemas("jdbc_test1", "%");
-    assertResultSet(resultSet, "getSchemas2.result");
-    resultSet.close();
-
-    resultSet = conn.getMetaData().getTableTypes();
-    assertResultSet(resultSet, "getTableTypes.result");
-    resultSet.close();
-
-    conn.setCatalog(TajoConstants.DEFAULT_DATABASE_NAME);
-    pstmt = conn.prepareStatement("DROP DATABASE jdbc_test1");
-    pstmt.executeUpdate();
-    pstmt.close();
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      pstmt = conn.prepareStatement("DROP DATABASE \"Jdbc_Test2\"");
-      pstmt.executeUpdate();
-      pstmt.close();
-    }
-
-    conn.close();
-  }
-
-  @Test
-  public void testGetCatalogsAndTables() throws Exception {
-    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection defaultConnect = DriverManager.getConnection(connUri);
-
-    DatabaseMetaData dbmd = defaultConnect.getMetaData();
-    List<String> existingDatabases = getListFromResultSet(dbmd.getCatalogs(), "TABLE_CAT");
-
-    // create database "jdbc_test1" and its tables
-    assertDatabaseNotExists("jdbc_test3");
-    PreparedStatement pstmt = defaultConnect.prepareStatement("CREATE DATABASE jdbc_test3");
-    pstmt.executeUpdate();
-    assertDatabaseExists("jdbc_test3");
-    pstmt.close();
-    pstmt = defaultConnect.prepareStatement("CREATE TABLE jdbc_test3.table1 (age int)");
-    pstmt.executeUpdate();
-    pstmt.close();
-    pstmt = defaultConnect.prepareStatement("CREATE TABLE jdbc_test3.table2 (age int)");
-    pstmt.executeUpdate();
-    pstmt.close();
-
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      // create database "jdbc_test2" and its tables
-      assertDatabaseNotExists("Jdbc_Test4");
-      pstmt = defaultConnect.prepareStatement("CREATE DATABASE \"Jdbc_Test4\"");
-      pstmt.executeUpdate();
-      assertDatabaseExists("Jdbc_Test4");
-      pstmt.close();
-
-      pstmt = defaultConnect.prepareStatement("CREATE TABLE \"Jdbc_Test4\".table3 (age int)");
-      pstmt.executeUpdate();
-      pstmt.close();
-      pstmt = defaultConnect.prepareStatement("CREATE TABLE \"Jdbc_Test4\".table4 (age int)");
-      pstmt.executeUpdate();
-      pstmt.close();
-    }
-
-    // verify getCatalogs()
-    dbmd = defaultConnect.getMetaData();
-    List<String> newDatabases = getListFromResultSet(dbmd.getCatalogs(), "TABLE_CAT");
-
-    newDatabases.removeAll(existingDatabases);
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      assertEquals(2, newDatabases.size());
-    } else {
-      assertEquals(1, newDatabases.size());
-    }
-    assertTrue(newDatabases.contains("jdbc_test3"));
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      assertTrue(newDatabases.contains("Jdbc_Test4"));
-    }
-
-    // verify getTables()
-    ResultSet res = defaultConnect.getMetaData().getTables("jdbc_test3", null, null, null);
-    assertResultSet(res, "getTables1.result");
-    res.close();
-
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      res = defaultConnect.getMetaData().getTables("Jdbc_Test4", null, null, null);
-      assertResultSet(res, "getTables2.result");
-      res.close();
-    }
-
-    defaultConnect.close();
-
-    // jdbc1_test database connection test
-    String jdbcTest1ConnUri =
-        TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(), "jdbc_test3");
-    Connection jdbcTest1Conn = DriverManager.getConnection(jdbcTest1ConnUri);
-    assertEquals("jdbc_test3", jdbcTest1Conn.getCatalog());
-    jdbcTest1Conn.close();
-
-    client.selectDatabase("default");
-    executeString("DROP TABLE jdbc_test3.table1");
-    executeString("DROP TABLE jdbc_test3.table2");
-    executeString("DROP DATABASE jdbc_test3");
-
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      String jdbcTest2ConnUri =
-          TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(), "Jdbc_Test4");
-      Connection jdbcTest2Conn = DriverManager.getConnection(jdbcTest2ConnUri);
-      assertEquals("Jdbc_Test4", jdbcTest2Conn.getCatalog());
-      jdbcTest2Conn.close();
-
-      client.selectDatabase("default");
-      executeString("DROP TABLE \"Jdbc_Test4\".table3");
-      executeString("DROP TABLE \"Jdbc_Test4\".table4");
-      executeString("DROP DATABASE \"Jdbc_Test4\"");
-    }
-  }
-
-  @Test
-  public void testGetTablesWithPattern() throws Exception {
-    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-
-    Map<String,List<String>> tables = new HashMap<String,List<String>>();
-    assertDatabaseNotExists("db_1");
-    executeString("CREATE DATABASE db_1");
-    assertDatabaseExists("db_1");
-    for (int i = 0; i < 3; i++) {
-      String tableName = "tb_" + i;
-      TUtil.putToNestedList(tables, "db_1", tableName);
-      executeString("CREATE TABLE db_1." + tableName + " (age int)");
-    }
-    for (int i = 0; i < 3; i++) {
-      String tableName = "table_" + i + "_ptn";
-      TUtil.putToNestedList(tables, "db_1", tableName);
-      executeString("CREATE TABLE db_1." + tableName + " (age int)");
-    }
-
-    assertDatabaseNotExists("db_2");
-    executeString("CREATE DATABASE db_2");
-    assertDatabaseExists("db_2");
-    for (int i = 0; i < 3; i++) {
-      String tableName = "tb_" + i;
-      TUtil.putToNestedList(tables, "db_2", tableName);
-      executeString("CREATE TABLE db_2." + tableName + " (age int)");
-    }
-    for (int i = 0; i < 3; i++) {
-      String tableName = "table_" + i + "_ptn";
-      TUtil.putToNestedList(tables, "db_2", tableName);
-      executeString("CREATE TABLE db_2." + tableName + " (age int)");
-    }
-
-    // all wildcard test
-    Set<String> tableList =
-        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "%", null), "TABLE_NAME"));
-    assertEquals(Sets.newHashSet(tables.get("db_2")), tableList);
-
-    // leading wildcard test
-    tableList =
-        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "%_ptn", null), "TABLE_NAME"));
-    assertEquals(Sets.newHashSet("table_0_ptn", "table_1_ptn", "table_2_ptn"), tableList);
-
-    // tailing wildcard test
-    tableList =
-        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "tb_%", null), "TABLE_NAME"));
-    assertEquals(Sets.newHashSet("tb_0", "tb_1", "tb_2"), tableList);
-
-    ResultSet resultSet = conn.getMetaData().getTables(null, null, "tb\\_%", null);
-    int i = 0;
-    while(resultSet.next()) {
-      tables.get(resultSet.getString("TABLE_CAT")).contains(resultSet.getString("TABLE_NAME"));
-      i++;
-    }
-    assertEquals(6, i);
-
-    executeString("DROP DATABASE db_1");
-    executeString("DROP DATABASE db_2");
-  }
-
-  private static String getTestColName(String dbName, String tableName, int i) {
-    if (i % 2 == 1) {
-      return CatalogUtil.denormalizeIdentifier(dbName + "_" + tableName + "_col") + " int";
-    } else {
-      return CatalogUtil.denormalizeIdentifier(dbName + "_" + tableName + "_COL") + " int";
-    }
-  }
-
-  @Test
-  public void testGetColumnsWithPattern() throws Exception {
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-          TajoConstants.DEFAULT_DATABASE_NAME);
-      Connection conn = DriverManager.getConnection(connUri);
-
-      // Below creates the following 12 tables
-      // db<i>.tb<j>, i = {1,2}, 0 <= j < 2
-      // db<i>.table_<j>, i = {1,2}, 0 <= j < 2
-
-      Map<String,List<String>> tables = new HashMap<String,List<String>>();
-      for (int j = 1; j <= 2; j++) {
-        String dbName = "db" + j;
-        assertDatabaseNotExists(dbName);
-        executeString("CREATE DATABASE " + dbName).close();
-        assertDatabaseExists(dbName);
-        for (int i = 3; i < 6; i++) {
-          String tableName = "tb" + i;
-
-
-          if (i % 2 == 0) {
-            tableName = tableName.toUpperCase();
-          }
-
-          TUtil.putToNestedList(tables, dbName, tableName);
-
-          executeString("CREATE TABLE " + dbName + "." + CatalogUtil.denormalizeIdentifier(tableName) +
-              " (" + getTestColName(dbName, tableName, 1) +
-              ") PARTITION BY COLUMN (" + getTestColName(dbName, tableName, 2) + ")").close();
-          assertTableExists(dbName + "." + tableName);
-        }
-        for (int i = 3; i < 6; i++) {
-          String tableName = "table" + i;
-
-
-          if (i % 2 == 0) {
-            tableName = tableName.toUpperCase();
-          }
-
-          TUtil.putToNestedList(tables, dbName, tableName);
-
-          executeString("CREATE TABLE " + dbName + "." + CatalogUtil.denormalizeIdentifier(tableName) +
-              " (" + getTestColName(dbName, tableName, 1) +
-              ") PARTITION BY COLUMN (" + getTestColName(dbName, tableName, 2) + ")").close();
-          assertTableExists(dbName + "." + tableName);
-        }
-      }
-
-      // all wildcard test on columns
-      Set<String> columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%"),
-              "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
-
-      // tailing wildcard + case sensitive test on columns
-      columnList = Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%col"),
-          "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db2_tb3_col"), columnList);
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%COL"),
-              "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db2_tb3_COL"), columnList);
-
-      // tailing wildcard test on columns
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "db2\\_tb3\\_%"),
-              "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "%", "db2\\_tb3\\_%"),
-              "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
-
-      // leading wildcard test on tables
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db1", null, "%3", "%"),
-              "COLUMN_NAME"));
-      assertEquals(
-          Sets.newHashSet(
-              "db1_tb3_col", "db1_tb3_COL",
-              "db1_table3_col", "db1_table3_COL"),
-          columnList);
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "%3", "%"),
-              "COLUMN_NAME"));
-      assertEquals(
-          Sets.newHashSet(
-              "db2_tb3_col", "db2_tb3_COL",
-              "db2_table3_col", "db2_table3_COL"),
-          columnList);
-
-      // tailing wildcard + case sensitive test on tables
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "TABLE%", "%"),
-              "COLUMN_NAME"));
-      assertEquals(
-          Sets.newHashSet(
-              "db2_TABLE4_col", "db2_TABLE4_COL"), columnList);
-
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "TABLE4", "%"),
-              "COLUMN_NAME"));
-      assertEquals(
-          Sets.newHashSet(
-              "db2_TABLE4_col", "db2_TABLE4_COL"),
-          columnList);
-
-      // tailing wildcard test on tables
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "table%", "%"),
-              "COLUMN_NAME"));
-      assertEquals(
-          Sets.newHashSet(
-              "db2_table3_col", "db2_table3_COL",
-              "db2_table5_col", "db2_table5_COL"),
-          columnList);
-
-      // wildcard test on database
-      columnList =
-          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns(null, null, "%3", "db1_tb3%"),
-              "COLUMN_NAME"));
-      assertEquals(Sets.newHashSet("db1_tb3_col", "db1_tb3_COL"), columnList);
-
-      executeString("DROP DATABASE db1");
-      executeString("DROP DATABASE db2");
-    }
-  }
-
-  @Test
-  public void testEmptyMetaInfo() throws Exception {
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-          TajoConstants.DEFAULT_DATABASE_NAME);
-      Connection conn = DriverManager.getConnection(connUri);
-
-      try {
-        DatabaseMetaData meta = conn.getMetaData();
-
-        ResultSet res = meta.getProcedures(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getProcedureColumns(null, null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getUDTs(null, null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getColumnPrivileges(null, null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getTablePrivileges(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getBestRowIdentifier(null, null, null, 0, false);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getVersionColumns(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getPrimaryKeys(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getImportedKeys(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getExportedKeys(null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getCrossReference(null, null, null, null, null, null);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getIndexInfo(null, null, null, false, false);
-        assertNotNull(res);
-        assertFalse(res.next());
-
-        res = meta.getClientInfoProperties();
-        assertNotNull(res);
-        assertFalse(res.next());
-      } finally {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public void testGetTypeInfo() throws Exception {
-    if (!testingCluster.isHiveCatalogStoreRunning()) {
-      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-          TajoConstants.DEFAULT_DATABASE_NAME);
-      Connection conn = DriverManager.getConnection(connUri);
-
-      try {
-        DatabaseMetaData meta = conn.getMetaData();
-
-        ResultSet res = meta.getTypeInfo();
-
-        assertNotNull(res);
-
-        int numTypes = 0;
-
-        String[] columnNames = {"TYPE_NAME", "DATA_TYPE", "PRECISION", "LITERAL_PREFIX", "LITERAL_SUFFIX",
-            "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE",
-            "FIXED_PREC_SCALE", "AUTO_INCREMENT", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE",
-            "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX"};
-
-        while (res.next()) {
-          for (int i = 0; i < columnNames.length; i++) {
-            Object value = res.getObject(columnNames[i]);
-            if (i == 15 || i == 16) {
-              assertNull(value);
-            } else {
-              assertNotNull(value);
-            }
-          }
-          numTypes++;
-        }
-
-        assertEquals(numTypes, TajoTypeUtil.getTypeInfos().size());
-      } finally {
-        conn.close();
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java b/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
deleted file mode 100644
index e6d01fe..0000000
--- a/tajo-core-tests/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
+++ /dev/null
@@ -1,607 +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.jdbc;
-
-import com.google.common.collect.Maps;
-import org.apache.tajo.*;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.Column;
-import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.client.QueryStatus;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.experimental.categories.Category;
-
-import java.net.InetSocketAddress;
-import java.sql.*;
-import java.util.*;
-
-import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
-import static org.junit.Assert.*;
-
-@Category(IntegrationTest.class)
-public class TestTajoJdbc extends QueryTestCaseBase {
-  private static InetSocketAddress tajoMasterAddress;
-
-  @BeforeClass
-  public static void setUp() throws Exception {
-    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
-    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
-  }
-
-  @AfterClass
-  public static void tearDown() throws Exception {
-  }
-
-  public static String buildConnectionUri(String hostName, int port, String databaseName) {
-    return "jdbc:tajo://" + hostName + ":" + port + "/" + databaseName;
-  }
-
-  @Test
-  public void testAcceptURL() throws SQLException {
-    TajoDriver driver = new TajoDriver();
-    assertTrue(driver.acceptsURL("jdbc:tajo:"));
-    assertFalse(driver.acceptsURL("jdbc:taju:"));
-  }
-
-  @Test(expected = SQLException.class)
-  public void testGetConnection() throws SQLException {
-    DriverManager.getConnection("jdbc:taju://" + tajoMasterAddress.getHostName() + ":" + tajoMasterAddress.getPort()
-      + "/default");
-  }
-
-  @Test
-  public void testStatement() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-
-    Statement stmt = null;
-    ResultSet res = null;
-    try {
-      stmt = conn.createStatement();
-
-      res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
-        "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
-
-      try {
-        Map<String, Integer> result = Maps.newHashMap();
-        result.put("NO", 3);
-        result.put("RF", 2);
-
-        assertNotNull(res);
-        assertTrue(res.next());
-        assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-        assertTrue(res.next());
-        assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-        assertFalse(res.next());
-
-        ResultSetMetaData rsmd = res.getMetaData();
-        assertEquals(3, rsmd.getColumnCount());
-        assertEquals("l_returnflag", rsmd.getColumnName(1));
-        assertEquals("l_linestatus", rsmd.getColumnName(2));
-        assertEquals("count_order", rsmd.getColumnName(3));
-      } finally {
-        res.close();
-      }
-    } finally {
-      if (res != null) {
-        res.close();
-      }
-      if (stmt != null) {
-        stmt.close();
-      }
-      if (conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public void testPreparedStatement() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-
-    PreparedStatement stmt = null;
-    ResultSet res = null;
-    try {
-      /*
-      test data set
-      1,17.0,N
-      1,36.0,N
-      2,38.0,N
-      3,45.0,R
-      3,49.0,R
-      */
-
-      String sql =
-        "select l_orderkey, l_quantity, l_returnflag from lineitem where l_quantity > ? and l_returnflag = ?";
-
-      stmt = conn.prepareStatement(sql);
-
-      stmt.setInt(1, 20);
-      stmt.setString(2, "N");
-
-      res = stmt.executeQuery();
-
-      ResultSetMetaData rsmd = res.getMetaData();
-      assertEquals(3, rsmd.getColumnCount());
-      assertEquals("l_orderkey", rsmd.getColumnName(1));
-      assertEquals("l_quantity", rsmd.getColumnName(2));
-      assertEquals("l_returnflag", rsmd.getColumnName(3));
-
-      try {
-        int numRows = 0;
-        String[] resultData = {"136.0N", "238.0N"};
-        while (res.next()) {
-          assertEquals(resultData[numRows],
-            ("" + res.getObject(1).toString() + res.getObject(2).toString() + res.getObject(3).toString()));
-          numRows++;
-        }
-        assertEquals(2, numRows);
-      } finally {
-        res.close();
-      }
-
-      stmt.setInt(1, 20);
-      stmt.setString(2, "R");
-
-      res = stmt.executeQuery();
-
-      rsmd = res.getMetaData();
-      assertEquals(3, rsmd.getColumnCount());
-      assertEquals("l_orderkey", rsmd.getColumnName(1));
-      assertEquals("l_quantity", rsmd.getColumnName(2));
-      assertEquals("l_returnflag", rsmd.getColumnName(3));
-
-      try {
-        int numRows = 0;
-        String[] resultData = {"345.0R", "349.0R"};
-        while (res.next()) {
-          assertEquals(resultData[numRows],
-            ("" + res.getObject(1).toString() + res.getObject(2).toString() + res.getObject(3).toString()));
-          numRows++;
-        }
-        assertEquals(2, numRows);
-      } finally {
-        res.close();
-      }
-    } finally {
-      if (res != null) {
-        res.close();
-      }
-      if (stmt != null) {
-        stmt.close();
-      }
-      if (conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public void testDatabaseMetaDataGetTable() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-
-    DatabaseMetaData dbmd = conn.getMetaData();
-
-    ResultSet rs = null;
-
-    try {
-      rs = dbmd.getTables("default", null, null, null);
-
-      ResultSetMetaData rsmd = rs.getMetaData();
-      int numCols = rsmd.getColumnCount();
-      assertEquals(5, numCols);
-
-      Set<String> retrivedViaJavaAPI = new HashSet<String>(client.getTableList("default"));
-
-      Set<String> retrievedViaJDBC = new HashSet<String>();
-      while (rs.next()) {
-        retrievedViaJDBC.add(rs.getString("TABLE_NAME"));
-      }
-      assertEquals(retrievedViaJDBC, retrivedViaJavaAPI);
-    } finally {
-      if (rs != null) {
-        rs.close();
-      }
-    }
-
-    assertTrue(conn.isValid(100));
-    conn.close();
-  }
-
-  @Test
-  public void testDatabaseMetaDataGetColumns() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      TajoConstants.DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-
-    DatabaseMetaData dbmd = conn.getMetaData();
-    ResultSet rs = null;
-
-    try {
-      String tableName = "lineitem";
-      rs = dbmd.getColumns(null, null, tableName, null);
-
-      ResultSetMetaData rsmd = rs.getMetaData();
-      int numCols = rsmd.getColumnCount();
-
-      assertEquals(22, numCols);
-      int numColumns = 0;
-
-      TableDesc tableDesc = client.getTableDesc(CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, tableName));
-      assertNotNull(tableDesc);
-
-      List<Column> columns = tableDesc.getSchema().getRootColumns();
-
-      while (rs.next()) {
-        assertEquals(tableName, rs.getString("TABLE_NAME"));
-        assertEquals(columns.get(numColumns).getSimpleName(), rs.getString("COLUMN_NAME"));
-        // TODO assert type
-        numColumns++;
-      }
-
-      assertEquals(16, numColumns);
-    } finally {
-      if (rs != null) {
-        rs.close();
-      }
-    }
-
-    assertTrue(conn.isValid(100));
-    conn.close();
-    assertFalse(conn.isValid(100));
-  }
-
-  @Test
-  public void testMultipleConnections() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      TajoConstants.DEFAULT_DATABASE_NAME);
-
-    Connection[] conns = new Connection[2];
-    conns[0] = DriverManager.getConnection(connUri);
-    conns[1] = DriverManager.getConnection(connUri);
-
-    try {
-      for (int i = 0; i < conns.length; i++) {
-        Statement stmt = null;
-        ResultSet res = null;
-        try {
-          stmt = conns[i].createStatement();
-
-          res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
-            "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
-
-          try {
-            Map<String, Integer> result = Maps.newHashMap();
-            result.put("NO", 3);
-            result.put("RF", 2);
-
-            assertNotNull(res);
-            assertTrue(res.next());
-            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-            assertTrue(res.next());
-            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-            assertFalse(res.next());
-
-            ResultSetMetaData rsmd = res.getMetaData();
-            assertEquals(3, rsmd.getColumnCount());
-            assertEquals("l_returnflag", rsmd.getColumnName(1));
-            assertEquals("l_linestatus", rsmd.getColumnName(2));
-            assertEquals("count_order", rsmd.getColumnName(3));
-          } finally {
-            res.close();
-          }
-        } finally {
-          if (res != null) {
-            res.close();
-          }
-          if (stmt != null) {
-            stmt.close();
-          }
-        }
-      }
-    } finally {
-      assertTrue(conns[0].isValid(100));
-      conns[0].close();
-      assertFalse(conns[0].isValid(100));
-      assertTrue(conns[1].isValid(100));
-      conns[1].close();
-      assertFalse(conns[1].isValid(100));
-    }
-  }
-
-  @Test
-  public void testMultipleConnectionsSequentialClose() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      DEFAULT_DATABASE_NAME);
-
-    Connection[] conns = new Connection[2];
-    conns[0] = DriverManager.getConnection(connUri);
-    conns[1] = DriverManager.getConnection(connUri);
-
-    try {
-      for (int i = 0; i < conns.length; i++) {
-        Statement stmt = null;
-        ResultSet res = null;
-        try {
-          stmt = conns[i].createStatement();
-
-          res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
-            "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
-
-          try {
-            Map<String, Integer> result = Maps.newHashMap();
-            result.put("NO", 3);
-            result.put("RF", 2);
-
-            assertNotNull(res);
-            assertTrue(res.next());
-            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-            assertTrue(res.next());
-            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
-            assertFalse(res.next());
-
-            ResultSetMetaData rsmd = res.getMetaData();
-            assertEquals(3, rsmd.getColumnCount());
-            assertEquals("l_returnflag", rsmd.getColumnName(1));
-            assertEquals("l_linestatus", rsmd.getColumnName(2));
-            assertEquals("count_order", rsmd.getColumnName(3));
-          } finally {
-            res.close();
-          }
-        } finally {
-          if (res != null) {
-            res.close();
-          }
-          if (stmt != null) {
-            stmt.close();
-          }
-          conns[i].close();
-        }
-      }
-    } finally {
-      if (!conns[0].isClosed()) {
-        assertTrue(conns[0].isValid(100));
-        conns[0].close();
-        assertFalse(conns[0].isValid(100));
-      }
-      if (!conns[1].isClosed()) {
-        assertTrue(conns[1].isValid(100));
-        conns[1].close();
-        assertFalse(conns[1].isValid(100));
-      }
-    }
-  }
-
-  @Test
-  public void testCreateTableWithDateAndTimestamp() throws Exception {
-    String tableName = CatalogUtil.normalizeIdentifier("testCreateTableWithDateAndTimestamp");
-
-    int result;
-    Statement stmt = null;
-    ResultSet res = null;
-    Connection conn = null;
-    try {
-      String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        DEFAULT_DATABASE_NAME);
-      conn = DriverManager.getConnection(connUri);
-      assertTrue(conn.isValid(100));
-
-      stmt = conn.createStatement();
-      result = stmt.executeUpdate("create table " + tableName + " (id int, name text, score double"
-        + ", register_date timestamp, update_date date, send_date time)");
-      assertEquals(result, 1);
-
-      res = stmt.executeQuery("select * from " + tableName);
-      assertFalse(res.next());
-
-      ResultSetMetaData rsmd = res.getMetaData();
-      assertNotNull(rsmd);
-      assertEquals(6, rsmd.getColumnCount());
-
-      assertEquals("id", rsmd.getColumnName(1));
-      assertEquals("name", rsmd.getColumnName(2));
-      assertEquals("score", rsmd.getColumnName(3));
-      assertEquals("register_date", rsmd.getColumnName(4));
-      assertEquals("update_date", rsmd.getColumnName(5));
-      assertEquals("send_date", rsmd.getColumnName(6));
-
-      assertEquals("integer", rsmd.getColumnTypeName(1));
-      assertEquals("varchar", rsmd.getColumnTypeName(2));
-      assertEquals("double", rsmd.getColumnTypeName(3));
-      assertEquals("timestamp", rsmd.getColumnTypeName(4));
-      assertEquals("date", rsmd.getColumnTypeName(5));
-      assertEquals("time", rsmd.getColumnTypeName(6));
-
-    } finally {
-      cleanupQuery(res);
-      if (stmt != null) {
-        stmt.close();
-      }
-
-      if(conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public void testSortWithDateTime() throws Exception {
-    Statement stmt = null;
-    ResultSet res = null;
-    Connection conn = null;
-    int result;
-
-    // skip this test if catalog uses HiveCatalogStore.
-    // It is because HiveCatalogStore does not support Time data type.
-    try {
-      if (!testingCluster.isHiveCatalogStoreRunning()) {
-        executeDDL("create_table_with_date_ddl.sql", "table1");
-
-        String connUri = buildConnectionUri(tajoMasterAddress.getHostName(),
-          tajoMasterAddress.getPort(), "TestTajoJdbc");
-
-        conn = DriverManager.getConnection(connUri);
-        assertTrue(conn.isValid(100));
-
-        stmt = conn.createStatement();
-        res = stmt.executeQuery("select col1, col2, col3 from table1 order by col1, col2, col3");
-
-        ResultSetMetaData rsmd = res.getMetaData();
-        assertNotNull(rsmd);
-        assertEquals(3, rsmd.getColumnCount());
-
-        assertEquals("timestamp", rsmd.getColumnTypeName(1));
-        assertEquals("date", rsmd.getColumnTypeName(2));
-        assertEquals("time", rsmd.getColumnTypeName(3));
-
-        assertResultSet(res);
-
-        result = stmt.executeUpdate("drop table table1");
-        assertEquals(result, 1);
-
-      }
-    } finally {
-      cleanupQuery(res);
-      if (stmt != null) {
-        stmt.close();
-      }
-
-      if(conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-
-  @Test
-  public void testAlterTableAddPartition() throws Exception {
-    Statement stmt = null;
-    ResultSet resultSet = null;
-    int retCode = 0;
-    Connection conn = null;
-    int result;
-    String errorMessage = null;
-
-    // skip this test if catalog uses HiveCatalogStore.
-    // It is because HiveCatalogStore does not support Time data type.
-    try {
-      if (!testingCluster.isHiveCatalogStoreRunning()) {
-        String connUri = buildConnectionUri(tajoMasterAddress.getHostName(),
-          tajoMasterAddress.getPort(), "TestTajoJdbc");
-
-        conn = DriverManager.getConnection(connUri);
-        assertTrue(conn.isValid(100));
-
-        String tableName = CatalogUtil.normalizeIdentifier("testAlterTablePartition");
-        resultSet = executeString(
-          "create table " + tableName + " (col1 int4, col2 int4) partition by column(key float8) ");
-        resultSet.close();
-
-        stmt = conn.createStatement();
-        result  = stmt.executeUpdate("alter table " + tableName + " add partition (key = 0.1)");
-        assertEquals(result, 1);
-     }
-    } finally {      
-      cleanupQuery(resultSet);
-      if (stmt != null) {
-        stmt.close();
-      }
-
-      if(conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public void testMaxRows() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-      DEFAULT_DATABASE_NAME);
-    Connection conn = DriverManager.getConnection(connUri);
-    assertTrue(conn.isValid(100));
-    Statement stmt = null;
-    ResultSet res = null;
-    //Parameter value setting for test.
-    final int maxRowsNum = 3;
-    int resultRowsNum = 0, returnMaxRows = 0;
-    try {
-      stmt = conn.createStatement();
-      //set maxRows(3)
-      stmt.setMaxRows(maxRowsNum);
-      //get MaxRows
-      returnMaxRows = stmt.getMaxRows();
-      res = stmt.executeQuery("select * from lineitem");
-      assertNotNull(res);
-      while (res.next()) {
-        //Actuality result Rows.
-        resultRowsNum++;	
-      }
-      //The test success, if maxRowsNum and resultRowsNum and returnMaxRows is same.
-      assertTrue(maxRowsNum == resultRowsNum && maxRowsNum == returnMaxRows);
-    } finally {
-      if (res != null) {
-        cleanupQuery(res);
-      }
-      if (stmt != null) {
-        stmt.close();
-      }
-      if (conn != null) {
-        conn.close();
-      }
-    }
-  }
-
-  @Test
-  public final void testCancel() throws Exception {
-    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
-        DEFAULT_DATABASE_NAME);
-    Properties props = new Properties();
-    props.setProperty(SessionVars.BLOCK_ON_RESULT.keyname(), "false");
-
-    Connection conn = new JdbcConnection(connUri, props);
-    PreparedStatement statement = conn.prepareStatement("select sleep(1) from lineitem");
-    try {
-      assertTrue("should have result set", statement.execute());
-      TajoResultSetBase result = (TajoResultSetBase) statement.getResultSet();
-      Thread.sleep(1000);   // todo query master is not killed properly if it's compiling the query (use 100, if you want see)
-      statement.cancel();
-
-      QueryStatus status = client.getQueryStatus(result.getQueryId());
-      assertEquals(TajoProtos.QueryState.QUERY_KILLED, status.getState());
-    } finally {
-      if (statement != null) {
-        statement.close();
-      }
-      if (conn != null) {
-        conn.close();
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java b/tajo-core-tests/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
index 0e3e63e..2aecad3 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/querymaster/TestKillQuery.java
@@ -75,14 +75,12 @@ public class TestKillQuery {
     cluster.startMiniClusterInLocal(1);
     conf = cluster.getConfiguration();
     client = cluster.newTajoClient();
-    File file = TPCH.getDataFile("lineitem");
     client.executeQueryAndGetResult("create external table default.lineitem (l_orderkey int, l_partkey int) "
-        + "using text location 'file://" + file.getAbsolutePath() + "'");
+        + "using text location '" + TpchTestBase.getInstance().getPath("lineitem") + "'");
     assertTrue(client.existTable("default.lineitem"));
 
-    file = TPCH.getDataFile("customer");
     client.executeQueryAndGetResult("create external table default.customer (c_custkey int, c_name text) "
-        + "using text location 'file://" + file.getAbsolutePath() + "'");
+        + "using text location '" + TpchTestBase.getInstance().getPath("customer") + "'");
     assertTrue(client.existTable("default.customer"));
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl b/tajo-core-tests/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
deleted file mode 100644
index 52fa2fe..0000000
--- a/tajo-core-tests/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
+++ /dev/null
@@ -1,5 +0,0 @@
-1997-11-09 20:34:56|1996-04-12|15:34:56
-1997-11-09 20:34:56|1996-03-13|19:34:56
-1993-11-09 20:34:56|1997-01-28|08:34:56
-1995-11-09 20:34:56|1994-02-02|17:34:56
-1995-11-09 20:34:56|1993-11-09|20:34:56

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql b/tajo-core-tests/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
deleted file mode 100644
index caeeaf9..0000000
--- a/tajo-core-tests/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
+++ /dev/null
@@ -1,10 +0,0 @@
--- Sort Table
--- It is used in TestSortQuery::testSortWithDate
-
-create external table table1 (
-  col1 timestamp,
-	col2 date,
-	col3 time
-) using text
-with ('text.delimiter'='|', 'text.null'='NULL')
-location ${table.path};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result b/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
deleted file mode 100644
index 0a013d9..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
+++ /dev/null
@@ -1,3 +0,0 @@
-TABLE_SCHEM,TABLE_CATALOG
--------------------------------
-,jdbc_test1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result b/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
deleted file mode 100644
index 0a013d9..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
+++ /dev/null
@@ -1,3 +0,0 @@
-TABLE_SCHEM,TABLE_CATALOG
--------------------------------
-,jdbc_test1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result b/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
deleted file mode 100644
index 29b90ab..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
+++ /dev/null
@@ -1,3 +0,0 @@
-TABLE_TYPE
--------------------------------
-TABLE
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result b/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
deleted file mode 100644
index 201d325..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
+++ /dev/null
@@ -1,4 +0,0 @@
-TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
--------------------------------
-jdbc_test3,,table1,TABLE,
-jdbc_test3,,table2,TABLE,
\ No newline at end of file


[2/3] tajo git commit: TAJO-1792: tajo-cluster-tests is not available when it is used as an external maven module.

Posted by hy...@apache.org.
http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result b/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
deleted file mode 100644
index 65cde70..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
+++ /dev/null
@@ -1,4 +0,0 @@
-TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
--------------------------------
-Jdbc_Test4,,table3,TABLE,
-Jdbc_Test4,,table4,TABLE,
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result b/tajo-core-tests/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
deleted file mode 100644
index 118909c..0000000
--- a/tajo-core-tests/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
+++ /dev/null
@@ -1,7 +0,0 @@
-col1,col2,col3
--------------------------------
-1993-11-09 20:34:56,1997-01-28,08:34:56
-1995-11-09 20:34:56,1993-11-09,20:34:56
-1995-11-09 20:34:56,1994-02-02,17:34:56
-1997-11-09 20:34:56,1996-03-13,19:34:56
-1997-11-09 20:34:56,1996-04-12,15:34:56
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/customer.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/customer.tbl b/tajo-core-tests/src/test/resources/tpch/customer.tbl
deleted file mode 100644
index 4f684c6..0000000
--- a/tajo-core-tests/src/test/resources/tpch/customer.tbl
+++ /dev/null
@@ -1,5 +0,0 @@
-1|Customer#000000001|IVhzIApeRb ot,c,E|15|25-989-741-2988|711.56|BUILDING|to the even, regular platelets. regular, ironic epitaphs nag e|
-2|Customer#000000002|XSTf4,NCwDVaWNe6tEgvwfmRchLXak|13|23-768-687-3665|121.65|AUTOMOBILE|l accounts. blithely ironic theodolites integrate boldly: caref|
-3|Customer#000000003|MG9kdTD2WBHm|1|11-719-748-3364|7498.12|AUTOMOBILE| deposits eat slyly ironic, even instructions. express foxes detect slyly. blithely even accounts abov|
-4|Customer#000000004|XxVSJsLAGtn|4|14-128-190-5944|2866.83|MACHINERY| requests. final, regular ideas sleep final accou|
-5|Customer#000000005|KvpyuHCplrB84WgAiGV6sYpZq7Tj|3|13-750-942-6364|794.47|HOUSEHOLD|n accounts will have to unwind. foxes cajole accor|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/empty_orders.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/empty_orders.tbl b/tajo-core-tests/src/test/resources/tpch/empty_orders.tbl
deleted file mode 100644
index e69de29..0000000

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/lineitem.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/lineitem.tbl b/tajo-core-tests/src/test/resources/tpch/lineitem.tbl
deleted file mode 100644
index e3beac9..0000000
--- a/tajo-core-tests/src/test/resources/tpch/lineitem.tbl
+++ /dev/null
@@ -1,5 +0,0 @@
-1|1|7706|1|17|21168.23|0.04|0.02|N|O|1996-03-13|1996-02-12|1996-03-22|DELIVER IN PERSON|TRUCK|egular courts above the|
-1|1|7311|2|36|45983.16|0.09|0.06|N|O|1996-04-12|1996-02-28|1996-04-20|TAKE BACK RETURN|MAIL|ly final dependencies: slyly bold |
-2|2|1191|1|38|44694.46|0.00|0.05|N|O|1997-01-28|1997-01-14|1997-02-02|TAKE BACK RETURN|RAIL|ven requests. deposits breach a|
-3|2|1798|1|45|54058.05|0.06|0.00|R|F|1994-02-02|1994-01-04|1994-02-23|NONE|AIR|ongside of the furiously brave acco|
-3|3|6540|2|49|46796.47|0.10|0.00|R|F|1993-11-09|1993-12-20|1993-11-24|TAKE BACK RETURN|RAIL| unusual accounts. eve|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/nation.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/nation.tbl b/tajo-core-tests/src/test/resources/tpch/nation.tbl
deleted file mode 100644
index ed3fd5b..0000000
--- a/tajo-core-tests/src/test/resources/tpch/nation.tbl
+++ /dev/null
@@ -1,25 +0,0 @@
-0|ALGERIA|0| haggle. carefully final deposits detect slyly agai|
-1|ARGENTINA|1|al foxes promise slyly according to the regular accounts. bold requests alon|
-2|BRAZIL|1|y alongside of the pending deposits. carefully special packages are about the ironic forges. slyly special |
-3|CANADA|1|eas hang ironic, silent packages. slyly regular packages are furiously over the tithes. fluffily bold|
-4|EGYPT|4|y above the carefully unusual theodolites. final dugouts are quickly across the furiously regular d|
-5|ETHIOPIA|0|ven packages wake quickly. regu|
-6|FRANCE|3|refully final requests. regular, ironi|
-7|GERMANY|3|l platelets. regular accounts x-ray: unusual, regular acco|
-8|INDIA|2|ss excuses cajole slyly across the packages. deposits print aroun|
-9|INDONESIA|2| slyly express asymptotes. regular deposits haggle slyly. carefully ironic hockey players sleep blithely. carefull|
-10|IRAN|4|efully alongside of the slyly final dependencies. |
-11|IRAQ|4|nic deposits boost atop the quickly final requests? quickly regula|
-12|JAPAN|2|ously. final, express gifts cajole a|
-13|JORDAN|4|ic deposits are blithely about the carefully regular pa|
-14|KENYA|0| pending excuses haggle furiously deposits. pending, express pinto beans wake fluffily past t|
-15|MOROCCO|0|rns. blithely bold courts among the closely regular packages use furiously bold platelets?|
-16|MOZAMBIQUE|0|s. ironic, unusual asymptotes wake blithely r|
-17|PERU|1|platelets. blithely pending dependencies use fluffily across the even pinto beans. carefully silent accoun|
-18|CHINA|2|c dependencies. furiously express notornis sleep slyly regular accounts. ideas sleep. depos|
-19|ROMANIA|3|ular asymptotes are about the furious multipliers. express dependencies nag above the ironically ironic account|
-20|SAUDI ARABIA|4|ts. silent requests haggle. closely express packages sleep across the blithely|
-21|VIETNAM|2|hely enticingly express accounts. even, final |
-22|RUSSIA|3| requests against the platelets use never according to the quickly regular pint|
-23|UNITED KINGDOM|3|eans boost carefully special requests. accounts are. carefull|
-24|UNITED STATES|1|y final packages. slow foxes cajole quickly. quickly silent platelets breach ironic accounts. unusual pinto be|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/orders.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/orders.tbl b/tajo-core-tests/src/test/resources/tpch/orders.tbl
deleted file mode 100644
index 15a1b6f..0000000
--- a/tajo-core-tests/src/test/resources/tpch/orders.tbl
+++ /dev/null
@@ -1,3 +0,0 @@
-1|3|O|173665.47|1996-01-02|5-LOW|Clerk#000000951|0|nstructions sleep furiously among |
-2|4|O|46929.18|1996-12-01|1-URGENT|Clerk#000000880|0| foxes. pending accounts at the pending, silent asymptot|
-3|2|F|193846.25|1993-10-14|5-LOW|Clerk#000000955|0|sly final accounts boost. carefully regular ideas cajole carefully. depos|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/part.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/part.tbl b/tajo-core-tests/src/test/resources/tpch/part.tbl
deleted file mode 100644
index 6e6fa72..0000000
--- a/tajo-core-tests/src/test/resources/tpch/part.tbl
+++ /dev/null
@@ -1,4 +0,0 @@
-1|goldenrod lavender spring chocolate lace|Manufacturer#1|Brand#13|PROMO BURNISHED COPPER|7|JUMBO PKG|901.00|ly. slyly ironi
-2|blush thistle blue yellow saddle|Manufacturer#1|Brand#13|LARGE BRUSHED BRASS|15|LG CASE|902.00|lar accounts amo
-3|spring green yellow purple cornsilk|Manufacturer#4|Brand#42|STANDARD POLISHED BRASS|21|WRAP CASE|903.00|egular deposits hag
-4|cornflower chocolate smoke green pink|Manufacturer#3|Brand#34|SMALL PLATED BRASS|14|MED DRUM|904.00|p furiously r
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/partsupp.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/partsupp.tbl b/tajo-core-tests/src/test/resources/tpch/partsupp.tbl
deleted file mode 100644
index a6211e6..0000000
--- a/tajo-core-tests/src/test/resources/tpch/partsupp.tbl
+++ /dev/null
@@ -1,3 +0,0 @@
-1|2|3325|771.64|, even theodolites. regular, final theodolites eat after the carefully pending foxes. furiously regular deposits sleep slyly. carefully bold realms above the ironic dependencies haggle careful|
-2|3|8895|1.01|nic accounts. final accounts sleep furiously about the ironic, bold packages. regular, regular accounts|
-3|4|4651|920.92|ilent foxes affix furiously quickly unusual requests. even packages across the carefully even theodolites nag above the sp|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/region.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/region.tbl b/tajo-core-tests/src/test/resources/tpch/region.tbl
deleted file mode 100644
index c5ebb63..0000000
--- a/tajo-core-tests/src/test/resources/tpch/region.tbl
+++ /dev/null
@@ -1,5 +0,0 @@
-0|AFRICA|lar deposits. blithely final packages cajole. regular waters are final requests. regular accounts are according to |
-1|AMERICA|hs use ironic, even requests. s|
-2|ASIA|ges. thinly even pinto beans ca|
-3|EUROPE|ly final courts cajole furiously final excuse|
-4|MIDDLE EAST|uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core-tests/src/test/resources/tpch/supplier.tbl
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/tpch/supplier.tbl b/tajo-core-tests/src/test/resources/tpch/supplier.tbl
deleted file mode 100644
index a6fafb3..0000000
--- a/tajo-core-tests/src/test/resources/tpch/supplier.tbl
+++ /dev/null
@@ -1,3 +0,0 @@
-2|Supplier#000000002|89eJ5ksX3ImxJQBvxObC,|5|15-679-861-2259|4032.68| slyly bold instructions. idle dependen|
-3|Supplier#000000003|q1,G3Pj6OjIuUYfUoH18BFTKP5aU9bEV3|1|11-383-516-1199|4192.40|blithely silent requests after the express dependencies are sl|
-4|Supplier#000000004|Bk7ah4CK8SYQTepEmvMkkgMwg|15|25-843-787-7479|4641.08|riously even requests above the exp|

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-core/pom.xml b/tajo-core/pom.xml
index b8f1dd9..7a817ab 100644
--- a/tajo-core/pom.xml
+++ b/tajo-core/pom.xml
@@ -69,10 +69,6 @@
           <excludes>
             <exclude>derby.log</exclude>
             <exclude>benchmark/**</exclude>
-            <exclude>src/test/tpch/**</exclude>
-            <exclude>src/test/resources/dataset/**</exclude>
-            <exclude>src/test/resources/queries/**</exclude>
-            <exclude>src/test/resources/results/**</exclude>
             <exclude>src/main/resources/META-INF/services/*</exclude>
             <exclude>src/main/resources/webapps/static/js/*</exclude>
           </excludes>
@@ -231,10 +227,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.tajo</groupId>
-      <artifactId>tajo-jdbc</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.tajo</groupId>
       <artifactId>tajo-rpc-protobuf</artifactId>
     </dependency>
     <dependency>
@@ -406,6 +398,10 @@
               <groupId>com.sun.jersey.jersey-test-framework</groupId>
               <artifactId>jersey-test-framework-grizzly2</artifactId>
             </exclusion>
+            <exclusion>
+              <artifactId>netty-all</artifactId>
+              <groupId>io.netty</groupId>
+            </exclusion>
           </exclusions>
         </dependency>
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java b/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
index 95fba1d..a5adcf6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
+++ b/tajo-core/src/main/java/org/apache/tajo/benchmark/TPCH.java
@@ -222,12 +222,4 @@ public class TPCH extends BenchmarkSet {
     tajo.createExternalTable(tableName, getSchema(tableName),
         new Path(dataDir, tableName).toUri(), meta, partitionMethodDesc);
   }
-
-  public static File getDataFile(String table) {
-    try {
-      return new File(FileUtil.getResourcePath("tpch/" + table + ".tbl").toURI());
-    } catch (Throwable t) {
-      throw new RuntimeException(t);
-    }
-  }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-core/src/main/java/org/apache/tajo/engine/function/FunctionLoader.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/function/FunctionLoader.java b/tajo-core/src/main/java/org/apache/tajo/engine/function/FunctionLoader.java
index b7e4085..b765f5e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/function/FunctionLoader.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/function/FunctionLoader.java
@@ -45,6 +45,7 @@ import org.apache.tajo.util.TUtil;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.net.URISyntaxException;
 import java.util.*;
 
 import static org.apache.tajo.catalog.proto.CatalogProtos.FunctionType.GENERAL;
@@ -99,7 +100,15 @@ public class FunctionLoader {
     if (codePaths != null) {
       FileSystem localFS = FileSystem.getLocal(conf);
       for (String codePathStr : codePaths) {
-        Path codePath = new Path(codePathStr);
+
+        Path codePath;
+        try {
+          codePath = new Path(codePathStr);
+        } catch (IllegalArgumentException e) {
+          LOG.warn(e);
+          continue;
+        }
+
         List<Path> filePaths = TUtil.newList();
         if (localFS.isDirectory(codePath)) {
           for (FileStatus file : localFS.listStatus(codePath, new PathFilter() {

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/tajo-jdbc/pom.xml b/tajo-jdbc/pom.xml
index 3c9d375..f73a4bd 100644
--- a/tajo-jdbc/pom.xml
+++ b/tajo-jdbc/pom.xml
@@ -61,6 +61,13 @@
             </goals>
           </execution>
         </executions>
+        <configuration>
+          <excludes>
+            <exclude>src/test/resources/dataset/**</exclude>
+            <exclude>src/test/resources/queries/**</exclude>
+            <exclude>src/test/resources/results/**</exclude>
+          </excludes>
+        </configuration>
       </plugin>
       <plugin>
         <artifactId>maven-assembly-plugin</artifactId>
@@ -94,6 +101,77 @@
       <artifactId>tajo-client</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.tajo</groupId>
+      <artifactId>tajo-cluster-tests</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-minicluster</artifactId>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-el</groupId>
+          <artifactId>commons-el</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>tomcat</groupId>
+          <artifactId>jasper-runtime</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>tomcat</groupId>
+          <artifactId>jasper-compiler</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.mortbay.jetty</groupId>
+          <artifactId>jsp-2.1-jetty</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.sun.jersey.jersey-test-framework</groupId>
+          <artifactId>jersey-test-framework-grizzly2</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-hdfs</artifactId>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-el</groupId>
+          <artifactId>commons-el</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>tomcat</groupId>
+          <artifactId>jasper-runtime</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>tomcat</groupId>
+          <artifactId>jasper-compiler</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.mortbay.jetty</groupId>
+          <artifactId>jsp-2.1-jetty</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.sun.jersey.jersey-test-framework</groupId>
+          <artifactId>jersey-test-framework-grizzly2</artifactId>
+        </exclusion>
+        <exclusion>
+          <artifactId>netty-all</artifactId>
+          <groupId>io.netty</groupId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/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
deleted file mode 100644
index bd078f6..0000000
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/MetaDataTuple.java
+++ /dev/null
@@ -1,200 +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.jdbc;
-
-import org.apache.tajo.common.TajoDataTypes;
-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.storage.Tuple;
-import org.apache.tajo.util.datetime.TimeMeta;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class MetaDataTuple implements Tuple {
-  List<Datum> values = new ArrayList<Datum>();
-
-  public MetaDataTuple(int size) {
-    values = new ArrayList<Datum>(size);
-    for(int i = 0; i < size; i++) {
-      values.add(NullDatum.get());
-    }
-  }
-
-  @Override
-  public int size() {
-    return values.size();
-  }
-
-  @Override
-  public boolean contains(int fieldid) {
-    return false;
-  }
-
-  @Override
-  public boolean isBlank(int fieldid) {
-    return values.get(fieldid) == null;
-  }
-
-  @Override
-  public boolean isBlankOrNull(int fieldid) {
-    return values.get(fieldid) == null || values.get(fieldid).isNull();
-  }
-
-  @Override
-  public void put(int fieldId, Tuple tuple) {
-    this.put(fieldId, tuple.asDatum(fieldId));
-  }
-
-  @Override
-  public void clear() {
-    values.clear();
-  }
-
-  @Override
-  public void put(int fieldId, Datum value) {
-    values.set(fieldId, value);
-  }
-
-  @Override
-  public void put(Datum[] values) {
-    for (int i = 0; i < values.length; i++) {
-      this.values.set(i, values[i]);
-    }
-  }
-
-  @Override
-  public TajoDataTypes.Type type(int fieldId) {
-    return values.get(fieldId).type();
-  }
-
-  @Override
-  public int size(int fieldId) {
-    return values.get(fieldId).size();
-  }
-
-  @Override
-  public void clearOffset() {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public Datum asDatum(int fieldId) {
-    return values.get(fieldId);
-  }
-
-  @Override
-  public void setOffset(long offset) {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public long getOffset() {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public boolean getBool(int fieldId) {
-    return values.get(fieldId).asBool();
-  }
-
-  @Override
-  public byte getByte(int fieldId) {
-    return values.get(fieldId).asByte();
-  }
-
-  @Override
-  public char getChar(int fieldId) {
-    return values.get(fieldId).asChar();
-  }
-
-  @Override
-  public byte [] getBytes(int fieldId) {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public byte[] getTextBytes(int fieldId) {
-    return values.get(fieldId).asTextBytes();
-  }
-
-  @Override
-  public short getInt2(int fieldId) {
-    return values.get(fieldId).asInt2();
-  }
-
-  @Override
-  public int getInt4(int fieldId) {
-    return values.get(fieldId).asInt4();
-  }
-
-  @Override
-  public long getInt8(int fieldId) {
-    return values.get(fieldId).asInt8();
-  }
-
-  @Override
-  public float getFloat4(int fieldId) {
-    return values.get(fieldId).asFloat4();
-  }
-
-  @Override
-  public double getFloat8(int fieldId) {
-    return values.get(fieldId).asFloat8();
-  }
-
-  @Override
-  public String getText(int fieldId) {
-    return values.get(fieldId).asChars();
-  }
-
-  @Override
-  public TimeMeta getTimeDate(int fieldId) {
-    return values.get(fieldId).asTimeMeta();
-  }
-
-  @Override
-  public ProtobufDatum getProtobufDatum(int fieldId) {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public IntervalDatum getInterval(int fieldId) {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public char[] getUnicodeChars(int fieldId) {
-    return values.get(fieldId).asUnicodeChars();
-  }
-
-  @Override
-  public Tuple clone() throws CloneNotSupportedException {
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-
-  @Override
-  public Datum[] getValues(){
-    throw new TajoRuntimeException(new UnsupportedException());
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
index 0474258..f22bafe 100644
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoDatabaseMetaData.java
@@ -18,7 +18,6 @@
 package org.apache.tajo.jdbc;
 
 import com.google.common.collect.Lists;
-import com.google.protobuf.ServiceException;
 import org.apache.tajo.annotation.Nullable;
 import org.apache.tajo.catalog.*;
 import org.apache.tajo.client.CatalogAdminClient;

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
deleted file mode 100644
index 9fba40a..0000000
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoMetaDataResultSet.java
+++ /dev/null
@@ -1,74 +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.jdbc;
-
-import org.apache.tajo.catalog.Schema;
-import org.apache.tajo.common.TajoDataTypes.Type;
-import org.apache.tajo.storage.Tuple;
-
-import java.io.IOException;
-import java.sql.SQLException;
-import java.util.List;
-
-public class TajoMetaDataResultSet extends TajoResultSetBase {
-  private List<MetaDataTuple> values;
-
-  public TajoMetaDataResultSet(Schema schema, List<MetaDataTuple> values) {
-    super(null, schema, null);
-    setDataTuples(values);
-  }
-
-  public TajoMetaDataResultSet(List<String> columns, List<Type> types, List<MetaDataTuple> values) {
-    super(null, new Schema(), null);
-    int index = 0;
-    if(columns != null) {
-      for(String columnName: columns) {
-        schema.addColumn(columnName, types.get(index++));
-      }
-    }
-    setDataTuples(values);
-  }
-
-  protected void setDataTuples(List<MetaDataTuple> values) {
-    this.values = values;
-    this.totalRow = values == null ? 0 : values.size();
-  }
-
-  @Override
-  protected Tuple nextTuple() throws IOException {
-    if(curRow >= totalRow) {
-      return null;
-    }
-    return values.get(curRow);
-  }
-
-  @Override
-  public void close() throws SQLException {
-  }
-
-  @Override
-  public String getString(int fieldId) throws SQLException {
-    return cur.getText(fieldId - 1);
-  }
-
-  @Override
-  public String getString(String name) throws SQLException {
-    return cur.getText(findColumn(name));
-  }
-}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
new file mode 100644
index 0000000..0c83fd0
--- /dev/null
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestResultSet.java
@@ -0,0 +1,224 @@
+/**
+ * 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.jdbc;
+
+import com.google.common.collect.Lists;
+import com.google.protobuf.ByteString;
+import org.apache.hadoop.fs.Path;
+import org.apache.tajo.IntegrationTest;
+import org.apache.tajo.TajoConstants;
+import org.apache.tajo.TajoTestingCluster;
+import org.apache.tajo.TpchTestBase;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.catalog.statistics.TableStats;
+import org.apache.tajo.client.TajoClient;
+import org.apache.tajo.common.TajoDataTypes.Type;
+import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.datum.DatumFactory;
+import org.apache.tajo.storage.*;
+import org.apache.tajo.util.KeyValueSet;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.io.IOException;
+import java.sql.*;
+import java.util.Calendar;
+import java.util.List;
+import java.util.TimeZone;
+
+import static org.junit.Assert.*;
+
+@Category(IntegrationTest.class)
+public class TestResultSet {
+  private static TajoTestingCluster util;
+  private static TajoConf conf;
+  private static TableDesc desc;
+  private static FileTablespace sm;
+  private static TableMeta scoreMeta;
+  private static Schema scoreSchema;
+  private static List<ByteString> serializedData;
+
+  @BeforeClass
+  public static void setup() throws Exception {
+    util = TpchTestBase.getInstance().getTestingCluster();
+    conf = util.getConfiguration();
+    sm = TablespaceManager.getDefault();
+
+    scoreSchema = new Schema();
+    scoreSchema.addColumn("deptname", Type.TEXT);
+    scoreSchema.addColumn("score", Type.INT4);
+    scoreMeta = CatalogUtil.newTableMeta("TEXT");
+    TableStats stats = new TableStats();
+
+    Path p = new Path(sm.getTableUri("default", "score"));
+    sm.getFileSystem().mkdirs(p);
+    Appender appender = sm.getAppender(scoreMeta, scoreSchema, new Path(p, "score"));
+    RowStoreUtil.RowStoreEncoder encoder = RowStoreUtil.createEncoder(scoreSchema);
+    serializedData = Lists.newArrayList();
+    appender.init();
+
+    int deptSize = 100;
+    int tupleNum = 10000;
+    Tuple tuple;
+    long written = 0;
+    for (int i = 0; i < tupleNum; i++) {
+      tuple = new VTuple(2);
+      String key = "test" + (i % deptSize);
+      tuple.put(0, DatumFactory.createText(key));
+      tuple.put(1, DatumFactory.createInt4(i + 1));
+      written += key.length() + Integer.SIZE;
+      appender.addTuple(tuple);
+      serializedData.add(ByteString.copyFrom(encoder.toBytes(tuple)));
+    }
+    appender.close();
+    stats.setNumRows(tupleNum);
+    stats.setNumBytes(written);
+    stats.setAvgRows(tupleNum);
+    stats.setNumBlocks(1000);
+    stats.setNumShuffleOutputs(100);
+    desc = new TableDesc(CatalogUtil.buildFQName(TajoConstants.DEFAULT_DATABASE_NAME, "score"),
+        scoreSchema, scoreMeta, p.toUri());
+    desc.setStats(stats);
+  }
+
+  @AfterClass
+  public static void terminate() throws IOException {
+
+  }
+
+  @Test
+  public void testMemoryResultSet() throws Exception {
+    TajoMemoryResultSet rs = new TajoMemoryResultSet(null, desc.getSchema(),
+        serializedData, desc.getStats().getNumRows().intValue(), null);
+
+    ResultSetMetaData meta = rs.getMetaData();
+    assertNotNull(meta);
+    Schema schema = scoreSchema;
+    assertEquals(schema.size(), meta.getColumnCount());
+    for (int i = 0; i < meta.getColumnCount(); i++) {
+      assertEquals(schema.getColumn(i).getSimpleName(), meta.getColumnName(i + 1));
+      assertEquals(schema.getColumn(i).getQualifier(), meta.getTableName(i + 1));
+    }
+
+    int i = 0;
+    assertTrue(rs.isBeforeFirst());
+    for (; rs.next(); i++) {
+      assertEquals("test"+i%100, rs.getString(1));
+      assertEquals("test"+i%100, rs.getString("deptname"));
+      assertEquals(i+1, rs.getInt(2));
+      assertEquals(i+1, rs.getInt("score"));
+    }
+    assertEquals(10000, i);
+    assertTrue(rs.isAfterLast());
+  }
+
+  @Test
+  public void testDateTimeType() throws Exception {
+    // HiveCatalog does not support date type, time type in hive-0.12.0
+    if(util.isHiveCatalogStoreRunning()) return;
+
+    ResultSet res = null;
+    TajoClient client = util.newTajoClient();
+    try {
+      String tableName = "datetimetable";
+      String query = "select col1, col2, col3 from " + tableName;
+
+      String [] table = new String[] {tableName};
+      Schema schema = new Schema();
+      schema.addColumn("col1", Type.DATE);
+      schema.addColumn("col2", Type.TIME);
+      schema.addColumn("col3", Type.TIMESTAMP);
+      Schema [] schemas = new Schema[] {schema};
+      String [] data = {
+          "2014-01-01|01:00:00|2014-01-01 01:00:00"
+      };
+      KeyValueSet tableOptions = new KeyValueSet();
+      tableOptions.set(StorageConstants.TEXT_DELIMITER, StorageConstants.DEFAULT_FIELD_DELIMITER);
+
+      res = TajoTestingCluster
+          .run(table, schemas, tableOptions, new String[][]{data}, query, client);
+
+      assertTrue(res.next());
+
+      Date date = res.getDate(1);
+      assertNotNull(date);
+      assertEquals(Date.valueOf("2014-01-01"), date);
+
+      date = res.getDate("col1");
+      assertNotNull(date);
+      assertEquals(Date.valueOf("2014-01-01"), date);
+
+      Time time = res.getTime(2);
+      assertNotNull(time);
+      assertEquals(Time.valueOf("01:00:00"), time);
+
+      time = res.getTime("col2");
+      assertNotNull(time);
+      assertEquals(Time.valueOf("01:00:00"), time);
+
+      Timestamp timestamp = res.getTimestamp(3);
+      assertNotNull(timestamp);
+      assertEquals(Timestamp.valueOf("2014-01-01 01:00:00"), timestamp);
+
+      timestamp = res.getTimestamp("col3");
+      assertNotNull(timestamp);
+      assertEquals(Timestamp.valueOf("2014-01-01 01:00:00"), timestamp);
+
+      // assert with timezone
+      Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+9"));
+      date = res.getDate(1, cal);
+      assertNotNull(date);
+      assertEquals("2014-01-01", date.toString());
+
+      date = res.getDate("col1", cal);
+      assertNotNull(date);
+      assertEquals("2014-01-01", date.toString());
+
+      time = res.getTime(2, cal);
+      assertNotNull(time);
+      assertEquals("10:00:00", time.toString());
+
+      time = res.getTime("col2", cal);
+      assertNotNull(time);
+      assertEquals("10:00:00", time.toString());
+
+      timestamp = res.getTimestamp(3, cal);
+      assertNotNull(timestamp);
+      assertEquals("2014-01-01 10:00:00.0", timestamp.toString());
+
+      timestamp = res.getTimestamp("col3", cal);
+      assertNotNull(timestamp);
+      assertEquals("2014-01-01 10:00:00.0", timestamp.toString());
+    } finally {
+      if (res != null) {
+        res.close();
+      }
+
+      client.close();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestSQLState.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
new file mode 100644
index 0000000..e711524
--- /dev/null
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestSQLState.java
@@ -0,0 +1,91 @@
+/*
+ * 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.jdbc;
+
+import com.google.common.collect.Maps;
+import org.apache.hadoop.io.IOUtils;
+import org.apache.tajo.*;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.client.QueryClient;
+import org.apache.tajo.client.QueryStatus;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.net.InetSocketAddress;
+import java.sql.*;
+import java.util.*;
+
+import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
+import static org.junit.Assert.*;
+
+@Category(IntegrationTest.class)
+public class TestSQLState extends QueryTestCaseBase {
+  private static InetSocketAddress tajoMasterAddress;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
+    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+  }
+
+  static String buildConnectionUri(String hostName, int port, String databaseName) {
+    return "jdbc:tajo://" + hostName + ":" + port + "/" + databaseName;
+  }
+
+  private Connection makeConnection() throws SQLException {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+
+    return conn;
+  }
+
+  public void assertSQLState(String sql, String sqlState) throws SQLException {
+    Connection conn = null;
+    Statement stmt = null;
+    ResultSet res = null;
+
+    try {
+      conn = makeConnection();
+      stmt = conn.createStatement();
+      res = stmt.executeQuery(sql);
+    } catch (SQLException se) {
+      assertEquals(sqlState, se.getSQLState());
+    } catch (Throwable t) {
+      fail(t.getMessage());
+    } finally {
+      CatalogUtil.closeQuietly(stmt, res);
+      CatalogUtil.closeQuietly(conn);
+    }
+  }
+
+  @Test
+  public void testSyntaxError() throws Exception {
+    assertSQLState("selec x,y,x from lineitem", "42601");
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
new file mode 100644
index 0000000..8ee6755
--- /dev/null
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoDatabaseMetaData.java
@@ -0,0 +1,504 @@
+/**
+ * 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.jdbc;
+
+import com.google.common.collect.Sets;
+import org.apache.tajo.QueryTestCaseBase;
+import org.apache.tajo.TajoConstants;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.common.type.TajoTypeUtil;
+import org.apache.tajo.util.TUtil;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.net.InetSocketAddress;
+import java.sql.*;
+import java.util.*;
+
+import static org.junit.Assert.*;
+
+public class TestTajoDatabaseMetaData extends QueryTestCaseBase {
+  private static InetSocketAddress tajoMasterAddress;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
+    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
+  }
+
+  public static List<String> getListFromResultSet(ResultSet resultSet, String columnName) throws SQLException {
+    List<String> list = new ArrayList<String>();
+    while(resultSet.next()) {
+      list.add(resultSet.getString(columnName));
+    }
+    return list;
+  }
+
+  @Test
+  public void testSetAndGetCatalogAndSchema() throws Exception {
+    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+
+    assertDatabaseNotExists("jdbc_test1");
+    PreparedStatement pstmt = conn.prepareStatement("CREATE DATABASE jdbc_test1");
+    pstmt.executeUpdate();
+    assertDatabaseExists("jdbc_test1");
+    pstmt.close();
+
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      assertDatabaseNotExists("Jdbc_Test2");
+      pstmt = conn.prepareStatement("CREATE DATABASE \"Jdbc_Test2\"");
+      pstmt.executeUpdate();
+      assertDatabaseExists("Jdbc_Test2");
+      pstmt.close();
+    }
+
+    conn.setCatalog("jdbc_test1");
+    assertEquals("jdbc_test1", conn.getCatalog());
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      conn.setCatalog("Jdbc_Test2");
+      assertEquals("Jdbc_Test2", conn.getCatalog());
+    }
+    conn.setCatalog("jdbc_test1");
+    assertEquals("jdbc_test1", conn.getCatalog());
+
+    ResultSet resultSet = conn.getMetaData().getSchemas();
+    assertResultSet(resultSet, "getSchemas1.result");
+    resultSet.close();
+
+    resultSet = conn.getMetaData().getSchemas("jdbc_test1", "%");
+    assertResultSet(resultSet, "getSchemas2.result");
+    resultSet.close();
+
+    resultSet = conn.getMetaData().getTableTypes();
+    assertResultSet(resultSet, "getTableTypes.result");
+    resultSet.close();
+
+    conn.setCatalog(TajoConstants.DEFAULT_DATABASE_NAME);
+    pstmt = conn.prepareStatement("DROP DATABASE jdbc_test1");
+    pstmt.executeUpdate();
+    pstmt.close();
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      pstmt = conn.prepareStatement("DROP DATABASE \"Jdbc_Test2\"");
+      pstmt.executeUpdate();
+      pstmt.close();
+    }
+
+    conn.close();
+  }
+
+  @Test
+  public void testGetCatalogsAndTables() throws Exception {
+    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection defaultConnect = DriverManager.getConnection(connUri);
+
+    DatabaseMetaData dbmd = defaultConnect.getMetaData();
+    List<String> existingDatabases = getListFromResultSet(dbmd.getCatalogs(), "TABLE_CAT");
+
+    // create database "jdbc_test1" and its tables
+    assertDatabaseNotExists("jdbc_test3");
+    PreparedStatement pstmt = defaultConnect.prepareStatement("CREATE DATABASE jdbc_test3");
+    pstmt.executeUpdate();
+    assertDatabaseExists("jdbc_test3");
+    pstmt.close();
+    pstmt = defaultConnect.prepareStatement("CREATE TABLE jdbc_test3.table1 (age int)");
+    pstmt.executeUpdate();
+    pstmt.close();
+    pstmt = defaultConnect.prepareStatement("CREATE TABLE jdbc_test3.table2 (age int)");
+    pstmt.executeUpdate();
+    pstmt.close();
+
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      // create database "jdbc_test2" and its tables
+      assertDatabaseNotExists("Jdbc_Test4");
+      pstmt = defaultConnect.prepareStatement("CREATE DATABASE \"Jdbc_Test4\"");
+      pstmt.executeUpdate();
+      assertDatabaseExists("Jdbc_Test4");
+      pstmt.close();
+
+      pstmt = defaultConnect.prepareStatement("CREATE TABLE \"Jdbc_Test4\".table3 (age int)");
+      pstmt.executeUpdate();
+      pstmt.close();
+      pstmt = defaultConnect.prepareStatement("CREATE TABLE \"Jdbc_Test4\".table4 (age int)");
+      pstmt.executeUpdate();
+      pstmt.close();
+    }
+
+    // verify getCatalogs()
+    dbmd = defaultConnect.getMetaData();
+    List<String> newDatabases = getListFromResultSet(dbmd.getCatalogs(), "TABLE_CAT");
+
+    newDatabases.removeAll(existingDatabases);
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      assertEquals(2, newDatabases.size());
+    } else {
+      assertEquals(1, newDatabases.size());
+    }
+    assertTrue(newDatabases.contains("jdbc_test3"));
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      assertTrue(newDatabases.contains("Jdbc_Test4"));
+    }
+
+    // verify getTables()
+    ResultSet res = defaultConnect.getMetaData().getTables("jdbc_test3", null, null, null);
+    assertResultSet(res, "getTables1.result");
+    res.close();
+
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      res = defaultConnect.getMetaData().getTables("Jdbc_Test4", null, null, null);
+      assertResultSet(res, "getTables2.result");
+      res.close();
+    }
+
+    defaultConnect.close();
+
+    // jdbc1_test database connection test
+    String jdbcTest1ConnUri =
+        TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(), "jdbc_test3");
+    Connection jdbcTest1Conn = DriverManager.getConnection(jdbcTest1ConnUri);
+    assertEquals("jdbc_test3", jdbcTest1Conn.getCatalog());
+    jdbcTest1Conn.close();
+
+    client.selectDatabase("default");
+    executeString("DROP TABLE jdbc_test3.table1");
+    executeString("DROP TABLE jdbc_test3.table2");
+    executeString("DROP DATABASE jdbc_test3");
+
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      String jdbcTest2ConnUri =
+          TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(), "Jdbc_Test4");
+      Connection jdbcTest2Conn = DriverManager.getConnection(jdbcTest2ConnUri);
+      assertEquals("Jdbc_Test4", jdbcTest2Conn.getCatalog());
+      jdbcTest2Conn.close();
+
+      client.selectDatabase("default");
+      executeString("DROP TABLE \"Jdbc_Test4\".table3");
+      executeString("DROP TABLE \"Jdbc_Test4\".table4");
+      executeString("DROP DATABASE \"Jdbc_Test4\"");
+    }
+  }
+
+  @Test
+  public void testGetTablesWithPattern() throws Exception {
+    String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+
+    Map<String,List<String>> tables = new HashMap<String,List<String>>();
+    assertDatabaseNotExists("db_1");
+    executeString("CREATE DATABASE db_1");
+    assertDatabaseExists("db_1");
+    for (int i = 0; i < 3; i++) {
+      String tableName = "tb_" + i;
+      TUtil.putToNestedList(tables, "db_1", tableName);
+      executeString("CREATE TABLE db_1." + tableName + " (age int)");
+    }
+    for (int i = 0; i < 3; i++) {
+      String tableName = "table_" + i + "_ptn";
+      TUtil.putToNestedList(tables, "db_1", tableName);
+      executeString("CREATE TABLE db_1." + tableName + " (age int)");
+    }
+
+    assertDatabaseNotExists("db_2");
+    executeString("CREATE DATABASE db_2");
+    assertDatabaseExists("db_2");
+    for (int i = 0; i < 3; i++) {
+      String tableName = "tb_" + i;
+      TUtil.putToNestedList(tables, "db_2", tableName);
+      executeString("CREATE TABLE db_2." + tableName + " (age int)");
+    }
+    for (int i = 0; i < 3; i++) {
+      String tableName = "table_" + i + "_ptn";
+      TUtil.putToNestedList(tables, "db_2", tableName);
+      executeString("CREATE TABLE db_2." + tableName + " (age int)");
+    }
+
+    // all wildcard test
+    Set<String> tableList =
+        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "%", null), "TABLE_NAME"));
+    assertEquals(Sets.newHashSet(tables.get("db_2")), tableList);
+
+    // leading wildcard test
+    tableList =
+        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "%_ptn", null), "TABLE_NAME"));
+    assertEquals(Sets.newHashSet("table_0_ptn", "table_1_ptn", "table_2_ptn"), tableList);
+
+    // tailing wildcard test
+    tableList =
+        Sets.newHashSet(getListFromResultSet(conn.getMetaData().getTables("db_2", null, "tb_%", null), "TABLE_NAME"));
+    assertEquals(Sets.newHashSet("tb_0", "tb_1", "tb_2"), tableList);
+
+    ResultSet resultSet = conn.getMetaData().getTables(null, null, "tb\\_%", null);
+    int i = 0;
+    while(resultSet.next()) {
+      tables.get(resultSet.getString("TABLE_CAT")).contains(resultSet.getString("TABLE_NAME"));
+      i++;
+    }
+    assertEquals(6, i);
+
+    executeString("DROP DATABASE db_1");
+    executeString("DROP DATABASE db_2");
+  }
+
+  private static String getTestColName(String dbName, String tableName, int i) {
+    if (i % 2 == 1) {
+      return CatalogUtil.denormalizeIdentifier(dbName + "_" + tableName + "_col") + " int";
+    } else {
+      return CatalogUtil.denormalizeIdentifier(dbName + "_" + tableName + "_COL") + " int";
+    }
+  }
+
+  @Test
+  public void testGetColumnsWithPattern() throws Exception {
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+          TajoConstants.DEFAULT_DATABASE_NAME);
+      Connection conn = DriverManager.getConnection(connUri);
+
+      // Below creates the following 12 tables
+      // db<i>.tb<j>, i = {1,2}, 0 <= j < 2
+      // db<i>.table_<j>, i = {1,2}, 0 <= j < 2
+
+      Map<String,List<String>> tables = new HashMap<String,List<String>>();
+      for (int j = 1; j <= 2; j++) {
+        String dbName = "db" + j;
+        assertDatabaseNotExists(dbName);
+        executeString("CREATE DATABASE " + dbName).close();
+        assertDatabaseExists(dbName);
+        for (int i = 3; i < 6; i++) {
+          String tableName = "tb" + i;
+
+
+          if (i % 2 == 0) {
+            tableName = tableName.toUpperCase();
+          }
+
+          TUtil.putToNestedList(tables, dbName, tableName);
+
+          executeString("CREATE TABLE " + dbName + "." + CatalogUtil.denormalizeIdentifier(tableName) +
+              " (" + getTestColName(dbName, tableName, 1) +
+              ") PARTITION BY COLUMN (" + getTestColName(dbName, tableName, 2) + ")").close();
+          assertTableExists(dbName + "." + tableName);
+        }
+        for (int i = 3; i < 6; i++) {
+          String tableName = "table" + i;
+
+
+          if (i % 2 == 0) {
+            tableName = tableName.toUpperCase();
+          }
+
+          TUtil.putToNestedList(tables, dbName, tableName);
+
+          executeString("CREATE TABLE " + dbName + "." + CatalogUtil.denormalizeIdentifier(tableName) +
+              " (" + getTestColName(dbName, tableName, 1) +
+              ") PARTITION BY COLUMN (" + getTestColName(dbName, tableName, 2) + ")").close();
+          assertTableExists(dbName + "." + tableName);
+        }
+      }
+
+      // all wildcard test on columns
+      Set<String> columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%"),
+              "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
+
+      // tailing wildcard + case sensitive test on columns
+      columnList = Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%col"),
+          "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db2_tb3_col"), columnList);
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "%COL"),
+              "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db2_tb3_COL"), columnList);
+
+      // tailing wildcard test on columns
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "tb3", "db2\\_tb3\\_%"),
+              "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "%", "db2\\_tb3\\_%"),
+              "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db2_tb3_col", "db2_tb3_COL"), columnList);
+
+      // leading wildcard test on tables
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db1", null, "%3", "%"),
+              "COLUMN_NAME"));
+      assertEquals(
+          Sets.newHashSet(
+              "db1_tb3_col", "db1_tb3_COL",
+              "db1_table3_col", "db1_table3_COL"),
+          columnList);
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "%3", "%"),
+              "COLUMN_NAME"));
+      assertEquals(
+          Sets.newHashSet(
+              "db2_tb3_col", "db2_tb3_COL",
+              "db2_table3_col", "db2_table3_COL"),
+          columnList);
+
+      // tailing wildcard + case sensitive test on tables
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "TABLE%", "%"),
+              "COLUMN_NAME"));
+      assertEquals(
+          Sets.newHashSet(
+              "db2_TABLE4_col", "db2_TABLE4_COL"), columnList);
+
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "TABLE4", "%"),
+              "COLUMN_NAME"));
+      assertEquals(
+          Sets.newHashSet(
+              "db2_TABLE4_col", "db2_TABLE4_COL"),
+          columnList);
+
+      // tailing wildcard test on tables
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns("db2", null, "table%", "%"),
+              "COLUMN_NAME"));
+      assertEquals(
+          Sets.newHashSet(
+              "db2_table3_col", "db2_table3_COL",
+              "db2_table5_col", "db2_table5_COL"),
+          columnList);
+
+      // wildcard test on database
+      columnList =
+          Sets.newHashSet(getListFromResultSet(conn.getMetaData().getColumns(null, null, "%3", "db1_tb3%"),
+              "COLUMN_NAME"));
+      assertEquals(Sets.newHashSet("db1_tb3_col", "db1_tb3_COL"), columnList);
+
+      executeString("DROP DATABASE db1");
+      executeString("DROP DATABASE db2");
+    }
+  }
+
+  @Test
+  public void testEmptyMetaInfo() throws Exception {
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+          TajoConstants.DEFAULT_DATABASE_NAME);
+      Connection conn = DriverManager.getConnection(connUri);
+
+      try {
+        DatabaseMetaData meta = conn.getMetaData();
+
+        ResultSet res = meta.getProcedures(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getProcedureColumns(null, null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getUDTs(null, null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getColumnPrivileges(null, null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getTablePrivileges(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getBestRowIdentifier(null, null, null, 0, false);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getVersionColumns(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getPrimaryKeys(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getImportedKeys(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getExportedKeys(null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getCrossReference(null, null, null, null, null, null);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getIndexInfo(null, null, null, false, false);
+        assertNotNull(res);
+        assertFalse(res.next());
+
+        res = meta.getClientInfoProperties();
+        assertNotNull(res);
+        assertFalse(res.next());
+      } finally {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public void testGetTypeInfo() throws Exception {
+    if (!testingCluster.isHiveCatalogStoreRunning()) {
+      String connUri = TestTajoJdbc.buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+          TajoConstants.DEFAULT_DATABASE_NAME);
+      Connection conn = DriverManager.getConnection(connUri);
+
+      try {
+        DatabaseMetaData meta = conn.getMetaData();
+
+        ResultSet res = meta.getTypeInfo();
+
+        assertNotNull(res);
+
+        int numTypes = 0;
+
+        String[] columnNames = {"TYPE_NAME", "DATA_TYPE", "PRECISION", "LITERAL_PREFIX", "LITERAL_SUFFIX",
+            "CREATE_PARAMS", "NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE",
+            "FIXED_PREC_SCALE", "AUTO_INCREMENT", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE",
+            "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX"};
+
+        while (res.next()) {
+          for (int i = 0; i < columnNames.length; i++) {
+            Object value = res.getObject(columnNames[i]);
+            if (i == 15 || i == 16) {
+              assertNull(value);
+            } else {
+              assertNotNull(value);
+            }
+          }
+          numTypes++;
+        }
+
+        assertEquals(numTypes, TajoTypeUtil.getTypeInfos().size());
+      } finally {
+        conn.close();
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
new file mode 100644
index 0000000..e6d01fe
--- /dev/null
+++ b/tajo-jdbc/src/test/java/org/apache/tajo/jdbc/TestTajoJdbc.java
@@ -0,0 +1,607 @@
+/**
+ * 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.jdbc;
+
+import com.google.common.collect.Maps;
+import org.apache.tajo.*;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.Column;
+import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.client.QueryStatus;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+import java.net.InetSocketAddress;
+import java.sql.*;
+import java.util.*;
+
+import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME;
+import static org.junit.Assert.*;
+
+@Category(IntegrationTest.class)
+public class TestTajoJdbc extends QueryTestCaseBase {
+  private static InetSocketAddress tajoMasterAddress;
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    tajoMasterAddress = testingCluster.getMaster().getTajoMasterClientService().getBindAddress();
+    Class.forName("org.apache.tajo.jdbc.TajoDriver").newInstance();
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+  }
+
+  public static String buildConnectionUri(String hostName, int port, String databaseName) {
+    return "jdbc:tajo://" + hostName + ":" + port + "/" + databaseName;
+  }
+
+  @Test
+  public void testAcceptURL() throws SQLException {
+    TajoDriver driver = new TajoDriver();
+    assertTrue(driver.acceptsURL("jdbc:tajo:"));
+    assertFalse(driver.acceptsURL("jdbc:taju:"));
+  }
+
+  @Test(expected = SQLException.class)
+  public void testGetConnection() throws SQLException {
+    DriverManager.getConnection("jdbc:taju://" + tajoMasterAddress.getHostName() + ":" + tajoMasterAddress.getPort()
+      + "/default");
+  }
+
+  @Test
+  public void testStatement() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+
+    Statement stmt = null;
+    ResultSet res = null;
+    try {
+      stmt = conn.createStatement();
+
+      res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
+        "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
+
+      try {
+        Map<String, Integer> result = Maps.newHashMap();
+        result.put("NO", 3);
+        result.put("RF", 2);
+
+        assertNotNull(res);
+        assertTrue(res.next());
+        assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+        assertTrue(res.next());
+        assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+        assertFalse(res.next());
+
+        ResultSetMetaData rsmd = res.getMetaData();
+        assertEquals(3, rsmd.getColumnCount());
+        assertEquals("l_returnflag", rsmd.getColumnName(1));
+        assertEquals("l_linestatus", rsmd.getColumnName(2));
+        assertEquals("count_order", rsmd.getColumnName(3));
+      } finally {
+        res.close();
+      }
+    } finally {
+      if (res != null) {
+        res.close();
+      }
+      if (stmt != null) {
+        stmt.close();
+      }
+      if (conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public void testPreparedStatement() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+
+    PreparedStatement stmt = null;
+    ResultSet res = null;
+    try {
+      /*
+      test data set
+      1,17.0,N
+      1,36.0,N
+      2,38.0,N
+      3,45.0,R
+      3,49.0,R
+      */
+
+      String sql =
+        "select l_orderkey, l_quantity, l_returnflag from lineitem where l_quantity > ? and l_returnflag = ?";
+
+      stmt = conn.prepareStatement(sql);
+
+      stmt.setInt(1, 20);
+      stmt.setString(2, "N");
+
+      res = stmt.executeQuery();
+
+      ResultSetMetaData rsmd = res.getMetaData();
+      assertEquals(3, rsmd.getColumnCount());
+      assertEquals("l_orderkey", rsmd.getColumnName(1));
+      assertEquals("l_quantity", rsmd.getColumnName(2));
+      assertEquals("l_returnflag", rsmd.getColumnName(3));
+
+      try {
+        int numRows = 0;
+        String[] resultData = {"136.0N", "238.0N"};
+        while (res.next()) {
+          assertEquals(resultData[numRows],
+            ("" + res.getObject(1).toString() + res.getObject(2).toString() + res.getObject(3).toString()));
+          numRows++;
+        }
+        assertEquals(2, numRows);
+      } finally {
+        res.close();
+      }
+
+      stmt.setInt(1, 20);
+      stmt.setString(2, "R");
+
+      res = stmt.executeQuery();
+
+      rsmd = res.getMetaData();
+      assertEquals(3, rsmd.getColumnCount());
+      assertEquals("l_orderkey", rsmd.getColumnName(1));
+      assertEquals("l_quantity", rsmd.getColumnName(2));
+      assertEquals("l_returnflag", rsmd.getColumnName(3));
+
+      try {
+        int numRows = 0;
+        String[] resultData = {"345.0R", "349.0R"};
+        while (res.next()) {
+          assertEquals(resultData[numRows],
+            ("" + res.getObject(1).toString() + res.getObject(2).toString() + res.getObject(3).toString()));
+          numRows++;
+        }
+        assertEquals(2, numRows);
+      } finally {
+        res.close();
+      }
+    } finally {
+      if (res != null) {
+        res.close();
+      }
+      if (stmt != null) {
+        stmt.close();
+      }
+      if (conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public void testDatabaseMetaDataGetTable() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+
+    DatabaseMetaData dbmd = conn.getMetaData();
+
+    ResultSet rs = null;
+
+    try {
+      rs = dbmd.getTables("default", null, null, null);
+
+      ResultSetMetaData rsmd = rs.getMetaData();
+      int numCols = rsmd.getColumnCount();
+      assertEquals(5, numCols);
+
+      Set<String> retrivedViaJavaAPI = new HashSet<String>(client.getTableList("default"));
+
+      Set<String> retrievedViaJDBC = new HashSet<String>();
+      while (rs.next()) {
+        retrievedViaJDBC.add(rs.getString("TABLE_NAME"));
+      }
+      assertEquals(retrievedViaJDBC, retrivedViaJavaAPI);
+    } finally {
+      if (rs != null) {
+        rs.close();
+      }
+    }
+
+    assertTrue(conn.isValid(100));
+    conn.close();
+  }
+
+  @Test
+  public void testDatabaseMetaDataGetColumns() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      TajoConstants.DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+
+    DatabaseMetaData dbmd = conn.getMetaData();
+    ResultSet rs = null;
+
+    try {
+      String tableName = "lineitem";
+      rs = dbmd.getColumns(null, null, tableName, null);
+
+      ResultSetMetaData rsmd = rs.getMetaData();
+      int numCols = rsmd.getColumnCount();
+
+      assertEquals(22, numCols);
+      int numColumns = 0;
+
+      TableDesc tableDesc = client.getTableDesc(CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, tableName));
+      assertNotNull(tableDesc);
+
+      List<Column> columns = tableDesc.getSchema().getRootColumns();
+
+      while (rs.next()) {
+        assertEquals(tableName, rs.getString("TABLE_NAME"));
+        assertEquals(columns.get(numColumns).getSimpleName(), rs.getString("COLUMN_NAME"));
+        // TODO assert type
+        numColumns++;
+      }
+
+      assertEquals(16, numColumns);
+    } finally {
+      if (rs != null) {
+        rs.close();
+      }
+    }
+
+    assertTrue(conn.isValid(100));
+    conn.close();
+    assertFalse(conn.isValid(100));
+  }
+
+  @Test
+  public void testMultipleConnections() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      TajoConstants.DEFAULT_DATABASE_NAME);
+
+    Connection[] conns = new Connection[2];
+    conns[0] = DriverManager.getConnection(connUri);
+    conns[1] = DriverManager.getConnection(connUri);
+
+    try {
+      for (int i = 0; i < conns.length; i++) {
+        Statement stmt = null;
+        ResultSet res = null;
+        try {
+          stmt = conns[i].createStatement();
+
+          res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
+            "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
+
+          try {
+            Map<String, Integer> result = Maps.newHashMap();
+            result.put("NO", 3);
+            result.put("RF", 2);
+
+            assertNotNull(res);
+            assertTrue(res.next());
+            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+            assertTrue(res.next());
+            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+            assertFalse(res.next());
+
+            ResultSetMetaData rsmd = res.getMetaData();
+            assertEquals(3, rsmd.getColumnCount());
+            assertEquals("l_returnflag", rsmd.getColumnName(1));
+            assertEquals("l_linestatus", rsmd.getColumnName(2));
+            assertEquals("count_order", rsmd.getColumnName(3));
+          } finally {
+            res.close();
+          }
+        } finally {
+          if (res != null) {
+            res.close();
+          }
+          if (stmt != null) {
+            stmt.close();
+          }
+        }
+      }
+    } finally {
+      assertTrue(conns[0].isValid(100));
+      conns[0].close();
+      assertFalse(conns[0].isValid(100));
+      assertTrue(conns[1].isValid(100));
+      conns[1].close();
+      assertFalse(conns[1].isValid(100));
+    }
+  }
+
+  @Test
+  public void testMultipleConnectionsSequentialClose() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      DEFAULT_DATABASE_NAME);
+
+    Connection[] conns = new Connection[2];
+    conns[0] = DriverManager.getConnection(connUri);
+    conns[1] = DriverManager.getConnection(connUri);
+
+    try {
+      for (int i = 0; i < conns.length; i++) {
+        Statement stmt = null;
+        ResultSet res = null;
+        try {
+          stmt = conns[i].createStatement();
+
+          res = stmt.executeQuery("select l_returnflag, l_linestatus, count(*) as count_order from lineitem " +
+            "group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus");
+
+          try {
+            Map<String, Integer> result = Maps.newHashMap();
+            result.put("NO", 3);
+            result.put("RF", 2);
+
+            assertNotNull(res);
+            assertTrue(res.next());
+            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+            assertTrue(res.next());
+            assertTrue(result.get(res.getString(1) + res.getString(2)) == res.getInt(3));
+            assertFalse(res.next());
+
+            ResultSetMetaData rsmd = res.getMetaData();
+            assertEquals(3, rsmd.getColumnCount());
+            assertEquals("l_returnflag", rsmd.getColumnName(1));
+            assertEquals("l_linestatus", rsmd.getColumnName(2));
+            assertEquals("count_order", rsmd.getColumnName(3));
+          } finally {
+            res.close();
+          }
+        } finally {
+          if (res != null) {
+            res.close();
+          }
+          if (stmt != null) {
+            stmt.close();
+          }
+          conns[i].close();
+        }
+      }
+    } finally {
+      if (!conns[0].isClosed()) {
+        assertTrue(conns[0].isValid(100));
+        conns[0].close();
+        assertFalse(conns[0].isValid(100));
+      }
+      if (!conns[1].isClosed()) {
+        assertTrue(conns[1].isValid(100));
+        conns[1].close();
+        assertFalse(conns[1].isValid(100));
+      }
+    }
+  }
+
+  @Test
+  public void testCreateTableWithDateAndTimestamp() throws Exception {
+    String tableName = CatalogUtil.normalizeIdentifier("testCreateTableWithDateAndTimestamp");
+
+    int result;
+    Statement stmt = null;
+    ResultSet res = null;
+    Connection conn = null;
+    try {
+      String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        DEFAULT_DATABASE_NAME);
+      conn = DriverManager.getConnection(connUri);
+      assertTrue(conn.isValid(100));
+
+      stmt = conn.createStatement();
+      result = stmt.executeUpdate("create table " + tableName + " (id int, name text, score double"
+        + ", register_date timestamp, update_date date, send_date time)");
+      assertEquals(result, 1);
+
+      res = stmt.executeQuery("select * from " + tableName);
+      assertFalse(res.next());
+
+      ResultSetMetaData rsmd = res.getMetaData();
+      assertNotNull(rsmd);
+      assertEquals(6, rsmd.getColumnCount());
+
+      assertEquals("id", rsmd.getColumnName(1));
+      assertEquals("name", rsmd.getColumnName(2));
+      assertEquals("score", rsmd.getColumnName(3));
+      assertEquals("register_date", rsmd.getColumnName(4));
+      assertEquals("update_date", rsmd.getColumnName(5));
+      assertEquals("send_date", rsmd.getColumnName(6));
+
+      assertEquals("integer", rsmd.getColumnTypeName(1));
+      assertEquals("varchar", rsmd.getColumnTypeName(2));
+      assertEquals("double", rsmd.getColumnTypeName(3));
+      assertEquals("timestamp", rsmd.getColumnTypeName(4));
+      assertEquals("date", rsmd.getColumnTypeName(5));
+      assertEquals("time", rsmd.getColumnTypeName(6));
+
+    } finally {
+      cleanupQuery(res);
+      if (stmt != null) {
+        stmt.close();
+      }
+
+      if(conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public void testSortWithDateTime() throws Exception {
+    Statement stmt = null;
+    ResultSet res = null;
+    Connection conn = null;
+    int result;
+
+    // skip this test if catalog uses HiveCatalogStore.
+    // It is because HiveCatalogStore does not support Time data type.
+    try {
+      if (!testingCluster.isHiveCatalogStoreRunning()) {
+        executeDDL("create_table_with_date_ddl.sql", "table1");
+
+        String connUri = buildConnectionUri(tajoMasterAddress.getHostName(),
+          tajoMasterAddress.getPort(), "TestTajoJdbc");
+
+        conn = DriverManager.getConnection(connUri);
+        assertTrue(conn.isValid(100));
+
+        stmt = conn.createStatement();
+        res = stmt.executeQuery("select col1, col2, col3 from table1 order by col1, col2, col3");
+
+        ResultSetMetaData rsmd = res.getMetaData();
+        assertNotNull(rsmd);
+        assertEquals(3, rsmd.getColumnCount());
+
+        assertEquals("timestamp", rsmd.getColumnTypeName(1));
+        assertEquals("date", rsmd.getColumnTypeName(2));
+        assertEquals("time", rsmd.getColumnTypeName(3));
+
+        assertResultSet(res);
+
+        result = stmt.executeUpdate("drop table table1");
+        assertEquals(result, 1);
+
+      }
+    } finally {
+      cleanupQuery(res);
+      if (stmt != null) {
+        stmt.close();
+      }
+
+      if(conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+
+  @Test
+  public void testAlterTableAddPartition() throws Exception {
+    Statement stmt = null;
+    ResultSet resultSet = null;
+    int retCode = 0;
+    Connection conn = null;
+    int result;
+    String errorMessage = null;
+
+    // skip this test if catalog uses HiveCatalogStore.
+    // It is because HiveCatalogStore does not support Time data type.
+    try {
+      if (!testingCluster.isHiveCatalogStoreRunning()) {
+        String connUri = buildConnectionUri(tajoMasterAddress.getHostName(),
+          tajoMasterAddress.getPort(), "TestTajoJdbc");
+
+        conn = DriverManager.getConnection(connUri);
+        assertTrue(conn.isValid(100));
+
+        String tableName = CatalogUtil.normalizeIdentifier("testAlterTablePartition");
+        resultSet = executeString(
+          "create table " + tableName + " (col1 int4, col2 int4) partition by column(key float8) ");
+        resultSet.close();
+
+        stmt = conn.createStatement();
+        result  = stmt.executeUpdate("alter table " + tableName + " add partition (key = 0.1)");
+        assertEquals(result, 1);
+     }
+    } finally {      
+      cleanupQuery(resultSet);
+      if (stmt != null) {
+        stmt.close();
+      }
+
+      if(conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public void testMaxRows() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+      DEFAULT_DATABASE_NAME);
+    Connection conn = DriverManager.getConnection(connUri);
+    assertTrue(conn.isValid(100));
+    Statement stmt = null;
+    ResultSet res = null;
+    //Parameter value setting for test.
+    final int maxRowsNum = 3;
+    int resultRowsNum = 0, returnMaxRows = 0;
+    try {
+      stmt = conn.createStatement();
+      //set maxRows(3)
+      stmt.setMaxRows(maxRowsNum);
+      //get MaxRows
+      returnMaxRows = stmt.getMaxRows();
+      res = stmt.executeQuery("select * from lineitem");
+      assertNotNull(res);
+      while (res.next()) {
+        //Actuality result Rows.
+        resultRowsNum++;	
+      }
+      //The test success, if maxRowsNum and resultRowsNum and returnMaxRows is same.
+      assertTrue(maxRowsNum == resultRowsNum && maxRowsNum == returnMaxRows);
+    } finally {
+      if (res != null) {
+        cleanupQuery(res);
+      }
+      if (stmt != null) {
+        stmt.close();
+      }
+      if (conn != null) {
+        conn.close();
+      }
+    }
+  }
+
+  @Test
+  public final void testCancel() throws Exception {
+    String connUri = buildConnectionUri(tajoMasterAddress.getHostName(), tajoMasterAddress.getPort(),
+        DEFAULT_DATABASE_NAME);
+    Properties props = new Properties();
+    props.setProperty(SessionVars.BLOCK_ON_RESULT.keyname(), "false");
+
+    Connection conn = new JdbcConnection(connUri, props);
+    PreparedStatement statement = conn.prepareStatement("select sleep(1) from lineitem");
+    try {
+      assertTrue("should have result set", statement.execute());
+      TajoResultSetBase result = (TajoResultSetBase) statement.getResultSet();
+      Thread.sleep(1000);   // todo query master is not killed properly if it's compiling the query (use 100, if you want see)
+      statement.cancel();
+
+      QueryStatus status = client.getQueryStatus(result.getQueryId());
+      assertEquals(TajoProtos.QueryState.QUERY_KILLED, status.getState());
+    } finally {
+      if (statement != null) {
+        statement.close();
+      }
+      if (conn != null) {
+        conn.close();
+      }
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl b/tajo-jdbc/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
new file mode 100644
index 0000000..52fa2fe
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/dataset/TestTajoJdbc/table1/table1.tbl
@@ -0,0 +1,5 @@
+1997-11-09 20:34:56|1996-04-12|15:34:56
+1997-11-09 20:34:56|1996-03-13|19:34:56
+1993-11-09 20:34:56|1997-01-28|08:34:56
+1995-11-09 20:34:56|1994-02-02|17:34:56
+1995-11-09 20:34:56|1993-11-09|20:34:56

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql b/tajo-jdbc/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
new file mode 100644
index 0000000..caeeaf9
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/queries/TestTajoJdbc/create_table_with_date_ddl.sql
@@ -0,0 +1,10 @@
+-- Sort Table
+-- It is used in TestSortQuery::testSortWithDate
+
+create external table table1 (
+  col1 timestamp,
+	col2 date,
+	col3 time
+) using text
+with ('text.delimiter'='|', 'text.null'='NULL')
+location ${table.path};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
new file mode 100644
index 0000000..0a013d9
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas1.result
@@ -0,0 +1,3 @@
+TABLE_SCHEM,TABLE_CATALOG
+-------------------------------
+,jdbc_test1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
new file mode 100644
index 0000000..0a013d9
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getSchemas2.result
@@ -0,0 +1,3 @@
+TABLE_SCHEM,TABLE_CATALOG
+-------------------------------
+,jdbc_test1
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
new file mode 100644
index 0000000..29b90ab
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTableTypes.result
@@ -0,0 +1,3 @@
+TABLE_TYPE
+-------------------------------
+TABLE
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
new file mode 100644
index 0000000..201d325
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables1.result
@@ -0,0 +1,4 @@
+TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
+-------------------------------
+jdbc_test3,,table1,TABLE,
+jdbc_test3,,table2,TABLE,
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
new file mode 100644
index 0000000..65cde70
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoDatabaseMetaData/getTables2.result
@@ -0,0 +1,4 @@
+TABLE_CAT,TABLE_SCHEM,TABLE_NAME,TABLE_TYPE,REMARKS
+-------------------------------
+Jdbc_Test4,,table3,TABLE,
+Jdbc_Test4,,table4,TABLE,
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tajo/blob/e296a0d1/tajo-jdbc/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
----------------------------------------------------------------------
diff --git a/tajo-jdbc/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result b/tajo-jdbc/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
new file mode 100644
index 0000000..118909c
--- /dev/null
+++ b/tajo-jdbc/src/test/resources/results/TestTajoJdbc/testSortWithDateTime.result
@@ -0,0 +1,7 @@
+col1,col2,col3
+-------------------------------
+1993-11-09 20:34:56,1997-01-28,08:34:56
+1995-11-09 20:34:56,1993-11-09,20:34:56
+1995-11-09 20:34:56,1994-02-02,17:34:56
+1997-11-09 20:34:56,1996-03-13,19:34:56
+1997-11-09 20:34:56,1996-04-12,15:34:56
\ No newline at end of file