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,
