This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixPushDownProject
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d1924f304ac47d216056c24c1c31ff4c067547f9
Author: Minghui Liu <[email protected]>
AuthorDate: Tue May 14 00:56:33 2024 +0800

    add more UT
---
 .../plan/optimization/AggregationPushDownTest.java | 69 ++++++++++++++++++++++
 .../plan/optimization/TestPlanBuilder.java         | 20 +++++++
 2 files changed, 89 insertions(+)

diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
index d43d17c1384..75655f68e64 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/AggregationPushDownTest.java
@@ -34,6 +34,9 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import static 
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.gt;
+import static 
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.intValue;
+import static 
org.apache.iotdb.db.queryengine.plan.expression.ExpressionFactory.timeSeries;
 import static 
org.apache.iotdb.db.queryengine.plan.optimization.OptimizationTestUtil.getAggregationDescriptor;
 import static 
org.apache.iotdb.db.queryengine.plan.optimization.OptimizationTestUtil.schemaMap;
 
@@ -246,6 +249,72 @@ public class AggregationPushDownTest {
             .getRoot());
   }
 
+  @Test
+  public void testRemoveProject() {
+    GroupByTimeParameter groupByTimeParameter =
+        new GroupByTimeParameter(0, 100, new TimeDuration(0, 10), new 
TimeDuration(0, 10), true);
+    List<AggregationDescriptor> aggregationDescriptorList1 =
+        Collections.singletonList(
+            getAggregationDescriptor(AggregationStep.SINGLE, 
"root.sg.d2.a.s1"));
+
+    checkPushDown(
+        "select count(s1) from root.sg.d2.a where s2 > 1 group by ([0, 100), 
10ms);",
+        new TestPlanBuilder()
+            .scanAligned(
+                "0",
+                schemaMap.get("root.sg.d2.a"),
+                ExpressionFactory.gt(
+                    
ExpressionFactory.timeSeries(schemaMap.get("root.sg.d2.a.s2")),
+                    ExpressionFactory.intValue("1")))
+            .project("3", Collections.singletonList("root.sg.d2.a.s1"))
+            .rawDataAggregation("2", aggregationDescriptorList1, 
groupByTimeParameter, false)
+            .getRoot(),
+        new TestPlanBuilder()
+            .alignedAggregationScan(
+                "4",
+                schemaMap.get("aligned_root.sg.d2.a.s1"),
+                aggregationDescriptorList1,
+                groupByTimeParameter,
+                false,
+                ExpressionFactory.gt(
+                    
ExpressionFactory.timeSeries(schemaMap.get("root.sg.d2.a.s2")),
+                    ExpressionFactory.intValue("1")))
+            .getRoot());
+
+    List<AggregationDescriptor> aggregationDescriptorList2 =
+        Collections.singletonList(
+            getAggregationDescriptor(AggregationStep.SINGLE, "root.sg.d1.s1"));
+    checkPushDown(
+        "select count(s1) from root.sg.d1 where time > 100 and s2 > 10 group 
by ([0, 100), 10ms);",
+        new TestPlanBuilder()
+            .leftOuterTimeJoin(
+                "5",
+                Ordering.ASC,
+                new TestPlanBuilder()
+                    .scan(
+                        "1",
+                        schemaMap.get("root.sg.d1.s2"),
+                        gt(timeSeries(schemaMap.get("root.sg.d1.s2")), 
intValue("10")))
+                    .getRoot(),
+                new TestPlanBuilder().scan("0", 
schemaMap.get("root.sg.d1.s1")).getRoot())
+            .project("6", Collections.singletonList("root.sg.d1.s1"))
+            .rawDataAggregation("4", aggregationDescriptorList2, 
groupByTimeParameter, false)
+            .getRoot(),
+        new TestPlanBuilder()
+            .leftOuterTimeJoin(
+                "5",
+                Ordering.ASC,
+                new TestPlanBuilder()
+                    .scan(
+                        "1",
+                        schemaMap.get("root.sg.d1.s2"),
+                        gt(timeSeries(schemaMap.get("root.sg.d1.s2")), 
intValue("10")))
+                    .getRoot(),
+                new TestPlanBuilder().scan("0", 
schemaMap.get("root.sg.d1.s1")).getRoot())
+            .rawDataAggregation("4", aggregationDescriptorList2, 
groupByTimeParameter, false)
+            .getRoot());
+  }
+
   private void checkPushDown(String sql, PlanNode rawPlan, PlanNode optPlan) {
     OptimizationTestUtil.checkPushDown(
         Collections.singletonList(new PredicatePushDown()),
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
index b5f82ddc7a6..0ca53b7b84c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/optimization/TestPlanBuilder.java
@@ -170,6 +170,26 @@ public class TestPlanBuilder {
     return this;
   }
 
+  public TestPlanBuilder alignedAggregationScan(
+      String id,
+      PartialPath path,
+      List<AggregationDescriptor> aggregationDescriptors,
+      GroupByTimeParameter groupByTimeParameter,
+      boolean outputEndTime,
+      Expression pushDownPredicate) {
+    AlignedSeriesAggregationScanNode aggregationScanNode =
+        new AlignedSeriesAggregationScanNode(
+            new PlanNodeId(id),
+            (AlignedPath) path,
+            aggregationDescriptors,
+            Ordering.ASC,
+            groupByTimeParameter);
+    aggregationScanNode.setOutputEndTime(outputEndTime);
+    aggregationScanNode.setPushDownPredicate(pushDownPredicate);
+    this.root = aggregationScanNode;
+    return this;
+  }
+
   public TestPlanBuilder rawDataAggregation(
       String id,
       List<AggregationDescriptor> aggregationDescriptors,

Reply via email to