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 4912d902a8b [IOTDB-6343] Fix the device path construction bug in 
visitSingleDeviceViewNode of AggragationPushDown
4912d902a8b is described below

commit 4912d902a8b8b6fccb747103f65523d70d2c1ab0
Author: Beyyes <[email protected]>
AuthorDate: Tue Jun 25 08:39:34 2024 +0800

    [IOTDB-6343] Fix the device path construction bug in 
visitSingleDeviceViewNode of AggragationPushDown
---
 ...oTDBAlignByDeviceWithTemplateAggregationIT.java | 29 ++++++++++++++++++++++
 .../plan/optimization/AggregationPushDown.java     |  8 +++++-
 .../plan/planner/plan/node/PlanGraphPrinter.java   |  5 ++++
 .../plan/planner/node/PlanGraphPrinterTest.java    |  2 +-
 4 files changed, 42 insertions(+), 2 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/alignbydevice/IoTDBAlignByDeviceWithTemplateAggregationIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/alignbydevice/IoTDBAlignByDeviceWithTemplateAggregationIT.java
index 6d5d16a40c4..d8ab1e2c3fc 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/alignbydevice/IoTDBAlignByDeviceWithTemplateAggregationIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/alignbydevice/IoTDBAlignByDeviceWithTemplateAggregationIT.java
@@ -59,6 +59,16 @@ public class IoTDBAlignByDeviceWithTemplateAggregationIT {
         "flush;",
         "INSERT INTO root.sg2.d3(timestamp,s1,s2,s3) 
values(1,111.1,true,null), (4,444.4,true,44), (8,8.8,false,4), 
(1314000000002,13.16,false,1316);",
         "INSERT INTO root.sg2.d4(timestamp,s1,s2,s3) 
values(1,1111.1,true,1111), (5,5555.5,false,5555), (8,0.8,true,10), 
(1314000000003,13.14,true,1314);",
+
+        // aligned template with delete
+        "CREATE database root.sg3;",
+        "SET SCHEMA TEMPLATE t2 to root.sg3;",
+        "INSERT INTO root.sg3.d1(timestamp,s1,s2,s3) values(1,1.1,false,1), 
(2,2.2,false,2), (5,5.5,true,5), (1314000000000,13.14,true,1314);",
+        "INSERT INTO root.sg3.d2(timestamp,s1,s2,s3) values(1,11.1,false,11), 
(2,22.2,false,22), (5,50.0,false,5), (1314000000001,13.15,false,1315);",
+        "flush;",
+        "INSERT INTO root.sg3.d3(timestamp,s1,s2,s3) 
values(1,111.1,true,null), (4,444.4,true,44), (8,8.8,false,4), 
(1314000000002,13.16,false,1316);",
+        "INSERT INTO root.sg3.d4(timestamp,s1,s2,s3) 
values(1,1111.1,true,1111), (5,5555.5,false,5555), (8,0.8,true,10), 
(1314000000003,13.14,true,1314);",
+        "delete from root.sg3.d1.s1 where time <= 5;"
       };
 
   @BeforeClass
@@ -656,6 +666,25 @@ public class IoTDBAlignByDeviceWithTemplateAggregationIT {
         retArray);
   }
 
+  @Test
+  public void orderByTimeWithDeleteTest() {
+    String[] expectedHeader = new String[] {"Device,count(s1)"};
+    String[] retArray =
+        new String[] {
+          "root.sg3.d1,1,", "root.sg3.d2,4,", "root.sg3.d3,4,", 
"root.sg3.d4,4,",
+        };
+    resultSetEqualTest(
+        "select count(s1) from root.sg3.** order by device align by device;",
+        expectedHeader,
+        retArray);
+
+    // to test visitSingeDeviceViewNode in AggregationPushDown
+    resultSetEqualTest(
+        "select count(s1) from root.sg3.** order by time align by device;",
+        expectedHeader,
+        retArray);
+  }
+
   protected static void insertData() {
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
index a8b01ef6a84..255ea1b09b5 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDown.java
@@ -224,7 +224,13 @@ public class AggregationPushDown implements PlanOptimizer {
     @Override
     public PlanNode visitSingleDeviceView(SingleDeviceViewNode node, 
RewriterContext context) {
       context.setCurDevice(node.getDevice());
-      context.setCurDevicePath(new PartialPath(node.getDevice().split(",")));
+      try {
+        context.setCurDevicePath(new PartialPath(node.getDevice()));
+      } catch (IllegalPathException e) {
+        throw new IllegalStateException(
+            String.format(
+                "Illegal device path: %s in AggregationPushDown rule.", 
node.getDevice()));
+      }
       PlanNode rewrittenChild = node.getChild().accept(this, context);
       node.setChild(rewrittenChild);
       return node;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanGraphPrinter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanGraphPrinter.java
index 730edb747b7..0fda7777792 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanGraphPrinter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanGraphPrinter.java
@@ -123,6 +123,8 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
       boxValue.add(String.format("Predicate: %s", predicate));
     }
 
+    boxValue.add(String.format("ScanOrder: %s", node.getScanOrder()));
+
     boxValue.add(printRegion(node.getRegionReplicaSet()));
     return render(node, boxValue, context);
   }
@@ -151,6 +153,7 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
     }
 
     boxValue.add(String.format("QueryAllSensors: %s", 
node.isQueryAllSensors()));
+    boxValue.add(String.format("ScanOrder: %s", node.getScanOrder()));
     boxValue.add(printRegion(node.getRegionReplicaSet()));
     return render(node, boxValue, context);
   }
@@ -171,6 +174,7 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
     if (predicate != null) {
       boxValue.add(String.format("Predicate: %s", predicate));
     }
+    boxValue.add(String.format("ScanOrder: %s", node.getScanOrder()));
     boxValue.add(printRegion(node.getRegionReplicaSet()));
     return render(node, boxValue, context);
   }
@@ -194,6 +198,7 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
     if (predicate != null) {
       boxValue.add(String.format("Predicate: %s", predicate));
     }
+    boxValue.add(String.format("ScanOrder: %s", node.getScanOrder()));
     boxValue.add(printRegion(node.getRegionReplicaSet()));
     return render(node, boxValue, context);
   }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
index dd0e664d38a..e7007a9e59a 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/PlanGraphPrinterTest.java
@@ -62,7 +62,7 @@ public class PlanGraphPrinterTest {
     topKNode.addChild(deviceViewNode);
 
     List<String> result = getGraph(topKNode);
-    assertEquals(18, result.size());
+    assertEquals(19, result.size());
     assertEquals("│TopK-1                                 │", result.get(1));
     assertEquals("            │DeviceView-2  │             ", result.get(8));
     assertEquals("        │SeriesScan-3           │        ", result.get(14));

Reply via email to