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 {

Reply via email to