You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2023/05/28 14:12:09 UTC

[iotdb] 04/04: use getExpressionString() replace toString()

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

hui pushed a commit to branch lmh/SupportQueryWithView
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 9f91b6c5d5d6b29e86f68d46aec2d4694e9ac6ff
Author: liuminghui233 <54...@qq.com>
AuthorDate: Sun May 28 21:42:22 2023 +0800

    use getExpressionString() replace toString()
---
 .../db/mpp/aggregation/AccumulatorFactory.java     |  2 +-
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  | 14 ++++++-------
 .../mpp/plan/analyze/ExpressionTypeAnalyzer.java   | 23 +++++++++++-----------
 .../iotdb/db/mpp/plan/analyze/ExpressionUtils.java |  2 +-
 .../config/executor/ClusterConfigTaskExecutor.java |  4 ++--
 .../iotdb/db/mpp/plan/expression/Expression.java   | 13 ++++++++++--
 .../plan/expression/binary/BinaryExpression.java   |  2 +-
 .../plan/expression/binary/WhenThenExpression.java |  5 ++++-
 .../plan/expression/leaf/TimeSeriesOperand.java    |  2 +-
 .../plan/expression/multi/FunctionExpression.java  |  8 ++++----
 .../expression/other/CaseWhenThenExpression.java   |  6 +++---
 .../plan/expression/ternary/BetweenExpression.java |  6 +++++-
 .../plan/expression/ternary/TernaryExpression.java |  2 +-
 .../db/mpp/plan/expression/unary/InExpression.java | 13 +++++++-----
 .../plan/expression/unary/IsNullExpression.java    |  2 +-
 .../mpp/plan/expression/unary/LikeExpression.java  |  2 +-
 .../plan/expression/unary/LogicNotExpression.java  |  9 ++++-----
 .../plan/expression/unary/NegationExpression.java  |  4 ++--
 .../plan/expression/unary/RegularExpression.java   |  2 +-
 .../mpp/plan/expression/unary/UnaryExpression.java |  2 +-
 .../visitor/ColumnTransformerVisitor.java          |  4 +++-
 .../visitor/IntermediateLayerVisitor.java          |  2 +-
 .../db/mpp/plan/planner/LogicalPlanBuilder.java    |  7 ++++---
 .../db/mpp/plan/planner/OperatorTreeGenerator.java |  4 ++--
 .../db/mpp/plan/planner/SubPlanTypeExtractor.java  |  2 +-
 .../planner/plan/node/process/TransformNode.java   |  2 +-
 .../plan/parameter/AggregationDescriptor.java      |  4 ++--
 .../CrossSeriesAggregationDescriptor.java          |  6 +++---
 .../plan/statement/component/HavingCondition.java  |  2 +-
 .../mpp/plan/statement/component/ResultColumn.java |  8 +++++++-
 .../plan/statement/component/SelectComponent.java  |  2 +-
 .../plan/statement/component/WhereCondition.java   |  2 +-
 .../dag/intermediate/IntermediateLayer.java        |  2 +-
 .../apache/iotdb/db/utils/TypeInferenceUtils.java  |  3 ++-
 34 files changed, 101 insertions(+), 72 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/AccumulatorFactory.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/AccumulatorFactory.java
index a7685df9fd0..1a0e76fde4c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/AccumulatorFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/AccumulatorFactory.java
@@ -119,7 +119,7 @@ public class AccumulatorFactory {
     // We have check semantic in FE,
     // keep expression must be ConstantOperand or CompareBinaryExpression here
     if (keepExpression instanceof ConstantOperand) {
-      return keep -> keep >= Long.parseLong(keepExpression.toString());
+      return keep -> keep >= Long.parseLong(keepExpression.getExpressionString());
     } else {
       long constant =
           Long.parseLong(
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index 98a59db9107..3fda39b89da 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -438,8 +438,8 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
           new TreeSet<>(
               (e1, e2) ->
                   isAscending
-                      ? e1.toString().compareTo(e2.toString())
-                      : e2.toString().compareTo(e1.toString()));
+                      ? e1.getExpressionString().compareTo(e2.getExpressionString())
+                      : e2.getExpressionString().compareTo(e1.getExpressionString()));
     } else {
       sourceExpressions = new LinkedHashSet<>();
     }
@@ -1735,16 +1735,16 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
         if (sourceColumn instanceof TimeSeriesOperand) {
           targetMeasurement =
               constructTargetMeasurement(
-                  sourceDevice.concatNode(sourceColumn.toString()), measurementTemplate);
+                  sourceDevice.concatNode(sourceColumn.getExpressionString()), measurementTemplate);
         } else {
           targetMeasurement = measurementTemplate;
         }
         deviceViewIntoPathDescriptor.specifyTargetDeviceMeasurement(
-            sourceDevice, targetDevice, sourceColumn.toString(), targetMeasurement);
+            sourceDevice, targetDevice, sourceColumn.getExpressionString(), targetMeasurement);
 
         targetPathTree.appendFullPath(targetDevice, targetMeasurement);
         deviceViewIntoPathDescriptor.recordSourceColumnDataType(
-            sourceColumn.toString(), analysis.getType(sourceColumn));
+            sourceColumn.getExpressionString(), analysis.getType(sourceColumn));
 
         intoDeviceMeasurementIterator.nextMeasurement();
       }
@@ -1795,13 +1795,13 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
       } else {
         targetPath = deviceTemplate.concatNode(measurementTemplate);
       }
-      intoPathDescriptor.specifyTargetPath(sourceColumn.toString(), targetPath);
+      intoPathDescriptor.specifyTargetPath(sourceColumn.getExpressionString(), targetPath);
       intoPathDescriptor.specifyDeviceAlignment(
           targetPath.getDevicePath().toString(), isAlignedDevice);
 
       targetPathTree.appendFullPath(targetPath);
       intoPathDescriptor.recordSourceColumnDataType(
-          sourceColumn.toString(), analysis.getType(sourceColumn));
+          sourceColumn.getExpressionString(), analysis.getType(sourceColumn));
 
       intoPathIterator.next();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionTypeAnalyzer.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionTypeAnalyzer.java
index ee2f2e1b73d..1f47297c458 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionTypeAnalyzer.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionTypeAnalyzer.java
@@ -119,7 +119,7 @@ public class ExpressionTypeAnalyzer {
     @Override
     public TSDataType visitLikeExpression(LikeExpression likeExpression, Void context) {
       checkInputExpressionDataType(
-          likeExpression.getExpression().toString(),
+          likeExpression.getExpression().getExpressionString(),
           process(likeExpression.getExpression(), null),
           TSDataType.TEXT);
       return setExpressionType(likeExpression, TSDataType.BOOLEAN);
@@ -128,7 +128,7 @@ public class ExpressionTypeAnalyzer {
     @Override
     public TSDataType visitRegularExpression(RegularExpression regularExpression, Void context) {
       checkInputExpressionDataType(
-          regularExpression.getExpression().toString(),
+          regularExpression.getExpression().getExpressionString(),
           process(regularExpression.getExpression(), null),
           TSDataType.TEXT);
       return setExpressionType(regularExpression, TSDataType.BOOLEAN);
@@ -137,7 +137,7 @@ public class ExpressionTypeAnalyzer {
     @Override
     public TSDataType visitLogicNotExpression(LogicNotExpression logicNotExpression, Void context) {
       checkInputExpressionDataType(
-          logicNotExpression.getExpression().toString(),
+          logicNotExpression.getExpression().getExpressionString(),
           process(logicNotExpression.getExpression(), null),
           TSDataType.BOOLEAN);
       return setExpressionType(logicNotExpression, TSDataType.BOOLEAN);
@@ -147,7 +147,7 @@ public class ExpressionTypeAnalyzer {
     public TSDataType visitNegationExpression(NegationExpression negationExpression, Void context) {
       TSDataType inputExpressionType = process(negationExpression.getExpression(), null);
       checkInputExpressionDataType(
-          negationExpression.getExpression().toString(),
+          negationExpression.getExpression().getExpressionString(),
           inputExpressionType,
           TSDataType.INT32,
           TSDataType.INT64,
@@ -160,14 +160,14 @@ public class ExpressionTypeAnalyzer {
     public TSDataType visitArithmeticBinaryExpression(
         ArithmeticBinaryExpression arithmeticBinaryExpression, Void context) {
       checkInputExpressionDataType(
-          arithmeticBinaryExpression.getLeftExpression().toString(),
+          arithmeticBinaryExpression.getLeftExpression().getExpressionString(),
           process(arithmeticBinaryExpression.getLeftExpression(), null),
           TSDataType.INT32,
           TSDataType.INT64,
           TSDataType.FLOAT,
           TSDataType.DOUBLE);
       checkInputExpressionDataType(
-          arithmeticBinaryExpression.getRightExpression().toString(),
+          arithmeticBinaryExpression.getRightExpression().getExpressionString(),
           process(arithmeticBinaryExpression.getRightExpression(), null),
           TSDataType.INT32,
           TSDataType.INT64,
@@ -180,11 +180,11 @@ public class ExpressionTypeAnalyzer {
     public TSDataType visitLogicBinaryExpression(
         LogicBinaryExpression logicBinaryExpression, Void context) {
       checkInputExpressionDataType(
-          logicBinaryExpression.getLeftExpression().toString(),
+          logicBinaryExpression.getLeftExpression().getExpressionString(),
           process(logicBinaryExpression.getLeftExpression(), null),
           TSDataType.BOOLEAN);
       checkInputExpressionDataType(
-          logicBinaryExpression.getRightExpression().toString(),
+          logicBinaryExpression.getRightExpression().getExpressionString(),
           process(logicBinaryExpression.getRightExpression(), null),
           TSDataType.BOOLEAN);
       return setExpressionType(logicBinaryExpression, TSDataType.BOOLEAN);
@@ -201,9 +201,10 @@ public class ExpressionTypeAnalyzer {
       if (leftExpressionDataType != null
           && rightExpressionDataType != null
           && !leftExpressionDataType.equals(rightExpressionDataType)) {
-        final String leftExpressionString = compareBinaryExpression.getLeftExpression().toString();
+        final String leftExpressionString =
+            compareBinaryExpression.getLeftExpression().getExpressionString();
         final String rightExpressionString =
-            compareBinaryExpression.getRightExpression().toString();
+            compareBinaryExpression.getRightExpression().getExpressionString();
 
         if (TSDataType.BOOLEAN.equals(leftExpressionDataType)
             || TSDataType.BOOLEAN.equals(rightExpressionDataType)) {
@@ -271,7 +272,7 @@ public class ExpressionTypeAnalyzer {
             new UDTFInformationInferrer(functionExpression.getFunctionName())
                 .inferOutputType(
                     inputExpressions.stream()
-                        .map(Expression::toString)
+                        .map(Expression::getExpressionString)
                         .collect(Collectors.toList()),
                     inputExpressions.stream()
                         .map(f -> expressionTypes.get(NodeRef.of(f)))
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionUtils.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionUtils.java
index 025919d39c3..81a992472cf 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ExpressionUtils.java
@@ -140,7 +140,7 @@ public class ExpressionUtils {
       Expression thirdExpression) {
     TernaryExpression copiedTernaryExpression = (TernaryExpression) expression.copy();
     copiedTernaryExpression.setFirstExpression(firstExpression);
-    copiedTernaryExpression.setFirstExpression(secondExpression);
+    copiedTernaryExpression.setSecondExpression(secondExpression);
     copiedTernaryExpression.setThirdExpression(thirdExpression);
     return copiedTernaryExpression;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index e1881628bba..3d8acae6458 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -1971,10 +1971,10 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
 
     List<String> queryExpressions = new ArrayList<>();
     for (Expression expression : analysis.getSelectExpressions()) {
-      queryExpressions.add(expression.toString());
+      queryExpressions.add(expression.getExpressionString());
     }
     Expression whereExpression = analysis.getWhereExpression();
-    String queryFilter = whereExpression == null ? null : whereExpression.toString();
+    String queryFilter = whereExpression == null ? null : whereExpression.getExpressionString();
 
     SettableFuture<ConfigTaskResult> future = SettableFuture.create();
     try (ConfigNodeClient client =
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
index 47dd65a21ba..97751ea85bd 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/Expression.java
@@ -66,6 +66,7 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /** A skeleton class for expression */
 public abstract class Expression extends StatementNode {
@@ -151,10 +152,18 @@ public abstract class Expression extends StatementNode {
   // For representing expression in string
   /////////////////////////////////////////////////////////////////////////////////////////////////
 
+  /**
+   * This method is only displayed during debugging, please use {@link #getExpressionString()} or
+   * {@link #getOutputSymbol()} in the code.
+   */
   @Override
   public final String toString() {
-    throw new UnsupportedOperationException(
-        "The Expression class does not support toString() method, please use getOutputSymbol() or getExpressionString().");
+    String outputSymbol = getOutputSymbol();
+    String expressionString = getExpressionString();
+    if (!Objects.equals(outputSymbol, expressionString)) {
+      return expressionString + "[" + outputSymbol + "]";
+    }
+    return expressionString;
   }
 
   private String outputSymbolCache;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
index 2721bf2c374..d6a5c89f9ce 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/BinaryExpression.java
@@ -93,7 +93,7 @@ public abstract class BinaryExpression extends Expression {
     leftExpression.bindInputLayerColumnIndexWithExpression(inputLocations);
     rightExpression.bindInputLayerColumnIndexWithExpression(inputLocations);
 
-    final String digest = toString();
+    final String digest = getExpressionString();
 
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/WhenThenExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/WhenThenExpression.java
index 0c6214768f5..f9b7fb058dd 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/WhenThenExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/binary/WhenThenExpression.java
@@ -63,7 +63,10 @@ public class WhenThenExpression extends BinaryExpression {
 
   @Override
   public String getExpressionStringInternal() {
-    return "WHEN " + this.getWhen().toString() + " THEN " + this.getThen().toString();
+    return "WHEN "
+        + this.getWhen().getExpressionString()
+        + " THEN "
+        + this.getThen().getExpressionString();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
index b933d943f2e..c9a396a147e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/leaf/TimeSeriesOperand.java
@@ -75,7 +75,7 @@ public class TimeSeriesOperand extends LeafOperand {
   @Override
   public void bindInputLayerColumnIndexWithExpression(
       Map<String, List<InputLocation>> inputLocations) {
-    final String digest = toString();
+    final String digest = getExpressionString();
 
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
index ba2a7500b68..b8ba519b836 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/multi/FunctionExpression.java
@@ -226,7 +226,7 @@ public class FunctionExpression extends Expression {
       expression.bindInputLayerColumnIndexWithExpression(inputLocations);
     }
 
-    final String digest = toString();
+    final String digest = getExpressionString();
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
     }
@@ -247,7 +247,7 @@ public class FunctionExpression extends Expression {
     }
     return new UDTFInformationInferrer(functionName)
         .getAccessStrategy(
-            expressions.stream().map(Expression::toString).collect(Collectors.toList()),
+            expressions.stream().map(Expression::getExpressionString).collect(Collectors.toList()),
             expressions.stream()
                 .map(f -> expressionTypes.get(NodeRef.of(f)))
                 .collect(Collectors.toList()),
@@ -287,9 +287,9 @@ public class FunctionExpression extends Expression {
     if (parametersString == null) {
       StringBuilder builder = new StringBuilder();
       if (!expressions.isEmpty()) {
-        builder.append(expressions.get(0).toString());
+        builder.append(expressions.get(0).getExpressionString());
         for (int i = 1; i < expressions.size(); ++i) {
-          builder.append(", ").append(expressions.get(i).toString());
+          builder.append(", ").append(expressions.get(i).getExpressionString());
         }
       }
       if (!functionAttributes.isEmpty()) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/other/CaseWhenThenExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/other/CaseWhenThenExpression.java
index a3166ff0918..2e8893549d6 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/other/CaseWhenThenExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/other/CaseWhenThenExpression.java
@@ -115,7 +115,7 @@ public class CaseWhenThenExpression extends Expression {
       Map<String, List<InputLocation>> inputLocations) {
     this.getExpressions()
         .forEach(expression -> expression.bindInputLayerColumnIndexWithExpression(inputLocations));
-    final String digest = toString();
+    final String digest = getExpressionString();
 
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
@@ -134,10 +134,10 @@ public class CaseWhenThenExpression extends Expression {
     StringBuilder builder = new StringBuilder();
     builder.append("CASE ");
     for (Expression expression : this.whenThenExpressions) {
-      builder.append(expression.toString()).append(" ");
+      builder.append(expression.getExpressionString()).append(" ");
     }
     if (!(this.elseExpression instanceof NullOperand)) {
-      builder.append("ELSE ").append(this.elseExpression.toString()).append(" ");
+      builder.append("ELSE ").append(this.elseExpression.getExpressionString()).append(" ");
     }
     builder.append("END");
     return builder.toString();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
index 94d02482ef5..9dbabc33748 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/BetweenExpression.java
@@ -64,7 +64,11 @@ public class BetweenExpression extends TernaryExpression {
 
   @Override
   protected String getExpressionStringInternal() {
-    return firstExpression + " BETWEEN " + secondExpression + " AND " + thirdExpression;
+    return firstExpression.getExpressionString()
+        + " BETWEEN "
+        + secondExpression.getExpressionString()
+        + " AND "
+        + thirdExpression.getExpressionString();
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
index 2242e0f32e3..435ea1db792 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/ternary/TernaryExpression.java
@@ -118,7 +118,7 @@ public abstract class TernaryExpression extends Expression {
     secondExpression.bindInputLayerColumnIndexWithExpression(inputLocations);
     thirdExpression.bindInputLayerColumnIndexWithExpression(inputLocations);
 
-    final String digest = toString();
+    final String digest = getExpressionString();
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
index 534bfee18b4..d2f04a914b9 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/InExpression.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.plan.expression.unary;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.LeafOperand;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
 import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
@@ -67,12 +68,14 @@ public class InExpression extends UnaryExpression {
   @Override
   protected String getExpressionStringInternal() {
     StringBuilder stringBuilder = new StringBuilder();
-    if (expression instanceof FunctionExpression
-        || expression instanceof ConstantOperand
-        || expression instanceof TimeSeriesOperand) {
-      stringBuilder.append(expression).append(" IN (");
+    if (expression instanceof FunctionExpression || expression instanceof LeafOperand) {
+      stringBuilder.append(expression.getExpressionString()).append(" IN (");
     } else {
-      stringBuilder.append('(').append(expression).append(')').append(" IN (");
+      stringBuilder
+          .append('(')
+          .append(expression.getExpressionString())
+          .append(')')
+          .append(" IN (");
     }
     return appendValuesToBuild(stringBuilder).toString();
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
index 832e4cd66c4..d113bf47d09 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/IsNullExpression.java
@@ -47,7 +47,7 @@ public class IsNullExpression extends UnaryExpression {
 
   @Override
   protected String getExpressionStringInternal() {
-    return expression + " IS " + (isNot ? "NOT " : "") + "NULL";
+    return expression.getExpressionString() + " IS " + (isNot ? "NOT " : "") + "NULL";
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
index 4e69bf01a23..685d1834001 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LikeExpression.java
@@ -117,7 +117,7 @@ public class LikeExpression extends UnaryExpression {
 
   @Override
   protected String getExpressionStringInternal() {
-    return expression + " LIKE '" + pattern + "'";
+    return expression.getExpressionString() + " LIKE '" + pattern + "'";
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
index a9996a072ce..b49ed854410 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/LogicNotExpression.java
@@ -22,6 +22,7 @@ package org.apache.iotdb.db.mpp.plan.expression.unary;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
 import org.apache.iotdb.db.mpp.plan.expression.ExpressionType;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
+import org.apache.iotdb.db.mpp.plan.expression.leaf.LeafOperand;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
 import org.apache.iotdb.db.mpp.plan.expression.multi.FunctionExpression;
 import org.apache.iotdb.db.mpp.plan.expression.visitor.ExpressionVisitor;
@@ -45,11 +46,9 @@ public class LogicNotExpression extends UnaryExpression {
 
   @Override
   public String getExpressionStringInternal() {
-    return expression instanceof FunctionExpression
-            || expression instanceof ConstantOperand
-            || expression instanceof TimeSeriesOperand
-        ? "!" + expression
-        : "!(" + expression + ")";
+    return expression instanceof FunctionExpression || expression instanceof LeafOperand
+        ? "!" + expression.getExpressionString()
+        : "!(" + expression.getExpressionString() + ")";
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
index 070cf8bfb8f..bb8025b2689 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/NegationExpression.java
@@ -51,8 +51,8 @@ public class NegationExpression extends UnaryExpression {
             || expression instanceof NullOperand
             || (expression instanceof ConstantOperand
                 && !((ConstantOperand) expression).isNegativeNumber())
-        ? "-" + expression
-        : "-(" + expression + ")";
+        ? "-" + expression.getExpressionString()
+        : "-(" + expression.getExpressionString() + ")";
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
index 05c4ffd4e68..d32c2f84454 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/RegularExpression.java
@@ -69,7 +69,7 @@ public class RegularExpression extends UnaryExpression {
 
   @Override
   protected String getExpressionStringInternal() {
-    return expression + " REGEXP '" + patternString + "'";
+    return expression.getExpressionString() + " REGEXP '" + patternString + "'";
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
index f697423f2fa..0fd8463d62a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/unary/UnaryExpression.java
@@ -77,7 +77,7 @@ public abstract class UnaryExpression extends Expression {
       Map<String, List<InputLocation>> inputLocations) {
     expression.bindInputLayerColumnIndexWithExpression(inputLocations);
 
-    final String digest = toString();
+    final String digest = getExpressionString();
     if (inputLocations.containsKey(digest)) {
       inputColumnIndex = inputLocations.get(digest).get(0).getValueColumnIndex();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ColumnTransformerVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ColumnTransformerVisitor.java
index 2a11d8e8968..61406fb57dc 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ColumnTransformerVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/ColumnTransformerVisitor.java
@@ -247,7 +247,9 @@ public class ColumnTransformerVisitor
           executor.beforeStart(
               String.valueOf(0),
               0,
-              expressions.stream().map(Expression::toString).collect(Collectors.toList()),
+              expressions.stream()
+                  .map(Expression::getExpressionString)
+                  .collect(Collectors.toList()),
               expressions.stream().map(context::getType).collect(Collectors.toList()),
               functionExpression.getFunctionAttributes());
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
index 5dfac9bdc0f..753589884af 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/expression/visitor/IntermediateLayerVisitor.java
@@ -401,7 +401,7 @@ public class IntermediateLayerVisitor
     executor.beforeStart(
         context.queryId,
         context.memoryAssigner.assign(),
-        expressions.stream().map(Expression::toString).collect(Collectors.toList()),
+        expressions.stream().map(Expression::getExpressionString).collect(Collectors.toList()),
         expressions.stream().map(context::getType).collect(Collectors.toList()),
         functionExpression.getFunctionAttributes());
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
index b191f3f2a1c..5f1d4a4d4de 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/LogicalPlanBuilder.java
@@ -149,7 +149,7 @@ public class LogicalPlanBuilder {
               && !expression.getExpressionString().equals(ENDTIME)) {
             context
                 .getTypeProvider()
-                .setType(expression.toString(), getPreAnalyzedType.apply(expression));
+                .setType(expression.getExpressionString(), getPreAnalyzedType.apply(expression));
           }
         });
   }
@@ -500,7 +500,8 @@ public class LogicalPlanBuilder {
       AggregationDescriptor aggregationDescriptor, TypeProvider typeProvider) {
     List<TAggregationType> splitAggregations =
         SchemaUtils.splitPartialAggregation(aggregationDescriptor.getAggregationType());
-    String inputExpressionStr = aggregationDescriptor.getInputExpressions().get(0).toString();
+    String inputExpressionStr =
+        aggregationDescriptor.getInputExpressions().get(0).getExpressionString();
     for (TAggregationType aggregation : splitAggregations) {
       String functionName = aggregation.toString().toLowerCase();
       TSDataType aggregationType = SchemaUtils.getAggregationType(functionName);
@@ -781,7 +782,7 @@ public class LogicalPlanBuilder {
         tagKeys,
         tagValuesToAggregationDescriptors,
         groupByTagOutputExpressions.stream()
-            .map(Expression::toString)
+            .map(Expression::getExpressionString)
             .collect(Collectors.toList()));
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
index 13c033c8a29..19d4b7fdde5 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/OperatorTreeGenerator.java
@@ -1362,7 +1362,7 @@ public class OperatorTreeGenerator extends PlanVisitor<Operator, LocalExecutionP
               context
                   .getTypeProvider()
                   // get the type of first inputExpression
-                  .getType(descriptor.getInputExpressions().get(0).toString()),
+                  .getType(descriptor.getInputExpressions().get(0).getExpressionString()),
               descriptor.getInputExpressions(),
               descriptor.getInputAttributes(),
               ascending,
@@ -1437,7 +1437,7 @@ public class OperatorTreeGenerator extends PlanVisitor<Operator, LocalExecutionP
                   context
                       .getTypeProvider()
                       // get the type of first inputExpression
-                      .getType(descriptor.getInputExpressions().get(0).toString()),
+                      .getType(descriptor.getInputExpressions().get(0).getExpressionString()),
                   descriptor.getInputExpressions(),
                   descriptor.getInputAttributes(),
                   ascending),
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/SubPlanTypeExtractor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/SubPlanTypeExtractor.java
index e80f721677c..0ead6cd7b59 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/SubPlanTypeExtractor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/SubPlanTypeExtractor.java
@@ -147,7 +147,7 @@ public class SubPlanTypeExtractor {
           .flatMap(aggregationDescriptor -> aggregationDescriptor.getInputExpressions().stream())
           .forEach(
               expression -> {
-                String expressionStr = expression.toString();
+                String expressionStr = expression.getExpressionString();
                 typeProvider.setType(expressionStr, allTypes.getType(expressionStr));
               });
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/TransformNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/TransformNode.java
index 112e53a01b0..f72ca01b2e5 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/TransformNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/process/TransformNode.java
@@ -78,7 +78,7 @@ public class TransformNode extends SingleChildProcessNode {
     if (outputColumnNames == null) {
       outputColumnNames = new ArrayList<>();
       for (Expression expression : outputExpressions) {
-        outputColumnNames.add(expression.toString());
+        outputColumnNames.add(expression.getExpressionString());
       }
     }
     return outputColumnNames;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/AggregationDescriptor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/AggregationDescriptor.java
index 06a53e16c27..74bb3d660ba 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/AggregationDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/AggregationDescriptor.java
@@ -167,9 +167,9 @@ public class AggregationDescriptor {
     if (parametersString == null) {
       StringBuilder builder = new StringBuilder();
       if (!inputExpressions.isEmpty()) {
-        builder.append(inputExpressions.get(0).toString());
+        builder.append(inputExpressions.get(0).getExpressionString());
         for (int i = 1; i < inputExpressions.size(); ++i) {
-          builder.append(", ").append(inputExpressions.get(i).toString());
+          builder.append(", ").append(inputExpressions.get(i).getExpressionString());
         }
       }
       appendAttributes(builder);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/CrossSeriesAggregationDescriptor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/CrossSeriesAggregationDescriptor.java
index 6dd6351e116..d1c091fb9db 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/CrossSeriesAggregationDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/parameter/CrossSeriesAggregationDescriptor.java
@@ -97,7 +97,7 @@ public class CrossSeriesAggregationDescriptor extends AggregationDescriptor {
     if (parametersString == null) {
       StringBuilder builder = new StringBuilder(outputExpression.getExpressionString());
       for (int i = 1; i < expressionNumOfOneInput; i++) {
-        builder.append(", ").append(inputExpressions.get(i).toString());
+        builder.append(", ").append(inputExpressions.get(i).getExpressionString());
       }
       appendAttributes(builder);
       parametersString = builder.toString();
@@ -135,9 +135,9 @@ public class CrossSeriesAggregationDescriptor extends AggregationDescriptor {
   private String getInputString(Expression[] expressions) {
     StringBuilder builder = new StringBuilder();
     if (!(expressions.length == 0)) {
-      builder.append(expressions[0].toString());
+      builder.append(expressions[0].getExpressionString());
       for (int i = 1; i < expressions.length; ++i) {
-        builder.append(", ").append(expressions[i].toString());
+        builder.append(", ").append(expressions[i].getExpressionString());
       }
     }
     appendAttributes(builder);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
index 7bfca1b88ad..6a7ab8912ee 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/HavingCondition.java
@@ -44,6 +44,6 @@ public class HavingCondition extends StatementNode {
   }
 
   public String toSQLString() {
-    return "HAVING " + predicate.toString();
+    return "HAVING " + predicate.getExpressionString();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/ResultColumn.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/ResultColumn.java
index ae23d5e3d5b..38523b11012 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/ResultColumn.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/ResultColumn.java
@@ -98,7 +98,13 @@ public class ResultColumn extends StatementNode {
 
   @Override
   public String toString() {
-    return "ResultColumn{" + "expression=" + expression + ", alias='" + alias + '\'' + '}';
+    return "ResultColumn{"
+        + "expression="
+        + expression.getExpressionString()
+        + ", alias='"
+        + alias
+        + '\''
+        + '}';
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/SelectComponent.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/SelectComponent.java
index 8961affe57f..74ac2c554c1 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/SelectComponent.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/SelectComponent.java
@@ -96,7 +96,7 @@ public class SelectComponent extends StatementNode {
     }
     for (int i = 0; i < resultColumns.size(); i++) {
       ResultColumn resultColumn = resultColumns.get(i);
-      sqlBuilder.append(resultColumn.getExpression().toString());
+      sqlBuilder.append(resultColumn.getExpression().getExpressionString());
       if (resultColumn.hasAlias()) {
         sqlBuilder.append('(').append(resultColumn.getAlias()).append(')');
       }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
index af058038940..4bba6613edb 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/component/WhereCondition.java
@@ -44,6 +44,6 @@ public class WhereCondition extends StatementNode {
   }
 
   public String toSQLString() {
-    return "WHERE " + predicate.toString();
+    return "WHERE " + predicate.getOutputSymbol();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/intermediate/IntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/intermediate/IntermediateLayer.java
index 83e2e659d17..3433787f58a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/intermediate/IntermediateLayer.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/transformation/dag/intermediate/IntermediateLayer.java
@@ -91,6 +91,6 @@ public abstract class IntermediateLayer {
 
   @Override
   public String toString() {
-    return expression.toString();
+    return expression.getExpressionString();
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
index c9a6e3b132f..35dccd383f2 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/TypeInferenceUtils.java
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.constant.SqlConstant;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.mpp.plan.analyze.ExpressionUtils;
 import org.apache.iotdb.db.mpp.plan.expression.Expression;
+import org.apache.iotdb.db.mpp.plan.expression.binary.BinaryExpression;
 import org.apache.iotdb.db.mpp.plan.expression.binary.CompareBinaryExpression;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.ConstantOperand;
 import org.apache.iotdb.db.mpp.plan.expression.leaf.TimeSeriesOperand;
@@ -227,7 +228,7 @@ public class TypeInferenceUtils {
             outputExpressionLists.add(
                 Collections.singletonList(
                     ExpressionUtils.reconstructBinaryExpression(
-                        keepExpression.getExpressionType(),
+                        (BinaryExpression) keepExpression,
                         new TimeSeriesOperand(
                             new MeasurementPath(
                                 ((TimeSeriesOperand) leftExpression).getPath(), TSDataType.INT64)),