You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/02/26 02:07:34 UTC
[incubator-iotdb] 01/01: return empty dataset instead of throw
exception
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch fix_return_null
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 140827d661b7ca153f920567688ac0936b003c27
Author: qiaojialin <64...@qq.com>
AuthorDate: Wed Feb 26 10:07:50 2020 +0800
return empty dataset instead of throw exception
---
.../src/main/java/org/apache/iotdb/JDBCExample.java | 2 +-
.../org/apache/iotdb/jdbc/IoTDBResultMetadata.java | 5 +----
.../apache/iotdb/db/qp/executor/PlanExecutor.java | 6 +++++-
.../tsfile/read/query/dataset/EmptyDataSet.java | 21 +++++++++++++++++++++
4 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/example/jdbc/src/main/java/org/apache/iotdb/JDBCExample.java b/example/jdbc/src/main/java/org/apache/iotdb/JDBCExample.java
index 99a6193..011fba1 100644
--- a/example/jdbc/src/main/java/org/apache/iotdb/JDBCExample.java
+++ b/example/jdbc/src/main/java/org/apache/iotdb/JDBCExample.java
@@ -46,7 +46,7 @@ public class JDBCExample {
outputResult(resultSet);
resultSet = statement.executeQuery("select count(*) from root");
outputResult(resultSet);
- resultSet = statement.executeQuery("select count(*) from root where time >= 1 and time <= 100 group by ([0, 100], 20ms, 20ms)");
+ resultSet = statement.executeQuery("select count(*) from root where time >= 1 and time <= 100 group by ([0, 100), 20ms, 20ms)");
outputResult(resultSet);
}
}
diff --git a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
index 25e88bd..e0af511 100644
--- a/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
+++ b/jdbc/src/main/java/org/apache/iotdb/jdbc/IoTDBResultMetadata.java
@@ -59,10 +59,7 @@ public class IoTDBResultMetadata implements ResultSetMetaData {
}
@Override
- public int getColumnCount() throws SQLException {
- if (columnInfoList == null || columnInfoList.isEmpty()) {
- throw new SQLException("No column exists");
- }
+ public int getColumnCount() {
return columnInfoList.size();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
index 2cf135d..a489c34 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/executor/PlanExecutor.java
@@ -117,6 +117,7 @@ import org.apache.iotdb.tsfile.read.TsFileSequenceReader;
import org.apache.iotdb.tsfile.read.common.Field;
import org.apache.iotdb.tsfile.read.common.Path;
import org.apache.iotdb.tsfile.read.common.RowRecord;
+import org.apache.iotdb.tsfile.read.query.dataset.EmptyDataSet;
import org.apache.iotdb.tsfile.read.query.dataset.QueryDataSet;
import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.utils.Pair;
@@ -225,7 +226,10 @@ public class PlanExecutor implements IPlanExecutor {
throws StorageEngineException, QueryFilterOptimizationException, QueryProcessException,
IOException {
QueryDataSet queryDataSet;
- if (queryPlan instanceof AlignByDevicePlan) {
+ if (queryPlan.getPaths().isEmpty()) {
+ // no time series are selected, return EmptyDataSet
+ queryDataSet = new EmptyDataSet();
+ } else if (queryPlan instanceof AlignByDevicePlan) {
queryDataSet = new AlignByDeviceDataSet((AlignByDevicePlan) queryPlan, context, queryRouter);
} else {
if (queryPlan instanceof GroupByPlan) {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/EmptyDataSet.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/EmptyDataSet.java
new file mode 100644
index 0000000..213a7c2
--- /dev/null
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/query/dataset/EmptyDataSet.java
@@ -0,0 +1,21 @@
+package org.apache.iotdb.tsfile.read.query.dataset;
+
+import java.util.Collections;
+import org.apache.iotdb.tsfile.read.common.RowRecord;
+
+public class EmptyDataSet extends QueryDataSet {
+
+ public EmptyDataSet() {
+ super(Collections.emptyList(), Collections.emptyList());
+ }
+
+ @Override
+ protected boolean hasNextWithoutConstraint() {
+ return false;
+ }
+
+ @Override
+ protected RowRecord nextWithoutConstraint() {
+ return null;
+ }
+}