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 38724aa8b12c08..856328759fd258 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 @@ -259,9 +259,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)");