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