This is an automated email from the ASF dual-hosted git repository.
jackietien 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 6118e6cec6 [IOTDB-5837] Fix exception in select-into of ALIGN BY
DEVICE query
6118e6cec6 is described below
commit 6118e6cec6b6b1e6e48f07860cb4dbc824ae7a67
Author: liuminghui233 <[email protected]>
AuthorDate: Mon May 8 11:42:08 2023 +0800
[IOTDB-5837] Fix exception in select-into of ALIGN BY DEVICE query
---
.../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 3712ce3b9b..c9d865128f 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 5f2d202219..32a0959d80 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);