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 2023/05/14 12:41:46 UTC
[iotdb] 01/01: [IOTDB-5837] Fix exception in select-into of ALIGN BY DEVICE query
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/fixSelectInto1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c1114b6d8088c71dd81405440f028c9389bb3cbd
Author: liuminghui233 <36...@users.noreply.github.com>
AuthorDate: Mon May 8 11:42:08 2023 +0800
[IOTDB-5837] Fix exception in select-into of ALIGN BY DEVICE query
(cherry picked from commit 6118e6cec6b6b1e6e48f07860cb4dbc824ae7a67)
---
.../iotdb/db/it/selectinto/IoTDBSelectIntoIT.java | 30 ++++++++++++++++++++++
.../operator/process/DeviceViewIntoOperator.java | 6 ++++-
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
index 3712ce3b9bf..c9d865128f7 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/selectinto/IoTDBSelectIntoIT.java
@@ -483,6 +483,36 @@ public class IoTDBSelectIntoIT {
"select k1, k2, k3 from root.sg_abd_expr.*;", expectedQueryHeader, queryRetArray);
}
+ @Test
+ public void testExpressionAlignByDevice2() {
+ String[] intoRetArray =
+ new String[] {
+ "root.sg.d1,avg(s1),root.agg_expr.d1.avg_s1,1,",
+ "root.sg.d1,sum(s1) + sum(s1),root.agg_expr.d1.sum_s1_add_s1,1,",
+ "root.sg.d1,count(s2),root.agg_expr.d1.count_s2,1,",
+ "root.sg.d2,avg(s1),root.agg_expr.d2.avg_s1,1,",
+ "root.sg.d2,sum(s1) + sum(s1),root.agg_expr.d2.sum_s1_add_s1,1,",
+ "root.sg.d2,count(s2),root.agg_expr.d2.count_s2,1,",
+ };
+ resultSetEqualTest(
+ "select avg(s1), sum(s1) + sum(s1), count(s2)"
+ + " into root.agg_expr.${2}(avg_s1, sum_s1_add_s1, count_s2)"
+ + " from root.sg.d1, root.sg.d2 align by device;",
+ selectIntoAlignByDeviceHeader, intoRetArray);
+
+ String expectedQueryHeader =
+ "Time,root.agg_expr.d1.avg_s1,root.agg_expr.d2.avg_s1,root.agg_expr.d1.sum_s1_add_s1,"
+ + "root.agg_expr.d2.sum_s1_add_s1,root.agg_expr.d1.count_s2,root.agg_expr.d2.count_s2,";
+ String[] queryRetArray =
+ new String[] {
+ "0,6.5,6.428571428571429,130.0,90.0,9,8,",
+ };
+ resultSetEqualTest(
+ "select avg_s1, sum_s1_add_s1, count_s2 from root.agg_expr.*;",
+ expectedQueryHeader,
+ queryRetArray);
+ }
+
// -------------------------------------- CHECK EXCEPTION -------------------------------------
@Test
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/DeviceViewIntoOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/DeviceViewIntoOperator.java
index 5f2d2022192..32a0959d80f 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/DeviceViewIntoOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/process/DeviceViewIntoOperator.java
@@ -49,6 +49,7 @@ public class DeviceViewIntoOperator extends AbstractIntoOperator {
private final Map<String, Boolean> targetDeviceToAlignedMap;
private final Map<String, List<Pair<String, PartialPath>>> deviceToSourceTargetPathPairListMap;
+ private final int deviceColumnIndex;
private String currentDevice;
private final TsBlockBuilder resultTsBlockBuilder;
@@ -82,6 +83,9 @@ public class DeviceViewIntoOperator extends AbstractIntoOperator {
.map(ColumnHeader::getColumnType)
.collect(Collectors.toList());
this.resultTsBlockBuilder = new TsBlockBuilder(outputDataTypes);
+
+ this.deviceColumnIndex =
+ sourceColumnToInputLocationMap.get(ColumnHeaderConstant.DEVICE).getValueColumnIndex();
}
@Override
@@ -90,7 +94,7 @@ public class DeviceViewIntoOperator extends AbstractIntoOperator {
return true;
}
- String device = String.valueOf(inputTsBlock.getValueColumns()[0].getBinary(0));
+ String device = String.valueOf(inputTsBlock.getValueColumns()[deviceColumnIndex].getBinary(0));
if (!Objects.equals(device, currentDevice)) {
InsertMultiTabletsStatement insertMultiTabletsStatement =
constructInsertMultiTabletsStatement(false);