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);

Reply via email to