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:49:37 UTC
[iotdb] branch rel/1.1 updated: [ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10472)
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new 0b925133a8b [ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10472)
0b925133a8b is described below
commit 0b925133a8b790d1fb72c678e3e68ceb71372ae9
Author: CloudWise-Lukemiao <76...@users.noreply.github.com>
AuthorDate: Thu Jul 6 23:49:31 2023 +0800
[ISSUE-10109] Fixed data column and data correspondence mismatch returned by the rest API interface (#10472)
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/server/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java b/server/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
index e61075ea114..da27531c82f 100644
--- a/server/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandler.java
@@ -86,32 +86,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;
}
}
}
@@ -160,7 +168,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<>());
@@ -201,6 +209,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 {
@@ -233,7 +242,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/server/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java b/server/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
index 9fd780259ed..b36da701267 100644
--- a/server/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
+++ b/server/src/main/java/org/apache/iotdb/db/protocol/rest/v2/handler/QueryDataSetHandler.java
@@ -86,32 +86,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;
}
}
}
@@ -160,7 +168,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<>());
@@ -201,6 +209,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 {
@@ -233,7 +242,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++;