This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch AutoClose11 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3da6da15ffc92aaae6a73d4cc1b75575a4336ca6 Author: JackieTien97 <[email protected]> AuthorDate: Thu May 20 09:42:46 2021 +0800 Automatically close the dataset while there is no more data --- .../iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java | 17 +++++++++++------ .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java | 20 +++++++++++++++++--- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java index 8c827d8..f5ab61a 100644 --- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java +++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBNonAlignJDBCResultSet.java @@ -21,8 +21,15 @@ package org.apache.iotdb.jdbc; import static org.apache.iotdb.rpc.IoTDBRpcDataSet.START_INDEX; import static org.apache.iotdb.rpc.IoTDBRpcDataSet.TIMESTAMP_STR; -import static org.apache.iotdb.rpc.IoTDBRpcDataSet.VALUE_IS_NULL; +import java.nio.ByteBuffer; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.StatementExecutionException; import org.apache.iotdb.service.rpc.thrift.TSFetchResultsReq; @@ -35,11 +42,6 @@ import org.apache.iotdb.tsfile.utils.BytesUtils; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; import org.apache.thrift.TException; -import java.nio.ByteBuffer; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.*; - public class IoTDBNonAlignJDBCResultSet extends AbstractIoTDBJDBCResultSet { private static final int TIMESTAMP_STR_LENGTH = 4; @@ -121,9 +123,12 @@ public class IoTDBNonAlignJDBCResultSet extends AbstractIoTDBJDBCResultSet { } if (!resp.hasResultSet) { ioTDBRpcDataSet.emptyResultSet = true; + close(); } else { tsQueryNonAlignDataSet = resp.getNonAlignQueryDataSet(); if (tsQueryNonAlignDataSet == null) { + ioTDBRpcDataSet.emptyResultSet = true; + close(); return false; } } 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 5c9e8f5..a7eeb57 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 @@ -192,13 +192,26 @@ public class IoTDBRpcDataSet { return true; } if (emptyResultSet) { - return false; + try { + close(); + return false; + } catch (TException e) { + throw new IoTDBConnectionException( + "Cannot close dataset, because of network connection: {} ", e); + } } - if (fetchResults()) { + if (fetchResults() && hasCachedResults()) { constructOneRow(); return true; + } else { + try { + close(); + return false; + } catch (TException e) { + throw new IoTDBConnectionException( + "Cannot close dataset, because of network connection: {} ", e); + } } - return false; } public boolean fetchResults() throws StatementExecutionException, IoTDBConnectionException { @@ -210,6 +223,7 @@ public class IoTDBRpcDataSet { RpcUtils.verifySuccess(resp.getStatus()); if (!resp.hasResultSet) { emptyResultSet = true; + close(); } else { tsQueryDataSet = resp.getQueryDataSet(); }
