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]