This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch TySessionLastQueryBug in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit c326a63f2dfd4957e9f5e1e17c1a4aa403067a77 Author: JackieTien97 <[email protected]> AuthorDate: Tue May 12 21:35:36 2020 +0800 show devices bug --- .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 6 ++- .../java/org/apache/iotdb/session/Session.java | 2 +- .../org/apache/iotdb/session/SessionDataSet.java | 11 +++-- .../iotdb/session/IoTDBSessionIteratorIT.java | 55 +++++++++++++++++++++- 4 files changed, 68 insertions(+), 6 deletions(-) diff --git a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java index 8a6047b..8525211 100644 --- a/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java +++ b/service-rpc/src/main/java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java @@ -48,6 +48,7 @@ public class IoTDBRpcDataSet { public boolean isClosed = false; public TSIService.Iface client; public List<String> columnNameList; // no deduplication + public List<TSDataType> columnTypeList; // no deduplication public Map<String, Integer> columnOrdinalMap; // used because the server returns deduplicated columns public List<TSDataType> columnTypeDeduplicatedList; // deduplicated from columnTypeList public int fetchSize; @@ -80,12 +81,13 @@ public class IoTDBRpcDataSet { this.queryId = queryId; this.client = client; this.fetchSize = fetchSize; - this.columnNameList = columnNameList; columnSize = columnNameList.size(); this.columnNameList = new ArrayList<>(); + this.columnTypeList = new ArrayList<>(); if (!ignoreTimeStamp) { this.columnNameList.add(TIMESTAMP_STR); + this.columnTypeList.add(TSDataType.INT64); } // deduplicate and map this.columnOrdinalMap = new HashMap<>(); @@ -102,6 +104,7 @@ public class IoTDBRpcDataSet { for (int i = 0; i < columnNameList.size(); i++) { String name = columnNameList.get(i); this.columnNameList.add(name); + this.columnTypeList.add(TSDataType.valueOf(columnTypeList.get(i))); if (!columnOrdinalMap.containsKey(name)) { int index = columnNameIndex.get(name); columnOrdinalMap.put(name, index + START_INDEX); @@ -114,6 +117,7 @@ public class IoTDBRpcDataSet { for (int i = 0; i < columnNameList.size(); i++) { String name = columnNameList.get(i); this.columnNameList.add(name); + this.columnTypeList.add(TSDataType.valueOf(columnTypeList.get(i))); if (!columnOrdinalMap.containsKey(name)) { columnOrdinalMap.put(name, index++); columnTypeDeduplicatedList.add(TSDataType.valueOf(columnTypeList.get(i))); diff --git a/session/src/main/java/org/apache/iotdb/session/Session.java b/session/src/main/java/org/apache/iotdb/session/Session.java index 07245e6..dad90cd 100644 --- a/session/src/main/java/org/apache/iotdb/session/Session.java +++ b/session/src/main/java/org/apache/iotdb/session/Session.java @@ -652,7 +652,7 @@ public class Session { RpcUtils.verifySuccess(execResp.getStatus()); return new SessionDataSet(sql, execResp.getColumns(), execResp.getDataTypeList(), execResp.columnNameIndexMap, - execResp.getQueryId(), client, sessionId, execResp.queryDataSet); + execResp.getQueryId(), client, sessionId, execResp.queryDataSet, execResp.isIgnoreTimeStamp()); } /** diff --git a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java index f649750..bc60c5b 100644 --- a/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java +++ b/session/src/main/java/org/apache/iotdb/session/SessionDataSet.java @@ -43,9 +43,10 @@ public class SessionDataSet { public SessionDataSet(String sql, List<String> columnNameList, List<String> columnTypeList, Map<String, Integer> columnNameIndex, - long queryId, TSIService.Iface client, long sessionId, TSQueryDataSet queryDataSet) { + long queryId, TSIService.Iface client, long sessionId, TSQueryDataSet queryDataSet, + boolean ignoreTimeStamp) { this.ioTDBRpcDataSet = new IoTDBRpcDataSet(sql, columnNameList, columnTypeList, - columnNameIndex, false, queryId, client, sessionId, queryDataSet, 1024); + columnNameIndex, ignoreTimeStamp, queryId, client, sessionId, queryDataSet, 1024); } public int getFetchSize() { @@ -57,7 +58,11 @@ public class SessionDataSet { } public List<String> getColumnNames() { - return ioTDBRpcDataSet.columnNameList; + return new ArrayList<>(ioTDBRpcDataSet.columnNameList); + } + + public List<TSDataType> getColumnTypes() { + return new ArrayList<>(ioTDBRpcDataSet.columnTypeList); } diff --git a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java index 8d3b3fd..64c9fad 100644 --- a/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java +++ b/session/src/test/java/org/apache/iotdb/session/IoTDBSessionIteratorIT.java @@ -54,7 +54,7 @@ public class IoTDBSessionIteratorIT { } @Test - public void test() { + public void test1() { String[] retArray = new String[]{ "0,1,2.0,null", "1,1,2.0,null", @@ -87,6 +87,59 @@ public class IoTDBSessionIteratorIT { } } + @Test + public void test2() { + String[] retArray = new String[]{ + "9,root.sg1.d1.s1,1", + "9,root.sg1.d1.s2,2.0", + "9,root.sg1.d2.s1,4.0" + }; + + try { + SessionDataSet sessionDataSet = session.executeQueryStatement("select last * from root.sg1"); + sessionDataSet.setFetchSize(1024); + DataIterator iterator = sessionDataSet.iterator(); + int count = 0; + while (iterator.next()) { + String ans = String.format("%s,%s,%s", iterator.getLong(1), iterator.getString(2), + iterator.getString(3)); + assertEquals(retArray[count], ans); + count++; + } + assertEquals(retArray.length, count); + sessionDataSet.closeOperationHandle(); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + } + + @Test + public void test3() { + String[] retArray = new String[]{ + "root.sg1.d1", + "root.sg1.d2" + }; + + try { + SessionDataSet sessionDataSet = session.executeQueryStatement("show devices"); + sessionDataSet.setFetchSize(1024); + assertEquals(1, sessionDataSet.getColumnNames().size()); + DataIterator iterator = sessionDataSet.iterator(); + int count = 0; + while (iterator.next()) { + String ans = iterator.getString(1); + assertEquals(retArray[count], ans); + count++; + } + assertEquals(retArray.length, count); + sessionDataSet.closeOperationHandle(); + } catch (Exception e) { + e.printStackTrace(); + fail(); + } + } + private void prepareData() throws IoTDBConnectionException, StatementExecutionException { session = new Session("127.0.0.1", 6667, "root", "root"); session.open();
