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;

Reply via email to