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

morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 91d349c2fba [chore](expr) decouple Expr from unnecessary class (#62279)
91d349c2fba is described below

commit 91d349c2fbaa27071462309a4a8027e9a3a8a671
Author: morrySnow <[email protected]>
AuthorDate: Fri Apr 10 10:36:31 2026 +0800

    [chore](expr) decouple Expr from unnecessary class (#62279)
    
    1. ArithmeticExpr toString should not rely ExprToSqlVisitor
    2. move FunctionParams toThrift into ExprToThriftVisitor
    3. move OrderByElement toSql into AnalyticEvalNode
---
 .../org/apache/doris/analysis/ArithmeticExpr.java  |  6 ++----
 .../apache/doris/analysis/ExprToThriftVisitor.java | 17 ++++++++++++++-
 .../org/apache/doris/analysis/FunctionParams.java  | 18 ----------------
 .../org/apache/doris/analysis/OrderByElement.java  | 12 ++++-------
 .../org/apache/doris/planner/AnalyticEvalNode.java | 25 +++++++++++++++++++++-
 5 files changed, 46 insertions(+), 32 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
index 845b1d60a12..bd406ca4044 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
@@ -102,11 +102,9 @@ public class ArithmeticExpr extends Expr {
     @Override
     public String toString() {
         if (children.size() == 1) {
-            return op.toString() + " " + 
getChild(0).accept(ExprToSqlVisitor.INSTANCE, ToSqlParams.WITH_TABLE);
+            return op.toString() + " " + getChild(0);
         } else {
-            return "(" + getChild(0).accept(ExprToSqlVisitor.INSTANCE, 
ToSqlParams.WITH_TABLE)
-                    + " " + op.toString()
-                    + " " + getChild(1).accept(ExprToSqlVisitor.INSTANCE, 
ToSqlParams.WITH_TABLE) + ")";
+            return "(" + getChild(0) + " " + op.toString() + " " + getChild(1) 
+ ")";
         }
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprToThriftVisitor.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprToThriftVisitor.java
index 69a944e8efc..d52a0eb8bf0 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprToThriftVisitor.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ExprToThriftVisitor.java
@@ -26,6 +26,7 @@ import org.apache.doris.common.AnalysisException;
 import org.apache.doris.common.ErrorCode;
 import org.apache.doris.common.ErrorReport;
 import org.apache.doris.qe.ConnectContext;
+import org.apache.doris.thrift.TAggregateExpr;
 import org.apache.doris.thrift.TBoolLiteral;
 import org.apache.doris.thrift.TCaseExpr;
 import org.apache.doris.thrift.TColumnRef;
@@ -493,7 +494,7 @@ public class ExprToThriftVisitor extends ExprVisitor<Void, 
TExprNode> {
             if (aggParams == null) {
                 aggParams = expr.getFnParams();
             }
-            
msg.setAggExpr(aggParams.createTAggregateExpr(expr.isMergeAggFn()));
+            msg.setAggExpr(createTAggregateExprFromFunctionParams(aggParams, 
expr.isMergeAggFn()));
         } else {
             msg.node_type = TExprNodeType.FUNCTION_CALL;
         }
@@ -504,6 +505,20 @@ public class ExprToThriftVisitor extends ExprVisitor<Void, 
TExprNode> {
         return null;
     }
 
+    public TAggregateExpr 
createTAggregateExprFromFunctionParams(FunctionParams functionParams, boolean 
isMergeAggFn) {
+        List<TTypeDesc> paramTypes = new ArrayList<>();
+        if (functionParams.exprs() != null) {
+            for (Expr expr : functionParams.exprs()) {
+                TTypeDesc desc = expr.getType().toThrift();
+                desc.setIsNullable(expr.isNullable());
+                paramTypes.add(desc);
+            }
+        }
+        TAggregateExpr aggExpr = new TAggregateExpr(isMergeAggFn);
+        aggExpr.setParamTypes(paramTypes);
+        return aggExpr;
+    }
+
     @Override
     public Void visitLambdaFunctionCallExpr(LambdaFunctionCallExpr expr, 
TExprNode msg) {
         msg.node_type = TExprNodeType.LAMBDA_FUNCTION_CALL_EXPR;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
index 0b5b3b706f2..d47d041be1a 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionParams.java
@@ -20,13 +20,9 @@
 
 package org.apache.doris.analysis;
 
-import org.apache.doris.thrift.TAggregateExpr;
-import org.apache.doris.thrift.TTypeDesc;
-
 import com.google.common.base.Preconditions;
 import com.google.gson.annotations.SerializedName;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -74,20 +70,6 @@ public class FunctionParams {
         return new FunctionParams(isDistinct(), children);
     }
 
-    public TAggregateExpr createTAggregateExpr(boolean isMergeAggFn) {
-        List<TTypeDesc> paramTypes = new ArrayList<>();
-        if (exprs != null) {
-            for (Expr expr : exprs) {
-                TTypeDesc desc = expr.getType().toThrift();
-                desc.setIsNullable(expr.isNullable());
-                paramTypes.add(desc);
-            }
-        }
-        TAggregateExpr aggExpr = new TAggregateExpr(isMergeAggFn);
-        aggExpr.setParamTypes(paramTypes);
-        return aggExpr;
-    }
-
     public boolean isStar() {
         return isStar;
     }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/OrderByElement.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/OrderByElement.java
index caa3d3cd949..27b61d59be1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/OrderByElement.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/OrderByElement.java
@@ -75,13 +75,14 @@ public class OrderByElement {
         return result;
     }
 
-    public String toSql() {
+    @Override
+    public String toString() {
         StringBuilder strBuilder = new StringBuilder();
-        strBuilder.append(expr.accept(ExprToSqlVisitor.INSTANCE, 
ToSqlParams.WITH_TABLE));
+        strBuilder.append(expr);
         strBuilder.append(isAsc ? " ASC" : " DESC");
 
         // When ASC and NULLS LAST or DESC and NULLS FIRST, we do not print 
NULLS FIRST/LAST
-        // because it is the default behavior and we want to avoid printing 
NULLS FIRST/LAST
+        // because it is the default behavior. we want to avoid printing NULLS 
FIRST/LAST
         // whenever possible as it is incompatible with Hive (SQL 
compatibility with Hive is
         // important for views).
         if (nullsFirstParam != null) {
@@ -97,11 +98,6 @@ public class OrderByElement {
         return strBuilder.toString();
     }
 
-    @Override
-    public String toString() {
-        return toSql();
-    }
-
     @Override
     public boolean equals(Object obj) {
         if (obj == null) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java 
b/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java
index b85c82b5874..2ede7ac4e52 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/planner/AnalyticEvalNode.java
@@ -126,7 +126,7 @@ public class AnalyticEvalNode extends PlanNode {
             strings.clear();
 
             for (OrderByElement element : orderByElements) {
-                strings.add(element.toSql());
+                strings.add(orderByElementToSql(element));
             }
 
             output.append(Joiner.on(", ").join(strings));
@@ -146,6 +146,29 @@ public class AnalyticEvalNode extends PlanNode {
         return output.toString();
     }
 
+
+    private String orderByElementToSql(OrderByElement orderByElement) {
+        StringBuilder strBuilder = new StringBuilder();
+        
strBuilder.append(orderByElement.getExpr().accept(ExprToSqlVisitor.INSTANCE, 
ToSqlParams.WITH_TABLE));
+        strBuilder.append(orderByElement.getIsAsc() ? " ASC" : " DESC");
+
+        // When ASC and NULLS LAST or DESC and NULLS FIRST, we do not print 
NULLS FIRST/LAST
+        // because it is the default behavior and we want to avoid printing 
NULLS FIRST/LAST
+        // whenever possible as it is incompatible with Hive (SQL 
compatibility with Hive is
+        // important for views).
+        if (orderByElement.getNullsFirstParam() != null) {
+            if (orderByElement.getIsAsc() && 
orderByElement.getNullsFirstParam()) {
+                // If ascending, nulls are last by default, so only add if 
nulls first.
+                strBuilder.append(" NULLS FIRST");
+            } else if (!orderByElement.getIsAsc() && 
!orderByElement.getNullsFirstParam()) {
+                // If descending, nulls are first by default, so only add if 
nulls last.
+                strBuilder.append(" NULLS LAST");
+            }
+        }
+
+        return strBuilder.toString();
+    }
+
     /**
      * If `partitionExprs` is empty, the result must be output by single 
instance.
      *


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to