This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a6603c6 [IOTDB-152]return data type in TSExecuteStatementResp (#294)
a6603c6 is described below
commit a6603c668e64d37375c3d91fbe06e77e67378eaf
Author: suyue <[email protected]>
AuthorDate: Fri Jul 26 09:37:46 2019 +0800
[IOTDB-152]return data type in TSExecuteStatementResp (#294)
* return data type in TSExecuteStatementResp
---
.../java/org/apache/iotdb/jdbc/IoTDBStatement.java | 31 ++--------------------
.../apache/iotdb/jdbc/IoTDBQueryResultSetTest.java | 11 +++++++-
.../org/apache/iotdb/db/service/TSServiceImpl.java | 20 +++++++++-----
service-rpc/src/main/thrift/rpc.thrift | 2 ++
4 files changed, 27 insertions(+), 37 deletions(-)
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
index ade9f51..704bc5f 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBStatement.java
@@ -38,8 +38,6 @@ import
org.apache.iotdb.service.rpc.thrift.TSExecuteBatchStatementReq;
import org.apache.iotdb.service.rpc.thrift.TSExecuteBatchStatementResp;
import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementReq;
import org.apache.iotdb.service.rpc.thrift.TSExecuteStatementResp;
-import org.apache.iotdb.service.rpc.thrift.TSFetchMetadataReq;
-import org.apache.iotdb.service.rpc.thrift.TSFetchMetadataResp;
import org.apache.iotdb.service.rpc.thrift.TSIService;
import org.apache.iotdb.service.rpc.thrift.TSOperationHandle;
import org.apache.iotdb.service.rpc.thrift.TS_SessionHandle;
@@ -253,7 +251,7 @@ public class IoTDBStatement implements Statement {
IoTDBQueryResultSet resSet = new IoTDBQueryResultSet(this,
execResp.getColumns(), client,
operationHandle, sql, execResp.getOperationType(),
- getColumnsType(execResp.getColumns()), queryId.getAndIncrement());
+ execResp.getDataTypeList(), queryId.getAndIncrement());
resSet.setIgnoreTimeStamp(execResp.ignoreTimeStamp);
this.resultSet = resSet;
return true;
@@ -350,7 +348,7 @@ public class IoTDBStatement implements Statement {
operationHandle = execResp.getOperationHandle();
Utils.verifySuccess(execResp.getStatus());
IoTDBQueryResultSet resSet = new IoTDBQueryResultSet(this,
execResp.getColumns(), client,
- operationHandle, sql, execResp.getOperationType(),
getColumnsType(execResp.getColumns()),
+ operationHandle, sql, execResp.getOperationType(),
execResp.getDataTypeList(),
queryId.getAndIncrement());
resSet.setIgnoreTimeStamp(execResp.ignoreTimeStamp);
this.resultSet = resSet;
@@ -566,31 +564,6 @@ public class IoTDBStatement implements Statement {
this.sessionHandle = connection.sessionHandle;
}
- private List<String> getColumnsType(List<String> columns) throws
SQLException {
- List<String> columnTypes = new ArrayList<>();
- for (String column : columns) {
- columnTypes.add(getColumnType(column));
- }
- return columnTypes;
- }
-
- private String getColumnType(String columnName) throws SQLException {
- TSFetchMetadataReq req;
-
- req = new TSFetchMetadataReq(Constant.GLOBAL_COLUMN_REQ);
- req.setColumnPath(columnName);
-
- TSFetchMetadataResp resp;
- try {
- resp = client.fetchMetadata(req);
- Utils.verifySuccess(resp.getStatus());
- return resp.getDataType();
- } catch (TException | IoTDBSQLException e) {
- throw new SQLException(
- String.format("Cannot get column %s data type", columnName), e);
- }
- }
-
void requestStmtId() throws SQLException {
try {
this.stmtId = client.requestStatementId();
diff --git
a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java
b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java
index 7cd3ded..353cea5 100644
--- a/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java
+++ b/jdbc/src/test/java/org/apache/iotdb/jdbc/IoTDBQueryResultSetTest.java
@@ -155,14 +155,23 @@ public class IoTDBQueryResultSetTest {
columns.add("root.vehicle.d0.s0");
columns.add("root.vehicle.d0.s2");
+ List<String> dataTypeList = new ArrayList<>();
+// //BOOLEAN, INT32, INT64, FLOAT, DOUBLE, TEXT
+// dataTypeList.add(TSDataType.INT64.toString());
+ dataTypeList.add("FLOAT");
+ dataTypeList.add("INT64");
+ dataTypeList.add("INT32");
+ dataTypeList.add("FLOAT");
+
when(execResp.getColumns()).thenReturn(columns);
+ when(execResp.getDataTypeList()).thenReturn(dataTypeList);
when(execResp.getOperationType()).thenReturn("QUERY");
doReturn("FLOAT").doReturn("INT64").doReturn("INT32").doReturn("FLOAT").when(fetchMetadataResp)
.getDataType();
boolean hasResultSet = statement.execute(testSql);
- verify(fetchMetadataResp, times(4)).getDataType();
+ verify(fetchMetadataResp, times(0)).getDataType();
/*
* step 2: fetch result
diff --git
a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
index 28b40de..d6fd4a6 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/TSServiceImpl.java
@@ -572,13 +572,12 @@ public class TSServiceImpl implements TSIService.Iface,
ServerContext {
resp = executeAuthQuery(plan, columns);
}
+ resp.setColumns(columns);
+ resp.setDataTypeList(queryColumnsType(columns));
resp.setOperationType(plan.getOperatorType().toString());
TSHandleIdentifier operationId = new TSHandleIdentifier(
- ByteBuffer.wrap(username.get().getBytes()),
- ByteBuffer.wrap("PASS".getBytes()));
- TSOperationHandle operationHandle;
- resp.setColumns(columns);
- operationHandle = new TSOperationHandle(operationId, true);
+ ByteBuffer.wrap(username.get().getBytes()),
ByteBuffer.wrap("PASS".getBytes()));
+ TSOperationHandle operationHandle = new TSOperationHandle(operationId,
true);
resp.setOperationHandle(operationHandle);
recordANewQuery(statement, plan);
return resp;
@@ -590,6 +589,14 @@ public class TSServiceImpl implements TSIService.Iface,
ServerContext {
}
}
+ private List<String> queryColumnsType(List<String> columns) throws
PathErrorException {
+ List<String> columnTypes = new ArrayList<>();
+ for (String column : columns) {
+ columnTypes.add(getSeriesType(column).toString());
+ }
+ return columnTypes;
+ }
+
private TSExecuteStatementResp executeAuthQuery(PhysicalPlan plan,
List<String> columns) {
TSExecuteStatementResp resp =
getTSExecuteStatementResp(TS_StatusCode.SUCCESS_STATUS, "");
resp.setIgnoreTimeStamp(true);
@@ -623,8 +630,7 @@ public class TSServiceImpl implements TSIService.Iface,
ServerContext {
private TSExecuteStatementResp executeDataQuery(PhysicalPlan plan,
List<String> columns)
throws AuthException, TException {
- List<Path> paths;
- paths = plan.getPaths();
+ List<Path> paths = plan.getPaths();
// check seriesPath exists
if (paths.isEmpty()) {
diff --git a/service-rpc/src/main/thrift/rpc.thrift
b/service-rpc/src/main/thrift/rpc.thrift
index e0f7ddc..43d405e 100644
--- a/service-rpc/src/main/thrift/rpc.thrift
+++ b/service-rpc/src/main/thrift/rpc.thrift
@@ -74,6 +74,8 @@ struct TSExecuteStatementResp {
3: optional list<string> columns
4: optional string operationType
5: optional bool ignoreTimeStamp
+ // Data type list of columns in select statement of SQL
+ 6: optional list<string> dataTypeList
}
enum TSProtocolVersion {