You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/06/24 04:24:01 UTC
[8/8] tajo git commit: Merge branch 'master' of
https://git-wip-us.apache.org/repos/asf/tajo into index_support
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into index_support
Conflicts:
CHANGES
tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/00a8c658
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/00a8c658
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/00a8c658
Branch: refs/heads/index_support
Commit: 00a8c658e2798dfd41fb263edf365cfadc9fd2d7
Parents: f674fa8 b24d18f
Author: Jihoon Son <ji...@apache.org>
Authored: Wed Jun 24 11:23:42 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Wed Jun 24 11:23:42 2015 +0900
----------------------------------------------------------------------
CHANGES | 16 ++
.../tajo/catalog/store/AbstractDBStore.java | 33 ++-
.../catalog/store/XMLCatalogSchemaManager.java | 30 ++
.../tajo/client/CatalogAdminClientImpl.java | 154 +----------
.../org/apache/tajo/client/QueryClientImpl.java | 20 +-
.../apache/tajo/client/SessionConnection.java | 18 +-
.../java/org/apache/tajo/client/TajoClient.java | 3 +
.../org/apache/tajo/client/TajoClientUtil.java | 21 +-
.../org/apache/tajo/jdbc/FetchResultSet.java | 15 +-
.../apache/tajo/jdbc/TajoMemoryResultSet.java | 10 +-
.../org/apache/tajo/jdbc/TajoResultSetBase.java | 19 +-
.../org/apache/tajo/jdbc/WaitingResultSet.java | 71 +++++
tajo-client/src/main/proto/ClientProtos.proto | 16 +-
.../main/proto/TajoMasterClientProtocol.proto | 8 +-
.../java/org/apache/tajo/OverridableConf.java | 4 +
.../src/main/java/org/apache/tajo/QueryId.java | 4 +
.../main/java/org/apache/tajo/SessionVars.java | 4 +-
.../java/org/apache/tajo/conf/TajoConf.java | 1 +
.../java/org/apache/tajo/util/KeyValueSet.java | 59 +++-
.../planner/physical/BSTIndexScanExec.java | 5 -
.../org/apache/tajo/master/QueryInProgress.java | 10 +-
.../tajo/master/TajoMasterClientService.java | 62 +++--
.../apache/tajo/querymaster/Repartitioner.java | 4 +-
.../tajo/ws/rs/resources/FunctionsResource.java | 41 +--
.../tajo/ws/rs/resources/QueryResource.java | 9 +-
.../ws/rs/resources/QueryResultResource.java | 2 +-
.../java/org/apache/tajo/jdbc/TestTajoJdbc.java | 37 ++-
.../ws/rs/resources/TestFunctionsResource.java | 18 +-
.../TestTajoCli/testHelpSessionVars.result | 1 +
tajo-dist/pom.xml | 2 +
tajo-dist/src/main/bin/tajo | 3 +
.../org/apache/tajo/jdbc/JdbcConnection.java | 6 +-
.../apache/tajo/jdbc/TajoMetaDataResultSet.java | 9 +-
.../apache/tajo/jdbc/TajoPreparedStatement.java | 276 ++-----------------
.../org/apache/tajo/jdbc/TajoStatement.java | 199 ++++++++-----
35 files changed, 539 insertions(+), 651 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/CHANGES
----------------------------------------------------------------------
diff --cc CHANGES
index f883771,170b928..32e07b1
--- a/CHANGES
+++ b/CHANGES
@@@ -154,10 -162,14 +162,18 @@@ Release 0.11.0 - unrelease
BUG FIXES
+ TAJO-1608: Fix test failure in index_support branch. (jihoon)
+
+ TAJO-1594: Catalog schema is invalid for some databases. (jihoon)
+
+ TAJO-1642: CatalogServer need to check meta table first. (jaehwa)
+
+ TAJO-1650: TestQueryResource.testGetAllQueries() occasionally fails.
+ (Contributed by jinho, Committed by jaehwa)
+
+ TAJO-1634: REST API: fix error when offset is zero.
+ (Contributed by DaeMyung Kang, Committed by jaehwa)
+
TAJO-1630: Test failure after TAJO-1130. (jihoon)
TAJO-1623: INSERT INTO with wrong target columns causes NPE. (hyunsik)
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/AbstractDBStore.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/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 5a04892,1fe856a..e6566dc
--- a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
@@@ -20,15 -20,17 +20,18 @@@ package org.apache.tajo.client
import com.google.protobuf.ServiceException;
import org.apache.tajo.annotation.Nullable;
- import org.apache.tajo.catalog.*;
+ import org.apache.tajo.catalog.CatalogUtil;
+ import org.apache.tajo.catalog.Schema;
+ import org.apache.tajo.catalog.TableDesc;
+ import org.apache.tajo.catalog.TableMeta;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
+import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
import org.apache.tajo.ipc.ClientProtos;
-import org.apache.tajo.ipc.ClientProtos.SessionedStringProto;
+import org.apache.tajo.ipc.ClientProtos.*;
- import org.apache.tajo.ipc.TajoMasterClientProtocol;
import org.apache.tajo.jdbc.SQLStates;
import org.apache.tajo.rpc.NettyClientBase;
+ import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
import java.io.IOException;
import java.net.URI;
@@@ -111,43 -113,11 +114,11 @@@ public class CatalogAdminClientImpl imp
builder.setPartition(partitionMethodDesc.getProto());
}
ClientProtos.TableResponse res = tajoMasterService.createExternalTable(null, builder.build());
- if (res.getResultCode() == ClientProtos.ResultCode.OK) {
+ if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
return CatalogUtil.newTableDesc(res.getTableDesc());
} else {
- throw new SQLException(res.getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState());
+ throw new SQLException(res.getResult().getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState());
}
-
- //<<<<<<< HEAD
- // return new ServerCallable<TableDesc>(connection.manager, connection.getTajoMasterAddr(),
- // TajoMasterClientProtocol.class, false) {
- //
- // public TableDesc call(NettyClientBase client) throws ServiceException, SQLException {
- //
- //
- // }
- //
- // }.withRetries();
- //=======
- // NettyClientBase client = connection.getTajoMasterConnection();
- // connection.checkSessionAndGet(client);
- // BlockingInterface tajoMasterService = client.getStub();
- //
- // ClientProtos.CreateTableRequest.Builder builder = ClientProtos.CreateTableRequest.newBuilder();
- // builder.setSessionId(connection.sessionId);
- // builder.setName(tableName);
- // builder.setSchema(schema.getProto());
- // builder.setMeta(meta.getProto());
- // builder.setPath(path.toString());
- // if (partitionMethodDesc != null) {
- // builder.setPartition(partitionMethodDesc.getProto());
- // }
- // ClientProtos.TableResponse res = tajoMasterService.createExternalTable(null, builder.build());
- // if (res.getResultCode() == ClientProtos.ResultCode.OK) {
- // return CatalogUtil.newTableDesc(res.getTableDesc());
- // } else {
- // throw new SQLException(res.getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState());
- // }
- //>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
}
@Override
@@@ -192,42 -163,15 +163,16 @@@
connection.checkSessionAndGet(client);
BlockingInterface tajoMasterService = client.getStub();
- ClientProtos.GetTableDescRequest.Builder builder = ClientProtos.GetTableDescRequest.newBuilder();
+ SessionedStringProto.Builder builder = SessionedStringProto.newBuilder();
builder.setSessionId(connection.sessionId);
- builder.setTableName(tableName);
+ builder.setValue(tableName);
ClientProtos.TableResponse res = tajoMasterService.getTableDesc(null, builder.build());
- if (res.getResultCode() == ClientProtos.ResultCode.OK) {
+ if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
return CatalogUtil.newTableDesc(res.getTableDesc());
} else {
- throw new ServiceException(new SQLException(res.getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState()));
+ throw new ServiceException(new SQLException(res.getResult().getErrorMessage(),
+ SQLStates.ER_NO_SUCH_TABLE.getState()));
}
-
- //<<<<<<< HEAD
- // return new ServerCallable<TableDesc>(connection.manager, connection.getTajoMasterAddr(),
- // TajoMasterClientProtocol.class, false) {
- //
- // public TableDesc call(NettyClientBase client) throws ServiceException, SQLException {
- //
- //
- // }
- //
- // }.withRetries();
- //=======
- // NettyClientBase client = connection.getTajoMasterConnection();
- // connection.checkSessionAndGet(client);
- // BlockingInterface tajoMasterService = client.getStub();
- //
- // ClientProtos.GetTableDescRequest.Builder builder = ClientProtos.GetTableDescRequest.newBuilder();
- // builder.setSessionId(connection.sessionId);
- // builder.setTableName(tableName);
- // ClientProtos.TableResponse res = tajoMasterService.getTableDesc(null, builder.build());
- // if (res.getResultCode() == ClientProtos.ResultCode.OK) {
- // return CatalogUtil.newTableDesc(res.getTableDesc());
- // } else {
- // throw new ServiceException(new SQLException(res.getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState()));
- // }
- //>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
}
@Override
@@@ -239,171 -184,11 +184,94 @@@
String paramFunctionName = functionName == null ? "" : functionName;
ClientProtos.FunctionResponse res = tajoMasterService.getFunctionList(null,
connection.convertSessionedString(paramFunctionName));
- if (res.getResultCode() == ClientProtos.ResultCode.OK) {
+ if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) {
return res.getFunctionsList();
} else {
- throw new ServiceException(new SQLException(res.getErrorMessage()));
+ throw new ServiceException(res.getResult().getErrorMessage());
+ }
-
- //<<<<<<< HEAD
- // return new ServerCallable<List<CatalogProtos.FunctionDescProto>>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // public List<CatalogProtos.FunctionDescProto> call(NettyClientBase client) throws ServiceException, SQLException {
- //
- //
- // }
- //
- // }.withRetries();
- //=======
- // 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.getResultCode() == ClientProtos.ResultCode.OK) {
- // return res.getFunctionsList();
- // } else {
- // throw new ServiceException(new SQLException(res.getErrorMessage()));
- // }
- //>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746
+ }
+
+ @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();
- // return new ServerCallable<Boolean>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public Boolean call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
+ }
+
+ @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());
+ }
- // return new ServerCallable<List<IndexDescProto>>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public List<IndexDescProto> call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
+ }
+
+ @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();
-
- // return new ServerCallable<Boolean>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public Boolean call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
+ }
+
+ @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());
+ }
-
- // return new ServerCallable<IndexDescProto>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public IndexDescProto call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
+ }
+
+ @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();
-
- // return new ServerCallable<Boolean>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public Boolean call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
+ }
+
+ @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();
-
- // return new ServerCallable<Boolean>(connection.manager,
- // connection.getTajoMasterAddr(), TajoMasterClientProtocol.class, false) {
- //
- // @Override
- // public Boolean call(NettyClientBase client) throws Exception {
- //
- // }
- // }.withRetries();
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-client/src/main/proto/ClientProtos.proto
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
----------------------------------------------------------------------
diff --cc tajo-client/src/main/proto/TajoMasterClientProtocol.proto
index 586f9ab,468a998..9c7755a
--- a/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
+++ b/tajo-client/src/main/proto/TajoMasterClientProtocol.proto
@@@ -65,16 -65,7 +65,16 @@@ service TajoMasterClientProtocolServic
rpc createExternalTable(CreateTableRequest) returns (TableResponse);
rpc existTable(SessionedStringProto) returns (BoolProto);
rpc dropTable(DropTableRequest) returns (BoolProto);
- rpc getTableList(GetTableListRequest) returns (GetTableListResponse);
- rpc getTableDesc(GetTableDescRequest) returns (TableResponse);
+ rpc getTableList(SessionedStringProto) returns (StringListProto);
+ rpc getTableDesc(SessionedStringProto) returns (TableResponse);
rpc getFunctionList(SessionedStringProto) returns (FunctionResponse);
+
+ // 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/00a8c658/tajo-common/src/main/java/org/apache/tajo/OverridableConf.java
----------------------------------------------------------------------
diff --cc tajo-common/src/main/java/org/apache/tajo/OverridableConf.java
index 32d7fe7,c22f054..0062c43
--- a/tajo-common/src/main/java/org/apache/tajo/OverridableConf.java
+++ b/tajo-common/src/main/java/org/apache/tajo/OverridableConf.java
@@@ -173,8 -176,9 +176,9 @@@ public class OverridableConf extends Ke
}
}
+ @Override
public float getFloat(ConfigKey key) {
- return getLong(key, null);
+ return getFloat(key, null);
}
public void put(ConfigKey key, String val) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-common/src/main/java/org/apache/tajo/SessionVars.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
----------------------------------------------------------------------
diff --cc tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
index 4ed1313,bc6975a..34e6f5c
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
@@@ -18,29 -18,17 +18,27 @@@
package org.apache.tajo.engine.planner.physical;
-import org.apache.hadoop.fs.FileSystem;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
+import org.apache.tajo.catalog.Column;
import org.apache.tajo.catalog.Schema;
+import org.apache.tajo.catalog.SortSpec;
+import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.catalog.proto.CatalogProtos;
+import org.apache.tajo.catalog.statistics.TableStats;
import org.apache.tajo.datum.Datum;
import org.apache.tajo.engine.planner.Projector;
+import org.apache.tajo.plan.Target;
import org.apache.tajo.plan.expr.EvalNode;
-import org.apache.tajo.plan.logical.ScanNode;
+import org.apache.tajo.plan.expr.EvalTreeUtil;
+import org.apache.tajo.plan.logical.IndexScanNode;
+import org.apache.tajo.plan.rewrite.rules.IndexScanInfo.SimplePredicate;
+import org.apache.tajo.plan.util.PlannerUtil;
import org.apache.tajo.storage.*;
--import org.apache.tajo.storage.fragment.FileFragment;
- import org.apache.tajo.storage.fragment.FragmentConvertor;
import org.apache.tajo.storage.index.bst.BSTIndex;
+import org.apache.tajo.util.TUtil;
import org.apache.tajo.worker.TaskAttemptContext;
import java.io.IOException;
@@@ -239,13 -119,8 +236,11 @@@ public class BSTIndexScanExec extends P
return outTuple;
} else {
long offset = reader.next();
- LOG.info("offset: " + offset);
- if (offset == -1) return null;
+ if (offset == -1) {
+ return null;
+ }
else fileScanner.seek(offset);
+ return null;
}
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/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 01c5894,31eecdc..c6732b3
--- a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java
@@@ -52,16 -53,13 +54,14 @@@ import org.apache.tajo.plan.LogicalPlan
import org.apache.tajo.plan.logical.PartitionedTableScanNode;
import org.apache.tajo.plan.logical.ScanNode;
import org.apache.tajo.querymaster.QueryJobEvent;
- import org.apache.tajo.master.rm.Worker;
- import org.apache.tajo.master.rm.WorkerResource;
- import org.apache.tajo.session.InvalidSessionException;
- import org.apache.tajo.session.NoSuchSessionVariableException;
- import org.apache.tajo.session.Session;
import org.apache.tajo.rpc.BlockingRpcServer;
- import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
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.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;
@@@ -770,8 -781,16 +772,16 @@@ public class TajoMasterClientService ex
}
@Override
- public TableResponse getTableDesc(RpcController controller, GetTableDescRequest request) throws ServiceException {
+ public TableResponse getTableDesc(RpcController controller, SessionedStringProto request) throws ServiceException {
try {
+
+ if (!request.hasValue()) {
+ return TableResponse.newBuilder()
- .setResultCode(ResultCode.ERROR)
- .setErrorMessage("table name is required.")
- .build();
++ .setResult(
++ IPCUtil.buildRequestResult(ResultCode.ERROR, "table name is required.", null)
++ ).build();
+ }
+
Session session = context.getSessionManager().getSession(request.getSessionId().getId());
String databaseName;
@@@ -792,8 -811,8 +802,8 @@@
.build();
} else {
return TableResponse.newBuilder()
- .setResultCode(ResultCode.ERROR)
- .setErrorMessage("ERROR: no such a table: " + request.getValue())
+ .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR,
- "ERROR: no such a table: " + request.getTableName(), null))
++ "ERROR: no such a table: " + request.getValue(), null))
.build();
}
} catch (Throwable t) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-core/src/main/java/org/apache/tajo/ws/rs/resources/QueryResource.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-core/src/test/resources/results/TestTajoCli/testHelpSessionVars.result
----------------------------------------------------------------------
diff --cc tajo-core/src/test/resources/results/TestTajoCli/testHelpSessionVars.result
index 6f48164,137b0de..46c879c
--- a/tajo-core/src/test/resources/results/TestTajoCli/testHelpSessionVars.result
+++ b/tajo-core/src/test/resources/results/TestTajoCli/testHelpSessionVars.result
@@@ -35,8 -35,7 +35,9 @@@ Available Session Variables
\set MAX_OUTPUT_FILE_SIZE [int value] - Maximum per-output file size (mb). 0 means infinite.
\set NULL_CHAR [text value] - null char of text file output
\set CODEGEN [true or false] - Runtime code generation enabled (experiment)
+\set INDEX_ENABLED [true or false] - index scan enabled
+\set INDEX_SELECTIVITY_THRESHOLD [real value] - the selectivity threshold for index scan
\set ARITHABORT [true or false] - If true, a running query will be terminated when an overflow or divide-by-zero occurs.
\set FETCH_ROWNUM [int value] - Sets the number of rows at a time from Master
+ \set BLOCK_ON_RESULT [true or false] - Whether to block result set on query execution
\set DEBUG_ENABLED [true or false] - (debug only) debug mode enabled
http://git-wip-us.apache.org/repos/asf/tajo/blob/00a8c658/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoStatement.java
----------------------------------------------------------------------
diff --cc tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoStatement.java
index 820e350,0f80ddf..e1242a9
--- a/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoStatement.java
+++ b/tajo-jdbc/src/main/java/org/apache/tajo/jdbc/TajoStatement.java
@@@ -128,6 -154,46 +154,46 @@@ public class TajoStatement implements S
}
}
+ protected ResultSet executeSQL(String sql) throws SQLException, ServiceException, IOException {
+ if (isSetVariableQuery(sql)) {
+ return setSessionVariable(tajoClient, sql);
+ }
+ if (isUnSetVariableQuery(sql)) {
+ return unSetSessionVariable(tajoClient, sql);
+ }
+
+ ClientProtos.SubmitQueryResponse response = tajoClient.executeQuery(sql);
- if (response.getResultCode() == ClientProtos.ResultCode.ERROR) {
- if (response.hasErrorMessage()) {
- throw new ServiceException(response.getErrorMessage());
++ if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) {
++ if (response.getResult().hasErrorMessage()) {
++ throw new ServiceException(response.getResult().getErrorMessage());
+ }
- if (response.hasErrorTrace()) {
- throw new ServiceException(response.getErrorTrace());
++ if (response.getResult().hasErrorTrace()) {
++ throw new ServiceException(response.getResult().getErrorTrace());
+ }
+ throw new ServiceException("Failed to submit query by unknown reason");
+ }
+
+ QueryId queryId = new QueryId(response.getQueryId());
+ if (response.getIsForwarded() && !queryId.isNull()) {
+ WaitingResultSet result = new WaitingResultSet(tajoClient, queryId, fetchSize);
+ if (blockWait) {
+ result.getSchema();
+ }
+ return result;
+ }
+
+ if (response.hasResultSet() || response.hasTableDesc()) {
+ return TajoClientUtil.createResultSet(tajoClient, response, fetchSize);
+ }
+ return TajoClientUtil.createNullResultSet(queryId);
+ }
+
+ protected void checkConnection(String errorMsg) throws SQLException {
+ if (isClosed) {
+ throw new SQLException(errorMsg + " after statement has been closed");
+ }
+ }
+
public static boolean isSetVariableQuery(String sql) {
if (sql == null || sql.trim().isEmpty()) {
return false;