You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2022/04/23 04:05:11 UTC

[iotdb] branch IOTDB-2962 created (now 36620fc229)

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

rong pushed a change to branch IOTDB-2962
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 36620fc229 new deser

This branch includes the following new commits:

     new 9ae809bda3 antlr: support in / regular expr
     new 84403422b7 RegularExpression
     new 5d442299f3 new deser
     new 36620fc229 new deser

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 03/04: new deser

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch IOTDB-2962
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 5d442299f35f88c7d20f3aa249419be6bde87e63
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Sat Apr 23 11:51:18 2022 +0800

    new deser
---
 .../iotdb/db/query/expression/Expression.java      |  75 ++++++++++++++-
 .../iotdb/db/query/expression/ExpressionType.java  | 107 +++++----------------
 .../iotdb/db/query/expression/ResultColumn.java    |  21 ++--
 .../expression/binary/AdditionExpression.java      |  19 ++--
 .../query/expression/binary/BinaryExpression.java  |  10 +-
 .../expression/binary/DivisionExpression.java      |  19 ++--
 .../query/expression/binary/EqualToExpression.java |  20 ++--
 .../expression/binary/GreaterEqualExpression.java  |  19 ++--
 .../expression/binary/GreaterThanExpression.java   |  20 ++--
 .../expression/binary/LessEqualExpression.java     |  19 ++--
 .../expression/binary/LessThanExpression.java      |  19 ++--
 .../expression/binary/LogicAndExpression.java      |  20 ++--
 .../query/expression/binary/LogicOrExpression.java |  20 ++--
 .../query/expression/binary/ModuloExpression.java  |  19 ++--
 .../binary/MultiplicationExpression.java           |  19 ++--
 .../expression/binary/NonEqualExpression.java      |  19 ++--
 .../expression/binary/SubtractionExpression.java   |  19 ++--
 .../db/query/expression/unary/ConstantOperand.java |  23 +++--
 .../query/expression/unary/FunctionExpression.java |  43 +++++----
 .../query/expression/unary/LogicNotExpression.java |  21 ++--
 .../query/expression/unary/NegationExpression.java |  20 ++--
 .../query/expression/unary/RegularExpression.java  |  32 +++---
 .../query/expression/unary/TimeSeriesOperand.java  |  18 ++--
 23 files changed, 280 insertions(+), 341 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index 0a54966cf5..8f689b50b1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -26,7 +26,25 @@ import org.apache.iotdb.db.metadata.path.PartialPath;
 import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree;
 import org.apache.iotdb.db.mpp.sql.rewriter.WildcardsRemover;
 import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
+import org.apache.iotdb.db.query.expression.binary.AdditionExpression;
+import org.apache.iotdb.db.query.expression.binary.DivisionExpression;
+import org.apache.iotdb.db.query.expression.binary.EqualToExpression;
+import org.apache.iotdb.db.query.expression.binary.GreaterEqualExpression;
+import org.apache.iotdb.db.query.expression.binary.GreaterThanExpression;
+import org.apache.iotdb.db.query.expression.binary.LessEqualExpression;
+import org.apache.iotdb.db.query.expression.binary.LessThanExpression;
+import org.apache.iotdb.db.query.expression.binary.LogicAndExpression;
+import org.apache.iotdb.db.query.expression.binary.LogicOrExpression;
+import org.apache.iotdb.db.query.expression.binary.ModuloExpression;
+import org.apache.iotdb.db.query.expression.binary.MultiplicationExpression;
+import org.apache.iotdb.db.query.expression.binary.NonEqualExpression;
+import org.apache.iotdb.db.query.expression.binary.SubtractionExpression;
 import org.apache.iotdb.db.query.expression.unary.ConstantOperand;
+import org.apache.iotdb.db.query.expression.unary.FunctionExpression;
+import org.apache.iotdb.db.query.expression.unary.LogicNotExpression;
+import org.apache.iotdb.db.query.expression.unary.NegationExpression;
+import org.apache.iotdb.db.query.expression.unary.RegularExpression;
+import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
 import org.apache.iotdb.db.query.udf.core.executor.UDTFContext;
 import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
 import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
@@ -197,7 +215,60 @@ public abstract class Expression {
     }
   }
 
-  public void serialize(ByteBuffer byteBuffer) {
-    ReadWriteIOUtils.write(isConstantOperandCache, byteBuffer);
+  protected abstract short getExpressionType();
+
+  public static void serialize(Expression expression, ByteBuffer byteBuffer) {
+    ReadWriteIOUtils.write(expression.getExpressionType(), byteBuffer);
+    expression.serialize(byteBuffer);
+  }
+
+  public abstract void serialize(ByteBuffer byteBuffer);
+
+  public static Expression deserialize(ByteBuffer byteBuffer) {
+    short type = ReadWriteIOUtils.readShort(byteBuffer);
+    switch (type) {
+      case 0:
+        return new AdditionExpression(byteBuffer);
+      case 1:
+        return new DivisionExpression(byteBuffer);
+      case 2:
+        return new EqualToExpression(byteBuffer);
+      case 3:
+        return new GreaterEqualExpression(byteBuffer);
+      case 4:
+        return new GreaterThanExpression(byteBuffer);
+      case 5:
+        return new LessEqualExpression(byteBuffer);
+      case 6:
+        return new LessThanExpression(byteBuffer);
+      case 7:
+        return new LogicAndExpression(byteBuffer);
+      case 8:
+        return new LogicOrExpression(byteBuffer);
+      case 9:
+        return new ModuloExpression(byteBuffer);
+      case 10:
+        return new MultiplicationExpression(byteBuffer);
+      case 11:
+        return new NonEqualExpression(byteBuffer);
+      case 12:
+        return new SubtractionExpression(byteBuffer);
+      case 13:
+        return new FunctionExpression(byteBuffer);
+      case 14:
+        return new LogicNotExpression(byteBuffer);
+      case 15:
+        return new NegationExpression(byteBuffer);
+      case 16:
+        return new TimeSeriesOperand(byteBuffer);
+      case 17:
+        return new ConstantOperand(byteBuffer);
+      case 18:
+        throw new IllegalArgumentException("Invalid expression type: " + type);
+      case 19:
+        return new RegularExpression(byteBuffer);
+      default:
+        throw new IllegalArgumentException("Invalid expression type: " + type);
+    }
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java b/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
index 67cc35d32f..4510f4a4a1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
@@ -18,46 +18,27 @@
  */
 package org.apache.iotdb.db.query.expression;
 
-import org.apache.iotdb.db.query.expression.binary.AdditionExpression;
-import org.apache.iotdb.db.query.expression.binary.DivisionExpression;
-import org.apache.iotdb.db.query.expression.binary.EqualToExpression;
-import org.apache.iotdb.db.query.expression.binary.GreaterEqualExpression;
-import org.apache.iotdb.db.query.expression.binary.GreaterThanExpression;
-import org.apache.iotdb.db.query.expression.binary.LessEqualExpression;
-import org.apache.iotdb.db.query.expression.binary.LessThanExpression;
-import org.apache.iotdb.db.query.expression.binary.LogicAndExpression;
-import org.apache.iotdb.db.query.expression.binary.LogicOrExpression;
-import org.apache.iotdb.db.query.expression.binary.ModuloExpression;
-import org.apache.iotdb.db.query.expression.binary.MultiplicationExpression;
-import org.apache.iotdb.db.query.expression.binary.NonEqualExpression;
-import org.apache.iotdb.db.query.expression.binary.SubtractionExpression;
-import org.apache.iotdb.db.query.expression.unary.ConstantOperand;
-import org.apache.iotdb.db.query.expression.unary.FunctionExpression;
-import org.apache.iotdb.db.query.expression.unary.LogicNotExpression;
-import org.apache.iotdb.db.query.expression.unary.NegationExpression;
-import org.apache.iotdb.db.query.expression.unary.TimeSeriesOperand;
-
-import java.nio.ByteBuffer;
-
 public enum ExpressionType {
-  Addition((short) 0),
-  Division((short) 1),
-  EqualTo((short) 2),
-  Greater_Equal((short) 3),
-  Greater_Than((short) 4),
-  Less_Equal((short) 5),
-  Less_Than((short) 6),
-  Logic_And((short) 7),
-  Logic_Or((short) 8),
-  Modulo((short) 9),
-  Multiplication((short) 10),
-  Non_Equal((short) 11),
-  Subtraction((short) 12),
-  Function((short) 13),
-  Logic_Not((short) 14),
-  Negation((short) 15),
-  TimeSeries((short) 16),
-  Constant((short) 17);
+  ADDITION((short) 0),
+  DIVISION((short) 1),
+  EQUAL_TO((short) 2),
+  GREATER_EQUAL((short) 3),
+  GREATER_THAN((short) 4),
+  LESS_EQUAL((short) 5),
+  LESS_THAN((short) 6),
+  LOGIC_AND((short) 7),
+  LOGIC_OR((short) 8),
+  MODULO((short) 9),
+  MULTIPLICATION((short) 10),
+  NON_EQUAL((short) 11),
+  SUBTRACTION((short) 12),
+  FUNCTION((short) 13),
+  LOGIC_NOT((short) 14),
+  NEGATION((short) 15),
+  TIME_SERIES((short) 16),
+  CONSTANT((short) 17),
+  IN((short) 18),
+  REGULAR((short) 19);
 
   private final short expressionType;
 
@@ -65,51 +46,7 @@ public enum ExpressionType {
     this.expressionType = expressionType;
   }
 
-  public void serialize(ByteBuffer buffer) {
-    buffer.putShort(expressionType);
-  }
-
-  public static Expression deserialize(ByteBuffer byteBuffer) {
-    short type = byteBuffer.getShort();
-    switch (type) {
-      case 0:
-        return AdditionExpression.deserialize(byteBuffer);
-      case 1:
-        return DivisionExpression.deserialize(byteBuffer);
-      case 2:
-        return EqualToExpression.deserialize(byteBuffer);
-      case 3:
-        return GreaterEqualExpression.deserialize(byteBuffer);
-      case 4:
-        return GreaterThanExpression.deserialize(byteBuffer);
-      case 5:
-        return LessEqualExpression.deserialize(byteBuffer);
-      case 6:
-        return LessThanExpression.deserialize(byteBuffer);
-      case 7:
-        return LogicAndExpression.deserialize(byteBuffer);
-      case 8:
-        return LogicOrExpression.deserialize(byteBuffer);
-      case 9:
-        return ModuloExpression.deserialize(byteBuffer);
-      case 10:
-        return MultiplicationExpression.deserialize(byteBuffer);
-      case 11:
-        return NonEqualExpression.deserialize(byteBuffer);
-      case 12:
-        return SubtractionExpression.deserialize(byteBuffer);
-      case 13:
-        return FunctionExpression.deserialize(byteBuffer);
-      case 14:
-        return LogicNotExpression.deserialize(byteBuffer);
-      case 15:
-        return NegationExpression.deserialize(byteBuffer);
-      case 16:
-        return TimeSeriesOperand.deserialize(byteBuffer);
-      case 17:
-        return ConstantOperand.deserialize(byteBuffer);
-      default:
-        throw new IllegalArgumentException("Invalid expression type: " + type);
-    }
+  public short getExpressionType() {
+    return expressionType;
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java b/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
index 7dc4d570a1..c2bc314b06 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/ResultColumn.java
@@ -87,6 +87,12 @@ public class ResultColumn {
     alias = null;
   }
 
+  public ResultColumn(ByteBuffer byteBuffer) {
+    expression = Expression.deserialize(byteBuffer);
+    alias = ReadWriteIOUtils.readString(byteBuffer);
+    dataType = TSDataType.deserializeFrom(byteBuffer);
+  }
+
   /**
    * @param prefixPaths prefix paths in the from clause
    * @param resultColumns used to collect the result columns
@@ -189,18 +195,13 @@ public class ResultColumn {
     return getResultColumnName().equals(((ResultColumn) o).getResultColumnName());
   }
 
-  public void serialize(ByteBuffer byteBuffer) {
-    expression.serialize(byteBuffer);
-    ReadWriteIOUtils.write(alias, byteBuffer);
-    dataType.serializeTo(byteBuffer);
+  public static void serialize(ResultColumn resultColumn, ByteBuffer byteBuffer) {
+    Expression.serialize(resultColumn.expression, byteBuffer);
+    ReadWriteIOUtils.write(resultColumn.alias, byteBuffer);
+    resultColumn.dataType.serializeTo(byteBuffer);
   }
 
   public static ResultColumn deserialize(ByteBuffer byteBuffer) {
-    Expression expression = ExpressionType.deserialize(byteBuffer);
-    String alias = ReadWriteIOUtils.readString(byteBuffer);
-    TSDataType tsDataType = TSDataType.deserializeFrom(byteBuffer);
-    ResultColumn resultColumn = new ResultColumn(expression, alias);
-    resultColumn.dataType = tsDataType;
-    return resultColumn;
+    return new ResultColumn(byteBuffer);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
index 32ec1e6c59..9ad079daf1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticAdditionTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class AdditionExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public AdditionExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected ArithmeticBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -46,18 +49,8 @@ public class AdditionExpression extends BinaryExpression {
     return "+";
   }
 
-  public static AdditionExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    AdditionExpression additionExpression =
-        new AdditionExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    additionExpression.isConstantOperandCache = isConstantOperandCache;
-    return additionExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Addition.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.ADDITION.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
index cbc6539635..bedcdc4848 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
@@ -58,6 +58,11 @@ public abstract class BinaryExpression extends Expression {
     this.rightExpression = rightExpression;
   }
 
+  protected BinaryExpression(ByteBuffer byteBuffer) {
+    this.leftExpression = Expression.deserialize(byteBuffer);
+    this.rightExpression = Expression.deserialize(byteBuffer);
+  }
+
   public Expression getLeftExpression() {
     return leftExpression;
   }
@@ -295,8 +300,7 @@ public abstract class BinaryExpression extends Expression {
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    super.serialize(byteBuffer);
-    leftExpression.serialize(byteBuffer);
-    rightExpression.serialize(byteBuffer);
+    Expression.serialize(leftExpression, byteBuffer);
+    Expression.serialize(rightExpression, byteBuffer);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
index b905e1f6be..e72fe7ea86 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticDivisionTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class DivisionExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public DivisionExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected ArithmeticBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -46,18 +49,8 @@ public class DivisionExpression extends BinaryExpression {
     return "/";
   }
 
-  public static DivisionExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    DivisionExpression divisionExpression =
-        new DivisionExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    divisionExpression.isConstantOperandCache = isConstantOperandCache;
-    return divisionExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Division.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.DIVISION.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
index f6f487dfb8..d506f15ae6 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
@@ -24,15 +24,19 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareEqualToTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
 public class EqualToExpression extends BinaryExpression {
+
   public EqualToExpression(Expression leftExpression, Expression rightExpression) {
     super(leftExpression, rightExpression);
   }
 
+  public EqualToExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -44,18 +48,8 @@ public class EqualToExpression extends BinaryExpression {
     return "=";
   }
 
-  public static EqualToExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    EqualToExpression equalToExpression =
-        new EqualToExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    equalToExpression.isConstantOperandCache = isConstantOperandCache;
-    return equalToExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.EqualTo.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.EQUAL_TO.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
index 134763f6b5..2a7944dfb1 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareGreaterEqualTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class GreaterEqualExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public GreaterEqualExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -46,18 +49,8 @@ public class GreaterEqualExpression extends BinaryExpression {
     return ">=";
   }
 
-  public static GreaterEqualExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    GreaterEqualExpression greaterEqualExpression =
-        new GreaterEqualExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    greaterEqualExpression.isConstantOperandCache = isConstantOperandCache;
-    return greaterEqualExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Greater_Equal.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.GREATER_EQUAL.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
index ab2d51e329..40e3c26ae0 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
@@ -24,15 +24,19 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareGreaterThanTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
 public class GreaterThanExpression extends BinaryExpression {
+
   public GreaterThanExpression(Expression leftExpression, Expression rightExpression) {
     super(leftExpression, rightExpression);
   }
 
+  public GreaterThanExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -45,18 +49,8 @@ public class GreaterThanExpression extends BinaryExpression {
     return ">";
   }
 
-  public static GreaterThanExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    GreaterThanExpression greaterThanExpression =
-        new GreaterThanExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    greaterThanExpression.isConstantOperandCache = isConstantOperandCache;
-    return greaterThanExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Greater_Than.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.GREATER_THAN.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
index c12b860e31..9fe0213afa 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareLessEqualTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class LessEqualExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public LessEqualExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -45,18 +48,8 @@ public class LessEqualExpression extends BinaryExpression {
     return "<=";
   }
 
-  public static LessEqualExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    LessEqualExpression lessEqualExpression =
-        new LessEqualExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    lessEqualExpression.isConstantOperandCache = isConstantOperandCache;
-    return lessEqualExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Less_Equal.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.LESS_EQUAL.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
index a94fb180cc..e0a9e2e4f5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareLessThanTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class LessThanExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public LessThanExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -45,18 +48,8 @@ public class LessThanExpression extends BinaryExpression {
     return "<";
   }
 
-  public static LessThanExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    LessThanExpression lessThanExpression =
-        new LessThanExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    lessThanExpression.isConstantOperandCache = isConstantOperandCache;
-    return lessThanExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Less_Than.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.LESS_THAN.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
index 817c3e64b1..a35ef9cf8c 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
@@ -24,15 +24,19 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.LogicAndTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.LogicBinaryTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
 public class LogicAndExpression extends BinaryExpression {
+
   public LogicAndExpression(Expression leftExpression, Expression rightExpression) {
     super(leftExpression, rightExpression);
   }
 
+  public LogicAndExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected LogicBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -44,18 +48,8 @@ public class LogicAndExpression extends BinaryExpression {
     return "&";
   }
 
-  public static LogicAndExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    LogicAndExpression logicAndExpression =
-        new LogicAndExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    logicAndExpression.isConstantOperandCache = isConstantOperandCache;
-    return logicAndExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Logic_And.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.LOGIC_AND.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
index 9a77e3ff2c..2c031fb746 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
@@ -24,15 +24,19 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.LogicBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.LogicOrTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
 public class LogicOrExpression extends BinaryExpression {
+
   public LogicOrExpression(Expression leftExpression, Expression rightExpression) {
     super(leftExpression, rightExpression);
   }
 
+  public LogicOrExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected LogicBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -44,18 +48,8 @@ public class LogicOrExpression extends BinaryExpression {
     return "|";
   }
 
-  public static LogicOrExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    LogicOrExpression logicOrExpression =
-        new LogicOrExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    logicOrExpression.isConstantOperandCache = isConstantOperandCache;
-    return logicOrExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Logic_Or.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.LOGIC_OR.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
index 04832c0ab1..39f1b90a3f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticModuloTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class ModuloExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public ModuloExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected ArithmeticBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -45,18 +48,8 @@ public class ModuloExpression extends BinaryExpression {
     return "%";
   }
 
-  public static ModuloExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    ModuloExpression moduloExpression =
-        new ModuloExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    moduloExpression.isConstantOperandCache = isConstantOperandCache;
-    return moduloExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Modulo.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.MODULO.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
index 1336382923..86a3539c10 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticMultiplicationTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class MultiplicationExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public MultiplicationExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected ArithmeticBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -46,18 +49,8 @@ public class MultiplicationExpression extends BinaryExpression {
     return "*";
   }
 
-  public static MultiplicationExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    MultiplicationExpression multiplicationExpression =
-        new MultiplicationExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    multiplicationExpression.isConstantOperandCache = isConstantOperandCache;
-    return multiplicationExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Multiplication.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.MULTIPLICATION.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
index ef9e5bbd15..159ff11522 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.CompareNonEqualTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class NonEqualExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public NonEqualExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected CompareBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -45,18 +48,8 @@ public class NonEqualExpression extends BinaryExpression {
     return "!=";
   }
 
-  public static NonEqualExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    NonEqualExpression nonEqualExpression =
-        new NonEqualExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    nonEqualExpression.isConstantOperandCache = isConstantOperandCache;
-    return nonEqualExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Non_Equal.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.NON_EQUAL.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
index 05194fadae..dd91f9e7d5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
@@ -24,7 +24,6 @@ import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticBinaryTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticSubtractionTransformer;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 
@@ -34,6 +33,10 @@ public class SubtractionExpression extends BinaryExpression {
     super(leftExpression, rightExpression);
   }
 
+  public SubtractionExpression(ByteBuffer byteBuffer) {
+    super(byteBuffer);
+  }
+
   @Override
   protected ArithmeticBinaryTransformer constructTransformer(
       LayerPointReader leftParentLayerPointReader, LayerPointReader rightParentLayerPointReader) {
@@ -46,18 +49,8 @@ public class SubtractionExpression extends BinaryExpression {
     return "-";
   }
 
-  public static SubtractionExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    SubtractionExpression subtractionExpression =
-        new SubtractionExpression(
-            ExpressionType.deserialize(buffer), ExpressionType.deserialize(buffer));
-    subtractionExpression.isConstantOperandCache = isConstantOperandCache;
-    return subtractionExpression;
-  }
-
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Subtraction.serialize(byteBuffer);
-    super.serialize(byteBuffer);
+  protected short getExpressionType() {
+    return ExpressionType.SUBTRACTION.getExpressionType();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
index 93e0c947e5..be6e8c7189 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
@@ -50,9 +50,14 @@ public class ConstantOperand extends Expression {
   private final String valueString;
   private final TSDataType dataType;
 
-  public ConstantOperand(TSDataType dataType, String str) {
+  public ConstantOperand(TSDataType dataType, String valueString) {
     this.dataType = Validate.notNull(dataType);
-    this.valueString = Validate.notNull(str);
+    this.valueString = Validate.notNull(valueString);
+  }
+
+  public ConstantOperand(ByteBuffer byteBuffer) {
+    dataType = TSDataType.deserializeFrom(byteBuffer);
+    valueString = ReadWriteIOUtils.readString(byteBuffer);
   }
 
   public TSDataType getDataType() {
@@ -140,20 +145,14 @@ public class ConstantOperand extends Expression {
     return valueString;
   }
 
-  public static ConstantOperand deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    String valueStr = ReadWriteIOUtils.readString(buffer);
-    TSDataType tsDataType = TSDataType.deserializeFrom(buffer);
-    ConstantOperand constantOperand = new ConstantOperand(tsDataType, valueStr);
-    constantOperand.isConstantOperandCache = isConstantOperandCache;
-    return constantOperand;
+  @Override
+  protected short getExpressionType() {
+    return ExpressionType.CONSTANT.getExpressionType();
   }
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Constant.serialize(byteBuffer);
-    super.serialize(byteBuffer);
-    ReadWriteIOUtils.write(valueString, byteBuffer);
     dataType.serializeTo(byteBuffer);
+    ReadWriteIOUtils.write(valueString, byteBuffer);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
index 8712dd5641..bc30f1c58c 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
@@ -88,6 +88,7 @@ public class FunctionExpression extends Expression {
     this.functionName = functionName;
     functionAttributes = new LinkedHashMap<>();
     expressions = new ArrayList<>();
+
     isBuiltInAggregationFunctionExpression =
         SQLConstant.getNativeFunctionNames().contains(functionName.toLowerCase());
     isConstantOperandCache = true;
@@ -98,6 +99,7 @@ public class FunctionExpression extends Expression {
     this.functionName = functionName;
     this.functionAttributes = functionAttributes;
     this.expressions = expressions;
+
     isBuiltInAggregationFunctionExpression =
         SQLConstant.getNativeFunctionNames().contains(functionName.toLowerCase());
     isConstantOperandCache = expressions.stream().anyMatch(Expression::isConstantOperand);
@@ -109,6 +111,26 @@ public class FunctionExpression extends Expression {
                         || v.isBuiltInAggregationFunctionExpression());
   }
 
+  public FunctionExpression(ByteBuffer byteBuffer) {
+    functionName = ReadWriteIOUtils.readString(byteBuffer);
+    functionAttributes = ReadWriteIOUtils.readMap(byteBuffer);
+    int expressionSize = ReadWriteIOUtils.readInt(byteBuffer);
+    List<Expression> expressions = new ArrayList<>();
+    for (int i = 0; i < expressionSize; i++) {
+      expressions.add(Expression.deserialize(byteBuffer));
+    }
+
+    isBuiltInAggregationFunctionExpression =
+        SQLConstant.getNativeFunctionNames().contains(functionName);
+    isConstantOperandCache = expressions.stream().anyMatch(Expression::isConstantOperand);
+    isUserDefinedAggregationFunctionExpression =
+        expressions.stream()
+            .anyMatch(
+                v ->
+                    v.isUserDefinedAggregationFunctionExpression()
+                        || v.isBuiltInAggregationFunctionExpression());
+  }
+
   @Override
   public boolean isBuiltInAggregationFunctionExpression() {
     return isBuiltInAggregationFunctionExpression;
@@ -432,31 +454,18 @@ public class FunctionExpression extends Expression {
     return parametersString;
   }
 
-  public static FunctionExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    String functionName = ReadWriteIOUtils.readString(buffer);
-    Map<String, String> functionAttributes = ReadWriteIOUtils.readMap(buffer);
-    int expressionSize = ReadWriteIOUtils.readInt(buffer);
-    List<Expression> expressions = new ArrayList<>();
-    for (int i = 0; i < expressionSize; i++) {
-      expressions.add(ExpressionType.deserialize(buffer));
-    }
-
-    FunctionExpression functionExpression =
-        new FunctionExpression(functionName, functionAttributes, expressions);
-    functionExpression.isConstantOperandCache = isConstantOperandCache;
-    return functionExpression;
+  @Override
+  protected short getExpressionType() {
+    return ExpressionType.FUNCTION.getExpressionType();
   }
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Function.serialize(byteBuffer);
-    super.serialize(byteBuffer);
     ReadWriteIOUtils.write(functionName, byteBuffer);
     ReadWriteIOUtils.write(functionAttributes, byteBuffer);
     ReadWriteIOUtils.write(expressions.size(), byteBuffer);
     for (Expression expression : expressions) {
-      expression.serialize(byteBuffer);
+      Expression.serialize(expression, byteBuffer);
     }
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
index d72aed288b..0883325779 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
@@ -38,7 +38,6 @@ import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnSingleReference
 import org.apache.iotdb.db.query.udf.core.transformer.LogicNotTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -50,12 +49,17 @@ import java.util.Map;
 import java.util.Set;
 
 public class LogicNotExpression extends Expression {
-  protected Expression expression;
+
+  private final Expression expression;
 
   public LogicNotExpression(Expression expression) {
     this.expression = expression;
   }
 
+  public LogicNotExpression(ByteBuffer byteBuffer) {
+    expression = Expression.deserialize(byteBuffer);
+  }
+
   public Expression getExpression() {
     return expression;
   }
@@ -197,18 +201,13 @@ public class LogicNotExpression extends Expression {
     }
   }
 
-  public static LogicNotExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    Expression expression = ExpressionType.deserialize(buffer);
-    LogicNotExpression logicNotExpression = new LogicNotExpression(expression);
-    logicNotExpression.isConstantOperandCache = isConstantOperandCache;
-    return logicNotExpression;
+  @Override
+  protected short getExpressionType() {
+    return ExpressionType.LOGIC_NOT.getExpressionType();
   }
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Logic_Not.serialize(byteBuffer);
-    super.serialize(byteBuffer);
-    expression.serialize(byteBuffer);
+    Expression.serialize(expression, byteBuffer);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
index 5eea89d07a..0b263019d7 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
@@ -38,7 +38,6 @@ import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnSingleReference
 import org.apache.iotdb.db.query.udf.core.transformer.ArithmeticNegationTransformer;
 import org.apache.iotdb.db.query.udf.core.transformer.Transformer;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -51,12 +50,16 @@ import java.util.Set;
 
 public class NegationExpression extends Expression {
 
-  protected Expression expression;
+  private final Expression expression;
 
   public NegationExpression(Expression expression) {
     this.expression = expression;
   }
 
+  public NegationExpression(ByteBuffer byteBuffer) {
+    expression = Expression.deserialize(byteBuffer);
+  }
+
   public Expression getExpression() {
     return expression;
   }
@@ -198,18 +201,13 @@ public class NegationExpression extends Expression {
     }
   }
 
-  public static NegationExpression deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    Expression expression = ExpressionType.deserialize(buffer);
-    NegationExpression negationExpression = new NegationExpression(expression);
-    negationExpression.isConstantOperandCache = isConstantOperandCache;
-    return negationExpression;
+  @Override
+  protected short getExpressionType() {
+    return ExpressionType.NEGATION.getExpressionType();
   }
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.Negation.serialize(byteBuffer);
-    super.serialize(byteBuffer);
-    expression.serialize(byteBuffer);
+    Expression.serialize(expression, byteBuffer);
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
index 3a712c9b89..83dc86ca52 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
@@ -27,12 +27,16 @@ import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree;
 import org.apache.iotdb.db.mpp.sql.rewriter.WildcardsRemover;
 import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
 import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.expression.ExpressionType;
 import org.apache.iotdb.db.query.udf.core.executor.UDTFContext;
 import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
 import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
 import org.apache.iotdb.db.query.udf.core.layer.LayerMemoryAssigner;
 import org.apache.iotdb.db.query.udf.core.layer.RawQueryInputLayer;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
+
+import org.apache.commons.lang3.Validate;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
@@ -62,6 +66,12 @@ public class RegularExpression extends Expression {
     this.pattern = pattern;
   }
 
+  public RegularExpression(ByteBuffer byteBuffer) {
+    expression = Expression.deserialize(byteBuffer);
+    patternString = ReadWriteIOUtils.readString(byteBuffer);
+    pattern = Pattern.compile(Validate.notNull(patternString));
+  }
+
   @Override
   public void concat(
       List<PartialPath> prefixPaths,
@@ -158,24 +168,24 @@ public class RegularExpression extends Expression {
   }
 
   @Override
-  public boolean isTimeSeriesGeneratingFunctionExpression() {
-    return !isUserDefinedAggregationFunctionExpression();
+  protected short getExpressionType() {
+    return ExpressionType.REGULAR.getExpressionType();
   }
 
   @Override
-  public boolean isUserDefinedAggregationFunctionExpression() {
-    return expression.isUserDefinedAggregationFunctionExpression()
-        || expression.isBuiltInAggregationFunctionExpression();
+  public void serialize(ByteBuffer byteBuffer) {
+    Expression.serialize(expression, byteBuffer);
+    ReadWriteIOUtils.write(patternString, byteBuffer);
   }
 
-  public static RegularExpression deserialize(ByteBuffer buffer) {
-    // TODO
-    throw new RuntimeException();
+  @Override
+  public boolean isTimeSeriesGeneratingFunctionExpression() {
+    return !isUserDefinedAggregationFunctionExpression();
   }
 
   @Override
-  public void serialize(ByteBuffer byteBuffer) {
-    // TODO
-    throw new RuntimeException();
+  public boolean isUserDefinedAggregationFunctionExpression() {
+    return expression.isUserDefinedAggregationFunctionExpression()
+        || expression.isBuiltInAggregationFunctionExpression();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
index 4e9cfb5e11..2dbc60f42b 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
@@ -38,7 +38,6 @@ import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnMultiReferenceI
 import org.apache.iotdb.db.query.udf.core.layer.SingleInputColumnSingleReferenceIntermediateLayer;
 import org.apache.iotdb.db.query.udf.core.reader.LayerPointReader;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
-import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
 import java.nio.ByteBuffer;
 import java.time.ZoneId;
@@ -49,12 +48,16 @@ import java.util.Set;
 
 public class TimeSeriesOperand extends Expression {
 
-  protected PartialPath path;
+  private PartialPath path;
 
   public TimeSeriesOperand(PartialPath path) {
     this.path = path;
   }
 
+  public TimeSeriesOperand(ByteBuffer byteBuffer) {
+    path = (PartialPath) PathDeserializeUtil.deserialize(byteBuffer);
+  }
+
   public PartialPath getPath() {
     return path;
   }
@@ -163,18 +166,13 @@ public class TimeSeriesOperand extends Expression {
     return path.isMeasurementAliasExists() ? path.getFullPathWithAlias() : path.getFullPath();
   }
 
-  public static TimeSeriesOperand deserialize(ByteBuffer buffer) {
-    boolean isConstantOperandCache = ReadWriteIOUtils.readBool(buffer);
-    PartialPath partialPath = (PartialPath) PathDeserializeUtil.deserialize(buffer);
-    TimeSeriesOperand timeSeriesOperand = new TimeSeriesOperand(partialPath);
-    timeSeriesOperand.isConstantOperandCache = isConstantOperandCache;
-    return timeSeriesOperand;
+  @Override
+  protected short getExpressionType() {
+    return ExpressionType.TIME_SERIES.getExpressionType();
   }
 
   @Override
   public void serialize(ByteBuffer byteBuffer) {
-    ExpressionType.TimeSeries.serialize(byteBuffer);
-    super.serialize(byteBuffer);
     path.serialize(byteBuffer);
   }
 }


[iotdb] 04/04: new deser

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch IOTDB-2962
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 36620fc229e8372d18c47ccef79caa01f0850d0a
Merge: 5d442299f3 ce064f429c
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Sat Apr 23 12:04:51 2022 +0800

    new deser

 Jenkinsfile                                        |   2 +-
 checkstyle.xml                                     |   7 +-
 .../iotdb/cluster/log/applier/DataLogApplier.java  |   6 +-
 .../iotdb/cluster/metadata/CSchemaProcessor.java   |  12 +-
 .../iotdb/cluster/query/ClusterPlanRouter.java     |   5 +-
 .../server/handlers/caller/LogCatchUpHandler.java  |   4 +-
 .../confignode1conf/iotdb-confignode.properties    |  29 +
 .../src/test/resources/confignode1conf/logback.xml | 140 +++
 .../confignode2conf/iotdb-confignode.properties    |  29 +
 .../src/test/resources/confignode2conf/logback.xml | 140 +++
 .../confignode3conf/iotdb-confignode.properties    |  29 +
 .../src/test/resources/confignode3conf/logback.xml | 140 +++
 docs/Development/ContributeGuide.md                |  16 +
 .../Data-Modeling/SchemaRegion-rocksdb.md          |   6 +-
 docs/UserGuide/Operate-Metadata/Node.md            |  45 +
 docs/UserGuide/Operate-Metadata/Storage-Group.md   |  60 ++
 docs/UserGuide/Query-Data/Select-Expression.md     | 143 +++
 docs/zh/Development/ContributeGuide.md             |  17 +
 .../Data-Modeling/SchemaRegion-rocksdb.md          |   6 +-
 docs/zh/UserGuide/Operate-Metadata/Node.md         |  45 +
 .../zh/UserGuide/Operate-Metadata/Storage-Group.md |  60 ++
 docs/zh/UserGuide/Query-Data/Select-Expression.md  | 143 +++
 .../iotdb/hadoop/tsfile/TSFMRReadExample.java      |   5 +-
 .../apache/iotdb/hadoop/tsfile/TSFInputFormat.java |  11 +-
 .../iotdb/hadoop/tsfile/record/HDFSTSRecord.java   |   8 +-
 .../org/apache/iotdb/hive/TSFHiveInputFormat.java  |   6 +-
 .../org/apache/iotdb/hive/TsFileDeserializer.java  |  10 +-
 .../org/apache/iotdb/influxdb/IoTDBInfluxDB.java   |   2 +-
 .../db/integration/IoTDBUDTFBuiltinFunctionIT.java | 190 ++++
 .../dropwizard/DropwizardMetricManager.java        |  25 +-
 .../iotdb/metrics/dropwizard/MetricName.java       |   6 +-
 .../reporter/DropwizardMetricsExporter.java        |  10 +-
 .../metrics/dropwizard/reporter/IoTDBReporter.java |  16 +-
 .../org/apache/iotdb/metrics/MetricManager.java    |   6 +-
 .../micrometer/MicrometerMetricManager.java        |  21 +-
 .../iotdb/commons/concurrent/ThreadName.java       |   3 +-
 .../apache/iotdb/commons/service/ServiceType.java  |   3 +-
 pom.xml                                            |   7 +
 procedure/pom.xml                                  |  93 ++
 .../iotdb/procedure/CompletedProcedureCleaner.java |  88 ++
 .../procedure/CompletedProcedureRetainer.java      |  23 +-
 .../apache/iotdb/procedure/InternalProcedure.java  |  61 ++
 .../java/org/apache/iotdb/procedure/Procedure.java | 895 ++++++++++++++++++
 .../apache/iotdb/procedure/ProcedureExecutor.java  | 995 +++++++++++++++++++++
 .../apache/iotdb/procedure/ProcedureLockState.java |  18 +-
 .../apache/iotdb/procedure/RootProcedureStack.java | 177 ++++
 .../iotdb/procedure/StateMachineProcedure.java     | 329 +++++++
 .../apache/iotdb/procedure/StoppableThread.java    |  45 +-
 .../iotdb/procedure/TimeoutExecutorThread.java     | 107 +++
 .../iotdb/procedure/conf/ProcedureNodeConfig.java  | 153 ++++
 .../conf/ProcedureNodeConfigDescriptor.java        | 219 +++++
 .../procedure/conf/ProcedureNodeConstant.java      |  26 +-
 .../procedure/env/ClusterProcedureEnvironment.java |  19 +-
 .../exception/ProcedureAbortedException.java       |  20 +-
 .../procedure/exception/ProcedureException.java    |  30 +-
 .../exception/ProcedureSuspendedException.java     |  25 +-
 .../exception/ProcedureTimeoutException.java       |  18 +-
 .../exception/ProcedureYieldException.java         |  26 +-
 .../scheduler/AbstractProcedureScheduler.java      | 211 +++++
 .../procedure/scheduler/ProcedureScheduler.java    | 109 +++
 .../scheduler/SimpleProcedureScheduler.java        |  78 ++
 .../iotdb/procedure/service/ProcedureNode.java     |  98 ++
 .../procedure/service/ProcedureNodeMBean.java      |  16 +-
 .../iotdb/procedure/service/ProcedureServer.java   | 123 +++
 .../service/ProcedureServerCommandLine.java        |  52 ++
 .../service/ProcedureServerProcessor.java          |  77 ++
 .../procedure/service/ProcedureServiceHanlder.java |  41 +-
 .../iotdb/procedure/store/IProcedureStore.java     |  28 +-
 .../iotdb/procedure/store/ProcedureStore.java      | 195 ++++
 .../apache/iotdb/procedure/store/ProcedureWAL.java | 106 +++
 .../apache/iotdb/procedure/NoopProcedureStore.java |  70 ++
 .../org/apache/iotdb/procedure/TestLockRegime.java |  46 +
 .../org/apache/iotdb/procedure/TestProcEnv.java    |  57 ++
 .../apache/iotdb/procedure/TestProcedureBase.java  |  83 ++
 .../iotdb/procedure/TestProcedureExecutor.java     | 111 +++
 .../apache/iotdb/procedure/TestSTMProcedure.java   |  57 ++
 .../iotdb/procedure/entity/IncProcedure.java       |  57 ++
 .../iotdb/procedure/entity/NoopProcedure.java      |  38 +-
 .../procedure/entity/SimpleLockProcedure.java      |  80 ++
 .../iotdb/procedure/entity/SimpleSTMProcedure.java |  97 ++
 .../iotdb/procedure/entity/SleepProcedure.java     |  46 +
 .../iotdb/procedure/entity/StuckProcedure.java     |  59 ++
 .../iotdb/procedure/entity/StuckSTMProcedure.java  | 112 +++
 .../procedure/service/TestProcedureService.java    |  87 ++
 .../iotdb/procedure/store/TestProcedureStore.java  | 111 +++
 .../iotdb/procedure/util/ProcedureTestUtil.java    |  66 ++
 server/pom.xml                                     |   4 +
 .../resources/conf/schema-rocksdb.properties       |  86 ++
 .../io/LocalTextModificationAccessor.java          |   7 +-
 .../mtree/store/disk/CachedMNodeContainer.java     |  15 +
 .../mtree/store/disk/schemafile/RecordUtils.java   |   6 +-
 .../mtree/store/disk/schemafile/SchemaFile.java    |   8 +-
 .../db/metadata/schemaregion/SchemaEngine.java     |  23 +-
 .../schemaregion/rocksdb/RSchemaConfLoader.java    | 182 ++++
 .../rocksdb/RSchemaReadWriteHandler.java           |  27 +-
 .../schemaregion/rocksdb/RSchemaRegion.java        | 130 ++-
 .../iotdb/db/mpp/buffer/DataBlockManager.java      |  24 +-
 .../apache/iotdb/db/mpp/buffer/ISinkHandle.java    |  20 +-
 .../apache/iotdb/db/mpp/buffer/ISourceHandle.java  |  10 +-
 .../org/apache/iotdb/db/mpp/buffer/SinkHandle.java |  45 +-
 .../apache/iotdb/db/mpp/buffer/SourceHandle.java   |  19 +-
 .../apache/iotdb/db/mpp/buffer/StubSinkHandle.java |   4 +-
 .../iotdb/db/mpp/common/filter/InFilter.java       |   8 +-
 .../iotdb/db/mpp/common/header/DatasetHeader.java  |   7 +-
 .../iotdb/db/mpp/common/schematree/SchemaTree.java |  15 +
 .../mpp/common/schematree/SchemaTreeVisitor.java   |   6 +-
 .../apache/iotdb/db/mpp/execution/Coordinator.java |   5 +-
 .../apache/iotdb/db/mpp/execution/DataDriver.java  | 189 +---
 .../org/apache/iotdb/db/mpp/execution/Driver.java  | 426 ++++++++-
 .../iotdb/db/mpp/execution/DriverContext.java      |  13 +-
 .../db/mpp/execution/FragmentInstanceContext.java  |  98 +-
 .../mpp/execution/FragmentInstanceExecution.java   |  66 +-
 .../FragmentInstanceFailureListener.java}          |  17 +-
 .../db/mpp/execution/FragmentInstanceManager.java  |  57 +-
 .../db/mpp/execution/FragmentInstanceState.java    |   2 +-
 .../execution/FragmentInstanceStateMachine.java    | 182 ++++
 .../IDriver.java}                                  |  22 +-
 .../iotdb/db/mpp/execution/QueryExecution.java     |   3 +-
 .../iotdb/db/mpp/execution/SchemaDriver.java       | 140 +--
 .../scheduler/FixedRateFragInsStateTracker.java    |   5 +-
 .../org/apache/iotdb/db/mpp/operator/Operator.java |   4 +-
 .../db/mpp/operator/process/LimitOperator.java     |   4 +-
 .../db/mpp/operator/process/TimeJoinOperator.java  |  56 +-
 .../db/mpp/operator/process/TransformOperator.java |   2 +-
 .../mpp/operator/process/merge/ColumnMerger.java   |  58 ++
 .../operator/process/merge/SingleColumnMerger.java |  74 ++
 .../mpp/operator/schema/SchemaFetchOperator.java   |   3 +-
 .../db/mpp/operator/source/ExchangeOperator.java   |   2 +-
 .../source/SeriesAggregateScanOperator.java        |   6 +-
 .../schedule/FragmentInstanceAbortedException.java |   4 +-
 .../db/mpp/schedule/FragmentInstanceScheduler.java |   4 +-
 .../mpp/schedule/FragmentInstanceTaskExecutor.java |   4 +-
 .../mpp/schedule/IFragmentInstanceScheduler.java   |   6 +-
 .../db/mpp/schedule/task/FragmentInstanceTask.java |  16 +-
 .../apache/iotdb/db/mpp/sql/analyze/Analyzer.java  | 328 +++----
 .../db/mpp/sql/analyze/FakeSchemaFetcherImpl.java  |   7 +-
 .../db/mpp/sql/parser/StatementGenerator.java      |  20 +-
 .../db/mpp/sql/planner/DistributionPlanner.java    |   7 +-
 .../{plan => }/IFragmentParallelPlaner.java        |   4 +-
 .../db/mpp/sql/planner/LocalExecutionPlanner.java  |  28 +-
 .../iotdb/db/mpp/sql/planner/LogicalPlanner.java   |   5 +-
 .../iotdb/db/mpp/sql/planner/QueryPlanBuilder.java |  10 +-
 .../{plan => }/SimpleFragmentParallelPlanner.java  |   5 +-
 .../{plan => }/WriteFragmentParallelPlanner.java   |   5 +-
 .../db/mpp/sql/planner/plan/node/PlanNode.java     |   8 +
 .../db/mpp/sql/planner/plan/node/PlanNodeId.java   |  16 -
 .../node/metedata/read/DevicesSchemaScanNode.java  |  17 +
 .../plan/node/metedata/read/SchemaFetchNode.java   |  17 +
 .../plan/node/metedata/read/SchemaMergeNode.java   |  17 +
 .../metedata/read/TimeSeriesSchemaScanNode.java    |  17 +
 .../node/metedata/write/AlterTimeSeriesNode.java   |  17 +
 .../plan/node/metedata/write/AuthorNode.java       |  17 +
 .../write/CreateAlignedTimeSeriesNode.java         |  16 +
 .../node/metedata/write/CreateTimeSeriesNode.java  |  16 +
 .../planner/plan/node/process/AggregateNode.java   |  31 +-
 .../planner/plan/node/process/DeviceMergeNode.java |  53 +-
 .../planner/plan/node/process/ExchangeNode.java    |  17 +
 .../sql/planner/plan/node/process/FillNode.java    |   9 +-
 .../sql/planner/plan/node/process/FilterNode.java  |  10 +-
 .../planner/plan/node/process/FilterNullNode.java  |  81 +-
 .../plan/node/process/GroupByLevelNode.java        |  85 +-
 .../sql/planner/plan/node/process/LimitNode.java   |   9 +-
 .../sql/planner/plan/node/process/OffsetNode.java  |   9 +-
 .../sql/planner/plan/node/process/SortNode.java    |  11 +-
 .../planner/plan/node/process/TimeJoinNode.java    | 116 ++-
 .../planner/plan/node/sink/FragmentSinkNode.java   |  17 +
 .../plan/node/source/SeriesAggregateScanNode.java  |  37 +-
 .../planner/plan/node/source/SeriesScanNode.java   |  21 +-
 .../plan/node/write/InsertMultiTabletsNode.java    |  23 +-
 .../sql/planner/plan/node/write/InsertNode.java    |  66 ++
 .../sql/planner/plan/node/write/InsertRowNode.java |  49 +-
 .../planner/plan/node/write/InsertRowsNode.java    |  17 +
 .../plan/node/write/InsertRowsOfOneDeviceNode.java |  17 +
 .../planner/plan/node/write/InsertTabletNode.java  |  57 +-
 .../Aggregation.java}                              |  21 +-
 .../planner/plan/parameter/AggregationStep.java    |  73 ++
 .../plan/parameter/FilterNullParameter.java        |  88 ++
 .../plan/parameter/GroupByTimeParameter.java}      |  81 +-
 .../plan/{ => parameter}/InputLocation.java        |  35 +-
 .../planner/plan/{ => parameter}/OutputColumn.java |  38 +-
 .../db/mpp/sql/rewriter/ConcatPathRewriter.java    |   9 +-
 .../db/mpp/sql/rewriter/WildcardsRemover.java      |  14 +-
 .../component/GroupByLevelController.java          |   8 +-
 .../statement/component/GroupByTimeComponent.java  |  73 --
 .../statement/crud/AggregationQueryStatement.java  |   7 +-
 .../crud/InsertRowsOfOneDeviceStatement.java       |   8 +-
 .../db/mpp/sql/statement/crud/QueryStatement.java  |  17 +-
 .../influxdb/function/InfluxFunctionFactory.java   |   8 +-
 .../protocol/influxdb/input/InfluxLineParser.java  |   5 +-
 .../protocol/influxdb/sql/InfluxDBSqlVisitor.java  |   3 +-
 .../apache/iotdb/db/qp/executor/PlanExecutor.java  |  27 +-
 .../apache/iotdb/db/qp/physical/PhysicalPlan.java  |   9 +-
 .../iotdb/db/query/executor/QueryRouter.java       |   7 +-
 .../db/query/executor/RawDataQueryExecutor.java    |   7 +-
 .../iotdb/db/query/expression/Expression.java      |  75 +-
 .../query/expression/unary/FunctionExpression.java |   3 +
 .../db/query/factory/AggregateResultFactory.java   |  17 +-
 .../db/query/udf/builtin/BuiltinFunction.java      |   5 +-
 .../udf/builtin/UDTFEqualSizeBucketAggSample.java  | 487 ++++++++++
 .../udf/builtin/UDTFEqualSizeBucketM4Sample.java   | 238 +++++
 .../builtin/UDTFEqualSizeBucketRandomSample.java   |  68 ++
 .../udf/builtin/UDTFEqualSizeBucketSample.java     |  48 +
 .../thrift/impl/DataNodeTSIServiceImpl.java        |  44 +-
 .../transport/server/TransportServiceImpl.java     |   9 +-
 .../apache/iotdb/db/tools/TsFileSketchTool.java    |   6 +-
 .../db/wal/recover/file/TsFilePlanRedoer.java      |  19 +-
 .../apache/iotdb/db/wal/utils/WALWriteUtils.java   |  42 +
 .../schemaregion/rocksdb/MRocksDBUnitTest.java     |  29 +-
 .../rocksdb/RSchemaRegionAdvancedTest.java         |   4 +-
 .../apache/iotdb/db/mpp/buffer/SinkHandleTest.java | 157 ++--
 .../iotdb/db/mpp/buffer/SourceHandleTest.java      |  93 +-
 .../db/mpp/common/schematree/SchemaTreeTest.java   |  14 +
 .../db/mpp/execution/ConfigExecutionTest.java      |   8 +-
 .../iotdb/db/mpp/execution/DataDriverTest.java     |  37 +-
 .../iotdb/db/mpp/operator/LimitOperatorTest.java   |  26 +-
 .../operator/SeriesAggregateScanOperatorTest.java  |  31 +-
 .../db/mpp/operator/SeriesScanOperatorTest.java    |  19 +-
 .../db/mpp/operator/SingleColumnMergerTest.java    | 117 +++
 .../db/mpp/operator/TimeJoinOperatorTest.java      | 144 ++-
 .../operator/schema/SchemaScanOperatorTest.java    |  32 +-
 .../db/mpp/schedule/DefaultTaskSchedulerTest.java  |  16 +-
 .../schedule/FragmentInstanceSchedulerTest.java    |  12 +-
 .../FragmentInstanceTimeoutSentinelTest.java       |  12 +-
 .../db/mpp/sql/plan/FragmentInstanceSerdeTest.java |   9 +-
 .../node/process/DeviceMergeNodeSerdeTest.java     |   3 -
 .../plan/node/process/ExchangeNodeSerdeTest.java   |   3 -
 .../sql/plan/node/process/FillNodeSerdeTest.java   |   4 -
 .../sql/plan/node/process/FilterNodeSerdeTest.java |   4 -
 .../plan/node/process/FilterNullNodeSerdeTest.java |   9 +-
 .../node/process/GroupByLevelNodeSerdeTest.java    |   9 +-
 .../sql/plan/node/process/LimitNodeSerdeTest.java  |   9 +-
 .../sql/plan/node/process/OffsetNodeSerdeTest.java |  17 +-
 .../sql/plan/node/process/SortNodeSerdeTest.java   |   9 +-
 .../plan/node/process/TimeJoinNodeSerdeTest.java   |  13 +-
 .../source/SeriesAggregateScanNodeSerdeTest.java   |   6 +-
 .../datanode1conf/iotdb-engine.properties          |  37 +
 .../test/resources/datanode1conf/iotdb-metric.yml  |  21 +
 .../src/test/resources/datanode1conf/logback.xml   | 302 +++++++
 .../datanode2conf/iotdb-engine.properties          |  37 +
 .../test/resources/datanode2conf/iotdb-metric.yml  |  21 +
 .../src/test/resources/datanode2conf/logback.xml   | 302 +++++++
 .../datanode3conf/iotdb-engine.properties          |  37 +
 .../test/resources/datanode3conf/iotdb-metric.yml  |  21 +
 .../src/test/resources/datanode3conf/logback.xml   | 302 +++++++
 thrift-procedure/pom.xml                           |  66 ++
 .../src/main/thrift/procedure.thrift               |  30 +-
 .../iotdb/tsfile/read/TsFileSequenceReader.java    |  18 +-
 .../apache/iotdb/tsfile/read/common/TimeRange.java |  24 +-
 .../iotdb/tsfile/read/common/block/TsBlock.java    |  10 +-
 .../common/block/column/BinaryColumnBuilder.java   |  19 +-
 .../common/block/column/BooleanColumnBuilder.java  |  19 +-
 .../read/common/block/column/ColumnBuilder.java    |  17 +-
 .../common/block/column/DoubleColumnBuilder.java   |  19 +-
 .../common/block/column/FloatColumnBuilder.java    |  15 +-
 .../read/common/block/column/IntColumnBuilder.java |  19 +-
 .../common/block/column/LongColumnBuilder.java     |  19 +-
 .../common/block/column/TimeColumnBuilder.java     |  16 +-
 .../read/controller/MetadataQuerierByFileImpl.java |  17 +-
 .../query/dataset/DataSetWithoutTimeGenerator.java |   6 +-
 .../tsfile/v2/read/TsFileSequenceReaderForV2.java  |  17 +-
 .../apache/iotdb/tsfile/write/TsFileWriter.java    |   4 -
 .../tsfile/read/TsFileSequenceReaderTest.java      |  47 +
 262 files changed, 12670 insertions(+), 1754 deletions(-)

diff --cc server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index 8f689b50b1,1e481c2db5..4b588da3f5
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@@ -215,60 -201,7 +215,95 @@@ public abstract class Expression 
      }
    }
  
 -  public void serialize(ByteBuffer byteBuffer) {
 -    ReadWriteIOUtils.write(isConstantOperandCache, byteBuffer);
 +  protected abstract short getExpressionType();
 +
 +  public static void serialize(Expression expression, ByteBuffer byteBuffer) {
 +    ReadWriteIOUtils.write(expression.getExpressionType(), byteBuffer);
++
 +    expression.serialize(byteBuffer);
++
++    ReadWriteIOUtils.write(expression.inputColumnIndex != null, byteBuffer);
++    if (expression.inputColumnIndex != null) {
++      ReadWriteIOUtils.write(expression.inputColumnIndex, byteBuffer);
++    }
 +  }
 +
 +  public abstract void serialize(ByteBuffer byteBuffer);
 +
 +  public static Expression deserialize(ByteBuffer byteBuffer) {
 +    short type = ReadWriteIOUtils.readShort(byteBuffer);
++
++    Expression expression;
 +    switch (type) {
 +      case 0:
-         return new AdditionExpression(byteBuffer);
++        expression = new AdditionExpression(byteBuffer);
++        break;
 +      case 1:
-         return new DivisionExpression(byteBuffer);
++        expression = new DivisionExpression(byteBuffer);
++        break;
 +      case 2:
-         return new EqualToExpression(byteBuffer);
++        expression = new EqualToExpression(byteBuffer);
++        break;
 +      case 3:
-         return new GreaterEqualExpression(byteBuffer);
++        expression = new GreaterEqualExpression(byteBuffer);
++        break;
 +      case 4:
-         return new GreaterThanExpression(byteBuffer);
++        expression = new GreaterThanExpression(byteBuffer);
++        break;
 +      case 5:
-         return new LessEqualExpression(byteBuffer);
++        expression = new LessEqualExpression(byteBuffer);
++        break;
 +      case 6:
-         return new LessThanExpression(byteBuffer);
++        expression = new LessThanExpression(byteBuffer);
++        break;
 +      case 7:
-         return new LogicAndExpression(byteBuffer);
++        expression = new LogicAndExpression(byteBuffer);
++        break;
 +      case 8:
-         return new LogicOrExpression(byteBuffer);
++        expression = new LogicOrExpression(byteBuffer);
++        break;
 +      case 9:
-         return new ModuloExpression(byteBuffer);
++        expression = new ModuloExpression(byteBuffer);
++        break;
 +      case 10:
-         return new MultiplicationExpression(byteBuffer);
++        expression = new MultiplicationExpression(byteBuffer);
++        break;
 +      case 11:
-         return new NonEqualExpression(byteBuffer);
++        expression = new NonEqualExpression(byteBuffer);
++        break;
 +      case 12:
-         return new SubtractionExpression(byteBuffer);
++        expression = new SubtractionExpression(byteBuffer);
++        break;
 +      case 13:
-         return new FunctionExpression(byteBuffer);
++        expression = new FunctionExpression(byteBuffer);
++        break;
 +      case 14:
-         return new LogicNotExpression(byteBuffer);
++        expression = new LogicNotExpression(byteBuffer);
++        break;
 +      case 15:
-         return new NegationExpression(byteBuffer);
++        expression = new NegationExpression(byteBuffer);
++        break;
 +      case 16:
-         return new TimeSeriesOperand(byteBuffer);
++        expression = new TimeSeriesOperand(byteBuffer);
++        break;
 +      case 17:
-         return new ConstantOperand(byteBuffer);
++        expression = new ConstantOperand(byteBuffer);
++        break;
 +      case 18:
-         throw new IllegalArgumentException("Invalid expression type: " + type);
++        expression = null;
++        break;
 +      case 19:
-         return new RegularExpression(byteBuffer);
++        expression = new RegularExpression(byteBuffer);
++        break;
 +      default:
 +        throw new IllegalArgumentException("Invalid expression type: " + type);
 +    }
++
++    boolean hasInputColumnIndex = ReadWriteIOUtils.readBool(byteBuffer);
++    if (hasInputColumnIndex) {
++      expression.inputColumnIndex = ReadWriteIOUtils.readInt(byteBuffer);
++    }
++
++    return expression;
    }
  }


[iotdb] 02/04: RegularExpression

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch IOTDB-2962
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 84403422b7bd9343544d47caf142b70d00b6518a
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Fri Apr 22 09:24:57 2022 +0800

    RegularExpression
---
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |   4 +-
 .../iotdb/db/query/expression/Expression.java      |   4 -
 .../query/expression/unary/RegularExpression.java  | 181 +++++++++++++++++++++
 3 files changed, 183 insertions(+), 6 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index c83c704f1d..24c8dfb88c 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -845,10 +845,10 @@ expression
     | leftExpression=expression (STAR | DIV | MOD) rightExpression=expression
     | leftExpression=expression (PLUS | MINUS) rightExpression=expression
     | leftExpression=expression (OPERATOR_GT | OPERATOR_GTE | OPERATOR_LT | OPERATOR_LTE | OPERATOR_DEQ | OPERATOR_NEQ) rightExpression=expression
-    | leftExpression=expression (OPERATOR_AND | OPERATOR_OR) rightExpression=expression
-    | functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
     | unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
     | unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)* RR_BRACKET
+    | leftExpression=expression (OPERATOR_AND | OPERATOR_OR) rightExpression=expression
+    | functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
     | suffixPathCanInExpr
     | time=(TIME | TIMESTAMP)
     | constant
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index 1e481c2db5..0a54966cf5 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -66,10 +66,6 @@ public abstract class Expression {
     return false;
   }
 
-  public void bindInputColumnIndex(int inputColumnIndex) {
-    this.inputColumnIndex = inputColumnIndex;
-  }
-
   public abstract void concat(
       List<PartialPath> prefixPaths,
       List<Expression> resultExpressions,
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
new file mode 100644
index 0000000000..3a712c9b89
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.query.expression.unary;
+
+import org.apache.iotdb.db.exception.query.LogicalOptimizeException;
+import org.apache.iotdb.db.exception.query.QueryProcessException;
+import org.apache.iotdb.db.exception.sql.StatementAnalyzeException;
+import org.apache.iotdb.db.metadata.path.PartialPath;
+import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree;
+import org.apache.iotdb.db.mpp.sql.rewriter.WildcardsRemover;
+import org.apache.iotdb.db.qp.physical.crud.UDTFPlan;
+import org.apache.iotdb.db.query.expression.Expression;
+import org.apache.iotdb.db.query.udf.core.executor.UDTFContext;
+import org.apache.iotdb.db.query.udf.core.executor.UDTFExecutor;
+import org.apache.iotdb.db.query.udf.core.layer.IntermediateLayer;
+import org.apache.iotdb.db.query.udf.core.layer.LayerMemoryAssigner;
+import org.apache.iotdb.db.query.udf.core.layer.RawQueryInputLayer;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Pattern;
+
+public class RegularExpression extends Expression {
+
+  private final Expression expression;
+  private final String patternString;
+  private final Pattern pattern;
+
+  public RegularExpression(Expression expression, String patternString) {
+    this.expression = expression;
+    this.patternString = patternString;
+    pattern = Pattern.compile(patternString);
+  }
+
+  public RegularExpression(Expression expression, String patternString, Pattern pattern) {
+    this.expression = expression;
+    this.patternString = patternString;
+    this.pattern = pattern;
+  }
+
+  @Override
+  public void concat(
+      List<PartialPath> prefixPaths,
+      List<Expression> resultExpressions,
+      PathPatternTree patternTree) {
+    List<Expression> resultExpressionsForRecursion = new ArrayList<>();
+    expression.concat(prefixPaths, resultExpressionsForRecursion, patternTree);
+    for (Expression resultExpression : resultExpressionsForRecursion) {
+      resultExpressions.add(new RegularExpression(resultExpression, patternString, pattern));
+    }
+  }
+
+  @Override
+  public void concat(List<PartialPath> prefixPaths, List<Expression> resultExpressions) {
+    List<Expression> resultExpressionsForRecursion = new ArrayList<>();
+    expression.concat(prefixPaths, resultExpressionsForRecursion);
+    for (Expression resultExpression : resultExpressionsForRecursion) {
+      resultExpressions.add(new RegularExpression(resultExpression, patternString, pattern));
+    }
+  }
+
+  @Override
+  public void removeWildcards(WildcardsRemover wildcardsRemover, List<Expression> resultExpressions)
+      throws StatementAnalyzeException {
+    List<Expression> resultExpressionsForRecursion = new ArrayList<>();
+    expression.removeWildcards(wildcardsRemover, resultExpressionsForRecursion);
+    for (Expression resultExpression : resultExpressionsForRecursion) {
+      resultExpressions.add(new RegularExpression(resultExpression, patternString, pattern));
+    }
+  }
+
+  @Override
+  public void removeWildcards(
+      org.apache.iotdb.db.qp.utils.WildcardsRemover wildcardsRemover,
+      List<Expression> resultExpressions)
+      throws LogicalOptimizeException {
+    List<Expression> resultExpressionsForRecursion = new ArrayList<>();
+    expression.removeWildcards(wildcardsRemover, resultExpressionsForRecursion);
+    for (Expression resultExpression : resultExpressionsForRecursion) {
+      resultExpressions.add(new RegularExpression(resultExpression, patternString, pattern));
+    }
+  }
+
+  @Override
+  public void collectPaths(Set<PartialPath> pathSet) {
+    expression.collectPaths(pathSet);
+  }
+
+  @Override
+  public void constructUdfExecutors(
+      Map<String, UDTFExecutor> expressionName2Executor, ZoneId zoneId) {
+    expression.constructUdfExecutors(expressionName2Executor, zoneId);
+  }
+
+  @Override
+  public void bindInputLayerColumnIndexWithExpression(UDTFPlan udtfPlan) {
+    expression.bindInputLayerColumnIndexWithExpression(udtfPlan);
+    inputColumnIndex = udtfPlan.getReaderIndexByExpressionName(toString());
+  }
+
+  @Override
+  public void updateStatisticsForMemoryAssigner(LayerMemoryAssigner memoryAssigner) {
+    expression.updateStatisticsForMemoryAssigner(memoryAssigner);
+    memoryAssigner.increaseExpressionReference(this);
+  }
+
+  @Override
+  public IntermediateLayer constructIntermediateLayer(
+      long queryId,
+      UDTFContext udtfContext,
+      RawQueryInputLayer rawTimeSeriesInputLayer,
+      Map<Expression, IntermediateLayer> expressionIntermediateLayerMap,
+      Map<Expression, TSDataType> expressionDataTypeMap,
+      LayerMemoryAssigner memoryAssigner)
+      throws QueryProcessException, IOException {
+    // TODO
+    throw new RuntimeException();
+  }
+
+  @Override
+  protected boolean isConstantOperandInternal() {
+    return expression.isConstantOperand();
+  }
+
+  @Override
+  public List<Expression> getExpressions() {
+    return Collections.singletonList(expression);
+  }
+
+  @Override
+  protected String getExpressionStringInternal() {
+    // TODO
+    throw new RuntimeException();
+  }
+
+  @Override
+  public boolean isTimeSeriesGeneratingFunctionExpression() {
+    return !isUserDefinedAggregationFunctionExpression();
+  }
+
+  @Override
+  public boolean isUserDefinedAggregationFunctionExpression() {
+    return expression.isUserDefinedAggregationFunctionExpression()
+        || expression.isBuiltInAggregationFunctionExpression();
+  }
+
+  public static RegularExpression deserialize(ByteBuffer buffer) {
+    // TODO
+    throw new RuntimeException();
+  }
+
+  @Override
+  public void serialize(ByteBuffer byteBuffer) {
+    // TODO
+    throw new RuntimeException();
+  }
+}


[iotdb] 01/04: antlr: support in / regular expr

Posted by ro...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rong pushed a commit to branch IOTDB-2962
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9ae809bda39ad9f0c37ce19c84f32169e2a26438
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Thu Apr 21 11:13:26 2022 +0800

    antlr: support in / regular expr
---
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  3 +
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    | 89 +++++++++++++++-------
 2 files changed, 65 insertions(+), 27 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index fc0234fb29..c83c704f1d 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -847,7 +847,10 @@ expression
     | leftExpression=expression (OPERATOR_GT | OPERATOR_GTE | OPERATOR_LT | OPERATOR_LTE | OPERATOR_DEQ | OPERATOR_NEQ) rightExpression=expression
     | leftExpression=expression (OPERATOR_AND | OPERATOR_OR) rightExpression=expression
     | functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
+    | unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
+    | unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)* RR_BRACKET
     | suffixPathCanInExpr
+    | time=(TIME | TIMESTAMP)
     | constant
     ;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index 029df297a8..4c1c8319ab 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -52,8 +52,10 @@ import org.apache.iotdb.db.qp.logical.crud.SpecialClauseComponent;
 import org.apache.iotdb.db.qp.logical.crud.UDAFQueryOperator;
 import org.apache.iotdb.db.qp.logical.crud.UDTFQueryOperator;
 import org.apache.iotdb.db.qp.logical.crud.WhereComponent;
-import org.apache.iotdb.db.qp.logical.sys.*;
+import org.apache.iotdb.db.qp.logical.sys.ActivateTemplateOperator;
+import org.apache.iotdb.db.qp.logical.sys.AlterTimeSeriesOperator;
 import org.apache.iotdb.db.qp.logical.sys.AlterTimeSeriesOperator.AlterType;
+import org.apache.iotdb.db.qp.logical.sys.AuthorOperator;
 import org.apache.iotdb.db.qp.logical.sys.AuthorOperator.AuthorType;
 import org.apache.iotdb.db.qp.logical.sys.ClearCacheOperator;
 import org.apache.iotdb.db.qp.logical.sys.CountOperator;
@@ -73,6 +75,7 @@ import org.apache.iotdb.db.qp.logical.sys.DropContinuousQueryOperator;
 import org.apache.iotdb.db.qp.logical.sys.DropFunctionOperator;
 import org.apache.iotdb.db.qp.logical.sys.DropPipeOperator;
 import org.apache.iotdb.db.qp.logical.sys.DropPipeSinkOperator;
+import org.apache.iotdb.db.qp.logical.sys.DropTemplateOperator;
 import org.apache.iotdb.db.qp.logical.sys.DropTriggerOperator;
 import org.apache.iotdb.db.qp.logical.sys.FlushOperator;
 import org.apache.iotdb.db.qp.logical.sys.KillQueryOperator;
@@ -93,17 +96,25 @@ import org.apache.iotdb.db.qp.logical.sys.ShowContinuousQueriesOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowDevicesOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowFunctionsOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowLockInfoOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowNodesInTemplateOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowPathsSetTemplateOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowPathsUsingTemplateOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowPipeOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowPipeServerOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowPipeSinkOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowPipeSinkTypeOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowQueryResourceOperate;
 import org.apache.iotdb.db.qp.logical.sys.ShowStorageGroupOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowTTLOperator;
+import org.apache.iotdb.db.qp.logical.sys.ShowTemplatesOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowTimeSeriesOperator;
 import org.apache.iotdb.db.qp.logical.sys.ShowTriggersOperator;
 import org.apache.iotdb.db.qp.logical.sys.StartPipeOperator;
+import org.apache.iotdb.db.qp.logical.sys.StartPipeServerOperator;
 import org.apache.iotdb.db.qp.logical.sys.StartTriggerOperator;
 import org.apache.iotdb.db.qp.logical.sys.StopPipeOperator;
+import org.apache.iotdb.db.qp.logical.sys.StopPipeServerOperator;
 import org.apache.iotdb.db.qp.logical.sys.StopTriggerOperator;
 import org.apache.iotdb.db.qp.logical.sys.UnSetTTLOperator;
 import org.apache.iotdb.db.qp.logical.sys.UnloadFileOperator;
@@ -2566,37 +2577,25 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
       return parseFunctionExpression(context);
     }
 
+    // unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
+    if (context.unaryBeforeRegularExpression != null) {
+      return parseRegularExpression(context);
+    }
+
+    // unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)*
+    // RR_BRACKET
+    if (context.unaryBeforeInExpression != null) {
+      return parseInExpression(context);
+    }
+
     // suffixPath
     if (context.suffixPathCanInExpr() != null) {
       return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
     }
 
-    if (context.constant() != null) {
-      try {
-        ConstantContext constantContext = context.constant();
-        if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_13)) {
-          if (constantContext.BOOLEAN_LITERAL() != null) {
-            return new ConstantOperand(
-                TSDataType.BOOLEAN, constantContext.BOOLEAN_LITERAL().getText());
-          } else if (constantContext.STRING_LITERAL() != null) {
-            String text = constantContext.STRING_LITERAL().getText();
-            return new ConstantOperand(TSDataType.TEXT, parseStringLiteral(text));
-          } else if (constantContext.INTEGER_LITERAL() != null) {
-            return new ConstantOperand(
-                TSDataType.INT64, constantContext.INTEGER_LITERAL().getText());
-          } else if (constantContext.realLiteral() != null) {
-            return new ConstantOperand(TSDataType.DOUBLE, constantContext.realLiteral().getText());
-          } else {
-            throw new SQLParserException(
-                "Unsupported constant operand: " + constantContext.getText());
-          }
-        } else if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_12)) {
-          // if client version is before 0.13, node name in expression may be a constant
-          return new TimeSeriesOperand(convertConstantToPath(context.constant().getText()));
-        }
-      } catch (IllegalPathException e) {
-        throw new SQLParserException(e.getMessage());
-      }
+    // constant
+    if (context.constant() != null && !context.constant().isEmpty()) {
+      return parseConstantOperand(context.constant(0));
     }
 
     throw new UnsupportedOperationException();
@@ -2635,6 +2634,42 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
     return functionExpression;
   }
 
+  private Expression parseRegularExpression(ExpressionContext context) {
+    return null;
+  }
+
+  private Expression parseInExpression(ExpressionContext context) {
+    return null;
+  }
+
+  private Expression parseConstantOperand(ConstantContext constantContext) {
+    try {
+      if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_13)) {
+        if (constantContext.BOOLEAN_LITERAL() != null) {
+          return new ConstantOperand(
+              TSDataType.BOOLEAN, constantContext.BOOLEAN_LITERAL().getText());
+        } else if (constantContext.STRING_LITERAL() != null) {
+          String text = constantContext.STRING_LITERAL().getText();
+          return new ConstantOperand(TSDataType.TEXT, parseStringLiteral(text));
+        } else if (constantContext.INTEGER_LITERAL() != null) {
+          return new ConstantOperand(TSDataType.INT64, constantContext.INTEGER_LITERAL().getText());
+        } else if (constantContext.realLiteral() != null) {
+          return new ConstantOperand(TSDataType.DOUBLE, constantContext.realLiteral().getText());
+        } else {
+          throw new SQLParserException(
+              "Unsupported constant operand: " + constantContext.getText());
+        }
+      } else if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_12)) {
+        // if client version is before 0.13, node name in expression may be a constant
+        return new TimeSeriesOperand(convertConstantToPath(constantContext.getText()));
+      } else {
+        throw new UnsupportedOperationException();
+      }
+    } catch (IllegalPathException e) {
+      throw new SQLParserException(e.getMessage());
+    }
+  }
+
   private FilterOperator parseOrExpression(IoTDBSqlParser.OrExpressionContext ctx) {
     if (ctx.andExpression().size() == 1) {
       return parseAndExpression(ctx.andExpression(0));