http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
----------------------------------------------------------------------
diff --cc 
tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
index e6566dc,e73a032..79ba71f
--- 
a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
+++ 
b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
@@@ -26,12 -26,13 +26,20 @@@ import org.apache.tajo.catalog.TableDes
  import org.apache.tajo.catalog.TableMeta;
  import org.apache.tajo.catalog.partition.PartitionMethodDesc;
  import org.apache.tajo.catalog.proto.CatalogProtos;
++<<<<<<< HEAD
 +import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
 +import org.apache.tajo.ipc.ClientProtos;
 +import org.apache.tajo.ipc.ClientProtos.*;
 +import org.apache.tajo.jdbc.SQLStates;
++=======
+ import org.apache.tajo.catalog.proto.CatalogProtos.FunctionDescProto;
+ import org.apache.tajo.catalog.proto.CatalogProtos.TableResponse;
+ import org.apache.tajo.exception.SQLExceptionUtil;
+ import org.apache.tajo.ipc.ClientProtos;
+ import org.apache.tajo.ipc.ClientProtos.DropTableRequest;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.rpc.NettyClientBase;
- import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
+ import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListResponse;
  
  import java.io.IOException;
  import java.net.URI;
@@@ -113,11 -133,18 +140,26 @@@ public class CatalogAdminClientImpl imp
      if (partitionMethodDesc != null) {
        builder.setPartition(partitionMethodDesc.getProto());
      }
++<<<<<<< HEAD
 +    ClientProtos.TableResponse res = 
tajoMasterService.createExternalTable(null, builder.build());
 +    if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
 +      return CatalogUtil.newTableDesc(res.getTableDesc());
 +    } else {
 +      throw new SQLException(res.getResult().getErrorMessage(), 
SQLStates.ER_NO_SUCH_TABLE.getState());
++=======
+ 
+     TableResponse res;
+     try {
+       res = tajoMasterService.createExternalTable(null, builder.build());
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     if (isSuccess(res.getState())) {
+       return CatalogUtil.newTableDesc(res.getTable());
+     } else {
+       throw SQLExceptionUtil.toSQLException(res.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
    }
  
@@@ -158,120 -187,36 +202,152 @@@
    }
  
    @Override
++<<<<<<< HEAD
 +  public TableDesc getTableDesc(final String tableName) throws 
ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +
 +    SessionedStringProto.Builder builder = SessionedStringProto.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setValue(tableName);
 +    ClientProtos.TableResponse res = tajoMasterService.getTableDesc(null, 
builder.build());
 +    if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
 +      return CatalogUtil.newTableDesc(res.getTableDesc());
 +    } else {
 +      throw new ServiceException(new 
SQLException(res.getResult().getErrorMessage(),
 +          SQLStates.ER_NO_SUCH_TABLE.getState()));
++=======
+   public TableDesc getTableDesc(final String tableName) throws SQLException {
+ 
+     final BlockingInterface stub = conn.getTMStub();
+ 
+     TableResponse res;
+     try {
+       res = stub.getTableDesc(null, conn.getSessionedString(tableName));
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
+ 
+     throwIfError(res.getState());
+     return CatalogUtil.newTableDesc(res.getTable());
    }
  
    @Override
++<<<<<<< HEAD
 +  public List<CatalogProtos.FunctionDescProto> getFunctions(final String 
functionName) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +
 +    String paramFunctionName = functionName == null ? "" : functionName;
 +    ClientProtos.FunctionResponse res = 
tajoMasterService.getFunctionList(null,
 +        connection.convertSessionedString(paramFunctionName));
 +    if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
 +      return res.getFunctionsList();
 +    } else {
 +      throw new ServiceException(res.getResult().getErrorMessage());
 +    }
 +  }
 +
 +  @Override
 +  public IndexDescProto getIndex(final String indexName) throws 
ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    return tajoMasterService.getIndexWithName(null,
 +        connection.convertSessionedString(indexName));
 +  }
 +
 +  @Override
 +  public boolean existIndex(final String indexName) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    return tajoMasterService.existIndexWithName(null,
 +        connection.convertSessionedString(indexName)).getValue();
 +  }
 +
 +  @Override
 +  public List<IndexDescProto> getIndexes(final String tableName) throws 
ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    GetIndexesResponse response = tajoMasterService.getIndexesForTable(null,
 +        connection.convertSessionedString(tableName));
 +    if (response.getResult().getResultCode() == ResultCode.OK) {
 +      return response.getIndexesList();
 +    } else {
 +      throw new ServiceException(response.getResult().getErrorMessage());
 +    }
 +  }
 +
 +  @Override
 +  public boolean hasIndexes(final String tableName) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    return tajoMasterService.existIndexesForTable(null,
 +        connection.convertSessionedString(tableName)).getValue();
 +  }
 +
 +  @Override
 +  public IndexDescProto getIndex(final String tableName, final String[] 
columnNames) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    GetIndexWithColumnsRequest.Builder builder = 
GetIndexWithColumnsRequest.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setTableName(tableName);
 +    for (String eachColumnName : columnNames) {
 +      builder.addColumnNames(eachColumnName);
 +    }
 +    GetIndexWithColumnsResponse response = 
tajoMasterService.getIndexWithColumns(null, builder.build());
 +    if (response.getResult().getResultCode() == ResultCode.OK) {
 +      return response.getIndexDesc();
 +    } else {
 +      throw new ServiceException(response.getResult().getErrorMessage());
 +    }
 +  }
 +
 +  @Override
 +  public boolean existIndex(final String tableName, final String[] 
columnName) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    GetIndexWithColumnsRequest.Builder builder = 
GetIndexWithColumnsRequest.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setTableName(tableName);
 +    for (String eachColumnName : columnName) {
 +      builder.addColumnNames(eachColumnName);
 +    }
 +    return tajoMasterService.existIndexWithColumns(null, 
builder.build()).getValue();
 +  }
 +
 +  @Override
 +  public boolean dropIndex(final String indexName) throws ServiceException {
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    BlockingInterface tajoMasterService = client.getStub();
 +    return tajoMasterService.dropIndex(null,
 +        connection.convertSessionedString(indexName)).getValue();
++=======
+   public List<FunctionDescProto> getFunctions(final String functionName) 
throws SQLException {
+ 
+     final BlockingInterface stub = conn.getTMStub();
+ 
+     String paramFunctionName = functionName == null ? "" : functionName;
+     CatalogProtos.FunctionListResponse res;
+     try {
+       res = stub.getFunctionList(null, 
conn.getSessionedString(paramFunctionName));
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     throwIfError(res.getState());
+     return res.getFunctionList();
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
    }
  
    @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
----------------------------------------------------------------------
diff --cc tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
index 71e3179,80a49c2..04098fc
--- a/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
@@@ -152,41 -144,23 +144,55 @@@ public class QueryClientImpl implement
    }
  
    @Override
-   public ClientProtos.SubmitQueryResponse executeQuery(final String sql) 
throws ServiceException {
-     NettyClientBase client = connection.getTajoMasterConnection();
-     connection.checkSessionAndGet(client);
+   public ClientProtos.SubmitQueryResponse executeQuery(final String sql) 
throws SQLException {
  
++<<<<<<< HEAD
 +    final QueryRequest.Builder builder = QueryRequest.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setQuery(sql);
 +    builder.setIsJson(false);
 +    TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
 +    SubmitQueryResponse response = tajoMasterService.submitQuery(null, 
builder.build());
 +    if (response.getResult().getResultCode() == ResultCode.OK) {
 +      
connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
++=======
+     final BlockingInterface stub = conn.getTMStub();
+     final QueryRequest request = buildQueryRequest(sql, false);
+ 
+     SubmitQueryResponse response;
+     try {
+       response = stub.submitQuery(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     if (isSuccess(response.getState())) {
+       
conn.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
+ 
      return response;
 +
 +//<<<<<<< HEAD
 +//        connection.checkSessionAndGet(client);
 +//
 +//        final QueryRequest.Builder builder = QueryRequest.newBuilder();
 +//        builder.setSessionId(connection.sessionId);
 +//        builder.setQuery(sql);
 +//        builder.setIsJson(false);
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//
 +//
 +//
 +//      }
 +//    }.withRetries();
 +//=======
 +//    SubmitQueryResponse response = tajoMasterService.submitQuery(null, 
builder.build());
 +//    if (response.getResultCode() == ResultCode.OK) {
 +//      
connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +//    }
 +//    return response;
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
    }
  
    @Override
@@@ -206,17 -176,10 +208,21 @@@
    }
  
    @Override
-   public ResultSet executeQueryAndGetResult(String sql) throws 
ServiceException, IOException {
+   public ResultSet executeQueryAndGetResult(String sql) throws SQLException {
  
      ClientProtos.SubmitQueryResponse response = executeQuery(sql);
++<<<<<<< HEAD
 +
 +    if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.ERROR) {
 +      if (response.getResult().hasErrorMessage()) {
 +        throw new ServiceException(response.getResult().getErrorMessage());
 +      } else if (response.getResult().hasErrorTrace()) {
 +        throw new ServiceException(response.getResult().getErrorTrace());
 +      }
 +    }
++=======
+     throwIfError(response.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
      QueryId queryId = new QueryId(response.getQueryId());
  
@@@ -242,16 -205,12 +248,19 @@@
    }
  
    @Override
-   public ResultSet executeJsonQueryAndGetResult(final String json) throws 
ServiceException, IOException {
+   public ResultSet executeJsonQueryAndGetResult(final String json) throws 
SQLException {
  
      ClientProtos.SubmitQueryResponse response = executeQueryWithJson(json);
++<<<<<<< HEAD
 +
 +    if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.ERROR) {
 +      throw new ServiceException(response.getResult().getErrorTrace());
 +    }
++=======
+     throwIfError(response.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
      QueryId queryId = new QueryId(response.getQueryId());
- 
      if (response.getIsForwarded()) {
  
        if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) {
@@@ -361,161 -315,67 +365,195 @@@
    }
  
    @Override
-   public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, 
final int fetchRowNum)
-       throws ServiceException {
+   public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, 
final int fetchRowNum) throws SQLException {
  
++<<<<<<< HEAD
 +    try {
 +//<<<<<<< HEAD
 +//      final ServerCallable<ClientProtos.SerializedResultSet> callable =
 +//          new 
ServerCallable<ClientProtos.SerializedResultSet>(connection.manager, 
connection.getTajoMasterAddr(),
 +//              TajoMasterClientProtocol.class, false) {
 +//
 +//            public ClientProtos.SerializedResultSet call(NettyClientBase 
client) throws ServiceException {
 +//
 +//              connection.checkSessionAndGet(client);
 +//              TajoMasterClientProtocolService.BlockingInterface 
tajoMasterService = client.getStub();
 +//
 +//              GetQueryResultDataRequest.Builder builder = 
GetQueryResultDataRequest.newBuilder();
 +//              builder.setSessionId(connection.sessionId);
 +//              builder.setQueryId(queryId.getProto());
 +//              builder.setFetchRowNum(fetchRowNum);
 +//              try {
 +//                GetQueryResultDataResponse response = 
tajoMasterService.getQueryResultData(null, builder.build());
 +//                if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.ERROR) {
 +//                  abort();
 +//                  throw new 
ServiceException(response.getResult().getErrorMessage());
 +//                }
 +//
 +//                return response.getResultSet();
 +//              } catch (ServiceException e) {
 +//                abort();
 +//                throw e;
 +//              } catch (Throwable t) {
 +//                throw new ServiceException(t.getMessage(), t);
 +//              }
 +//            }
 +//          };
 +//
 +//      ClientProtos.SerializedResultSet serializedResultSet = 
callable.withRetries();
 +//=======
 +      NettyClientBase client = connection.getTajoMasterConnection();
 +      connection.checkSessionAndGet(client);
 +      TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
 +
 +      GetQueryResultDataRequest.Builder builder = 
GetQueryResultDataRequest.newBuilder();
 +      builder.setSessionId(connection.sessionId);
 +      builder.setQueryId(queryId.getProto());
 +      builder.setFetchRowNum(fetchRowNum);
 +
 +      GetQueryResultDataResponse response = 
tajoMasterService.getQueryResultData(null, builder.build());
 +      if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.ERROR) {
 +        throw new ServiceException(response.getResult().getErrorMessage());
 +      }
 +
 +      ClientProtos.SerializedResultSet resultSet = response.getResultSet();
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
++=======
+     final BlockingInterface stub = conn.getTMStub();
+     final GetQueryResultDataRequest request = 
GetQueryResultDataRequest.newBuilder()
+         .setSessionId(conn.sessionId)
+         .setQueryId(queryId.getProto())
+         .setFetchRowNum(fetchRowNum)
+         .build();
+ 
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
-       return new TajoMemoryResultSet(queryId,
-           new Schema(resultSet.getSchema()),
-           resultSet.getSerializedTuplesList(),
-           resultSet.getSerializedTuplesCount(),
-           getClientSideSessionVars());
+     GetQueryResultDataResponse response;
+     try {
+       response = stub.getQueryResultData(null, request);
      } catch (ServiceException e) {
-       throw e;
-     } catch (Throwable e) {
-       throw new ServiceException(e.getMessage(), e);
+       throw new RuntimeException(e);
      }
+ 
+     throwIfError(response.getState());
+ 
+     ClientProtos.SerializedResultSet resultSet = response.getResultSet();
+     return new TajoMemoryResultSet(queryId,
+         new Schema(resultSet.getSchema()),
+         resultSet.getSerializedTuplesList(),
+         resultSet.getSerializedTuplesCount(),
+         getClientSideSessionVars());
    }
  
    @Override
-   public boolean updateQuery(final String sql) throws ServiceException {
+   public boolean updateQuery(final String sql) throws SQLException {
  
-     NettyClientBase client = connection.getTajoMasterConnection();
-     connection.checkSessionAndGet(client);
-     TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
- 
-     QueryRequest.Builder builder = QueryRequest.newBuilder();
-     builder.setSessionId(connection.sessionId);
-     builder.setQuery(sql);
-     builder.setIsJson(false);
-     ClientProtos.UpdateQueryResponse response = 
tajoMasterService.updateQuery(null, builder.build());
+     final BlockingInterface stub = conn.getTMStub();
+     final QueryRequest request = buildQueryRequest(sql, false);
  
++<<<<<<< HEAD
 +//<<<<<<< HEAD
 +//        connection.checkSessionAndGet(client);
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//
 +//        QueryRequest.Builder builder = QueryRequest.newBuilder();
 +//        builder.setSessionId(connection.sessionId);
 +//        builder.setQuery(sql);
 +//        builder.setIsJson(false);
 +//        ClientProtos.UpdateQueryResponse response = 
tajoMasterService.updateQuery(null, builder.build());
 +//
 +//        if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.OK) {
 +//          
connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +//          return true;
 +//        } else {
 +//          if (response.getResult().hasErrorMessage()) {
 +//            System.err.println("ERROR: " + 
response.getResult().getErrorMessage());
 +//          }
 +//          return false;
 +//        }
 +//=======
 +    if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
 +      
connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +      return true;
 +    } else {
 +      if (response.getResult().hasErrorMessage()) {
 +        LOG.error("ERROR: " + response.getResult().getErrorMessage());
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
 +      }
 +      return false;
++=======
+     UpdateQueryResponse response;
+     try {
+       response = stub.updateQuery(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
+ 
+     throwIfError(response.getState());
+     
conn.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
+ 
+     return true;
    }
  
    @Override
-   public boolean updateQueryWithJson(final String json) throws 
ServiceException {
+   public boolean updateQueryWithJson(final String json) throws SQLException {
  
++<<<<<<< HEAD
 +//<<<<<<< HEAD
 +//    return new ServerCallable<Boolean>(connection.manager, 
connection.getTajoMasterAddr(),
 +//        TajoMasterClientProtocol.class, false) {
 +//
 +//      public Boolean call(NettyClientBase client) throws ServiceException {
 +//
 +//        connection.checkSessionAndGet(client);
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//
 +//        QueryRequest.Builder builder = QueryRequest.newBuilder();
 +//        builder.setSessionId(connection.sessionId);
 +//        builder.setQuery(json);
 +//        builder.setIsJson(true);
 +//        ClientProtos.UpdateQueryResponse response = 
tajoMasterService.updateQuery(null, builder.build());
 +//        if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.OK) {
 +//          return true;
 +//        } else {
 +//          if (response.getResult().hasErrorMessage()) {
 +//            System.err.println("ERROR: " + 
response.getResult().getErrorMessage());
 +//          }
 +//          return false;
 +//        }
 +//=======
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +    TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
 +
 +    QueryRequest.Builder builder = QueryRequest.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setQuery(json);
 +    builder.setIsJson(true);
 +    ClientProtos.UpdateQueryResponse response = 
tajoMasterService.updateQuery(null, builder.build());
 +    if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
 +      return true;
 +    } else {
 +      if (response.getResult().hasErrorMessage()) {
 +        LOG.error("ERROR: " + response.getResult().getErrorMessage());
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
 +      }
 +      return false;
++=======
+     final BlockingInterface stub = conn.getTMStub();
+     final QueryRequest request = buildQueryRequest(json, true);
+ 
+     UpdateQueryResponse response;
+     try {
+       response = stub.updateQuery(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
+ 
+     throwIfError(response.getState());
+     return true;
    }
  
    @Override
@@@ -606,46 -471,23 +649,63 @@@
        return this.maxRows;
    }
    
++<<<<<<< HEAD
 +  public QueryInfoProto getQueryInfo(final QueryId queryId) throws 
ServiceException {
 +//<<<<<<< HEAD
 +//    return new ServerCallable<QueryInfoProto>(connection.manager, 
connection.getTajoMasterAddr(),
 +//        TajoMasterClientProtocol.class, false) {
 +//      public QueryInfoProto call(NettyClientBase client) throws 
ServiceException {
 +//        connection.checkSessionAndGet(client);
 +//
 +//        QueryIdRequest.Builder builder = QueryIdRequest.newBuilder();
 +//        builder.setSessionId(connection.sessionId);
 +//        builder.setQueryId(queryId.getProto());
 +//
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//        GetQueryInfoResponse res = 
tajoMasterService.getQueryInfo(null,builder.build());
 +//        if (res.getResult().getResultCode() == ResultCode.OK) {
 +//          return res.getQueryInfo();
 +//        } else {
 +//          abort();
 +//          throw new ServiceException(res.getResult().getErrorMessage());
 +//        }
 +//      }
 +//    }.withRetries();
 +//=======
 +    NettyClientBase client = connection.getTajoMasterConnection();
 +    connection.checkSessionAndGet(client);
 +
 +    QueryIdRequest.Builder builder = QueryIdRequest.newBuilder();
 +    builder.setSessionId(connection.sessionId);
 +    builder.setQueryId(queryId.getProto());
 +
 +    TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
 +    GetQueryInfoResponse res = 
tajoMasterService.getQueryInfo(null,builder.build());
 +    if (res.getResult().getResultCode() == ResultCode.OK) {
 +      return res.getQueryInfo();
 +    } else {
 +      throw new ServiceException(res.getResult().getErrorMessage());
 +    }
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
++=======
+   public QueryInfoProto getQueryInfo(final QueryId queryId) throws 
SQLException {
+ 
+     final BlockingInterface stub = conn.getTMStub();
+     final QueryIdRequest request = buildQueryIdRequest(queryId);
+ 
+     GetQueryInfoResponse res;
+     try {
+       res = stub.getQueryInfo(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     throwIfError(res.getState());
+     return res.getQueryInfo();
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
    }
  
-   public QueryHistoryProto getQueryHistory(final QueryId queryId) throws 
ServiceException {
+   public QueryHistoryProto getQueryHistory(final QueryId queryId) throws 
SQLException {
      final QueryInfoProto queryInfo = getQueryInfo(queryId);
  
      if (queryInfo.getHostNameOfQM() == null || 
queryInfo.getQueryMasterClientPort() == 0) {
@@@ -655,41 -498,63 +716,89 @@@
          queryInfo.getHostNameOfQM(), queryInfo.getQueryMasterClientPort());
  
      RpcClientManager manager = RpcClientManager.getInstance();
-     NettyClientBase queryMasterClient;
-     try {
-       queryMasterClient = manager.newClient(qmAddress, 
QueryMasterClientProtocol.class, false,
-           manager.getRetries(), manager.getTimeoutSeconds(), 
TimeUnit.SECONDS, false);
-     } catch (Exception e) {
-       throw new ServiceException(e);
-     }
+     NettyClientBase qmClient = null;
  
      try {
++<<<<<<< HEAD
 +      connection.checkSessionAndGet(connection.getTajoMasterConnection());
 +
 +//<<<<<<< HEAD
 +//        QueryMasterClientProtocolService.BlockingInterface 
queryMasterService = client.getStub();
 +//        GetQueryHistoryResponse res = 
queryMasterService.getQueryHistory(null,builder.build());
 +//        if (res.getResult().getResultCode() == ResultCode.OK) {
 +//          return res.getQueryHistory();
 +//        } else {
 +//          abort();
 +//          throw new ServiceException(res.getResult().getErrorMessage());
 +//        }
 +//=======
 +      QueryIdRequest.Builder builder = QueryIdRequest.newBuilder();
 +      builder.setSessionId(connection.sessionId);
 +      builder.setQueryId(queryId.getProto());
 +
 +      QueryMasterClientProtocolService.BlockingInterface queryMasterService = 
queryMasterClient.getStub();
 +      GetQueryHistoryResponse res = queryMasterService.getQueryHistory(null, 
builder.build());
 +      if (res.getResult().getResultCode() == ResultCode.OK) {
 +        return res.getQueryHistory();
 +      } else {
 +        throw new ServiceException(res.getResult().getErrorMessage());
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
++=======
+ 
+       qmClient = manager.newClient(
+           qmAddress,
+           QueryMasterClientProtocol.class,
+           false,
+           manager.getRetries(),
+           manager.getTimeoutSeconds(),
+           TimeUnit.SECONDS,
+           false
+       );
+ 
+       conn.checkSessionAndGet(conn.getTajoMasterConnection());
+ 
+       QueryIdRequest request = QueryIdRequest.newBuilder()
+           .setSessionId(conn.sessionId)
+           .setQueryId(queryId.getProto())
+           .build();
+ 
+       QueryMasterClientProtocolService.BlockingInterface stub = 
qmClient.getStub();
+       GetQueryHistoryResponse res;
+       try {
+         res = stub.getQueryHistory(null, request);
+       } catch (ServiceException e) {
+         throw new RuntimeException(e);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
+ 
+       throwIfError(res.getState());
+       return res.getQueryHistory();
+ 
+     } catch (ConnectException e) {
+       throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
+     } catch (ClassNotFoundException e) {
+       throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
+     } catch (NoSuchMethodException e) {
+       throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
+     } catch (SQLException e) {
+       throw e;
      } finally {
-       queryMasterClient.close();
+       qmClient.close();
      }
    }
+ 
+   private QueryIdRequest buildQueryIdRequest(QueryId queryId) {
+     return ClientProtos.QueryIdRequest.newBuilder()
+         .setSessionId(SessionIdProto.newBuilder().setId(getSessionId()))
+         .setQueryId(queryId.getProto())
+         .build();
+   }
+ 
+   private QueryRequest buildQueryRequest(String query, boolean json) {
+     return QueryRequest.newBuilder()
+         .setSessionId(conn.sessionId)
+         .setQuery(query)
+         .setIsJson(json)
+         .build();
+   }
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/QueryStatus.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
----------------------------------------------------------------------
diff --cc 
tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
index fece670,788d193..ad6dbd5
--- a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
@@@ -161,86 -185,67 +185,130 @@@ public class SessionConnection implemen
      NettyClientBase client = getTajoMasterConnection();
      checkSessionAndGet(client);
  
-     TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
-     return tajoMasterService.getCurrentDatabase(null, sessionId).getValue();
+     BlockingInterface tajoMasterService = client.getStub();
+ 
+     StringResponse response;
+     try {
+       response = tajoMasterService.getCurrentDatabase(null, sessionId);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     throwIfError(response.getState());
+     return response.getValue();
    }
  
++<<<<<<< HEAD
 +  public Map<String, String> updateSessionVariables(final Map<String, String> 
variables) throws ServiceException {
 +//<<<<<<< HEAD
 +//    return new ServerCallable<Map<String, String>>(manager, 
getTajoMasterAddr(),
 +//        TajoMasterClientProtocol.class, false) {
 +//
 +//      public Map<String, String> call(NettyClientBase client) throws 
ServiceException {
 +//        checkSessionAndGet(client);
 +//
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//        KeyValueSet keyValueSet = new KeyValueSet();
 +//        keyValueSet.putAll(variables);
 +//        ClientProtos.UpdateSessionVariableRequest request = 
ClientProtos.UpdateSessionVariableRequest.newBuilder()
 +//            .setSessionId(sessionId)
 +//            .setSessionVars(keyValueSet.getProto()).build();
 +//
 +//        SessionUpdateResponse response = 
tajoMasterService.updateSessionVariables(null, request);
 +//
 +//        if (response.getResult().getResultCode() == ResultCode.OK) {
 +//          
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +//          return Collections.unmodifiableMap(sessionVarsCache);
 +//        } else {
 +//          throw new 
ServiceException(response.getResult().getErrorMessage());
 +//        }
 +//      }
 +//    }.withRetries();
 +//  }
 +//=======
++=======
+   public Map<String, String> updateSessionVariables(final Map<String, String> 
variables) throws SQLException {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      NettyClientBase client = getTajoMasterConnection();
      checkSessionAndGet(client);
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
  
-     TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
+     BlockingInterface tajoMasterService = client.getStub();
      KeyValueSet keyValueSet = new KeyValueSet();
      keyValueSet.putAll(variables);
-     ClientProtos.UpdateSessionVariableRequest request = 
ClientProtos.UpdateSessionVariableRequest.newBuilder()
+     UpdateSessionVariableRequest request = 
UpdateSessionVariableRequest.newBuilder()
          .setSessionId(sessionId)
          .setSessionVars(keyValueSet.getProto()).build();
  
-     SessionUpdateResponse response = 
tajoMasterService.updateSessionVariables(null, request);
+     SessionUpdateResponse response;
  
++<<<<<<< HEAD
 +    if (response.getResult().getResultCode() == ResultCode.OK) {
 +      
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +      return Collections.unmodifiableMap(sessionVarsCache);
 +    } else {
 +      throw new ServiceException(response.getResult().getErrorMessage());
++=======
+     try {
+       response = tajoMasterService.updateSessionVariables(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
+ 
+     if (isSuccess(response.getState())) {
+       
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
+       return Collections.unmodifiableMap(sessionVarsCache);
+     } else {
+       throw toSQLException(response.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
    }
  
-   public Map<String, String> unsetSessionVariables(final List<String> 
variables) throws ServiceException {
-     NettyClientBase client = getTajoMasterConnection();
-     checkSessionAndGet(client);
+   public Map<String, String> unsetSessionVariables(final List<String> 
variables) throws SQLException {
  
++<<<<<<< HEAD
 +//<<<<<<< HEAD
 +//        if (response.getResult().getResultCode() == ResultCode.OK) {
 +//          
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +//          return Collections.unmodifiableMap(sessionVarsCache);
 +//        } else {
 +//          throw new 
ServiceException(response.getResult().getErrorMessage());
 +//        }
 +//      }
 +//    }.withRetries();
 +//=======
 +    TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
 +    ClientProtos.UpdateSessionVariableRequest request = 
ClientProtos.UpdateSessionVariableRequest.newBuilder()
++=======
+     final BlockingInterface stub = getTMStub();
+     final UpdateSessionVariableRequest request = 
UpdateSessionVariableRequest.newBuilder()
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
          .setSessionId(sessionId)
-         .addAllUnsetVariables(variables).build();
+         .addAllUnsetVariables(variables)
+         .build();
  
-     SessionUpdateResponse response = 
tajoMasterService.updateSessionVariables(null, request);
+     SessionUpdateResponse response;
+     try {
+       response = stub.updateSessionVariables(null, request);
+     } catch (ServiceException e) {
+       throw new RuntimeException(e);
+     }
  
++<<<<<<< HEAD
 +    if (response.getResult().getResultCode() == ResultCode.OK) {
 +      
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
 +      return Collections.unmodifiableMap(sessionVarsCache);
 +    } else {
 +      throw new ServiceException(response.getResult().getErrorMessage());
++=======
+     if (isSuccess(response.getState())) {
+       
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
+       return Collections.unmodifiableMap(sessionVarsCache);
+     } else {
+       throw toSQLException(response.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
    }
  
    void updateSessionVarsCache(Map<String, String> variables) {
@@@ -343,18 -361,24 +424,32 @@@
          builder.setBaseDatabaseName(baseDatabase);
        }
  
-       CreateSessionResponse response = tajoMasterService.createSession(null, 
builder.build());
  
++<<<<<<< HEAD
 +      if (response.getResult().getResultCode() == ResultCode.OK) {
++=======
+       CreateSessionResponse response = null;
+ 
+       try {
+         response = tajoMasterService.createSession(null, builder.build());
+       } catch (ServiceException se) {
+         throw new RuntimeException(se);
+       }
+ 
+       if (isSuccess(response.getState())) {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
          sessionId = response.getSessionId();
          
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
          if (LOG.isDebugEnabled()) {
            LOG.debug(String.format("Got session %s as a user '%s'.", 
sessionId.getId(), userInfo.getUserName()));
          }
- 
        } else {
++<<<<<<< HEAD
 +        throw new 
InvalidClientSessionException(response.getResult().getErrorMessage());
++=======
+         throw SQLExceptionUtil.toSQLException(response.getState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
      }
    }
@@@ -368,21 -392,12 +463,25 @@@
  
      NettyClientBase client = getTajoMasterConnection();
  
 +//<<<<<<< HEAD
 +//        // create new session
 +//        TajoMasterClientProtocolService.BlockingInterface tajoMasterService 
= client.getStub();
 +//        CreateSessionResponse response = 
tajoMasterService.createSession(null, builder.build());
 +//        if (response.getResult().getResultCode() != ResultCode.OK) {
 +//          return false;
 +//        }
 +//=======
      // create new session
-     TajoMasterClientProtocolService.BlockingInterface tajoMasterService = 
client.getStub();
+     BlockingInterface tajoMasterService = client.getStub();
      CreateSessionResponse response = tajoMasterService.createSession(null, 
builder.build());
++<<<<<<< HEAD
 +    if (response.getResult().getResultCode() != ResultCode.OK) {
++=======
+     if (isError(response.getState())) {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        return false;
      }
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
  
      // Invalidate some session variables in client cache
      sessionId = response.getSessionId();
@@@ -424,10 -419,9 +523,14 @@@
            .setSessionId(sessionId)
            .setSessionVars(keyValueSet.getProto()).build();
  
++<<<<<<< HEAD
 +      if (tajoMasterService.updateSessionVariables(null, 
request).getResult().getResultCode() != ResultCode.OK) {
++=======
+       if (isError(tajoMasterService.updateSessionVariables(null, 
request).getState())) {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
          tajoMasterService.removeSession(null, sessionId);
          return false;
 +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
        }
        LOG.info(String.format("Reconnected to session %s as a user '%s'.", 
sessionId.getId(), userInfo.getUserName()));
        return true;

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
----------------------------------------------------------------------
diff --cc tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
index a7e94aa,c81fafc..be3c37f
--- a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
@@@ -226,42 -224,7 +225,42 @@@ public class TajoClientImpl extends Ses
      return catalogClient.getTableDesc(tableName);
    }
  
-   public List<CatalogProtos.FunctionDescProto> getFunctions(final String 
functionName) throws ServiceException {
+   public List<CatalogProtos.FunctionDescProto> getFunctions(final String 
functionName) throws SQLException {
      return catalogClient.getFunctions(functionName);
    }
 +
 +  @Override
 +  public IndexDescProto getIndex(String indexName) throws ServiceException {
 +    return catalogClient.getIndex(indexName);
 +  }
 +
 +  @Override
 +  public boolean existIndex(String indexName) throws ServiceException {
 +    return catalogClient.existIndex(indexName);
 +  }
 +
 +  @Override
 +  public List<IndexDescProto> getIndexes(String tableName) throws 
ServiceException {
 +    return catalogClient.getIndexes(tableName);
 +  }
 +
 +  @Override
 +  public boolean hasIndexes(String tableName) throws ServiceException {
 +    return catalogClient.hasIndexes(tableName);
 +  }
 +
 +  @Override
 +  public IndexDescProto getIndex(String tableName, String[] columnNames) 
throws ServiceException {
 +    return catalogClient.getIndex(tableName, columnNames);
 +  }
 +
 +  @Override
 +  public boolean existIndex(String tableName, String[] columnName) throws 
ServiceException {
 +    return catalogClient.existIndex(tableName, columnName);
 +  }
 +
 +  @Override
 +  public boolean dropIndex(String indexName) throws ServiceException {
 +    return catalogClient.dropIndex(indexName);
 +  }
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/proto/ClientProtos.proto
----------------------------------------------------------------------
diff --cc tajo-client/src/main/proto/ClientProtos.proto
index 59ff63f,021cfe7..ed5939c
--- a/tajo-client/src/main/proto/ClientProtos.proto
+++ b/tajo-client/src/main/proto/ClientProtos.proto
@@@ -206,16 -194,6 +192,19 @@@ message DropTableRequest 
    optional bool purge = 3 [default = false];
  }
  
- message TableResponse {
-   required RequestResult result = 1;
-   optional TableDescProto tableDesc = 2;
- }
- 
- message FunctionResponse {
-   required RequestResult result = 1;
-   repeated FunctionDescProto functions = 2;
- }
- 
++//<<<<<<< HEAD
++//message TableResponse {
++//  required RequestResult result = 1;
++//  optional TableDescProto tableDesc = 2;
++//}
++//
++//message FunctionResponse {
++//  required RequestResult result = 1;
++//  repeated FunctionDescProto functions = 2;
++//}
++//
++//=======
++//>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  message QueryInfoProto {
    required string queryId = 1;
    optional string sql = 2;

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
----------------------------------------------------------------------
diff --cc tajo-client/src/main/proto/TajoMasterClientProtocol.proto
index 9c7755a,1dcf1ac..edf98cd
--- a/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
+++ b/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
@@@ -63,18 -65,9 +65,18 @@@ service TajoMasterClientProtocolServic
  
    // Table Management APIs
    rpc createExternalTable(CreateTableRequest) returns (TableResponse);
-   rpc existTable(SessionedStringProto) returns (BoolProto);
-   rpc dropTable(DropTableRequest) returns (BoolProto);
-   rpc getTableList(SessionedStringProto) returns (StringListProto);
+   rpc existTable(SessionedStringProto) returns (ReturnState);
+   rpc dropTable(DropTableRequest) returns (ReturnState);
+   rpc getTableList(SessionedStringProto) returns (StringListResponse);
    rpc getTableDesc(SessionedStringProto) returns (TableResponse);
-   rpc getFunctionList(SessionedStringProto) returns (FunctionResponse);
+   rpc getFunctionList(SessionedStringProto) returns (FunctionListResponse);
 +
 +  // Index Management APIs
 +  rpc getIndexWithName(SessionedStringProto) returns (IndexDescProto);
 +  rpc existIndexWithName(SessionedStringProto) returns (BoolProto);
 +  rpc getIndexesForTable(SessionedStringProto) returns (GetIndexesResponse);
 +  rpc existIndexesForTable(SessionedStringProto) returns (BoolProto);
 +  rpc getIndexWithColumns(GetIndexWithColumnsRequest) returns 
(GetIndexWithColumnsResponse);
 +  rpc existIndexWithColumns(GetIndexWithColumnsRequest) returns (BoolProto);
 +  rpc dropIndex(SessionedStringProto) returns (BoolProto);
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/SessionVars.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
----------------------------------------------------------------------
diff --cc tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
index bbd78dd,66e8acc..f24be61
--- a/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java
@@@ -270,11 -268,12 +270,20 @@@ public class TUtil 
      return element.getClassName() + ":" + element.getMethodName() + "(" + 
element.getLineNumber() +")";
    }
  
 +  public static URI stringToURI(String str) {
 +    try {
 +      return new URI(str);
 +    } catch (URISyntaxException e) {
 +      throw new RuntimeException("Cannot convert " + str + " to the URI 
type", e);
 +    }
 +  }
++
+   public static <T> T checkTypeAndGet(Object instance, Class<T> type) {
+     if (!type.isInstance(instance)) {
+       throw new IllegalArgumentException(instance.getClass().getSimpleName()
+           + " must be a " + type.getSimpleName() + " type");
+ 
+     }
+     return (T) instance;
+   }
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
index 20e8bb8,e433e4f..0b1e585
--- a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java
@@@ -27,12 -27,8 +27,14 @@@ import org.antlr.v4.runtime.tree.Termin
  import org.apache.tajo.SessionVars;
  import org.apache.tajo.algebra.*;
  import org.apache.tajo.algebra.Aggregation.GroupType;
 +import org.apache.tajo.algebra.CreateIndex.IndexMethodSpec;
  import org.apache.tajo.algebra.LiteralValue.LiteralType;
++<<<<<<< HEAD
 +import org.apache.tajo.algebra.Sort.SortSpec;
 +import org.apache.tajo.catalog.CatalogUtil;
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.engine.parser.SQLParser.*;
- import org.apache.tajo.plan.util.PlannerUtil;
  import org.apache.tajo.storage.StorageConstants;
  import org.apache.tajo.util.StringUtils;
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
index 91fce57,00d346a..6bec409
--- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
@@@ -39,7 -39,7 +39,11 @@@ import org.apache.tajo.conf.TajoConf
  import org.apache.tajo.engine.parser.SQLAnalyzer;
  import org.apache.tajo.engine.parser.SQLSyntaxError;
  import org.apache.tajo.engine.query.QueryContext;
++<<<<<<< HEAD
 +import org.apache.tajo.ipc.ClientProtos.ResultCode;
++=======
+ import org.apache.tajo.exception.ExceptionUtil;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.master.TajoMaster.MasterContext;
  import org.apache.tajo.master.exec.DDLExecutor;
  import org.apache.tajo.master.exec.QueryExecutor;
@@@ -48,10 -48,7 +52,14 @@@ import org.apache.tajo.plan.logical.Ins
  import org.apache.tajo.plan.logical.LogicalRootNode;
  import org.apache.tajo.plan.logical.NodeType;
  import org.apache.tajo.plan.util.PlannerUtil;
++<<<<<<< HEAD
 +import org.apache.tajo.plan.verifier.LogicalPlanVerifier;
 +import org.apache.tajo.plan.verifier.PreLogicalPlanVerifier;
 +import org.apache.tajo.plan.verifier.VerificationState;
 +import org.apache.tajo.plan.verifier.VerifyException;
++=======
+ import org.apache.tajo.plan.verifier.*;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.session.Session;
  import org.apache.tajo.storage.TablespaceManager;
  import org.apache.tajo.util.CommonTestingUtil;
@@@ -196,12 -195,7 +208,16 @@@ public class GlobalEngine extends Abstr
        responseBuilder.setUserName(queryContext.get(SessionVars.USERNAME));
        responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
        responseBuilder.setIsForwarded(true);
++<<<<<<< HEAD
 +      String errorMessage = t.getMessage();
 +      if (t.getMessage() == null) {
 +        errorMessage = t.getClass().getName();
 +      }
 +      responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +          errorMessage, StringUtils.stringifyException(t)));
++=======
+       responseBuilder.setState(ReturnStateUtil.returnError(t));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        return responseBuilder.build();
      }
    }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
----------------------------------------------------------------------
diff --cc 
tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
index 76bfb95,6fbe968..7d88b34
--- 
a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
@@@ -32,12 -31,13 +31,17 @@@ import org.apache.hadoop.service.Abstra
  import org.apache.tajo.QueryId;
  import org.apache.tajo.QueryIdFactory;
  import org.apache.tajo.TajoIdProtos;
- import org.apache.tajo.TajoProtos;
+ import org.apache.tajo.TajoProtos.QueryState;
  import org.apache.tajo.catalog.*;
- import org.apache.tajo.catalog.exception.NoSuchDatabaseException;
+ import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
  import org.apache.tajo.catalog.partition.PartitionMethodDesc;
  import org.apache.tajo.catalog.proto.CatalogProtos;
++<<<<<<< HEAD
 +import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
++=======
+ import org.apache.tajo.catalog.proto.CatalogProtos.FunctionListResponse;
+ import org.apache.tajo.catalog.proto.CatalogProtos.TableResponse;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.conf.TajoConf;
  import org.apache.tajo.conf.TajoConf.ConfVars;
  import org.apache.tajo.engine.query.QueryContext;
@@@ -55,13 -54,8 +58,9 @@@ import org.apache.tajo.plan.logical.Par
  import org.apache.tajo.plan.logical.ScanNode;
  import org.apache.tajo.querymaster.QueryJobEvent;
  import org.apache.tajo.rpc.BlockingRpcServer;
- import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.BoolProto;
- import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListProto;
- import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringProto;
- import org.apache.tajo.session.InvalidSessionException;
- import org.apache.tajo.session.NoSuchSessionVariableException;
+ import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.*;
  import org.apache.tajo.session.Session;
 +import org.apache.tajo.util.IPCUtil;
  import org.apache.tajo.util.KeyValueSet;
  import org.apache.tajo.util.NetUtils;
  import org.apache.tajo.util.ProtoUtil;
@@@ -148,17 -134,14 +139,28 @@@ public class TajoMasterClientService ex
          String sessionId =
              context.getSessionManager().createSession(request.getUsername(), 
databaseName);
          CreateSessionResponse.Builder builder = 
CreateSessionResponse.newBuilder();
++<<<<<<< HEAD
 +        builder.setResult(IPCUtil.buildOkRequestResult());
 +        
builder.setSessionId(TajoIdProtos.SessionIdProto.newBuilder().setId(sessionId).build());
 +        
builder.setSessionVars(ProtoUtil.convertFromMap(context.getSessionManager().getAllVariables(sessionId)));
 +        return builder.build();
 +      } catch (NoSuchDatabaseException nsde) {
 +        CreateSessionResponse.Builder builder = 
CreateSessionResponse.newBuilder();
 +        builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, 
nsde.getMessage(), null));
 +        return builder.build();
 +      } catch (InvalidSessionException e) {
 +        CreateSessionResponse.Builder builder = 
CreateSessionResponse.newBuilder();
 +        builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, 
e.getMessage(), null));
++=======
+         builder.setState(OK);
+         
builder.setSessionId(TajoIdProtos.SessionIdProto.newBuilder().setId(sessionId).build());
+         
builder.setSessionVars(ProtoUtil.convertFromMap(context.getSessionManager().getAllVariables(sessionId)));
+         return builder.build();
+ 
+       } catch (Throwable t) {
+         CreateSessionResponse.Builder builder = 
CreateSessionResponse.newBuilder();
+         builder.setState(returnError(t));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
          return builder.build();
        }
      }
@@@ -171,25 -154,16 +173,31 @@@
          context.getSessionManager().removeSession(request.getId());
        }
  
-       return BOOL_TRUE;
+       return OK;
      }
  
++<<<<<<< HEAD
 +    public SessionUpdateResponse buildSessionUpdateOnSuccess(Map<String, 
String> variables) {
 +      SessionUpdateResponse.Builder builder = 
SessionUpdateResponse.newBuilder();
 +      builder.setResult(IPCUtil.buildOkRequestResult());
 +      builder.setSessionVars(new KeyValueSet(variables).getProto());
 +      return builder.build();
 +    }
++=======
+     @Override
+     public SessionUpdateResponse updateSessionVariables(RpcController 
controller,
+                                                         
UpdateSessionVariableRequest request)
+         throws ServiceException {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
-     public SessionUpdateResponse buildSessionUpdateOnError(String message) {
        SessionUpdateResponse.Builder builder = 
SessionUpdateResponse.newBuilder();
++<<<<<<< HEAD
 +      builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, message, 
null));
 +      return builder.build();
 +    }
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
-     @Override
-     public SessionUpdateResponse updateSessionVariables(RpcController 
controller, UpdateSessionVariableRequest request)
-         throws ServiceException {
        try {
          String sessionId = request.getSessionId().getId();
          for (KeyValueProto kv : request.getSessionVars().getKeyvalList()) {
@@@ -283,16 -274,18 +308,29 @@@
          if(LOG.isDebugEnabled()) {
            LOG.debug("Query [" + request.getQuery() + "] is submitted");
          }
+ 
          return context.getGlobalEngine().executeQuery(session, 
request.getQuery(), request.getIsJson());
+ 
        } catch (Exception e) {
++<<<<<<< HEAD
 +        LOG.error(e.getMessage(), e);
 +        SubmitQueryResponse.Builder responseBuilder = 
ClientProtos.SubmitQueryResponse.newBuilder();
 +        responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
 +        responseBuilder.setIsForwarded(true);
 +        
responseBuilder.setUserName(context.getConf().getVar(ConfVars.USERNAME));
 +        responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +            e.getMessage() == null ? "Internal Error" : 
ExceptionUtils.getStackTrace(e), null));
 +        return responseBuilder.build();
++=======
+ 
+         return ClientProtos.SubmitQueryResponse.newBuilder()
+             .setState(returnError(e))
+             .setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto())
+             .setIsForwarded(true)
+             .setUserName(context.getConf().getVar(ConfVars.USERNAME))
+             .build();
+ 
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
      }
  
@@@ -302,19 -296,13 +341,25 @@@
        try {
          Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
          QueryContext queryContext = new QueryContext(conf, session);
+         context.getGlobalEngine().updateQuery(queryContext, 
request.getQuery(), request.getIsJson());
+         builder.setState(OK);
  
++<<<<<<< HEAD
 +        UpdateQueryResponse.Builder responseBuilder = 
UpdateQueryResponse.newBuilder();
 +        try {
 +          context.getGlobalEngine().updateQuery(queryContext, 
request.getQuery(), request.getIsJson());
 +          return 
responseBuilder.setResult(IPCUtil.buildOkRequestResult()).build();
 +        } catch (Exception e) {
 +          
responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +              e.getMessage() == null ? ExceptionUtils.getStackTrace(e) : 
null, null));
 +          return responseBuilder.build();
 +        }
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        } catch (Throwable t) {
-         throw new ServiceException(t);
+         builder.setState(returnError(t));
        }
+       return builder.build();
      }
  
      @Override
@@@ -450,8 -443,8 +500,13 @@@
          builder.setQueryId(request.getQueryId());
  
          if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) {
++<<<<<<< HEAD
 +          builder.setResult(IPCUtil.buildOkRequestResult());
 +          builder.setState(TajoProtos.QueryState.QUERY_SUCCEEDED);
++=======
+           builder.setState(OK);
+           builder.setQueryState(QueryState.QUERY_SUCCEEDED);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
          } else {
            QueryInProgress queryInProgress = 
context.getQueryJobManager().getQueryInProgress(queryId);
  
@@@ -464,8 -457,8 +519,13 @@@
            }
  
            if (queryInfo != null) {
++<<<<<<< HEAD
 +            builder.setResult(IPCUtil.buildOkRequestResult());
 +            builder.setState(queryInfo.getQueryState());
++=======
+             builder.setState(OK);
+             builder.setQueryState(queryInfo.getQueryState());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
              boolean isCreateTable = 
queryInfo.getQueryContext().isCreateTable();
              boolean isInsert = queryInfo.getQueryContext().isInsert();
@@@ -485,11 -478,10 +545,18 @@@
            } else {
              Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
              if (session.getNonForwardQueryResultScanner(queryId) != null) {
++<<<<<<< HEAD
 +              builder.setResult(IPCUtil.buildOkRequestResult());
 +              builder.setState(TajoProtos.QueryState.QUERY_SUCCEEDED);
 +            } else {
 +              builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +                  "No such query: " + queryId.toString(), null));
++=======
+               builder.setState(OK);
+               builder.setQueryState(QueryState.QUERY_SUCCEEDED);
+             } else {
+               builder.setState(errNoSuchQueryId(queryId));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
              }
            }
          }
@@@ -541,18 -533,16 +608,26 @@@
          resultSetBuilder.addAllSerializedTuples(rows);
  
          builder.setResultSet(resultSetBuilder.build());
++<<<<<<< HEAD
 +        builder.setResult(IPCUtil.buildOkRequestResult());
++=======
+         builder.setState(OK);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
          LOG.info("Send result to client for " +
              request.getSessionId().getId() + "," + queryId + ", " + 
rows.size() + " rows");
  
        } catch (Throwable t) {
-         LOG.error(t.getMessage(), t);
          builder.setResultSet(resultSetBuilder.build()); // required field
++<<<<<<< HEAD
 +        String errorMessage = t.getMessage() == null ? t.getClass().getName() 
: t.getMessage();
 +        builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +            errorMessage, 
org.apache.hadoop.util.StringUtils.stringifyException(t)));
++=======
+         builder.setState(returnError(t));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
+ 
        return builder.build();
      }
  
@@@ -591,11 -584,10 +669,18 @@@
          if (queryInfo != null) {
            builder.setQueryInfo(queryInfo.getProto());
          }
++<<<<<<< HEAD
 +        builder.setResult(IPCUtil.buildOkRequestResult());
 +      } catch (Throwable t) {
 +        LOG.warn(t.getMessage(), t);
 +        builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +            org.apache.hadoop.util.StringUtils.stringifyException(t), null));
++=======
+         builder.setState(OK);
+ 
+       } catch (Throwable t) {
+         builder.setState(returnError(t));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
  
        return builder.build();
@@@ -777,9 -779,8 +872,14 @@@
  
          if (!request.hasValue()) {
            return TableResponse.newBuilder()
++<<<<<<< HEAD
 +              .setResult(
 +                  IPCUtil.buildRequestResult(ResultCode.ERROR, "table name is 
required.", null)
 +              ).build();
++=======
+               .setState(errInvalidRpcCall("Table name is required"))
+               .build();
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
          }
  
          Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
@@@ -797,13 -798,12 +897,22 @@@
  
          if (catalog.existsTable(databaseName, tableName)) {
            return TableResponse.newBuilder()
++<<<<<<< HEAD
 +              .setResult(IPCUtil.buildOkRequestResult())
 +              .setTableDesc(catalog.getTableDesc(databaseName, 
tableName).getProto())
 +              .build();
 +        } else {
 +          return TableResponse.newBuilder()
 +              .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +                  "ERROR: no such a table: " + request.getValue(), null))
++=======
+               .setState(OK)
+               .setTable(catalog.getTableDesc(databaseName, 
tableName).getProto())
+               .build();
+         } else {
+           return TableResponse.newBuilder()
+               .setState(errUndefinedTable(request.getValue()))
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
                .build();
          }
        } catch (Throwable t) {
@@@ -832,26 -832,26 +941,49 @@@
            partitionDesc = new PartitionMethodDesc(request.getPartition());
          }
  
++<<<<<<< HEAD
 +        TableDesc desc;
 +        try {
 +          desc = 
context.getGlobalEngine().getDDLExecutor().createTable(queryContext, 
request.getName(),
 +              null, meta.getStoreType(), schema, meta, path.toUri(), true, 
partitionDesc, false);
 +        } catch (Exception e) {
 +          return TableResponse.newBuilder()
 +              .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, 
e.getMessage(), null))
 +              .build();
 +        }
 +
 +        return TableResponse.newBuilder()
 +            .setResult(IPCUtil.buildOkRequestResult())
 +            .setTableDesc(desc.getProto()).build();
 +      } catch (InvalidSessionException ise) {
 +        return TableResponse.newBuilder()
 +            .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, 
ise.getMessage(), null))
 +            .build();
 +      } catch (IOException ioe) {
 +        return TableResponse.newBuilder()
 +            .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, 
ioe.getMessage(), null))
++=======
+         TableDesc desc = 
context.getGlobalEngine().getDDLExecutor().createTable(
+             queryContext,
+             request.getName(),
+             null,
+             meta.getStoreType(),
+             schema,
+             meta,
+             path.toUri(),
+             true,
+             partitionDesc,
+             false
+         );
+ 
+         return TableResponse.newBuilder()
+             .setState(OK)
+             .setTable(desc.getProto()).build();
+ 
+       } catch (Throwable t) {
+         return TableResponse.newBuilder()
+             .setState(returnError(t))
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
              .build();
        }
      }
@@@ -891,185 -892,14 +1024,192 @@@
              }
            }
          }
++<<<<<<< HEAD
 +        return FunctionResponse.newBuilder()
 +            .setResult(IPCUtil.buildOkRequestResult())
 +            .addAllFunctions(functionProtos)
++=======
+         return FunctionListResponse.newBuilder()
+             .setState(OK)
+             .addAllFunction(functionProtos)
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
              .build();
+ 
        } catch (Throwable t) {
-         throw new ServiceException(t);
+         return 
FunctionListResponse.newBuilder().setState(returnError(t)).build();
        }
      }
 +
 +    @Override
 +    public IndexDescProto getIndexWithName(RpcController controller, 
SessionedStringProto request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String indexName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getValue())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getValue());
 +          databaseName = splitted[0];
 +          indexName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          indexName = request.getValue();
 +        }
 +        return catalog.getIndexByName(databaseName, indexName).getProto();
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public BoolProto existIndexWithName(RpcController controller, 
SessionedStringProto request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String indexName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getValue())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getValue());
 +          databaseName = splitted[0];
 +          indexName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          indexName = request.getValue();
 +        }
 +        return catalog.existIndexByName(databaseName, indexName) ?
 +            ProtoUtil.TRUE : ProtoUtil.FALSE;
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public GetIndexesResponse getIndexesForTable(RpcController controller, 
SessionedStringProto request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String tableName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getValue())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getValue());
 +          databaseName = splitted[0];
 +          tableName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          tableName = request.getValue();
 +        }
 +
 +        GetIndexesResponse.Builder builder = GetIndexesResponse.newBuilder();
 +        for (IndexDesc index : catalog.getAllIndexesByTable(databaseName, 
tableName)) {
 +          builder.addIndexes(index.getProto());
 +        }
 +        builder.setResult(IPCUtil.buildOkRequestResult());
 +        return builder.build();
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public BoolProto existIndexesForTable(RpcController controller, 
SessionedStringProto request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String tableName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getValue())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getValue());
 +          databaseName = splitted[0];
 +          tableName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          tableName = request.getValue();
 +        }
 +        return catalog.existIndexesByTable(databaseName, tableName) ?
 +            ProtoUtil.TRUE : ProtoUtil.FALSE;
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public GetIndexWithColumnsResponse getIndexWithColumns(RpcController 
controller, GetIndexWithColumnsRequest request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String tableName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getTableName())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getTableName());
 +          databaseName = splitted[0];
 +          tableName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          tableName = request.getTableName();
 +        }
 +        String[] columnNames = new String[request.getColumnNamesCount()];
 +        columnNames = request.getColumnNamesList().toArray(columnNames);
 +
 +        GetIndexWithColumnsResponse.Builder builder = 
GetIndexWithColumnsResponse.newBuilder();
 +        builder.setResult(IPCUtil.buildOkRequestResult());
 +        builder.setIndexDesc(catalog.getIndexByColumnNames(databaseName, 
tableName, columnNames).getProto());
 +        return builder.build();
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public BoolProto existIndexWithColumns(RpcController controller, 
GetIndexWithColumnsRequest request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String tableName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getTableName())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getTableName());
 +          databaseName = splitted[0];
 +          tableName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          tableName = request.getTableName();
 +        }
 +        String[] columnNames = new String[request.getColumnNamesCount()];
 +        columnNames = request.getColumnNamesList().toArray(columnNames);
 +        return catalog.existIndexByColumnNames(databaseName, tableName, 
columnNames) ?
 +            ProtoUtil.TRUE : ProtoUtil.FALSE;
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
 +
 +    @Override
 +    public BoolProto dropIndex(RpcController controller, SessionedStringProto 
request)
 +        throws ServiceException {
 +      try {
 +        context.getSessionManager().touch(request.getSessionId().getId());
 +        Session session = 
context.getSessionManager().getSession(request.getSessionId().getId());
 +
 +        String indexName, databaseName;
 +        if (CatalogUtil.isFQTableName(request.getValue())) {
 +          String [] splitted = 
CatalogUtil.splitFQTableName(request.getValue());
 +          databaseName = splitted[0];
 +          indexName = splitted[1];
 +        } else {
 +          databaseName = session.getCurrentDatabase();
 +          indexName = request.getValue();
 +        }
 +        return catalog.dropIndex(databaseName, indexName) ?
 +            ProtoUtil.TRUE : ProtoUtil.FALSE;
 +      } catch (Throwable t) {
 +        throw new ServiceException(t);
 +      }
 +    }
    }
  }

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
index 2e5584c,d3530a0..1e35d6e
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
@@@ -104,17 -107,10 +107,23 @@@ public class QueryExecutor 
  
      } else if (PlannerUtil.checkIfDDLPlan(rootNode)) {
        context.getSystemMetrics().counter("Query", "numDDLQuery").inc();
++<<<<<<< HEAD
++=======
+       ddlExecutor.execute(queryContext, plan);
+       response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
+       response.setState(OK);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  
 +      if (PlannerUtil.isDistExecDDL(rootNode)) {
 +        if (rootNode.getChild().getType() == NodeType.CREATE_INDEX) {
 +          checkIndexExistence(queryContext, (CreateIndexNode) 
rootNode.getChild());
 +        }
 +        executeDistributedQuery(queryContext, session, plan, sql, jsonExpr, 
response);
 +      } else {
 +        response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
 +        response.setResult(IPCUtil.buildOkRequestResult());
 +        ddlExecutor.execute(queryContext, plan);
 +      }
  
      } else if (plan.isExplain()) { // explain query
        execExplain(plan, queryContext, plan.isExplainGlobal(), response);
@@@ -153,8 -149,7 +162,12 @@@
          session.selectDatabase(setSessionNode.getValue());
        } else {
          response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
++<<<<<<< HEAD
 +        response.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +            "database \"" + databaseName + "\" does not exists.", null));
++=======
+         response.setState(errUndefinedDatabase(databaseName));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
  
        // others
@@@ -168,7 -163,7 +181,11 @@@
  
      context.getSystemMetrics().counter("Query", "numDDLQuery").inc();
      response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
++<<<<<<< HEAD
 +    response.setResult(IPCUtil.buildOkRequestResult());
++=======
+     response.setState(OK);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
    }
  
    public void execExplain(LogicalPlan plan, QueryContext queryContext, 
boolean isGlobal,
@@@ -211,9 -206,9 +228,13 @@@
      serializedResBuilder.setSchema(schema.getProto());
      serializedResBuilder.setBytesNum(bytesNum);
  
+     response.setState(OK);
      response.setResultSet(serializedResBuilder.build());
      response.setMaxRowNum(lines.length);
++<<<<<<< HEAD
 +    response.setResult(IPCUtil.buildOkRequestResult());
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
    }
  
@@@ -235,7 -231,6 +257,10 @@@
      response.setQueryId(queryId.getProto());
      response.setMaxRowNum(maxRow);
      response.setTableDesc(queryResultScanner.getTableDesc().getProto());
++<<<<<<< HEAD
 +    response.setResult(IPCUtil.buildOkRequestResult());
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
    }
  
    public void execSimpleQuery(QueryContext queryContext, Session session, 
String query, LogicalPlan plan,
@@@ -271,7 -267,6 +297,10 @@@
      response.setQueryId(queryInfo.getQueryId().getProto());
      response.setMaxRowNum(maxRow);
      response.setTableDesc(desc.getProto());
++<<<<<<< HEAD
 +    response.setResult(IPCUtil.buildOkRequestResult());
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
    }
  
    public void execNonFromQuery(QueryContext queryContext, LogicalPlan plan, 
SubmitQueryResponse.Builder responseBuilder)
@@@ -308,7 -304,6 +338,10 @@@
          responseBuilder.setResultSet(serializedResBuilder);
          responseBuilder.setMaxRowNum(1);
          responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
++<<<<<<< HEAD
 +        responseBuilder.setResult(IPCUtil.buildOkRequestResult());
++=======
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
      } finally {
        // stop script executor
@@@ -470,7 -465,7 +503,11 @@@
        // If queryId == NULL_QUERY_ID and MaxRowNum == -1, TajoCli prints only 
number of inserted rows.
        responseBuilder.setMaxRowNum(-1);
        responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
++<<<<<<< HEAD
 +      responseBuilder.setResult(IPCUtil.buildOkRequestResult());
++=======
+       responseBuilder.setState(OK);
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      } catch (Throwable t) {
        throw new RuntimeException(t);
      }
@@@ -504,43 -499,17 +541,54 @@@
  
      queryInfo = queryManager.scheduleQuery(session, queryContext, sql, 
jsonExpr, rootNode);
  
++<<<<<<< HEAD
 +    if(queryInfo == null) {
 +      responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto());
 +      responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
 +          "Fail starting QueryMaster.", null));
 +      LOG.error("Fail starting QueryMaster: " + sql);
 +    } else {
 +      responseBuilder.setIsForwarded(true);
 +      responseBuilder.setQueryId(queryInfo.getQueryId().getProto());
 +      responseBuilder.setResult(IPCUtil.buildOkRequestResult());
 +      if(queryInfo.getQueryMasterHost() != null) {
 +        responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost());
 +      }
 +      
responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort());
 +      LOG.info("Query " + queryInfo.getQueryId().toString() + "," + 
queryInfo.getSql() + "," +
 +          " is forwarded to " + queryInfo.getQueryMasterHost() + ":" + 
queryInfo.getQueryMasterPort());
++=======
+     responseBuilder.setIsForwarded(true);
+     responseBuilder.setQueryId(queryInfo.getQueryId().getProto());
+     responseBuilder.setState(OK);
+     if (queryInfo.getQueryMasterHost() != null) {
+       responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost());
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
      }
+     responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort());
+     LOG.info("Query " + queryInfo.getQueryId().toString() + "," + 
queryInfo.getSql() + "," +
+         " is forwarded to " + queryInfo.getQueryMasterHost() + ":" + 
queryInfo.getQueryMasterPort());
    }
  
 +  private void checkIndexExistence(final QueryContext queryContext, final 
CreateIndexNode createIndexNode)
 +      throws IOException {
 +    String databaseName, simpleIndexName, qualifiedIndexName;
 +    if (CatalogUtil.isFQTableName(createIndexNode.getIndexName())) {
 +      String[] splits = 
CatalogUtil.splitFQTableName(createIndexNode.getIndexName());
 +      databaseName = splits[0];
 +      simpleIndexName = splits[1];
 +      qualifiedIndexName = createIndexNode.getIndexName();
 +    } else {
 +      databaseName = queryContext.getCurrentDatabase();
 +      simpleIndexName = createIndexNode.getIndexName();
 +      qualifiedIndexName = CatalogUtil.buildFQName(databaseName, 
simpleIndexName);
 +    }
 +
 +    if (catalog.existIndexByName(databaseName, simpleIndexName)) {
 +      throw new AlreadyExistsIndexException(qualifiedIndexName);
 +    }
 +  }
 +
    public MasterPlan compileMasterPlan(LogicalPlan plan, QueryContext context, 
GlobalPlanner planner)
        throws Exception {
  

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
----------------------------------------------------------------------
diff --cc 
tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
index 550b1ee,61e2dea..a1662e6
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
@@@ -52,15 -55,18 +55,21 @@@ import org.apache.tajo.session.Session
  import org.apache.tajo.storage.FormatProperty;
  import org.apache.tajo.storage.Tablespace;
  import org.apache.tajo.storage.TablespaceManager;
++<<<<<<< HEAD
++=======
+ import org.apache.tajo.util.TUtil;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.util.metrics.TajoMetrics;
  import org.apache.tajo.util.metrics.reporter.MetricsConsoleReporter;
- import org.apache.tajo.worker.AbstractResourceAllocator;
- import org.apache.tajo.worker.TajoResourceAllocator;
+ import org.apache.tajo.worker.event.NodeResourceDeallocateEvent;
+ import org.apache.tajo.worker.event.NodeResourceEvent;
+ import org.apache.tajo.worker.event.NodeStatusEvent;
  
  import java.io.IOException;
+ import java.net.InetSocketAddress;
  import java.net.URI;
  import java.util.*;
- import java.util.concurrent.atomic.AtomicBoolean;
+ import java.util.concurrent.ConcurrentMap;
  import java.util.concurrent.atomic.AtomicLong;
  
  import static org.apache.tajo.TajoProtos.QueryState;

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
----------------------------------------------------------------------
diff --cc 
tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
index 2486272,1df8e7a..5b13342
--- a/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
+++ b/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java
@@@ -320,7 -319,7 +319,11 @@@ public class QueryExecutorServlet exten
            LOG.error("Internal Error: SubmissionResponse is NULL");
            error = new Exception("Internal Error: SubmissionResponse is NULL");
  
++<<<<<<< HEAD
 +        } else if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.OK) {
++=======
+         } else if (isSuccess(response.getState())) {
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
            if (response.getIsForwarded()) {
              queryId = new QueryId(response.getQueryId());
              getQueryResult(queryId);
@@@ -332,22 -331,20 +335,27 @@@
  
              progress.set(100);
            }
++<<<<<<< HEAD
 +        } else if (response.getResult().getResultCode() == 
ClientProtos.ResultCode.ERROR) {
 +          if (response.getResult().hasErrorMessage()) {
 +            StringBuffer errorMessage = new 
StringBuffer(response.getResult().getErrorMessage());
 +            String modifiedMessage;
++=======
+         } else if (isError(response.getState())) {
+           StringBuffer errorMessage = new 
StringBuffer(response.getState().getMessage());
+           String modifiedMessage;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
+ 
+           if (errorMessage.length() > 200) {
+             modifiedMessage = errorMessage.substring(0, 200);
+           } else {
+             modifiedMessage = errorMessage.toString();
+           }
  
-             if (errorMessage.length() > 200) {
-               modifiedMessage = errorMessage.substring(0, 200);
-             } else {
-               modifiedMessage = errorMessage.toString();
-             }
-             
-             String lineSeparator = System.getProperty("line.separator");
-             modifiedMessage = modifiedMessage.replaceAll(lineSeparator, 
"<br/>");
+           String lineSeparator = System.getProperty("line.separator");
+           modifiedMessage = modifiedMessage.replaceAll(lineSeparator, 
"<br/>");
  
-             error = new Exception(modifiedMessage);
-           }
+           error = new Exception(modifiedMessage);
          }
        } catch (Exception e) {
          LOG.error(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java
----------------------------------------------------------------------
diff --cc 
tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java
index 48f4f40,edb5703..77481ae
--- 
a/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java
+++ 
b/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java
@@@ -25,14 -25,11 +25,21 @@@ import org.apache.commons.logging.Log
  import org.apache.commons.logging.LogFactory;
  import org.apache.hadoop.conf.Configuration;
  import org.apache.hadoop.service.AbstractService;
 +import org.apache.hadoop.util.StringUtils;
  import org.apache.tajo.QueryId;
++<<<<<<< HEAD
 +import org.apache.tajo.annotation.Nullable;
 +import org.apache.tajo.conf.TajoConf;
 +import org.apache.tajo.ipc.ClientProtos.GetQueryHistoryResponse;
 +import org.apache.tajo.ipc.ClientProtos.QueryIdRequest;
 +import org.apache.tajo.ipc.ClientProtos.RequestResult;
 +import org.apache.tajo.ipc.ClientProtos.ResultCode;
++=======
+ import org.apache.tajo.exception.ReturnStateUtil;
+ import org.apache.tajo.conf.TajoConf;
+ import org.apache.tajo.ipc.ClientProtos.GetQueryHistoryResponse;
+ import org.apache.tajo.ipc.ClientProtos.QueryIdRequest;
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
  import org.apache.tajo.ipc.QueryMasterClientProtocol;
  import org.apache.tajo.querymaster.QueryMasterTask;
  import org.apache.tajo.rpc.BlockingRpcServer;
@@@ -132,11 -129,10 +139,18 @@@ public class TajoWorkerClientService ex
          if (queryHistory != null) {
            builder.setQueryHistory(queryHistory.getProto());
          }
++<<<<<<< HEAD
 +        builder.setResult(buildOkRequestResult());
 +      } catch (Throwable t) {
 +        LOG.warn(t.getMessage(), t);
 +        builder.setResult(buildRequestResult(ResultCode.ERROR,
 +            StringUtils.stringifyException(t), null));
++=======
+         builder.setState(ReturnStateUtil.OK);
+       } catch (Throwable t) {
+         LOG.error(t.getMessage(), t);
+         builder.setState(ReturnStateUtil.returnError(t));
++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867
        }
  
        return builder.build();

Reply via email to