This is an automated email from the ASF dual-hosted git repository.

caogaofei pushed a commit to branch beyyes-tmp/table-model-debug
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit b3d8e15f251e609d2dcbdf1aaeb1d4d929498764
Author: Beyyes <[email protected]>
AuthorDate: Sun Jun 2 21:27:43 2024 +0800

    add some lacked serialize expression method, debug the logic of 
TableModelPredicate
---
 .../confignode1conf/iotdb-common.properties        |  7 +-
 .../plan/planner/plan/TableModelTimePredicate.java |  5 +-
 .../plan/planner/plan/TimePredicate.java           | 11 ++-
 .../plan/planner/plan/TreeModelTimePredicate.java  |  2 +
 .../datanode1conf/iotdb-common.properties          |  4 ++
 .../datanode2conf/iotdb-common.properties          |  4 ++
 .../relational/sql/tree/ComparisonExpression.java  | 17 +++--
 .../iotdb/db/relational/sql/tree/Expression.java   | 80 ++++++++++++++++++++--
 .../iotdb/db/relational/sql/tree/LongLiteral.java  | 22 ++++++
 .../db/relational/sql/tree/SymbolReference.java    | 22 ++++++
 .../relational/sql/tree/TableExpressionType.java   | 25 ++++++-
 11 files changed, 183 insertions(+), 16 deletions(-)

diff --git 
a/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties
 
b/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties
index 8981b21285b..daaa91deec8 100644
--- 
a/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties
+++ 
b/iotdb-core/confignode/src/test/resources/confignode1conf/iotdb-common.properties
@@ -16,12 +16,13 @@
 # specific language governing permissions and limitations
 # under the License.
 #
-
+data_region_group_extension_policy=CUSTOM
+default_data_region_group_num_per_database=2
+schema_replication_factor=2
+data_replication_factor=2
 timestamp_precision=ms
 
data_region_consensus_protocol_class=org.apache.iotdb.consensus.iot.IoTConsensus
 
schema_region_consensus_protocol_class=org.apache.iotdb.consensus.ratis.RatisConsensus
-schema_replication_factor=3
-data_replication_factor=3
 udf_lib_dir=target/confignode1/ext/udf
 trigger_lib_dir=target/confignode1/ext/trigger
 pipe_lib_dir=target/confignode1/ext/pipe
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java
index 31607976d18..a79fabd435b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TableModelTimePredicate.java
@@ -23,10 +23,10 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils;
 import org.apache.iotdb.db.relational.sql.tree.Expression;
 
 import org.apache.tsfile.read.filter.basic.Filter;
+import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
-import java.io.UnsupportedEncodingException;
 import java.util.Objects;
 
 public class TableModelTimePredicate implements TimePredicate {
@@ -39,7 +39,8 @@ public class TableModelTimePredicate implements TimePredicate 
{
 
   @Override
   public void serialize(DataOutputStream stream) throws IOException {
-    throw new UnsupportedEncodingException();
+    ReadWriteIOUtils.write((byte) 1, stream);
+    Expression.serialize(timePredicate, stream);
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java
index 04cf67ed3aa..0bccff5f6a1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TimePredicate.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.queryengine.plan.planner.plan;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 
 import org.apache.tsfile.read.filter.basic.Filter;
+import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -34,7 +35,13 @@ public interface TimePredicate {
   Filter convertPredicateToTimeFilter();
 
   static TimePredicate deserialize(ByteBuffer byteBuffer) {
-    // TODO will return another kind of TimePredicate like 
TableModelTimePredicate in the future
-    return new TreeModelTimePredicate(Expression.deserialize(byteBuffer));
+    // 0 for tree model, 1 for table model
+    byte type = ReadWriteIOUtils.readByte(byteBuffer);
+    if (type == 0) {
+      return new TreeModelTimePredicate(Expression.deserialize(byteBuffer));
+    } else {
+      return new TableModelTimePredicate(
+          
org.apache.iotdb.db.relational.sql.tree.Expression.deserialize(byteBuffer));
+    }
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java
index 5b9e90cd8d0..5cc00125aa7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/TreeModelTimePredicate.java
@@ -23,6 +23,7 @@ import 
org.apache.iotdb.db.queryengine.plan.analyze.PredicateUtils;
 import org.apache.iotdb.db.queryengine.plan.expression.Expression;
 
 import org.apache.tsfile.read.filter.basic.Filter;
+import org.apache.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -38,6 +39,7 @@ public class TreeModelTimePredicate implements TimePredicate {
 
   @Override
   public void serialize(DataOutputStream stream) throws IOException {
+    ReadWriteIOUtils.write((byte) 0, stream);
     Expression.serialize(timePredicate, stream);
   }
 
diff --git 
a/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties 
b/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties
index 143c0e0b7f0..3d3eaf513d5 100644
--- 
a/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties
+++ 
b/iotdb-core/datanode/src/test/resources/datanode1conf/iotdb-common.properties
@@ -16,6 +16,10 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+data_region_group_extension_policy=CUSTOM
+default_data_region_group_num_per_database=2
+schema_replication_factor=2
+data_replication_factor=2
 timestamp_precision=ms
 udf_lib_dir=target/datanode1/ext/udf
 trigger_lib_dir=target/datanode1/ext/trigger
diff --git 
a/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties 
b/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties
index 9cf060d61fd..a50caf80e30 100644
--- 
a/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties
+++ 
b/iotdb-core/datanode/src/test/resources/datanode2conf/iotdb-common.properties
@@ -16,6 +16,10 @@
 # specific language governing permissions and limitations
 # under the License.
 #
+data_region_group_extension_policy=CUSTOM
+default_data_region_group_num_per_database=2
+schema_replication_factor=2
+data_replication_factor=2
 timestamp_precision=ms
 udf_lib_dir=target/datanode2/ext/udf
 trigger_lib_dir=target/datanode2/ext/trigger
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..372fbe5ef64 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);
+    serialize(left, stream);
+    serialize(right, stream);
   }
 
   public ComparisonExpression(ByteBuffer byteBuffer) {
     super(null);
     operator = Operator.values()[ReadWriteIOUtils.readInt(byteBuffer)];
-    left = null;
-    right = null;
+    left = deserialize(byteBuffer);
+    right = 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..ca2460f4046 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(
@@ -68,11 +71,80 @@ public abstract class Expression extends Node {
   public static Expression deserialize(ByteBuffer byteBuffer) {
     short type = ReadWriteIOUtils.readShort(byteBuffer);
 
-    Expression expression;
+    Expression expression = null;
     switch (type) {
-      case 0:
+        //      case 1:
+        //        expression = new ArithmeticBinaryExpression(byteBuffer);
+        //        break;
+        //      case 2:
+        //        expression = new ArithmeticUnaryExpression(byteBuffer);
+        //        break;
+        //      case 3:
+        //        expression = new LikePredicate(byteBuffer);
+        //        break;
+        //      case 4:
+        //        expression = new InListExpression(byteBuffer);
+        //        break;
+        //      case 5:
+        //        expression = new IsNotNullPredicate(byteBuffer);
+        //        break;
+        //      case 6:
+        //        expression = new IsNullPredicate(byteBuffer);
+        //        break;
+        //      case 7:
+        //        expression = new FunctionCall(byteBuffer);
+        //        break;
+        //      case 8:
+        //        expression = new Identifier(byteBuffer);
+        //        break;
+        //      case 9:
+        //        expression = new Cast(byteBuffer);
+        //        break;
+        //      case 10:
+        //        expression = new GenericDataType(byteBuffer);
+        //        break;
+        //      case 11:
+        //        expression = new BetweenPredicate(byteBuffer);
+        //        break;
+        //      case 12:
+        //        expression = new InPredicate(byteBuffer);
+        //        break;
+        //      case 13:
+        //        expression = new LogicalExpression(byteBuffer);
+        //        break;
+        //      case 14:
+        //        expression = new NotExpression(byteBuffer);
+        //        break;
+      case 15:
         expression = new ComparisonExpression(byteBuffer);
         break;
+        //      case 16:
+        //        expression = new BinaryLiteral(byteBuffer);
+        //        break;
+        //      case 17:
+        //        expression = new BooleanLiteral(byteBuffer);
+        //        break;
+        //      case 18:
+        //        expression = new DecimalLiteral(byteBuffer);
+        //        break;
+        //      case 19:
+        //        expression = new DoubleLiteral(byteBuffer);
+        //        break;
+        //      case 20:
+        //        expression = new GenericLiteral(byteBuffer);
+        //        break;
+      case 21:
+        expression = new LongLiteral(byteBuffer);
+        break;
+        //      case 22:
+        //        expression = new NullLiteral(byteBuffer);
+        //        break;
+        //      case 23:
+        //        expression = new StringLiteral(byteBuffer);
+        //        break;
+      case 24:
+        expression = new SymbolReference(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/LongLiteral.java
 
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
index 88472eb1f25..768c29d9203 100644
--- 
a/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
+++ 
b/iotdb-core/relational-parser/src/main/java/org/apache/iotdb/db/relational/sql/tree/LongLiteral.java
@@ -20,6 +20,11 @@
 package org.apache.iotdb.db.relational.sql.tree;
 
 import org.apache.iotdb.db.relational.sql.parser.ParsingException;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.nio.ByteBuffer;
 
 import static java.util.Objects.requireNonNull;
 
@@ -106,4 +111,21 @@ public class LongLiteral extends Literal {
       return Long.parseLong(value);
     }
   }
+
+  @Override
+  public TableExpressionType getExpressionType() {
+    return TableExpressionType.LONG_LITERAL;
+  }
+
+  @Override
+  public void serialize(DataOutputStream stream) throws IOException {
+    ReadWriteIOUtils.write(this.value, stream);
+    ReadWriteIOUtils.write(this.parsedValue, stream);
+  }
+
+  public LongLiteral(ByteBuffer byteBuffer) {
+    super(null);
+    this.value = ReadWriteIOUtils.readString(byteBuffer);
+    this.parsedValue = ReadWriteIOUtils.readLong(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..9edbe98112c 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,30 @@
 package org.apache.iotdb.db.relational.sql.tree;
 
 public enum TableExpressionType {
-  LITERAL((short) 1);
+  ARITHMETIC_BINARY((short) 1),
+  ARITHMETIC_UNARY((short) 2),
+  LIKE_PREDICATE((short) 3),
+  IN_LIST((short) 4),
+  IS_NOT_NULL_PREDICATE((short) 5),
+  IS_NULL_PREDICATE((short) 6),
+  FUNCTION_CALL((short) 7),
+  IDENTIFIER((short) 8),
+  CAST((short) 9),
+  GENERIC_DATA_TYPE((short) 10),
+  BETWEEN((short) 11),
+  IN_PREDICATE((short) 12),
+  LOGICAL_EXPRESSION((short) 13),
+  NOT_EXPRESSION((short) 14),
+  COMPARISON((short) 15),
+  BINARY_LITERAL((short) 16),
+  BOOLEAN_LITERAL((short) 17),
+  DECIMAL_LITERAL((short) 18),
+  DOUBLE_LITERAL((short) 19),
+  GENERIC_LITERAL((short) 20),
+  LONG_LITERAL((short) 21),
+  NULL_LITERAL((short) 22),
+  STRING_LITERAL((short) 23),
+  SYMBOL_REFERENCE((short) 24);
 
   TableExpressionType(short type) {
     this.type = type;

Reply via email to