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 86bc5cd9bd0 [clean](function) remove FunctionSet class (#61378)
86bc5cd9bd0 is described below
commit 86bc5cd9bd0a4e93512b27c9c32c0db8e9bc9577
Author: morrySnow <[email protected]>
AuthorDate: Tue Mar 17 19:53:25 2026 +0800
[clean](function) remove FunctionSet class (#61378)
---
.../org/apache/doris/analysis/DataDescription.java | 3 +-
.../main/java/org/apache/doris/catalog/Env.java | 10 --
.../java/org/apache/doris/catalog/FunctionSet.java | 122 ---------------------
.../doris/nereids/load/NereidsDataDescription.java | 5 +-
.../nereids/load/NereidsLoadScanProvider.java | 17 +--
.../expressions/functions/agg/LinearHistogram.java | 13 +--
.../planner/normalize/ExprNormalizeVisitor.java | 36 +++++-
.../org/apache/doris/qe/OlapQueryCacheTest.java | 4 -
8 files changed, 48 insertions(+), 162 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/DataDescription.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/DataDescription.java
index ace1bc5f2be..f65df25d351 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/DataDescription.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/DataDescription.java
@@ -21,7 +21,6 @@ import org.apache.doris.analysis.BinaryPredicate.Operator;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.info.PartitionNamesInfo;
import org.apache.doris.common.AnalysisException;
@@ -92,7 +91,7 @@ public class DataDescription {
"md5sum",
"replace_value",
"now",
- FunctionSet.HLL_HASH,
+ "hll_hash",
"substitute");
private static final String DEFAULT_READ_JSON_BY_LINE = "true";
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
index 1b49e786176..d6aadff5dcc 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Env.java
@@ -462,7 +462,6 @@ public class Env {
private ColocateTableIndex colocateTableIndex;
private CatalogRecycleBin recycleBin;
- private FunctionSet functionSet;
// for nereids
private FunctionRegistry functionRegistry;
@@ -761,7 +760,6 @@ public class Env {
this.tabletInvertedIndex =
EnvFactory.getInstance().createTabletInvertedIndex();
this.colocateTableIndex = new ColocateTableIndex();
this.recycleBin = new CatalogRecycleBin();
- this.functionSet = new FunctionSet();
this.functionRegistry = new FunctionRegistry();
@@ -6516,14 +6514,6 @@ public class Env {
return functionRegistry;
}
- public boolean isNondeterministicFunction(String funcName) {
- return functionSet.isNondeterministicFunction(funcName);
- }
-
- public boolean isNullResultWithOneNullParamFunction(String funcName) {
- return functionSet.isNullResultWithOneNullParamFunctions(funcName);
- }
-
@Deprecated
public long loadCluster(DataInputStream dis, long checksum) throws
IOException, DdlException {
return getInternalCatalog().loadCluster(dis, checksum);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
deleted file mode 100644
index ad792422a5f..00000000000
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java
+++ /dev/null
@@ -1,122 +0,0 @@
-// 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.doris.catalog;
-
-import com.google.common.collect.ImmutableSet;
-
-import java.util.Set;
-
-public class FunctionSet<T> {
-
- // For most build-in functions, it will return NullLiteral when params
contain NullLiteral.
- // But a few functions need to handle NullLiteral differently, such as
"if". It need to add
- // an attribute to LiteralExpr to mark null and check the attribute to
decide whether to
- // replace the result with NullLiteral when function finished. It leaves
to be realized.
-
- private ImmutableSet<String> nullResultWithOneNullParamFunctions;
-
- // Including now(), curdate(), etc..
- private ImmutableSet<String> nondeterministicFunctions;
-
- public FunctionSet() {
- }
-
- public boolean isNondeterministicFunction(String funcName) {
- return nondeterministicFunctions.contains(funcName);
- }
-
- public boolean isNullResultWithOneNullParamFunctions(String funcName) {
- return nullResultWithOneNullParamFunctions.contains(funcName);
- }
-
- public static final Set<String> nonDeterministicFunctions =
- ImmutableSet.<String>builder()
- .add("RAND")
- .add("RANDOM")
- .add("RANDOM_BYTES")
- .add("CONNECTION_ID")
- .add("DATABASE")
- .add("USER")
- .add("UUID")
- .add("CURRENT_USER")
- .add("UUID_NUMERIC")
- .build();
-
- public static final Set<String> nonDeterministicTimeFunctions =
- ImmutableSet.<String>builder()
- .add("NOW")
- .add("CURDATE")
- .add("CURRENT_DATE")
- .add("UTC_TIMESTAMP")
- .add("CURTIME")
- .add("CURRENT_TIMESTAMP")
- .add("CURRENT_TIME")
- .add("UNIX_TIMESTAMP")
- .add()
- .build();
-
- public static final String HLL_HASH = "hll_hash";
- public static final String HLL_UNION = "hll_union";
- public static final String HLL_UNION_AGG = "hll_union_agg";
- public static final String HLL_RAW_AGG = "hll_raw_agg";
- public static final String HLL_FROM_BASE64 = "hll_from_base64";
-
- public static final String TO_BITMAP = "to_bitmap";
- public static final String BITMAP_UNION = "bitmap_union";
- public static final String BITMAP_UNION_COUNT = "bitmap_union_count";
- public static final String BITMAP_UNION_INT = "bitmap_union_int";
- public static final String INTERSECT_COUNT = "intersect_count";
- public static final String BITMAP_INTERSECT = "bitmap_intersect";
- public static final String ORTHOGONAL_BITMAP_INTERSECT =
"orthogonal_bitmap_intersect";
- public static final String ORTHOGONAL_BITMAP_INTERSECT_COUNT =
"orthogonal_bitmap_intersect_count";
- public static final String ORTHOGONAL_BITMAP_UNION_COUNT =
"orthogonal_bitmap_union_count";
- public static final String NDV = "ndv";
- public static final String ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT =
"orthogonal_bitmap_expr_calculate_count";
- public static final String ORTHOGONAL_BITMAP_EXPR_CALCULATE =
"orthogonal_bitmap_expr_calculate";
-
- //TODO(weixiang): is quantile_percent can be replaced by approx_percentile?
- public static final String COLLECT_LIST = "collect_list";
- public static final String COLLECT_SET = "collect_set";
- public static final String HISTOGRAM = "histogram";
- public static final String LINEAR_HISTOGRAM = "linear_histogram";
- public static final String MAP_AGG = "map_agg";
-
- public static final String BITMAP_AGG = "bitmap_agg";
-
- public static final String COUNT = "count";
-
- public static final String REGR_INTERCEPT = "regr_intercept";
-
- public static final String REGR_SLOPE = "regr_slope";
-
- public static final String REGR_SXX = "regr_sxx";
-
- public static final String REGR_SXY = "regr_sxy";
-
- public static final String REGR_SYY = "regr_syy";
-
- public static final String SEQUENCE_COUNT = "sequence_count";
-
- public static final String GROUP_ARRAY_INTERSECT = "group_array_intersect";
-
- public static final String ARRAY_AGG = "array_agg";
-
- public static final String SUM0 = "sum0";
-
- public static final String MULTI_DISTINCT_SUM0 = "multi_distinct_sum0";
-}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsDataDescription.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsDataDescription.java
index 3350ed735b9..1f47be82ae8 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsDataDescription.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsDataDescription.java
@@ -26,7 +26,6 @@ import org.apache.doris.analysis.Separator;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.info.PartitionNamesInfo;
@@ -104,7 +103,7 @@ public class NereidsDataDescription {
"md5sum",
"replace_value",
"now",
- FunctionSet.HLL_HASH,
+ "hll_hash",
"substitute");
private static final String DEFAULT_READ_JSON_BY_LINE = "true";
@@ -497,7 +496,7 @@ public class NereidsDataDescription {
validateMd5sum(args, columnNameMap);
} else if (functionName.equalsIgnoreCase("replace_value")) {
validateReplaceValue(args, mappingColumn);
- } else if (functionName.equalsIgnoreCase(FunctionSet.HLL_HASH)) {
+ } else if (functionName.equalsIgnoreCase("hll_hash")) {
validateHllHash(args, columnNameMap);
} else if (functionName.equalsIgnoreCase("now")) {
validateNowFunction(mappingColumn);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadScanProvider.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadScanProvider.java
index 57a79f5ac3b..ee8ee875e06 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadScanProvider.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/load/NereidsLoadScanProvider.java
@@ -19,7 +19,6 @@ package org.apache.doris.nereids.load;
import org.apache.doris.catalog.AggregateType;
import org.apache.doris.catalog.Column;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.OlapTable;
import org.apache.doris.catalog.PrimitiveType;
import org.apache.doris.catalog.Table;
@@ -72,6 +71,8 @@ import java.util.TreeSet;
*/
public class NereidsLoadScanProvider {
private static final Logger LOG =
LogManager.getLogger(NereidsLoadScanProvider.class);
+ private static final String HLL_HASH = "hll_hash";
+ private static final String HLL_FROM_BASE64 = "hll_from_base64";
private NereidsFileGroupInfo fileGroupInfo;
private Set<String> partialUpdateInputColumns;
@@ -314,17 +315,17 @@ public class NereidsLoadScanProvider {
// check hll_hash
if (column.getDataType() == PrimitiveType.HLL) {
if (!(expression instanceof UnboundFunction)) {
- throw new AnalysisException("HLL column must use " +
FunctionSet.HLL_HASH + " function, like "
- + columnName + "=" + FunctionSet.HLL_HASH +
"(xxx)");
+ throw new AnalysisException("HLL column must use " +
HLL_HASH + " function, like "
+ + columnName + "=" + HLL_HASH + "(xxx)");
}
UnboundFunction function = (UnboundFunction) expression;
String functionName = function.getName();
- if (!functionName.equalsIgnoreCase(FunctionSet.HLL_HASH)
+ if (!functionName.equalsIgnoreCase(HLL_HASH)
&& !functionName.equalsIgnoreCase("hll_empty")
- &&
!functionName.equalsIgnoreCase(FunctionSet.HLL_FROM_BASE64)) {
- throw new AnalysisException("HLL column must use " +
FunctionSet.HLL_HASH + " function, like "
- + columnName + "=" + FunctionSet.HLL_HASH +
"(xxx) or "
- + columnName + "=" +
FunctionSet.HLL_FROM_BASE64 + "(xxx) or "
+ &&
!functionName.equalsIgnoreCase(HLL_FROM_BASE64)) {
+ throw new AnalysisException("HLL column must use " +
HLL_HASH + " function, like "
+ + columnName + "=" + HLL_HASH + "(xxx) or "
+ + columnName + "=" + HLL_FROM_BASE64 + "(xxx)
or "
+ columnName + "=hll_empty()");
}
}
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
index 97b42c73464..e23620e38e7 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/LinearHistogram.java
@@ -17,7 +17,6 @@
package org.apache.doris.nereids.trees.expressions.functions.agg;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
@@ -46,23 +45,19 @@ public class LinearHistogram extends
NotNullableAggregateFunction implements Exp
);
public LinearHistogram(Expression arg0, Expression arg1) {
- super(FunctionSet.LINEAR_HISTOGRAM, arg0, arg1);
+ super("linear_histogram", arg0, arg1);
}
public LinearHistogram(Expression arg0, Expression arg1, Expression arg2) {
- super(FunctionSet.LINEAR_HISTOGRAM, arg0, arg1, arg2);
- }
-
- private LinearHistogram(boolean distinct, List<Expression> args) {
- super(FunctionSet.LINEAR_HISTOGRAM, distinct, args);
+ super("linear_histogram", arg0, arg1, arg2);
}
public LinearHistogram(boolean distinct, Expression arg0, Expression arg1)
{
- super(FunctionSet.LINEAR_HISTOGRAM, distinct, arg0, arg1);
+ super("linear_histogram", distinct, arg0, arg1);
}
public LinearHistogram(boolean distinct, Expression arg0, Expression arg1,
Expression arg2) {
- super(FunctionSet.LINEAR_HISTOGRAM, distinct, arg0, arg1, arg2);
+ super("linear_histogram", distinct, arg0, arg1, arg2);
}
/** constructor for withChildren and reuse signature */
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/planner/normalize/ExprNormalizeVisitor.java
b/fe/fe-core/src/main/java/org/apache/doris/planner/normalize/ExprNormalizeVisitor.java
index 65d5d819654..084866f9c9b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/planner/normalize/ExprNormalizeVisitor.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/planner/normalize/ExprNormalizeVisitor.java
@@ -23,12 +23,15 @@ import org.apache.doris.analysis.ExprVisitor;
import org.apache.doris.analysis.FunctionCallExpr;
import org.apache.doris.analysis.LambdaFunctionCallExpr;
import org.apache.doris.analysis.SlotRef;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.thrift.TExpr;
import org.apache.doris.thrift.TExprNode;
import org.apache.doris.thrift.TExprNodeType;
import org.apache.doris.thrift.TSlotRef;
+import com.google.common.collect.ImmutableSet;
+
+import java.util.Set;
+
/**
* Visitor that produces a normalized {@link TExprNode} for query cache
support.
* Normalization maps slot IDs and tuple IDs through the {@link Normalizer} so
that
@@ -78,9 +81,8 @@ public class ExprNormalizeVisitor extends ExprVisitor<Void,
TExprNode> {
@Override
public Void visitFunctionCallExpr(FunctionCallExpr expr, TExprNode msg) {
String functionName = expr.getFnName().getFunction().toUpperCase();
- if (FunctionSet.nonDeterministicFunctions.contains(functionName)
- || "NOW".equals(functionName)
- ||
(FunctionSet.nonDeterministicTimeFunctions.contains(functionName)
+ if (nonDeterministicFunctions.contains(functionName)
+ || (nonDeterministicTimeFunctions.contains(functionName)
&& expr.getChildren().isEmpty())) {
throw new IllegalStateException("Can not normalize non
deterministic functions");
}
@@ -96,4 +98,30 @@ public class ExprNormalizeVisitor extends ExprVisitor<Void,
TExprNode> {
// All other visitXxx methods inherit from ExprVisitor and call visit(),
// which delegates to ExprToThriftVisitor.INSTANCE.
+
+ private static final Set<String> nonDeterministicFunctions =
+ ImmutableSet.<String>builder()
+ .add("RAND")
+ .add("RANDOM")
+ .add("RANDOM_BYTES")
+ .add("CONNECTION_ID")
+ .add("DATABASE")
+ .add("USER")
+ .add("UUID")
+ .add("CURRENT_USER")
+ .add("UUID_NUMERIC")
+ .build();
+
+ private static final Set<String> nonDeterministicTimeFunctions =
+ ImmutableSet.<String>builder()
+ .add("NOW")
+ .add("CURDATE")
+ .add("CURRENT_DATE")
+ .add("UTC_TIMESTAMP")
+ .add("CURTIME")
+ .add("CURRENT_TIMESTAMP")
+ .add("CURRENT_TIME")
+ .add("UNIX_TIMESTAMP")
+ .add()
+ .build();
}
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
index e897ddc0f15..eb065cbffd6 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/qe/OlapQueryCacheTest.java
@@ -26,7 +26,6 @@ import org.apache.doris.analysis.UserIdentity;
import org.apache.doris.catalog.Column;
import org.apache.doris.catalog.Database;
import org.apache.doris.catalog.Env;
-import org.apache.doris.catalog.FunctionSet;
import org.apache.doris.catalog.KeysType;
import org.apache.doris.catalog.MaterializedIndex;
import org.apache.doris.catalog.MaterializedIndex.IndexState;
@@ -149,9 +148,6 @@ public class OlapQueryCacheTest {
}
};
- FunctionSet fs = new FunctionSet();
- Deencapsulation.setField(env, "functionSet", fs);
-
channel.reset();
new Expectations(channel) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]