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

journey pushed a commit to branch 1.3.2-release
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/1.3.2-release by this push:
     new c832248  [Fix-3463][api]Fixed that run the sql task will be failure 
after rename the udf resource (#3482)
c832248 is described below

commit c8322482bbd021a89c407809abfcdd50cf3b2dc6
Author: lgcareer <18610854...@163.com>
AuthorDate: Thu Aug 13 16:19:11 2020 +0800

    [Fix-3463][api]Fixed that run the sql task will be failure after rename the 
udf resource (#3482)
---
 .../api/service/ResourcesService.java              | 26 +++++++++++++++++++++-
 .../dolphinscheduler/dao/mapper/UdfFuncMapper.java |  9 +++++++-
 .../dolphinscheduler/dao/mapper/UdfFuncMapper.xml  | 13 +++++++++++
 .../dao/mapper/UdfFuncMapperTest.java              | 13 +++++++++++
 4 files changed, 59 insertions(+), 2 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
index e0ee711..e1a9c85 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ResourcesService.java
@@ -436,14 +436,38 @@ public class ResourcesService extends BaseService {
                 if (CollectionUtils.isNotEmpty(childrenResource)) {
                     String matcherFullName = 
Matcher.quoteReplacement(fullName);
                     List<Resource> childResourceList = new ArrayList<>();
-                    List<Resource> resourceList = 
resourcesMapper.listResourceByIds(childrenResource.toArray(new 
Integer[childrenResource.size()]));
+                    Integer[] childResIdArray = childrenResource.toArray(new 
Integer[childrenResource.size()]);
+                    List<Resource> resourceList = 
resourcesMapper.listResourceByIds(childResIdArray);
                     childResourceList = resourceList.stream().map(t -> {
                         
t.setFullName(t.getFullName().replaceFirst(originFullName, matcherFullName));
                         t.setUpdateTime(now);
                         return t;
                     }).collect(Collectors.toList());
                     resourcesMapper.batchUpdateResource(childResourceList);
+
+                    if (ResourceType.UDF.equals(resource.getType())) {
+                        List<UdfFunc> udfFuncs = 
udfFunctionMapper.listUdfByResourceId(childResIdArray);
+                        if (CollectionUtils.isNotEmpty(udfFuncs)) {
+                            udfFuncs = udfFuncs.stream().map(t -> {
+                                
t.setResourceName(t.getResourceName().replaceFirst(originFullName, 
matcherFullName));
+                                t.setUpdateTime(now);
+                                return t;
+                            }).collect(Collectors.toList());
+                            udfFunctionMapper.batchUpdateUdfFunc(udfFuncs);
+                        }
+                    }
                 }
+            } else if (ResourceType.UDF.equals(resource.getType())) {
+                List<UdfFunc> udfFuncs = 
udfFunctionMapper.listUdfByResourceId(new Integer[]{resourceId});
+                if (CollectionUtils.isNotEmpty(udfFuncs)) {
+                    udfFuncs = udfFuncs.stream().map(t -> {
+                        t.setResourceName(fullName);
+                        t.setUpdateTime(now);
+                        return t;
+                    }).collect(Collectors.toList());
+                    udfFunctionMapper.batchUpdateUdfFunc(udfFuncs);
+                }
+
             }
 
             putMsg(result, Status.SUCCESS);
diff --git 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.java
 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.java
index a2ce6b2..db5e6a4 100644
--- 
a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.java
+++ 
b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.java
@@ -16,9 +16,9 @@
  */
 package org.apache.dolphinscheduler.dao.mapper;
 
-import org.apache.dolphinscheduler.dao.entity.UdfFunc;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.dolphinscheduler.dao.entity.UdfFunc;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -100,5 +100,12 @@ public interface UdfFuncMapper extends BaseMapper<UdfFunc> 
{
      */
     List<UdfFunc> listAuthorizedUdfByResourceId(@Param("userId") int 
userId,@Param("resourceIds") int[] resourceIds);
 
+    /**
+     * batch update udf func
+     * @param udfFuncList  udf list
+     * @return update num
+     */
+    int batchUpdateUdfFunc(@Param("udfFuncList") List<UdfFunc> udfFuncList);
+
 
 }
diff --git 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.xml
 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.xml
index e38d163..18de6db 100644
--- 
a/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.xml
+++ 
b/dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapper.xml
@@ -111,4 +111,17 @@
             </foreach>
         </if>
     </select>
+
+    <update id="batchUpdateUdfFunc" parameterType="java.util.List">
+        <foreach collection="udfFuncList" item="udf" index="index" open="" 
close="" separator =";">
+            update t_ds_udfs
+            <set>
+                resource_name=#{udf.resourceName},
+                update_time=#{udf.updateTime}
+            </set>
+            <where>
+                id=#{udf.id}
+            </where>
+        </foreach>
+    </update>
 </mapper>
\ No newline at end of file
diff --git 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapperTest.java
 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapperTest.java
index 47d8d89..9399c51 100644
--- 
a/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapperTest.java
+++ 
b/dolphinscheduler-dao/src/test/java/org/apache/dolphinscheduler/dao/mapper/UdfFuncMapperTest.java
@@ -33,6 +33,7 @@ import org.springframework.test.annotation.Rollback;
 import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
@@ -303,4 +304,16 @@ public class UdfFuncMapperTest {
         authorizedUdfFunc = 
udfFuncMapper.listAuthorizedUdfFunc(generalUser1.getId(), udfFuncIds);
         Assert.assertTrue(authorizedUdfFunc.stream().map(t -> 
t.getId()).collect(toList()).containsAll(Arrays.asList(udfFuncIds)));
     }
+
+    @Test
+    public void batchUpdateUdfFuncTest(){
+        //create general user
+        User generalUser1 = createGeneralUser("user1");
+        UdfFunc udfFunc = insertOne(generalUser1);
+        udfFunc.setResourceName("/updateTest");
+        List<UdfFunc> udfFuncList = new ArrayList<>();
+        udfFuncList.add(udfFunc);
+        Assert.assertTrue(udfFuncMapper.batchUpdateUdfFunc(udfFuncList)>0);
+
+    }
 }
\ No newline at end of file

Reply via email to