You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/07/20 02:56:34 UTC
[iotdb] branch master updated: [IOTDB-3475] Fix ResultSet format for empty query (#6648)
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new a1f1c3c2df [IOTDB-3475] Fix ResultSet format for empty query (#6648)
a1f1c3c2df is described below
commit a1f1c3c2dfb9f52bad084cabc3c73aa99f7108bc
Author: liuminghui233 <36...@users.noreply.github.com>
AuthorDate: Wed Jul 20 10:56:30 2022 +0800
[IOTDB-3475] Fix ResultSet format for empty query (#6648)
---
.../org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java | 1 +
.../apache/iotdb/db/it/query/IoTDBResultSetIT.java | 33 ++++++++++++++++++++++
.../iotdb/db/mpp/common/header/DatasetHeader.java | 2 ++
.../memory/StatementMemorySourceVisitor.java | 6 +++-
.../apache/iotdb/db/utils/QueryDataSetUtils.java | 4 +++
5 files changed, 45 insertions(+), 1 deletion(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
index 6f4eae0920..be16f925a5 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSimpleQueryIT.java
@@ -1066,6 +1066,7 @@ public class IoTDBSimpleQueryIT {
}
@Test
+ @Ignore // disable align is not supported yet
public void testDisableAlign() throws Exception {
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement()) {
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBResultSetIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBResultSetIT.java
index 3997852de9..ab0e72d405 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBResultSetIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/query/IoTDBResultSetIT.java
@@ -39,6 +39,7 @@ import java.sql.Statement;
import java.sql.Types;
import static org.apache.iotdb.db.it.utils.TestUtils.prepareData;
+import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -53,10 +54,16 @@ public class IoTDBResultSetIT {
"CREATE TIMESERIES root.t1.wf01.wt01.temperature WITH DATATYPE=FLOAT, ENCODING=RLE",
"CREATE TIMESERIES root.t1.wf01.wt01.type WITH DATATYPE=INT32, ENCODING=RLE",
"CREATE TIMESERIES root.t1.wf01.wt01.grade WITH DATATYPE=INT64, ENCODING=RLE",
+ "CREATE TIMESERIES root.t1.wf01.wt02.status WITH DATATYPE=BOOLEAN, ENCODING=PLAIN",
+ "CREATE TIMESERIES root.t1.wf01.wt02.temperature WITH DATATYPE=FLOAT, ENCODING=RLE",
+ "CREATE TIMESERIES root.t1.wf01.wt02.type WITH DATATYPE=INT32, ENCODING=RLE",
+ "CREATE TIMESERIES root.t1.wf01.wt02.grade WITH DATATYPE=INT64, ENCODING=RLE",
"CREATE TIMESERIES root.sg.dev.status WITH DATATYPE=text,ENCODING=PLAIN",
"insert into root.sg.dev(time,status) values(1,3.14)"
};
+ private static final String[] emptyResultSet = new String[] {};
+
@BeforeClass
public static void setUp() throws Exception {
EnvFactory.getEnv().initBeforeClass();
@@ -128,4 +135,30 @@ public class IoTDBResultSetIT {
fail(e.getMessage());
}
}
+
+ @Test
+ public void emptyQueryTest1() {
+ String expectedHeader = "Time,";
+ resultSetEqualTest("select * from root.sg1.d1", expectedHeader, emptyResultSet);
+ }
+
+ @Test
+ public void emptyQueryTest2() {
+ String expectedHeader =
+ "Time,root.t1.wf01.wt02.grade,root.t1.wf01.wt02.temperature,root.t1.wf01.wt02.type,root.t1.wf01.wt02.status,";
+ resultSetEqualTest("select * from root.t1.wf01.wt02", expectedHeader, emptyResultSet);
+ }
+
+ @Test
+ public void emptyShowTimeseriesTest() {
+ String expectedHeader =
+ "timeseries,alias,storage group,dataType,encoding,compression,tags,attributes,";
+ resultSetEqualTest("show timeseries root.sg1.**", expectedHeader, emptyResultSet);
+ }
+
+ @Test
+ public void emptyShowDeviceTest() {
+ String expectedHeader = "devices,isAligned,";
+ resultSetEqualTest("show devices root.sg1.**", expectedHeader, emptyResultSet);
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
index 4e270d2365..34680b5a2c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeader.java
@@ -34,6 +34,8 @@ import java.util.stream.Collectors;
/** The header of query result dataset. */
public class DatasetHeader {
+ public static DatasetHeader EMPTY_HEADER = new DatasetHeader(new ArrayList<>(), false);
+
// column names, data types and aliases of result dataset
private final List<ColumnHeader> columnHeaders;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
index 1fcca2f319..1f685f2425 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/memory/StatementMemorySourceVisitor.java
@@ -53,12 +53,16 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.stream.Collectors;
+import static org.apache.iotdb.db.mpp.common.header.DatasetHeader.EMPTY_HEADER;
+
public class StatementMemorySourceVisitor
extends StatementVisitor<StatementMemorySource, StatementMemorySourceContext> {
@Override
public StatementMemorySource visitNode(StatementNode node, StatementMemorySourceContext context) {
- return new StatementMemorySource(new TsBlock(0), new DatasetHeader(new ArrayList<>(), false));
+ DatasetHeader datasetHeader = context.getAnalysis().getRespDatasetHeader();
+ return new StatementMemorySource(
+ new TsBlock(0), datasetHeader == null ? EMPTY_HEADER : datasetHeader);
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
index f7e9640455..8b4ff934c3 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/QueryDataSetUtils.java
@@ -203,6 +203,10 @@ public class QueryDataSetUtils {
break;
}
TsBlock tsBlock = optionalTsBlock.get();
+ if (tsBlock.isEmpty()) {
+ continue;
+ }
+
int currentCount = tsBlock.getPositionCount();
// serialize time column
for (int i = 0; i < currentCount; i++) {