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

shuwenwei pushed a commit to branch table_disk_usage_statistics
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/table_disk_usage_statistics by 
this push:
     new 098392ddd24 add it
098392ddd24 is described below

commit 098392ddd24cf8b89403d1f2a2589996fc1df672
Author: shuwenwei <[email protected]>
AuthorDate: Fri Nov 14 18:22:18 2025 +0800

    add it
---
 .../apache/iotdb/db/it/IoTDBShowDiskUsageIT.java   | 163 +++++++++++++++++++
 .../relational/it/IoTDBShowDiskUsageTableIT.java   | 176 +++++++++++++++++++++
 .../InformationSchemaContentSupplierFactory.java   |   3 +
 .../plan/optimization/LimitOffsetPushDown.java     |   8 +-
 .../plan/planner/LogicalPlanBuilder.java           |   6 +-
 .../plan/planner/OperatorTreeGenerator.java        |   4 +-
 .../planner/distribution/ExchangeNodeAdder.java    |   4 +-
 .../plan/planner/distribution/SourceRewriter.java  |   8 +-
 .../plan/planner/plan/node/PlanGraphPrinter.java   |   4 +-
 .../plan/planner/plan/node/PlanNodeType.java       |   4 +-
 .../plan/planner/plan/node/PlanVisitor.java        |   4 +-
 .../{TreeCollectNode.java => CollectNode.java}     |  14 +-
 12 files changed, 371 insertions(+), 27 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBShowDiskUsageIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBShowDiskUsageIT.java
new file mode 100644
index 00000000000..81b9098d9ef
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBShowDiskUsageIT.java
@@ -0,0 +1,163 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.it;
+
+import org.apache.iotdb.isession.ISession;
+import org.apache.iotdb.isession.SessionDataSet;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.category.LocalStandaloneIT;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.fail;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({LocalStandaloneIT.class, ClusterIT.class})
+public class IoTDBShowDiskUsageIT {
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvFactory.getEnv().initClusterEnvironment();
+
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      for (int i = 0; i < 20; i++) {
+        session.executeNonQueryStatement(
+            "insert into root.test.d" + i + "(time, s0, s1, s2) values (" + i 
+ ",1, 1, 1)");
+      }
+      session.executeNonQueryStatement(
+          "insert into root.test.d0(time,s0,s1) aligned values (-1,1,1)");
+      session.executeNonQueryStatement("flush");
+    }
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void test1() {
+
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement("show disk_usage from root.test.**");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long sum = 0;
+      Map<Long, Long> timePartitionSizes = new HashMap<>();
+      while (iterator.next()) {
+        long timePartition = iterator.getLong("TimePartition");
+        long size = iterator.getLong("SizeInBytes");
+        timePartitionSizes.compute(timePartition, (k, v) -> v == null ? size : 
v + size);
+        sum += size;
+      }
+      Assert.assertTrue(sum > 0);
+      Assert.assertTrue(timePartitionSizes.containsKey(0L));
+      Assert.assertTrue(timePartitionSizes.containsKey(-1L));
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test2() {
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement("show disk_usage from root.test.** 
limit 2");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      int count = 0;
+      while (iterator.next()) {
+        count++;
+      }
+      Assert.assertEquals(2, count);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test3() {
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "show disk_usage from root.test.** order by TimePartition desc");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long previousTimePartition = Long.MAX_VALUE;
+      while (iterator.next()) {
+        long currentTimePartition = iterator.getLong("TimePartition");
+        Assert.assertTrue(currentTimePartition <= previousTimePartition);
+        previousTimePartition = currentTimePartition;
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test4() {
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "show disk_usage from root.test.** where TimePartition < 0 or 
DataNodeId >= 2");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      while (iterator.next()) {
+        Assert.assertTrue(
+            iterator.getLong("TimePartition") < 0 || 
iterator.getLong("DataNodeId") >= 2);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test5() {
+    try (ISession session = EnvFactory.getEnv().getSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "show disk_usage from root.test.** order by TimePartition desc 
limit 2");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long previousTimePartition = Long.MAX_VALUE;
+      int count = 0;
+      while (iterator.next()) {
+        count++;
+        long currentTimePartition = iterator.getLong("TimePartition");
+        Assert.assertTrue(currentTimePartition <= previousTimePartition);
+        previousTimePartition = currentTimePartition;
+      }
+      Assert.assertEquals(2, count);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}
diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/IoTDBShowDiskUsageTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/IoTDBShowDiskUsageTableIT.java
new file mode 100644
index 00000000000..58373fc7bfc
--- /dev/null
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/IoTDBShowDiskUsageTableIT.java
@@ -0,0 +1,176 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.relational.it;
+
+import org.apache.iotdb.isession.ITableSession;
+import org.apache.iotdb.isession.SessionDataSet;
+import org.apache.iotdb.it.env.EnvFactory;
+import org.apache.iotdb.it.framework.IoTDBTestRunner;
+import org.apache.iotdb.itbase.category.TableClusterIT;
+import org.apache.iotdb.itbase.category.TableLocalStandaloneIT;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+import org.junit.runner.RunWith;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.fail;
+
+@RunWith(IoTDBTestRunner.class)
+@Category({TableLocalStandaloneIT.class, TableClusterIT.class})
+public class IoTDBShowDiskUsageTableIT {
+
+  @BeforeClass
+  public static void setUp() throws Exception {
+    EnvFactory.getEnv().initClusterEnvironment();
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      session.executeNonQueryStatement("create database test");
+      session.executeNonQueryStatement("use test");
+      session.executeNonQueryStatement(
+          "create table t1(tag1 string tag, s0 int32 field, s1 int32 field)");
+      session.executeNonQueryStatement(
+          "create table t2(tag1 string tag, s0 int32 field, s1 int32 field)");
+      session.executeNonQueryStatement(
+          "create view v1(tag1 string tag, s0 int32 field, s1 int32 field) as 
root.test.**");
+      for (int i = 0; i < 20; i++) {
+        session.executeNonQueryStatement(
+            "insert into t1(time,tag1,s0,s1) values (" + i + ", 'd" + i + "', 
1, 1)");
+      }
+      session.executeNonQueryStatement("insert into t1(time,tag1,s0,s1) values 
(-1,'d1',1,1)");
+      session.executeNonQueryStatement("flush");
+    }
+  }
+
+  @AfterClass
+  public static void tearDown() throws Exception {
+    EnvFactory.getEnv().cleanClusterEnvironment();
+  }
+
+  @Test
+  public void test1() {
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "select * from information_schema.table_disk_usage where 
database = 'test'");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long sum = 0;
+      Map<Long, Long> timePartitionSizes = new HashMap<>();
+      Map<String, Long> tableSizes = new HashMap<>();
+      while (iterator.next()) {
+        String table = iterator.getString("table_name");
+        long timePartition = iterator.getLong("time_partition");
+        long size = iterator.getLong("size_in_bytes");
+        timePartitionSizes.compute(timePartition, (k, v) -> v == null ? size : 
v + size);
+        tableSizes.compute(table, (k, v) -> v == null ? size : v + size);
+        sum += size;
+      }
+      Assert.assertTrue(sum > 0);
+      Assert.assertEquals(2, tableSizes.size());
+      Assert.assertEquals(0L, (long) tableSizes.get("t2"));
+      Assert.assertFalse(tableSizes.containsKey("v1"));
+      Assert.assertTrue(timePartitionSizes.containsKey(0L));
+      Assert.assertTrue(timePartitionSizes.containsKey(-1L));
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test2() {
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "select * from information_schema.table_disk_usage where 
database = 'test' limit 2");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      int count = 0;
+      while (iterator.next()) {
+        count++;
+      }
+      Assert.assertEquals(2, count);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test3() {
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "select * from information_schema.table_disk_usage where 
database = 'test' order by time_partition desc");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long previousTimePartition = Long.MAX_VALUE;
+      while (iterator.next()) {
+        long currentTimePartition = iterator.getLong("time_partition");
+        Assert.assertTrue(currentTimePartition <= previousTimePartition);
+        previousTimePartition = currentTimePartition;
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test4() {
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "select * from information_schema.table_disk_usage where 
database = 'test' and (time_partition < 0 or node_id >= 2)");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      while (iterator.next()) {
+        Assert.assertTrue(
+            iterator.getLong("time_partition") < 0 || 
iterator.getLong("node_id") >= 2);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void test5() {
+    try (ITableSession session = 
EnvFactory.getEnv().getTableSessionConnection()) {
+      SessionDataSet sessionDataSet =
+          session.executeQueryStatement(
+              "select * from information_schema.table_disk_usage where 
database = 'test' order by time_partition desc limit 2");
+      SessionDataSet.DataIterator iterator = sessionDataSet.iterator();
+      long previousTimePartition = Long.MAX_VALUE;
+      int count = 0;
+      while (iterator.next()) {
+        count++;
+        long currentTimePartition = iterator.getLong("time_partition");
+        Assert.assertTrue(currentTimePartition <= previousTimePartition);
+        previousTimePartition = currentTimePartition;
+      }
+      Assert.assertEquals(2, count);
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+}
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
index 9c9ebe25ed4..9115cd85025 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/InformationSchemaContentSupplierFactory.java
@@ -1326,6 +1326,9 @@ public class InformationSchemaContentSupplierFactory {
 
       List<String> tablesToScan = new ArrayList<>(tTableInfos.size());
       for (TTableInfo tTableInfo : tTableInfos) {
+        if (tTableInfo.getType() != TableType.BASE_TABLE.ordinal()) {
+          continue;
+        }
         if (pushDownFilter != null) {
           Object[] row = new Object[5];
           row[0] = new Binary(dataRegion.getDatabaseName(), 
TSFileConfig.STRING_CHARSET);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
index 43b0b00f98c..6ee46831bc8 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/optimization/LimitOffsetPushDown.java
@@ -26,6 +26,7 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.ExpressionAnalyzer;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FillNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.FilterNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.LimitNode;
@@ -33,7 +34,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.MultiChild
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.OffsetNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TwoChildProcessNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.LeftOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.source.AlignedSeriesScanNode;
@@ -181,10 +181,12 @@ public class LimitOffsetPushDown implements PlanOptimizer 
{
     }
 
     @Override
-    public PlanNode visitCollect(TreeCollectNode node, RewriterContext 
context) {
+    public PlanNode visitCollect(CollectNode node, RewriterContext context) {
       PlanNode newNode = node.clone();
       RewriterContext subContext = new RewriterContext(context.getAnalysis());
-      subContext.setLimit(context.getLimit() + context.getOffset());
+      if (context.getLimit() > 0) {
+        subContext.setLimit(context.getLimit() + context.getOffset());
+      }
       for (PlanNode child : node.getChildren()) {
         newNode.addChild(child.accept(this, subContext));
       }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
index 5657eeeb38d..d44d7f3fe6d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/LogicalPlanBuilder.java
@@ -60,6 +60,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.Seri
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.TimeSeriesCountNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.TimeSeriesSchemaScanNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AI.InferenceNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
@@ -78,7 +79,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryTransformNode;
@@ -1298,8 +1298,8 @@ public class LogicalPlanBuilder {
                   true)
               .getRoot();
     } else if (analysis.getMergeOrderParameter().isEmpty()) {
-      TreeCollectNode collectNode =
-          new TreeCollectNode(
+      CollectNode collectNode =
+          new CollectNode(
               context.getQueryId().genPlanNodeId(),
               ShowDiskUsageNode.SHOW_DISK_USAGE_HEADER_COLUMNS);
       dataNodeLocations.forEach(
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
index c144fb89c7a..f063106450e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/OperatorTreeGenerator.java
@@ -200,6 +200,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AI.Inferen
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ActiveRegionScanMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
@@ -221,7 +222,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TwoChildProcessNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
@@ -1176,7 +1176,7 @@ public class OperatorTreeGenerator extends 
PlanVisitor<Operator, LocalExecutionP
   }
 
   @Override
-  public Operator visitCollect(TreeCollectNode node, LocalExecutionPlanContext 
context) {
+  public Operator visitCollect(CollectNode node, LocalExecutionPlanContext 
context) {
     OperatorContext operatorContext =
         context
             .getDriverContext()
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/ExchangeNodeAdder.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/ExchangeNodeAdder.java
index 6ccf6c1b214..009d45ae540 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/ExchangeNodeAdder.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/ExchangeNodeAdder.java
@@ -37,6 +37,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.Seri
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ActiveRegionScanMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ExchangeNode;
@@ -54,7 +55,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.LeftOuterTimeJoinNode;
@@ -241,7 +241,7 @@ public class ExchangeNodeAdder extends 
PlanVisitor<PlanNode, NodeGroupContext> {
   }
 
   @Override
-  public PlanNode visitCollect(TreeCollectNode node, NodeGroupContext context) 
{
+  public PlanNode visitCollect(CollectNode node, NodeGroupContext context) {
     return processMultiChildNode(node, context);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
index abe0e0ef76b..29f3f6c6530 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SourceRewriter.java
@@ -48,6 +48,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.metadata.read.Sche
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ActiveRegionScanMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByLevelNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.GroupByTagNode;
@@ -61,7 +62,6 @@ 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.SortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.last.LastQueryCollectNode;
@@ -142,9 +142,9 @@ public class SourceRewriter extends 
BaseSourceRewriter<DistributionPlanContext>
   }
 
   @Override
-  public List<PlanNode> visitCollect(TreeCollectNode node, 
DistributionPlanContext context) {
-    TreeCollectNode newRoot =
-        new TreeCollectNode(
+  public List<PlanNode> visitCollect(CollectNode node, DistributionPlanContext 
context) {
+    CollectNode newRoot =
+        new CollectNode(
             context.queryContext.getQueryId().genPlanNodeId(), 
node.getOutputColumnNames());
     for (int i = 0; i < node.getChildren().size(); i++) {
       List<PlanNode> rewroteNodes = rewrite(node.getChildren().get(i), 
context);
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 fbca56e512b..66cd1bd018b 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
@@ -27,6 +27,7 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.TemplatedInfo;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
@@ -47,7 +48,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.LeftOuterTimeJoinNode;
@@ -266,7 +266,7 @@ public class PlanGraphPrinter extends 
PlanVisitor<List<String>, PlanGraphPrinter
   }
 
   @Override
-  public List<String> visitCollect(TreeCollectNode node, GraphContext context) 
{
+  public List<String> visitCollect(CollectNode node, GraphContext context) {
     List<String> boxValue = new ArrayList<>();
     boxValue.add(String.format("Collect-%s", node.getPlanNodeId().getId()));
     boxValue.add(String.format("ChildrenCount: %d", 
node.getChildren().size()));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
index d50a114e5cb..6b5382b9836 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanNodeType.java
@@ -67,6 +67,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AI.Inferen
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ActiveRegionScanMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
@@ -87,7 +88,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.LeftOuterTimeJoinNode;
@@ -594,7 +594,7 @@ public enum PlanNodeType {
       case 99:
         return ShowDiskUsageNode.deserialize(buffer);
       case 100:
-        return TreeCollectNode.deserialize(buffer);
+        return CollectNode.deserialize(buffer);
       case 902:
         return CreateOrUpdateTableDeviceNode.deserialize(buffer);
       case 903:
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
index d8c2b6d03c9..e6c0cf23424 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/PlanVisitor.java
@@ -64,6 +64,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AI.Inferen
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ActiveRegionScanMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationMergeSortNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.AggregationNode;
+import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.CollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.ColumnInjectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceMergeNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.DeviceViewIntoNode;
@@ -87,7 +88,6 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SlidingWin
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.SortNode;
 import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TopKNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TransformNode;
-import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TreeCollectNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.TwoChildProcessNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.FullOuterTimeJoinNode;
 import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.join.InnerTimeJoinNode;
@@ -356,7 +356,7 @@ public abstract class PlanVisitor<R, C> {
     return visitMultiChildProcess(node, context);
   }
 
-  public R visitCollect(TreeCollectNode node, C context) {
+  public R visitCollect(CollectNode node, C context) {
     return visitMultiChildProcess(node, context);
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TreeCollectNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/CollectNode.java
similarity index 87%
rename from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TreeCollectNode.java
rename to 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/CollectNode.java
index 99595c45192..d44c6412f86 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/TreeCollectNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/process/CollectNode.java
@@ -35,16 +35,16 @@ import java.util.List;
 
 import static com.google.common.base.Preconditions.checkArgument;
 
-public class TreeCollectNode extends MultiChildProcessNode {
+public class CollectNode extends MultiChildProcessNode {
 
   private final List<String> outputColumnNames;
 
-  public TreeCollectNode(PlanNodeId id, List<String> outputColumnNames) {
+  public CollectNode(PlanNodeId id, List<String> outputColumnNames) {
     super(id);
     this.outputColumnNames = outputColumnNames;
   }
 
-  public TreeCollectNode(PlanNodeId id, List<PlanNode> children, List<String> 
outputColumnNames) {
+  public CollectNode(PlanNodeId id, List<PlanNode> children, List<String> 
outputColumnNames) {
     super(id, children);
     this.outputColumnNames = outputColumnNames;
   }
@@ -56,7 +56,7 @@ public class TreeCollectNode extends MultiChildProcessNode {
 
   @Override
   public PlanNode clone() {
-    return new TreeCollectNode(id, outputColumnNames);
+    return new CollectNode(id, outputColumnNames);
   }
 
   @Override
@@ -72,7 +72,7 @@ public class TreeCollectNode extends MultiChildProcessNode {
   @Override
   public PlanNode replaceChildren(List<PlanNode> newChildren) {
     checkArgument(children.size() == newChildren.size(), "wrong number of new 
children");
-    return new TreeCollectNode(id, newChildren, outputColumnNames);
+    return new CollectNode(id, newChildren, outputColumnNames);
   }
 
   @Override
@@ -91,14 +91,14 @@ public class TreeCollectNode extends MultiChildProcessNode {
     }
   }
 
-  public static TreeCollectNode deserialize(ByteBuffer byteBuffer) {
+  public static CollectNode deserialize(ByteBuffer byteBuffer) {
     int size = ReadWriteIOUtils.readInt(byteBuffer);
     List<String> outputColumnNames = new ArrayList<>(size);
     while (size-- > 0) {
       outputColumnNames.add(ReadWriteIOUtils.readString(byteBuffer));
     }
     PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
-    return new TreeCollectNode(planNodeId, outputColumnNames);
+    return new CollectNode(planNodeId, outputColumnNames);
   }
 
   @Override


Reply via email to