From 5be9e3c4914ecd53c3d2f982b29d78500cdc817d Mon Sep 17 00:00:00 2001 From: yujun Date: Tue, 11 Mar 2025 12:19:42 +0800 Subject: [PATCH 1/2] [fix](udf) alias udf skip check enable_java_udf (#48843) if set Config.enable_java_udf = false, execute fe alias function will throw exception: ``` MySQL root@127.0.0.1:(none)> create global alias function foo3(STRING) with parameter(s) as concat(s, "hello"); Query OK, 0 rows affected Time: 7.590s MySQL root@127.0.0.1:(none)> select foo3("tt"); (1105, 'errCode = 2, detailMessage = java_udf has been disabled.') ``` fix this, alias function no check enable_java_udf. --- .../org/apache/doris/catalog/FunctionRegistry.java | 14 +++++++++++++- .../org/apache/doris/catalog/FunctionUtil.java | 5 ----- .../doris/nereids/trees/expressions/UdfTest.java | 4 ++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java index 6adf27f8dc3709..dc11b5d02bed10 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java @@ -17,6 +17,7 @@ package org.apache.doris.catalog; +import org.apache.doris.common.Config; import org.apache.doris.datasource.InternalCatalog; import org.apache.doris.mysql.privilege.PrivPredicate; import org.apache.doris.nereids.annotation.Developing; @@ -27,6 +28,9 @@ import org.apache.doris.nereids.trees.expressions.functions.BuiltinFunctionBuilder; import org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature; import org.apache.doris.nereids.trees.expressions.functions.FunctionBuilder; +import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdafBuilder; +import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdfBuilder; +import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdtfBuilder; import org.apache.doris.nereids.trees.expressions.functions.udf.UdfBuilder; import org.apache.doris.nereids.types.DataType; import org.apache.doris.qe.ConnectContext; @@ -161,6 +165,15 @@ public FunctionBuilder findFunctionBuilder(String dbName, String name, List a throw new AnalysisException("Can not found function '" + qualifiedName + "' which has " + arity + " arity. Candidate functions are: " + candidateHints); } + if (!Config.enable_java_udf) { + candidateBuilders = candidateBuilders.stream() + .filter(fb -> !(fb instanceof JavaUdfBuilder || fb instanceof JavaUdafBuilder + || fb instanceof JavaUdtfBuilder)) + .collect(Collectors.toList()); + if (candidateBuilders.isEmpty()) { + throw new AnalysisException("java_udf has been disabled."); + } + } if (candidateBuilders.size() > 1) { boolean needChooseOne = true; List signatures = Lists.newArrayListWithCapacity(candidateBuilders.size()); @@ -213,7 +226,6 @@ public List findUdfBuilder(String dbName, String name) { List candidate = name2UdfBuilders.getOrDefault(scope, ImmutableMap.of()) .get(name.toLowerCase()); if (candidate != null && !candidate.isEmpty()) { - FunctionUtil.checkEnableJavaUdfForNereids(); return candidate; } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java index e6c7e073579bdc..2846c51ecf6956 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionUtil.java @@ -268,9 +268,4 @@ public static void checkEnableJavaUdf() throws AnalysisException { } } - public static void checkEnableJavaUdfForNereids() { - if (!Config.enable_java_udf) { - throw new org.apache.doris.nereids.exceptions.AnalysisException("java_udf has been disabled."); - } - } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java index 138346420919b4..635a3300dfef00 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/trees/expressions/UdfTest.java @@ -18,6 +18,7 @@ package org.apache.doris.nereids.trees.expressions; import org.apache.doris.catalog.Env; +import org.apache.doris.common.Config; import org.apache.doris.nereids.trees.expressions.functions.scalar.DateFormat; import org.apache.doris.nereids.trees.expressions.functions.scalar.DateTrunc; import org.apache.doris.nereids.trees.expressions.functions.scalar.DayOfMonth; @@ -59,10 +60,13 @@ protected void runBeforeAll() throws Exception { @Override protected void runBeforeEach() throws Exception { connectContext.setDatabase("test"); + Config.enable_java_udf = true; } @Test public void testSimpleAliasFunction() throws Exception { + // alias udf should not check java_udf + Config.enable_java_udf = false; createFunction("create global alias function f(int) with parameter(n) as hours_add(now(3), n)"); createFunction("create alias function f(int) with parameter(n) as hours_sub(now(3), n)"); From da6650d43272abe5a4c0b9e159ab5ec674b419be Mon Sep 17 00:00:00 2001 From: yujun Date: Tue, 11 Mar 2025 14:30:26 +0800 Subject: [PATCH 2/2] fix compile --- .../main/java/org/apache/doris/catalog/FunctionRegistry.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java index dc11b5d02bed10..ee10a6cacf7c17 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionRegistry.java @@ -30,7 +30,6 @@ import org.apache.doris.nereids.trees.expressions.functions.FunctionBuilder; import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdafBuilder; import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdfBuilder; -import org.apache.doris.nereids.trees.expressions.functions.udf.JavaUdtfBuilder; import org.apache.doris.nereids.trees.expressions.functions.udf.UdfBuilder; import org.apache.doris.nereids.types.DataType; import org.apache.doris.qe.ConnectContext; @@ -167,8 +166,7 @@ public FunctionBuilder findFunctionBuilder(String dbName, String name, List a } if (!Config.enable_java_udf) { candidateBuilders = candidateBuilders.stream() - .filter(fb -> !(fb instanceof JavaUdfBuilder || fb instanceof JavaUdafBuilder - || fb instanceof JavaUdtfBuilder)) + .filter(fb -> !(fb instanceof JavaUdfBuilder || fb instanceof JavaUdafBuilder)) .collect(Collectors.toList()); if (candidateBuilders.isEmpty()) { throw new AnalysisException("java_udf has been disabled.");