This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch add_collect_node in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit cd27e917932cf81da144c7d9b28f266930504d61 Author: Beyyes <[email protected]> AuthorDate: Wed Jul 3 15:43:27 2024 +0800 add CollectNode --- .../plan/planner/plan/node/PlanNodeType.java | 3 +- .../plan/planner/plan/node/PlanVisitor.java | 5 ++ .../plan/relational/planner/node/CollectNode.java | 56 ++++++++++++++++++++++ .../plan/relational/planner/node/OutputNode.java | 1 + 4 files changed, 64 insertions(+), 1 deletion(-) 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 929775f88e1..589d6206950 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 @@ -238,7 +238,8 @@ public enum PlanNodeType { TABLE_OFFSET_NODE((short) 1005), TABLE_SORT_NODE((short) 1006), TABLE_MERGESORT_NODE((short) 1007), - TABLE_TOPK_NODE((short) 1008); + TABLE_TOPK_NODE((short) 1008), + TABLE_COLLECT_NODE((short) 1009); public static final int BYTES = Short.BYTES; 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 cfd760bb7ba..aea1264e0a1 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 @@ -589,6 +589,11 @@ public abstract class PlanVisitor<R, C> { return visitSingleChildProcess(node, context); } + public R visitCollect( + org.apache.iotdb.db.queryengine.plan.relational.planner.node.CollectNode node, C context) { + return visitMultiChildProcess(node, context); + } + public R visitSort( org.apache.iotdb.db.queryengine.plan.relational.planner.node.SortNode node, C context) { return visitSingleChildProcess(node, context); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/CollectNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/CollectNode.java new file mode 100644 index 00000000000..87d3ce34afa --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/CollectNode.java @@ -0,0 +1,56 @@ +package org.apache.iotdb.db.queryengine.plan.relational.planner.node; + +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNode; +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeId; +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanNodeType; +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.PlanVisitor; +import org.apache.iotdb.db.queryengine.plan.planner.plan.node.process.MultiChildProcessNode; +import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.List; + +/** CollectNode output the content of children. */ +public class CollectNode extends MultiChildProcessNode { + + public CollectNode(PlanNodeId id) { + super(id); + } + + @Override + public <R, C> R accept(PlanVisitor<R, C> visitor, C context) { + return visitor.visitCollect(this, context); + } + + @Override + public PlanNode clone() { + return new CollectNode(id); + } + + @Override + public List<Symbol> getOutputSymbols() { + return children.get(0).getOutputSymbols(); + } + + @Override + public List<String> getOutputColumnNames() { + throw new UnsupportedOperationException(); + } + + @Override + protected void serializeAttributes(ByteBuffer byteBuffer) { + PlanNodeType.TABLE_COLLECT_NODE.serialize(byteBuffer); + } + + @Override + protected void serializeAttributes(DataOutputStream stream) throws IOException { + PlanNodeType.TABLE_COLLECT_NODE.serialize(stream); + } + + public static CollectNode deserialize(ByteBuffer byteBuffer) { + PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); + return new CollectNode(planNodeId); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OutputNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OutputNode.java index 6a707a30000..da8105d741e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OutputNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OutputNode.java @@ -108,6 +108,7 @@ public class OutputNode extends SingleChildProcessNode { return this.columnNames; } + @Override public List<Symbol> getOutputSymbols() { return outputs; }
