You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2024/05/22 12:16:17 UTC
(iotdb) 01/05: add serialize method for Limit, Offset, ProjectNode
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch ty/TableModelGrammar
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 7127ef5102c190e63db67ca0d97258c3cb7933fc
Author: Beyyes <cg...@foxmail.com>
AuthorDate: Wed May 22 16:58:51 2024 +0800
add serialize method for Limit, Offset, ProjectNode
---
.../plan/relational/planner/node/FilterNode.java | 5 +++-
.../plan/relational/planner/node/LimitNode.java | 16 ++++++++---
.../plan/relational/planner/node/OffsetNode.java | 16 ++++++++---
.../plan/relational/planner/node/ProjectNode.java | 31 +++++++++++++++++++---
4 files changed, 58 insertions(+), 10 deletions(-)
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
index 04744b552f7..d22a3bd3998 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/FilterNode.java
@@ -56,7 +56,10 @@ public class FilterNode extends SingleChildProcessNode {
}
@Override
- protected void serializeAttributes(ByteBuffer byteBuffer) {}
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.TABLE_FILTER_NODE.serialize(byteBuffer);
+ Expression.serialize(predicate, byteBuffer);
+ }
@Override
protected void serializeAttributes(DataOutputStream stream) throws IOException {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/LimitNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/LimitNode.java
index e73519c2c17..f9cb16b3123 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/LimitNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/LimitNode.java
@@ -16,10 +16,12 @@ 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.SingleChildProcessNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.OrderingScheme;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -57,13 +59,21 @@ public class LimitNode extends SingleChildProcessNode {
}
@Override
- protected void serializeAttributes(ByteBuffer byteBuffer) {}
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.TABLE_LIMIT_NODE.serialize(byteBuffer);
+ ReadWriteIOUtils.write(count, byteBuffer);
+ }
@Override
- protected void serializeAttributes(DataOutputStream stream) throws IOException {}
+ protected void serializeAttributes(DataOutputStream stream) throws IOException {
+ PlanNodeType.TABLE_LIMIT_NODE.serialize(stream);
+ ReadWriteIOUtils.write(count, stream);
+ }
public static LimitNode deserialize(ByteBuffer byteBuffer) {
- return null;
+ long count = ReadWriteIOUtils.read(byteBuffer);
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new LimitNode(planNodeId, null, count, null);
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OffsetNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OffsetNode.java
index a491f02d874..c16e66f1f32 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OffsetNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/OffsetNode.java
@@ -16,9 +16,11 @@ 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.SingleChildProcessNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataOutputStream;
import java.io.IOException;
@@ -49,13 +51,21 @@ public class OffsetNode extends SingleChildProcessNode {
}
@Override
- protected void serializeAttributes(ByteBuffer byteBuffer) {}
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.TABLE_OFFSET_NODE.serialize(byteBuffer);
+ ReadWriteIOUtils.write(count, byteBuffer);
+ }
@Override
- protected void serializeAttributes(DataOutputStream stream) throws IOException {}
+ protected void serializeAttributes(DataOutputStream stream) throws IOException {
+ PlanNodeType.TABLE_OFFSET_NODE.serialize(stream);
+ ReadWriteIOUtils.write(count, stream);
+ }
public static OffsetNode deserialize(ByteBuffer byteBuffer) {
- return null;
+ long count = ReadWriteIOUtils.read(byteBuffer);
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new OffsetNode(planNodeId, null, count);
}
@Override
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
index 5465979bd56..d86fc346234 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/ProjectNode.java
@@ -16,15 +16,20 @@ 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.SingleChildProcessNode;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Assignments;
import org.apache.iotdb.db.queryengine.plan.relational.planner.Symbol;
+import org.apache.iotdb.db.relational.sql.tree.Expression;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
public class ProjectNode extends SingleChildProcessNode {
private final Assignments assignments;
@@ -54,13 +59,33 @@ public class ProjectNode extends SingleChildProcessNode {
}
@Override
- protected void serializeAttributes(ByteBuffer byteBuffer) {}
+ protected void serializeAttributes(ByteBuffer byteBuffer) {
+ PlanNodeType.TABLE_PROJECT_NODE.serialize(byteBuffer);
+ ReadWriteIOUtils.write(assignments.getMap().size(), byteBuffer);
+ for (Map.Entry<Symbol, Expression> entry : assignments.getMap().entrySet()) {
+ Symbol.serialize(entry.getKey(), byteBuffer);
+ Expression.serialize(entry.getValue(), byteBuffer);
+ }
+ }
@Override
- protected void serializeAttributes(DataOutputStream stream) throws IOException {}
+ protected void serializeAttributes(DataOutputStream stream) throws IOException {
+ PlanNodeType.TABLE_PROJECT_NODE.serialize(stream);
+ ReadWriteIOUtils.write(assignments.getMap().size(), stream);
+ for (Map.Entry<Symbol, Expression> entry : assignments.getMap().entrySet()) {
+ Symbol.serialize(entry.getKey(), stream);
+ Expression.serialize(entry.getValue(), stream);
+ }
+ }
public static ProjectNode deserialize(ByteBuffer byteBuffer) {
- return null;
+ int size = ReadWriteIOUtils.readInt(byteBuffer);
+ Map<Symbol, Expression> map = new HashMap<>(size);
+ while (size-- > 0) {
+ map.put(Symbol.deserialize(byteBuffer), Expression.deserialize(byteBuffer));
+ }
+ PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer);
+ return new ProjectNode(planNodeId, null, new Assignments(map));
}
@Override