branch-2.1: [fix](udf) alias udf skip check enable_java_udf #48843 (#48914)

This commit is contained in:
yujun
2025-03-14 11:21:01 +08:00
committed by GitHub
parent 7d521ce288
commit 2febf0de1b
3 changed files with 15 additions and 6 deletions

View File

@ -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,8 @@ import org.apache.doris.nereids.trees.expressions.functions.BoundFunction;
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.UdfBuilder;
import org.apache.doris.nereids.types.DataType;
import org.apache.doris.qe.ConnectContext;
@ -161,6 +164,14 @@ public class FunctionRegistry {
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))
.collect(Collectors.toList());
if (candidateBuilders.isEmpty()) {
throw new AnalysisException("java_udf has been disabled.");
}
}
if (candidateBuilders.size() > 1) {
boolean needChooseOne = true;
List<FunctionSignature> signatures = Lists.newArrayListWithCapacity(candidateBuilders.size());
@ -213,7 +224,6 @@ public class FunctionRegistry {
List<FunctionBuilder> candidate = name2UdfBuilders.getOrDefault(scope, ImmutableMap.of())
.get(name.toLowerCase());
if (candidate != null && !candidate.isEmpty()) {
FunctionUtil.checkEnableJavaUdfForNereids();
return candidate;
}
}

View File

@ -268,9 +268,4 @@ public class FunctionUtil {
}
}
public static void checkEnableJavaUdfForNereids() {
if (!Config.enable_java_udf) {
throw new org.apache.doris.nereids.exceptions.AnalysisException("java_udf has been disabled.");
}
}
}

View File

@ -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 @@ public class UdfTest extends TestWithFeService implements PlanPatternMatchSuppor
@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)");