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