From 5e2ce8d13f0fa6fdc71adc03d54262ac5ec6fdfa Mon Sep 17 00:00:00 2001 From: yujun Date: Mon, 10 Mar 2025 09:58:48 +0800 Subject: [PATCH 1/5] alias udf skip check enable_java_udf --- .../main/java/org/apache/doris/catalog/FunctionRegistry.java | 5 ++++- .../org/apache/doris/nereids/trees/expressions/UdfTest.java | 4 ++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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..55a4959c889b99 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 @@ -27,6 +27,7 @@ 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.AliasUdfBuilder; import org.apache.doris.nereids.trees.expressions.functions.udf.UdfBuilder; import org.apache.doris.nereids.types.DataType; import org.apache.doris.qe.ConnectContext; @@ -213,7 +214,9 @@ public List findUdfBuilder(String dbName, String name) { List candidate = name2UdfBuilders.getOrDefault(scope, ImmutableMap.of()) .get(name.toLowerCase()); if (candidate != null && !candidate.isEmpty()) { - FunctionUtil.checkEnableJavaUdfForNereids(); + if (candidate.stream().anyMatch(builder -> !(builder instanceof AliasUdfBuilder))) { + FunctionUtil.checkEnableJavaUdfForNereids(); + } return candidate; } } 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 8bef5114cea95ecd9b7d6cbd8248be3f53cd62a2 Mon Sep 17 00:00:00 2001 From: yujun Date: Mon, 10 Mar 2025 17:06:18 +0800 Subject: [PATCH 2/5] fix check alias udf --- .../org/apache/doris/catalog/FunctionRegistry.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 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 55a4959c889b99..55c6ebcfd5de54 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,7 +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.AliasUdfBuilder; +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; @@ -213,8 +216,12 @@ public List findUdfBuilder(String dbName, String name) { for (String scope : scopes) { List candidate = name2UdfBuilders.getOrDefault(scope, ImmutableMap.of()) .get(name.toLowerCase()); - if (candidate != null && !candidate.isEmpty()) { - if (candidate.stream().anyMatch(builder -> !(builder instanceof AliasUdfBuilder))) { + if (candidate != null && !candidate.isEmpty() && !Config.enable_java_udf) { + candidate = candidate.stream() + .filter(fb -> !(fb instanceof JavaUdfBuilder || fb instanceof JavaUdafBuilder + || fb instanceof JavaUdtfBuilder)) + .collect(Collectors.toList()); + if (candidate.isEmpty()) { FunctionUtil.checkEnableJavaUdfForNereids(); } return candidate; From c1351acb91a85260a9e5829e1781bd4ab894116b Mon Sep 17 00:00:00 2001 From: yujun Date: Mon, 10 Mar 2025 17:21:18 +0800 Subject: [PATCH 3/5] update --- .../apache/doris/catalog/FunctionRegistry.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 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 55c6ebcfd5de54..fb3af4c2225070 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 @@ -165,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()) { + FunctionUtil.checkEnableJavaUdfForNereids(); + } + } if (candidateBuilders.size() > 1) { boolean needChooseOne = true; List signatures = Lists.newArrayListWithCapacity(candidateBuilders.size()); @@ -216,14 +225,7 @@ public List findUdfBuilder(String dbName, String name) { for (String scope : scopes) { List candidate = name2UdfBuilders.getOrDefault(scope, ImmutableMap.of()) .get(name.toLowerCase()); - if (candidate != null && !candidate.isEmpty() && !Config.enable_java_udf) { - candidate = candidate.stream() - .filter(fb -> !(fb instanceof JavaUdfBuilder || fb instanceof JavaUdafBuilder - || fb instanceof JavaUdtfBuilder)) - .collect(Collectors.toList()); - if (candidate.isEmpty()) { - FunctionUtil.checkEnableJavaUdfForNereids(); - } + if (candidate != null && !candidate.isEmpty()) { return candidate; } } From c330f99b20bb30289262a0191737ef563b561670 Mon Sep 17 00:00:00 2001 From: yujun Date: Mon, 10 Mar 2025 17:28:43 +0800 Subject: [PATCH 4/5] update --- .../main/java/org/apache/doris/catalog/FunctionRegistry.java | 2 +- .../src/main/java/org/apache/doris/catalog/FunctionUtil.java | 5 ----- 2 files changed, 1 insertion(+), 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 fb3af4c2225070..b8743695b268b6 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 @@ -171,7 +171,7 @@ public FunctionBuilder findFunctionBuilder(String dbName, String name, List a || fb instanceof JavaUdtfBuilder)) .collect(Collectors.toList()); if (candidateBuilders.isEmpty()) { - FunctionUtil.checkEnableJavaUdfForNereids(); + throw new org.apache.doris.nereids.exceptions.AnalysisException("java_udf has been disabled."); } } if (candidateBuilders.size() > 1) { 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."); - } - } } From c7e9b607ce119593b0073723a080121b6eaabb34 Mon Sep 17 00:00:00 2001 From: yujun Date: Mon, 10 Mar 2025 17:30:30 +0800 Subject: [PATCH 5/5] update --- .../main/java/org/apache/doris/catalog/FunctionRegistry.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b8743695b268b6..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 @@ -171,7 +171,7 @@ public FunctionBuilder findFunctionBuilder(String dbName, String name, List a || fb instanceof JavaUdtfBuilder)) .collect(Collectors.toList()); if (candidateBuilders.isEmpty()) { - throw new org.apache.doris.nereids.exceptions.AnalysisException("java_udf has been disabled."); + throw new AnalysisException("java_udf has been disabled."); } } if (candidateBuilders.size() > 1) {