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 96d2e3394a2 [opt](meta) Improve the performance of getting expr name 
(#26341)
96d2e3394a2 is described below

commit 96d2e3394a23fd115f706b38fa5b851787b85c05
Author: seawinde <[email protected]>
AuthorDate: Wed Nov 8 17:14:15 2023 +0800

    [opt](meta) Improve the performance of getting expr name (#26341)
    
    CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, name)
    It's time-consuming when call many times. So lazy call when necessary
---
 .../src/main/java/org/apache/doris/analysis/AnalyticExpr.java  |  8 ++++++--
 .../src/main/java/org/apache/doris/analysis/ColumnRefExpr.java |  9 +++++++--
 fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java   | 10 +++++++---
 .../main/java/org/apache/doris/analysis/FunctionCallExpr.java  |  7 +++++--
 .../src/main/java/org/apache/doris/analysis/LiteralExpr.java   |  8 ++++++--
 .../src/main/java/org/apache/doris/analysis/SlotRef.java       |  8 ++++++--
 .../main/java/org/apache/doris/analysis/VirtualSlotRef.java    |  2 +-
 .../org/apache/doris/nereids/analyzer/UnboundFunction.java     |  6 +++++-
 .../doris/nereids/trees/expressions/AggregateExpression.java   |  6 +++++-
 .../doris/nereids/trees/expressions/AssertNumRowsElement.java  |  6 +++++-
 .../org/apache/doris/nereids/trees/expressions/Expression.java |  8 ++++++--
 .../doris/nereids/trees/expressions/NamedExpression.java       |  6 +++++-
 .../apache/doris/nereids/trees/expressions/SubqueryExpr.java   |  5 ++++-
 .../nereids/trees/expressions/functions/BoundFunction.java     |  6 +++++-
 .../doris/nereids/trees/expressions/literal/Literal.java       |  6 +++++-
 15 files changed, 78 insertions(+), 23 deletions(-)

diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
index 37b4684f156..39c428f7fa5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/AnalyticExpr.java
@@ -44,6 +44,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Representation of an analytic function call with OVER clause.
@@ -147,8 +148,11 @@ public class AnalyticExpr extends Expr {
     }
 
     @Override
-    protected String getExprName() {
-        return Utils.normalizeName(getFnCall().getExprName(), 
DEFAULT_EXPR_NAME);
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(getFnCall().getExprName(), DEFAULT_EXPR_NAME));
+        }
+        return this.exprName.get();
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnRefExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnRefExpr.java
index d980a670760..5a47ab69402 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnRefExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ColumnRefExpr.java
@@ -26,6 +26,8 @@ import org.apache.doris.thrift.TExprNodeType;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.util.Optional;
+
 public class ColumnRefExpr extends Expr {
     private static final Logger LOG = 
LogManager.getLogger(ColumnRefExpr.class);
     private String columnName;
@@ -55,8 +57,11 @@ public class ColumnRefExpr extends Expr {
     }
 
     @Override
-    protected String getExprName() {
-        return Utils.normalizeName(getName(), DEFAULT_EXPR_NAME);
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of(Utils.normalizeName(getName(), 
DEFAULT_EXPR_NAME));
+        }
+        return this.exprName.get();
     }
 
     public void setName(String name) {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
index 5b7479ae2d4..09848e3d186 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Expr.java
@@ -69,6 +69,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -296,7 +297,7 @@ public abstract class Expr extends TreeNode<Expr> 
implements ParseNode, Cloneabl
     // Flag to indicate whether to wrap this expr's toSql() in parenthesis. 
Set by parser.
     // Needed for properly capturing expr precedences in the SQL string.
     protected boolean printSqlInParens = false;
-    protected final String exprName = 
Utils.normalizeName(this.getClass().getSimpleName(), DEFAULT_EXPR_NAME);
+    protected Optional<String> exprName = Optional.empty();
 
     protected Expr() {
         super();
@@ -340,8 +341,11 @@ public abstract class Expr extends TreeNode<Expr> 
implements ParseNode, Cloneabl
 
     // Name of expr, this is used by generating column name automatically when 
there is no
     // alias or is not slotRef
-    protected String getExprName() {
-        return this.exprName;
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(this.getClass().getSimpleName(), 
DEFAULT_EXPR_NAME));
+        }
+        return this.exprName.get();
     }
 
     public Type getType() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 6fbb35aac6d..12e471979d5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -313,8 +313,11 @@ public class FunctionCallExpr extends Expr {
     }
 
     @Override
-    protected String getExprName() {
-        return Utils.normalizeName(this.getFnName().getFunction(), 
DEFAULT_EXPR_NAME);
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(this.getFnName().getFunction(), 
DEFAULT_EXPR_NAME));
+        }
+        return this.exprName.get();
     }
 
     public FunctionCallExpr(String functionName, List<Expr> params) {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
index bbeffe7366d..7047a8d900f 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/LiteralExpr.java
@@ -36,6 +36,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.List;
+import java.util.Optional;
 
 public abstract class LiteralExpr extends Expr implements 
Comparable<LiteralExpr> {
     private static final Logger LOG = LogManager.getLogger(LiteralExpr.class);
@@ -365,8 +366,11 @@ public abstract class LiteralExpr extends Expr implements 
Comparable<LiteralExpr
     }
 
     @Override
-    protected String getExprName() {
-        return "literal";
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of("literal");
+        }
+        return this.exprName.get();
     }
 
     // Port from mysql get_param_length
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
index 9b664d8b42a..ec5221bf6ef 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/SlotRef.java
@@ -45,6 +45,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -307,8 +308,11 @@ public class SlotRef extends Expr {
     }
 
     @Override
-    protected String getExprName() {
-        return toColumnLabel();
+    public String getExprName() {
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of(toColumnLabel());
+        }
+        return this.exprName.get();
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/VirtualSlotRef.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/VirtualSlotRef.java
index 07eba56652a..60cf3577d72 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/VirtualSlotRef.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/VirtualSlotRef.java
@@ -123,7 +123,7 @@ public class VirtualSlotRef extends SlotRef {
     }
 
     @Override
-    protected String getExprName() {
+    public String getExprName() {
         return super.getExprName();
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
index d73474906a9..4934d8ddc4e 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/analyzer/UnboundFunction.java
@@ -28,6 +28,7 @@ import com.google.common.base.Joiner;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
@@ -63,7 +64,10 @@ public class UnboundFunction extends Function implements 
Unbound, PropagateNulla
 
     @Override
     public String getExpressionName() {
-        return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of(Utils.normalizeName(getName(), 
DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 
     public String getDbName() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
index d097efd7aed..2e20dd05180 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AggregateExpression.java
@@ -30,6 +30,7 @@ import com.google.common.base.Preconditions;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * AggregateExpression.
@@ -120,7 +121,10 @@ public class AggregateExpression extends Expression 
implements UnaryExpression {
 
     @Override
     public String getExpressionName() {
-        return Utils.normalizeName(function.getName(), 
DEFAULT_EXPRESSION_NAME);
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(function.getName(), DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
index 9b2261e73bc..a80baaf68dd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/AssertNumRowsElement.java
@@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableList;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * Number of rows returned by inspection in subquery.
@@ -89,7 +90,10 @@ public class AssertNumRowsElement extends Expression 
implements LeafExpression,
 
     @Override
     public String getExpressionName() {
-        return assertion.name().toLowerCase();
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(assertion.name().toLowerCase(), 
DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
index 2a432aaa80b..a10de9282b2 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
@@ -44,6 +44,7 @@ import org.apache.commons.lang3.StringUtils;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -53,7 +54,7 @@ public abstract class Expression extends 
AbstractTreeNode<Expression> implements
     public static final String DEFAULT_EXPRESSION_NAME = "expression";
     // Mask this expression is generated by rule, should be removed.
     public boolean isGeneratedIsNotNull = false;
-    protected final String exprName = 
Utils.normalizeName(this.getClass().getSimpleName(), DEFAULT_EXPRESSION_NAME);
+    protected Optional<String> exprName = Optional.empty();
     private final int depth;
     private final int width;
 
@@ -97,7 +98,10 @@ public abstract class Expression extends 
AbstractTreeNode<Expression> implements
     // Name of expr, this is used by generating column name automatically when 
there is no
     // alias
     public String getExpressionName() {
-        return this.exprName;
+        if (!this.exprName.isPresent()) {
+            this.exprName = 
Optional.of(Utils.normalizeName(this.getClass().getSimpleName(), 
DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 
     /**
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
index 2854704b922..d03669234cd 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/NamedExpression.java
@@ -21,6 +21,7 @@ import org.apache.doris.nereids.exceptions.UnboundException;
 import org.apache.doris.nereids.util.Utils;
 
 import java.util.List;
+import java.util.Optional;
 
 /**
  * Expression in Nereids that having name.
@@ -59,6 +60,9 @@ public abstract class NamedExpression extends Expression {
 
     @Override
     public String getExpressionName() {
-        return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of(Utils.normalizeName(getName(), 
DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 }
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
index d6876873ed3..451fcad677b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java
@@ -86,7 +86,10 @@ public abstract class SubqueryExpr extends Expression 
implements LeafExpression
 
     @Override
     public String getExpressionName() {
-        return "subquery";
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of("subquery");
+        }
+        return this.exprName.get();
     }
 
     @Override
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
index e3970161c75..d2089a8d32b 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/BoundFunction.java
@@ -27,6 +27,7 @@ import com.google.common.base.Suppliers;
 
 import java.util.List;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
@@ -57,7 +58,10 @@ public abstract class BoundFunction extends Function 
implements ComputeSignature
 
     @Override
     public String getExpressionName() {
-        return Utils.normalizeName(getName(), DEFAULT_EXPRESSION_NAME);
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of(Utils.normalizeName(getName(), 
DEFAULT_EXPRESSION_NAME));
+        }
+        return this.exprName.get();
     }
 
     public FunctionSignature getSignature() {
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
index c83061f1959..fd2b371ea72 100644
--- 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
+++ 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/literal/Literal.java
@@ -41,6 +41,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.util.Locale;
 import java.util.Objects;
+import java.util.Optional;
 
 /**
  * All data type literal expression in Nereids.
@@ -133,7 +134,10 @@ public abstract class Literal extends Expression 
implements LeafExpression, Comp
 
     @Override
     public String getExpressionName() {
-        return "literal";
+        if (!this.exprName.isPresent()) {
+            this.exprName = Optional.of("literal");
+        }
+        return this.exprName.get();
     }
 
     @Override


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

Reply via email to