This is an automated email from the ASF dual-hosted git repository.

liyang pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit b7615c56bb618fc1133d156d12df9fd00ea04a2d
Author: Mingming Ge <7mmi...@gmail.com>
AuthorDate: Mon Jul 10 14:10:51 2023 +0800

    KYLIN-5765 Optimization of registering udf operators
---
 .../kylin/query/util/RexToTblColRefTranslator.java | 31 +++++++++++++---------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git 
a/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
 
b/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
index 9ce69bc03d..bc5d78109a 100644
--- 
a/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
+++ 
b/src/query-common/src/main/java/org/apache/kylin/query/util/RexToTblColRefTranslator.java
@@ -287,6 +287,8 @@ public class RexToTblColRefTranslator {
 
         private final Map<String, SqlNode> rexToSqlMap;
 
+        private static final Set<String> REGISTERED_UDFS = registerUdfs();
+
         public OLAPRexSqlStandardConvertletTable(RexCall call, Map<String, 
SqlNode> rexToSqlMap) {
             super();
             this.rexToSqlMap = rexToSqlMap;
@@ -303,18 +305,7 @@ public class RexToTblColRefTranslator {
         }
 
         private void registerUdfOperator(RexCall call) {
-            Set<String> udfs = Sets.newHashSet();
-            KylinConfig.getInstanceFromEnv().getUDFs().forEach((key, value) -> 
{
-                try {
-                    val methods = Class.forName(value).getMethods();
-                    for (Method method : methods) {
-                        udfs.add(method.getName().toLowerCase(Locale.ROOT));
-                    }
-                } catch (Exception e) {
-                    log.error("registerUdfOperator not found method for :", e);
-                }
-            });
-            if 
(udfs.contains(call.getOperator().toString().toLowerCase(Locale.ROOT))) {
+            if 
(REGISTERED_UDFS.contains(call.getOperator().toString().toLowerCase(Locale.ROOT)))
 {
                 SqlOperator operator = call.getOperator();
                 this.registerEquivOp(operator);
             }
@@ -338,6 +329,22 @@ public class RexToTblColRefTranslator {
             }
         }
 
+        private static Set<String> registerUdfs() {
+            Set<String> udfs = Sets.newHashSet();
+            KylinConfig.getInstanceFromEnv().getUDFs().forEach((key, value) -> 
{
+                try {
+                    val methods = Class.forName(value).getMethods();
+                    for (Method method : methods) {
+                        udfs.add(method.getName().toLowerCase(Locale.ROOT));
+                    }
+                } catch (Exception e) {
+                    log.error("registerUdfOperator not found method for :", e);
+                }
+            });
+            
+            return udfs;
+        }
+
         private Map<TimeUnit, SqlDatePartFunction> initTimeUnitFunctionMap() {
             Map<TimeUnit, SqlDatePartFunction> rst = Maps.newHashMap();
             rst.putIfAbsent(TimeUnit.YEAR, SqlStdOperatorTable.YEAR);

Reply via email to