This is an automated email from the ASF dual-hosted git repository. caogaofei pushed a commit to branch new-table-model-debug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 36d6dac19751c7794f83bdabdb4e8b1046b8cb54 Author: Beyyes <[email protected]> AuthorDate: Wed May 22 15:37:03 2024 +0800 add serialize and deserialize for expression --- .../plan/relational/planner/node/FilterNode.java | 10 ++++++++-- .../relational/sql/tree/ComparisonExpression.java | 17 ++++++++++++---- .../iotdb/db/relational/sql/tree/Expression.java | 15 +++++++++++--- .../db/relational/sql/tree/StringLiteral.java | 23 ++++++++++++++++++++++ .../db/relational/sql/tree/SymbolReference.java | 22 +++++++++++++++++++++ .../relational/sql/tree/TableExpressionType.java | 4 +++- 6 files changed, 81 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 87cbfe2edee..04744b552f7 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 @@ -21,6 +21,7 @@ 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; @@ -58,10 +59,15 @@ public class FilterNode extends SingleChildProcessNode { protected void serializeAttributes(ByteBuffer byteBuffer) {} @Override - protected void serializeAttributes(DataOutputStream stream) throws IOException {} + protected void serializeAttributes(DataOutputStream stream) throws IOException { + PlanNodeType.TABLE_FILTER_NODE.serialize(stream); + Expression.serialize(predicate, stream); + } public static FilterNode deserialize(ByteBuffer byteBuffer) { - return null; + Expression predicate = Expression.deserialize(byteBuffer); + PlanNodeId planNodeId = PlanNodeId.deserialize(byteBuffer); + return new FilterNode(planNodeId, null, predicate); } public Expression getPredicate() { diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java index 3c55d8a6c62..37dd245fb19 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/ComparisonExpression.java @@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableList; import javax.annotation.Nonnull; import java.io.DataOutputStream; +import java.io.IOException; import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -174,14 +175,22 @@ public class ComparisonExpression extends Expression { } // =============== serialize ================= - protected void serialize(DataOutputStream stream) { - // stream.write(); + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.COMPARISON; + } + + @Override + protected void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(operator.ordinal(), stream); + Expression.serialize(left, stream); + Expression.serialize(right, stream); } public ComparisonExpression(ByteBuffer byteBuffer) { super(null); operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)]; - left = null; - right = null; + left = Expression.deserialize(byteBuffer); + right = Expression.deserialize(byteBuffer); } } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java index bcd5916e0bd..adece7d04c7 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/Expression.java @@ -46,12 +46,15 @@ public abstract class Expression extends Node { } public TableExpressionType getExpressionType() { - return null; + throw new UnsupportedOperationException( + "getExpressionType is not implemented yet: " + this.getClass().getSimpleName()); } + // TODO make abstract later protected void serialize(ByteBuffer byteBuffer) {} - protected void serialize(DataOutputStream stream) {} + // TODO make abstract later + protected void serialize(DataOutputStream stream) throws IOException {} public static void serialize(Expression expression, ByteBuffer byteBuffer) { ReadWriteIOUtils.write( @@ -70,9 +73,15 @@ public abstract class Expression extends Node { Expression expression; switch (type) { - case 0: + case 24: + expression = new SymbolReference(byteBuffer); + break; + case 15: expression = new ComparisonExpression(byteBuffer); break; + case 23: + expression = new StringLiteral(byteBuffer); + break; default: throw new IllegalArgumentException("Invalid expression type: " + type); } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java index f5012f36995..106e7a5346b 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/StringLiteral.java @@ -19,6 +19,11 @@ package org.apache.iotdb.db.relational.sql.tree; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; + +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; import java.util.Objects; import static java.util.Objects.requireNonNull; @@ -79,4 +84,22 @@ public class StringLiteral extends Literal { return Objects.equals(value, ((StringLiteral) other).value); } + + // =============== serialize ================= + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.STRING_LITERAL; + } + + @Override + public void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(this.value, stream); + ReadWriteIOUtils.write(this.length, stream); + } + + public StringLiteral(ByteBuffer byteBuffer) { + super(null); + this.value = ReadWriteIOUtils.readString(byteBuffer); + this.length = ReadWriteIOUtils.readInt(byteBuffer); + } } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java index 3d93a0dd33e..de49e8a23c5 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/SymbolReference.java @@ -19,8 +19,13 @@ package org.apache.iotdb.db.relational.sql.tree; +import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; + import com.google.common.collect.ImmutableList; +import java.io.DataOutputStream; +import java.io.IOException; +import java.nio.ByteBuffer; import java.util.List; import java.util.Objects; @@ -63,4 +68,21 @@ public class SymbolReference extends Expression { public int hashCode() { return Objects.hash(name); } + + // =============== serialize ================= + + @Override + public TableExpressionType getExpressionType() { + return TableExpressionType.SYMBOL_REFERENCE; + } + + @Override + public void serialize(DataOutputStream stream) throws IOException { + ReadWriteIOUtils.write(this.name, stream); + } + + public SymbolReference(ByteBuffer byteBuffer) { + super(null); + this.name = ReadWriteIOUtils.readString(byteBuffer); + } } diff --git a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java index ed3b6ff420c..e3d99d4d104 100644 --- a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java +++ b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/TableExpressionType.java @@ -20,7 +20,9 @@ package org.apache.iotdb.db.relational.sql.tree; public enum TableExpressionType { - LITERAL((short) 1); + SYMBOL_REFERENCE((short) 24), + COMPARISON((short) 15), + STRING_LITERAL((short) 23); TableExpressionType(short type) { this.type = type;
