You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2023/07/06 15:48:30 UTC
[iotdb] branch master updated: [ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10453)
This is an automated email from the ASF dual-hosted git repository.
rong 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 5a70cb201df [ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10453)
5a70cb201df is described below
commit 5a70cb201dfade8a53fd4bd311fa1abc9bea8c71
Author: CloudWise-Lukemiao <76...@users.noreply.github.com>
AuthorDate: Thu Jul 6 23:48:22 2023 +0800
[ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10453)
Co-authored-by: Cloudwise_Luke <28...@qq.com>
---
.../rest/v1/handler/QueryDataSetHandler.java | 21 +++++++++++++++------
.../rest/v2/handler/QueryDataSetHandler.java | 21 +++++++++++++++------
2 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
index 01ec4caf470..221c4f4ec3a 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
@@ -87,32 +87,40 @@ public class QueryDataSetHandler {
new org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet();
DatasetHeader datasetHeader = queryExecution.getDatasetHeader();
-
+ int[] targetDataSetIndexToSourceDataSetIndex = new int[datasetHeader.getRespColumns().size()];
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addExpressionsItem(datasetHeader.getRespColumns().get(i));
targetDataSet.addValuesItem(new ArrayList<>());
+ targetDataSetIndexToSourceDataSetIndex[i] =
+ datasetHeader.getColumnNameIndexMap().get(datasetHeader.getRespColumns().get(i));
}
- return fillQueryDataSetWithoutTimestamps(queryExecution, actualRowSizeLimit, targetDataSet);
+ return fillQueryDataSetWithoutTimestamps(
+ queryExecution, targetDataSetIndexToSourceDataSetIndex, actualRowSizeLimit, targetDataSet);
}
private static Response fillShowPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet =
new org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet();
+ int[] targetDataSetIndexToSourceDataSetIndex =
+ new int[queryExecution.getDatasetHeader().getRespColumns().size()];
initTargetDatasetOrderByOrderWithSourceDataSet(
- queryExecution.getDatasetHeader(), targetDataSet);
+ queryExecution.getDatasetHeader(), targetDataSetIndexToSourceDataSetIndex, targetDataSet);
- return fillQueryDataSetWithoutTimestamps(queryExecution, actualRowSizeLimit, targetDataSet);
+ return fillQueryDataSetWithoutTimestamps(
+ queryExecution, targetDataSetIndexToSourceDataSetIndex, actualRowSizeLimit, targetDataSet);
}
private static void initTargetDatasetOrderByOrderWithSourceDataSet(
DatasetHeader datasetHeader,
+ int[] targetDataSetIndexToSourceDataSetIndex,
org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet) {
if (datasetHeader.getRespColumns() != null) {
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addColumnNamesItem(datasetHeader.getRespColumns().get(i));
targetDataSet.addValuesItem(new ArrayList<>());
+ targetDataSetIndexToSourceDataSetIndex[i] = i;
}
}
}
@@ -147,7 +155,7 @@ public class QueryDataSetHandler {
.build();
}
Optional<TsBlock> optionalTsBlock = queryExecution.getBatchResult();
- if (!optionalTsBlock.isPresent()) {
+ if (!optionalTsBlock.isPresent() || optionalTsBlock.get().isEmpty()) {
if (fetched == 0) {
targetDataSet.setTimestamps(new ArrayList<>());
targetDataSet.setValues(new ArrayList<>());
@@ -188,6 +196,7 @@ public class QueryDataSetHandler {
private static Response fillQueryDataSetWithoutTimestamps(
IQueryExecution queryExecution,
+ int[] targetDataSetIndexToSourceDataSetIndex,
int actualRowSizeLimit,
org.apache.iotdb.db.protocol.rest.v1.model.QueryDataSet targetDataSet)
throws IoTDBException {
@@ -220,7 +229,7 @@ public class QueryDataSetHandler {
return Response.ok().entity(targetDataSet).build();
}
for (int k = 0; k < columnNum; k++) {
- Column column = tsBlock.getColumn(k);
+ Column column = tsBlock.getColumn(targetDataSetIndexToSourceDataSetIndex[k]);
List<Object> targetDataSetColumn = targetDataSet.getValues().get(k);
for (int i = 0; i < currentCount; i++) {
fetched++;
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
index 5fb7cb8b01e..5b3b48faf20 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
@@ -87,32 +87,40 @@ public class QueryDataSetHandler {
new org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet();
DatasetHeader datasetHeader = queryExecution.getDatasetHeader();
-
+ int[] targetDataSetIndexToSourceDataSetIndex = new int[datasetHeader.getRespColumns().size()];
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addExpressionsItem(datasetHeader.getRespColumns().get(i));
targetDataSet.addValuesItem(new ArrayList<>());
+ targetDataSetIndexToSourceDataSetIndex[i] =
+ datasetHeader.getColumnNameIndexMap().get(datasetHeader.getRespColumns().get(i));
}
- return fillQueryDataSetWithoutTimestamps(queryExecution, actualRowSizeLimit, targetDataSet);
+ return fillQueryDataSetWithoutTimestamps(
+ queryExecution, targetDataSetIndexToSourceDataSetIndex, actualRowSizeLimit, targetDataSet);
}
private static Response fillShowPlanDataSet(
IQueryExecution queryExecution, final int actualRowSizeLimit) throws IoTDBException {
org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet =
new org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet();
+ int[] targetDataSetIndexToSourceDataSetIndex =
+ new int[queryExecution.getDatasetHeader().getRespColumns().size()];
initTargetDatasetOrderByOrderWithSourceDataSet(
- queryExecution.getDatasetHeader(), targetDataSet);
+ queryExecution.getDatasetHeader(), targetDataSetIndexToSourceDataSetIndex, targetDataSet);
- return fillQueryDataSetWithoutTimestamps(queryExecution, actualRowSizeLimit, targetDataSet);
+ return fillQueryDataSetWithoutTimestamps(
+ queryExecution, targetDataSetIndexToSourceDataSetIndex, actualRowSizeLimit, targetDataSet);
}
private static void initTargetDatasetOrderByOrderWithSourceDataSet(
DatasetHeader datasetHeader,
+ int[] targetDataSetIndexToSourceDataSetIndex,
org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet) {
if (datasetHeader.getRespColumns() != null) {
for (int i = 0; i < datasetHeader.getRespColumns().size(); i++) {
targetDataSet.addColumnNamesItem(datasetHeader.getRespColumns().get(i));
targetDataSet.addValuesItem(new ArrayList<>());
+ targetDataSetIndexToSourceDataSetIndex[i] = i;
}
}
}
@@ -147,7 +155,7 @@ public class QueryDataSetHandler {
.build();
}
Optional<TsBlock> optionalTsBlock = queryExecution.getBatchResult();
- if (!optionalTsBlock.isPresent()) {
+ if (!optionalTsBlock.isPresent() || optionalTsBlock.get().isEmpty()) {
if (fetched == 0) {
targetDataSet.setTimestamps(new ArrayList<>());
targetDataSet.setValues(new ArrayList<>());
@@ -188,6 +196,7 @@ public class QueryDataSetHandler {
private static Response fillQueryDataSetWithoutTimestamps(
IQueryExecution queryExecution,
+ int[] targetDataSetIndexToSourceDataSetIndex,
int actualRowSizeLimit,
org.apache.iotdb.db.protocol.rest.v2.model.QueryDataSet targetDataSet)
throws IoTDBException {
@@ -220,7 +229,7 @@ public class QueryDataSetHandler {
return Response.ok().entity(targetDataSet).build();
}
for (int k = 0; k < columnNum; k++) {
- Column column = tsBlock.getColumn(k);
+ Column column = tsBlock.getColumn(targetDataSetIndexToSourceDataSetIndex[k]);
List<Object> targetDataSetColumn = targetDataSet.getValues().get(k);
for (int i = 0; i < currentCount; i++) {
fetched++;