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 f16df817848 Add new optimization rule: remove `Project` under 
`RawDataAggregation`
f16df817848 is described below

commit f16df8178483e69dd8e3f8c1a59f9935d4b6211c
Author: liuminghui233 <[email protected]>
AuthorDate: Tue May 14 14:07:19 2024 +0800

    Add new optimization rule: remove `Project` under `RawDataAggregation`
---
 .../plan/optimization/AggregationPushDown.java     |  18 +-
 .../source/AlignedSeriesAggregationScanNode.java   |   6 +-
 .../plan/optimization/AggregationPushDownTest.java |  69 +++++
 .../plan/optimization/TestPlanBuilder.java         |  20 ++
 .../distribution/AggregationAlignByDeviceTest.java |  44 ---
 .../planner/distribution/AlignedByDeviceTest.java  | 328 ++-------------------
 6 files changed, 136 insertions(+), 349 deletions(-)

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 344572be2b3..cf4b3461955 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
@@ -46,6 +46,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SingleDevi
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWindowAggregationNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesAggregationScanNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesAggregationSourceNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.SeriesScanSourceNode;
@@ -225,6 +226,11 @@ public class AggregationPushDown implements PlanOptimizer {
     @Override
     public PlanNode visitRawDataAggregation(RawDataAggregationNode node, 
RewriterContext context) {
       PlanNode child = node.getChild();
+      if (child instanceof ProjectNode) {
+        // remove ProjectNode
+        node.setChild(((ProjectNode) child).getChild());
+        return visitRawDataAggregation(node, context);
+      }
       if (child instanceof FullOuterTimeJoinNode || child instanceof 
SeriesScanSourceNode) {
         boolean isSingleSource = child instanceof SeriesScanSourceNode;
         boolean needCheckAscending = node.getGroupByTimeParameter() == null;
@@ -269,9 +275,15 @@ public class AggregationPushDown implements PlanOptimizer {
         if (isSingleSource && ((SeriesScanSourceNode) 
child).getPushDownPredicate() != null) {
           Expression pushDownPredicate = ((SeriesScanSourceNode) 
child).getPushDownPredicate();
           sourceNodeList.forEach(
-              sourceNode ->
-                  ((SeriesAggregationSourceNode) sourceNode)
-                      .setPushDownPredicate(pushDownPredicate));
+              sourceNode -> {
+                SeriesAggregationSourceNode aggregationSourceNode =
+                    (SeriesAggregationSourceNode) sourceNode;
+                aggregationSourceNode.setPushDownPredicate(pushDownPredicate);
+                if (aggregationSourceNode instanceof 
AlignedSeriesAggregationScanNode) {
+                  ((AlignedSeriesAggregationScanNode) aggregationSourceNode)
+                      .setAlignedPath(((AlignedSeriesScanNode) 
child).getAlignedPath());
+                }
+              });
         }
 
         PlanNode resultNode = convergeWithTimeJoin(sourceNodeList, 
node.getScanOrder(), context);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
index 06392041ed9..2b69cdb0bc4 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/source/AlignedSeriesAggregationScanNode.java
@@ -49,7 +49,7 @@ import java.util.Objects;
 public class AlignedSeriesAggregationScanNode extends 
SeriesAggregationSourceNode {
 
   // The paths of the target series which will be aggregated.
-  private final AlignedPath alignedPath;
+  private AlignedPath alignedPath;
 
   // The id of DataRegion where the node will run
   private TRegionReplicaSet regionReplicaSet;
@@ -112,6 +112,10 @@ public class AlignedSeriesAggregationScanNode extends 
SeriesAggregationSourceNod
     return alignedPath;
   }
 
+  public void setAlignedPath(AlignedPath alignedPath) {
+    this.alignedPath = alignedPath;
+  }
+
   @Override
   public Ordering getScanOrder() {
     return scanOrder;
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..d8e92ab3625 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("root.sg.d2.a"),
+                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,
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
index 1753102d812..f6bb0deea1c 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AggregationAlignByDeviceTest.java
@@ -209,17 +209,6 @@ public class AggregationAlignByDeviceTest {
         firstFiTopNode.getChildren().get(0).getChildren().get(0) instanceof 
RawDataAggregationNode);
     assertTrue(
         
firstFiTopNode.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        firstFiTopNode
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
 
     secondFiRoot = plan.getInstances().get(1).getFragment().getPlanNodeTree();
@@ -229,17 +218,6 @@ public class AggregationAlignByDeviceTest {
         secondFiRoot.getChildren().get(0).getChildren().get(0) instanceof 
RawDataAggregationNode);
     assertTrue(
         
secondFiRoot.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        secondFiRoot
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
 
     // two aggregation measurement, two devices, with filter
@@ -260,17 +238,6 @@ public class AggregationAlignByDeviceTest {
         firstFiTopNode.getChildren().get(0).getChildren().get(0) instanceof 
RawDataAggregationNode);
     assertTrue(
         
firstFiTopNode.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        firstFiTopNode
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
 
     secondFiRoot = plan.getInstances().get(1).getFragment().getPlanNodeTree();
@@ -280,17 +247,6 @@ public class AggregationAlignByDeviceTest {
         secondFiRoot.getChildren().get(0).getChildren().get(0) instanceof 
RawDataAggregationNode);
     assertTrue(
         
secondFiRoot.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        secondFiRoot
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
   }
 
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
index 80a024ce7f6..9788584e217 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/AlignedByDeviceTest.java
@@ -137,14 +137,16 @@ public class AlignedByDeviceTest {
     assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof 
DeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof RawDataAggregationNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(
-        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
+        f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(1)
+            instanceof SeriesAggregationScanNode);
     assertTrue(f2Root instanceof IdentitySinkNode);
     assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
-    assertTrue(f2Root.getChildren().get(0).getChildren().get(0) instanceof 
RawDataAggregationNode);
-    assertTrue(f2Root.getChildren().get(0).getChildren().get(1) instanceof 
RawDataAggregationNode);
+    assertTrue(
+        f2Root.getChildren().get(0).getChildren().get(0) instanceof 
SeriesAggregationScanNode);
+    assertTrue(
+        f2Root.getChildren().get(0).getChildren().get(1) instanceof 
SeriesAggregationScanNode);
 
     // test of MULTI_SERIES
     sql =
@@ -163,17 +165,7 @@ public class AlignedByDeviceTest {
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
             instanceof RawDataAggregationNode);
     assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
+        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
             instanceof LeftOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -187,8 +179,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof SeriesSourceNode);
     assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof 
ExchangeNode);
     assertTrue(
@@ -371,106 +361,26 @@ public class AlignedByDeviceTest {
     assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof 
SingleDeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof RawDataAggregationNode);
+            instanceof AggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof FullOuterTimeJoinNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof SeriesScanNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
+        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(1)
             instanceof ExchangeNode);
     assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof 
SingleDeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0)
-            instanceof RawDataAggregationNode);
+            instanceof AggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof FullOuterTimeJoinNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof SeriesScanNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
+        
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(1)
             instanceof ExchangeNode);
     assertTrue(f2Root instanceof ShuffleSinkNode);
-    assertTrue(f2Root.getChildren().get(0) instanceof SeriesSourceNode);
-    assertTrue(f2Root.getChildren().get(1) instanceof SeriesSourceNode);
+    assertTrue(f2Root.getChildren().get(0) instanceof 
SeriesAggregationScanNode);
+    assertTrue(f2Root.getChildren().get(1) instanceof 
SeriesAggregationScanNode);
 
     // test of MULTI_SERIES
     sql =
@@ -490,19 +400,6 @@ public class AlignedByDeviceTest {
             instanceof RawDataAggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -516,8 +413,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -533,8 +428,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof SeriesSourceNode);
     assertTrue(
         f1Root
@@ -549,8 +442,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof ExchangeNode);
     assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof 
SingleDeviceViewNode);
@@ -559,19 +450,6 @@ public class AlignedByDeviceTest {
             instanceof RawDataAggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -585,8 +463,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -602,8 +478,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof SeriesSourceNode);
     assertTrue(
         f1Root
@@ -618,8 +492,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof ExchangeNode);
     assertTrue(f2Root instanceof ShuffleSinkNode);
@@ -739,23 +611,7 @@ public class AlignedByDeviceTest {
     assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof 
DeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof RawDataAggregationNode);
-    assertTrue(
-        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof SeriesScanNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(f2Root instanceof IdentitySinkNode);
     assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
     assertTrue(f3Root instanceof IdentitySinkNode);
@@ -778,8 +634,8 @@ public class AlignedByDeviceTest {
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
             instanceof RawDataAggregationNode);
     assertTrue(
-        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
+        f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(1)
+            instanceof RawDataAggregationNode);
     assertTrue(f2Root instanceof IdentitySinkNode);
     assertTrue(f2Root.getChildren().get(0) instanceof DeviceViewNode);
     assertTrue(f3Root instanceof IdentitySinkNode);
@@ -961,107 +817,27 @@ public class AlignedByDeviceTest {
     assertTrue(f1Root.getChildren().get(0).getChildren().get(0) instanceof 
SingleDeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof RawDataAggregationNode);
+            instanceof AggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof FullOuterTimeJoinNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof SeriesScanNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
+        
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(1)
             instanceof ExchangeNode);
     assertTrue(f1Root.getChildren().get(0).getChildren().get(1) instanceof 
SingleDeviceViewNode);
     assertTrue(
         f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0)
-            instanceof RawDataAggregationNode);
+            instanceof AggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof FullOuterTimeJoinNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-            instanceof SeriesScanNode);
+            instanceof SeriesAggregationScanNode);
     assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
+        
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(1)
             instanceof ExchangeNode);
     assertTrue(f2Root instanceof ShuffleSinkNode);
-    assertTrue(f2Root.getChildren().get(0) instanceof SeriesScanNode);
+    assertTrue(f2Root.getChildren().get(0) instanceof 
SeriesAggregationScanNode);
     assertTrue(f3Root instanceof ShuffleSinkNode);
-    assertTrue(f3Root.getChildren().get(0) instanceof SeriesScanNode);
+    assertTrue(f3Root.getChildren().get(0) instanceof 
SeriesAggregationScanNode);
 
     // test of MULTI_SERIES
     sql =
@@ -1082,19 +858,6 @@ public class AlignedByDeviceTest {
             instanceof RawDataAggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(0).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -1108,8 +871,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -1125,8 +886,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof SeriesSourceNode);
     assertTrue(
         f1Root
@@ -1141,8 +900,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof ExchangeNode);
     assertTrue(
@@ -1156,8 +913,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
@@ -1171,8 +926,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
                 .getChildren()
                 .get(0)
@@ -1188,8 +941,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
                 .getChildren()
                 .get(1)
@@ -1200,19 +951,6 @@ public class AlignedByDeviceTest {
             instanceof RawDataAggregationNode);
     assertTrue(
         
f1Root.getChildren().get(0).getChildren().get(1).getChildren().get(0).getChildren().get(0)
-            instanceof ProjectNode);
-    assertTrue(
-        f1Root
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(1)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
-                .getChildren()
-                .get(0)
             instanceof LeftOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -1226,8 +964,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
         f1Root
@@ -1243,8 +979,6 @@ public class AlignedByDeviceTest {
                 .get(0)
                 .getChildren()
                 .get(0)
-                .getChildren()
-                .get(0)
             instanceof SeriesSourceNode);
     assertTrue(
         f1Root
@@ -1259,8 +993,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof ExchangeNode);
     assertTrue(
@@ -1274,8 +1006,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
             instanceof FullOuterTimeJoinNode);
     assertTrue(
@@ -1289,8 +1019,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
                 .getChildren()
                 .get(0)
@@ -1306,8 +1034,6 @@ public class AlignedByDeviceTest {
                 .getChildren()
                 .get(0)
                 .getChildren()
-                .get(0)
-                .getChildren()
                 .get(1)
                 .getChildren()
                 .get(1)


Reply via email to