Browse Source

[Improvement-11662][dao] fix foreach null items in mapper.xml

SongTao Zhuang 2 years ago
parent
commit
6a5367fd57

+ 7 - 5
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/AlertPluginInstanceMapper.xml

@@ -36,11 +36,13 @@
         select
         <include refid="baseSql"/>
         from t_ds_alert_plugin_instance
-        where id in
-        <foreach item="item" index="index" collection="ids"
-                 open="(" separator="," close=")">
-            #{item}
-        </foreach>
+        <if test="ids != null and ids.size() != 0">
+            where id in
+            <foreach item="item" index="index" collection="ids"
+                     open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
     </select>
 
     <select id="queryByInstanceNamePage" resultType="org.apache.dolphinscheduler.dao.entity.AlertPluginInstance">

+ 43 - 28
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ProcessInstanceMapper.xml

@@ -40,19 +40,23 @@
         <if test="host != null and host != ''">
             and host=#{host}
         </if>
-        and state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
         order by id asc
     </select>
     <select id="queryNeedFailoverProcessInstanceHost" resultType="String">
         select distinct host
         from t_ds_process_instance
-        where state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            where state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
     </select>
 
     <select id="queryTopNProcessInstance" resultType="org.apache.dolphinscheduler.dao.entity.ProcessInstance">
@@ -77,10 +81,12 @@
         <if test="tenantId != -1">
             and tenant_id =#{tenantId}
         </if>
-        and state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
         order by id asc
     </select>
 
@@ -92,10 +98,12 @@
         <if test="workerGroupName != ''">
             and worker_group =#{workerGroupName}
         </if>
-        and state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
         order by id asc
     </select>
 
@@ -134,10 +142,13 @@
     <update id="setFailoverByHostAndStateArray">
         update t_ds_process_instance
         set host=null
-        where host =#{host} and state in
-        <foreach collection="states" index="index" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        where host =#{host}
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" index="index" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
     </update>
     <update id="updateProcessInstanceByState">
         update t_ds_process_instance
@@ -225,10 +236,12 @@
         <include refid="baseSql"/>
         from t_ds_process_instance
         where process_definition_code=#{processDefinitionCode}
-        and state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
         order by id asc
     </select>
     <select id="queryByProcessDefineCodeAndProcessDefinitionVersionAndStatusAndNextId" resultType="org.apache.dolphinscheduler.dao.entity.ProcessInstance">
@@ -237,10 +250,12 @@
         from t_ds_process_instance
         where process_definition_code=#{processDefinitionCode}
           and process_definition_version = #{processDefinitionVersion}
-        and state in
-        <foreach collection="states" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
         and next_process_instance_id=0
         and id <![CDATA[ < ]]> #{id}
         order by id desc

+ 13 - 8
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceMapper.xml

@@ -129,10 +129,13 @@
     </select>
 
     <delete id="deleteIds" parameterType="java.lang.Integer">
-        delete from t_ds_resources where id in
-        <foreach collection="resIds" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        delete from t_ds_resources
+        <if test="resIds != null and resIds.length != 0">
+            where id in
+            <foreach collection="resIds" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
     </delete>
 
     <select id="listChildren" resultType="java.lang.Integer">
@@ -170,10 +173,12 @@
             <property name="alias" value="r"/>
         </include>
         from t_ds_resources r
-        where r.id in
-        <foreach collection="resIds" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="resIds != null and resIds.length != 0">
+            where r.id in
+            <foreach collection="resIds" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
     </select>
 
     <select id="existResourceByUser" resultType="java.lang.Boolean">

+ 6 - 4
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ResourceUserMapper.xml

@@ -51,9 +51,11 @@
         <if test="userId != 0">
             and user_id = #{userId}
         </if>
-        and resources_id in
-        <foreach collection="resIds" item="i" open="(" close=")" separator=",">
-            #{i}
-        </foreach>
+        <if test="resIds != null and resIds.length != 0">
+            and resources_id in
+            <foreach collection="resIds" item="i" open="(" close=")" separator=",">
+                #{i}
+            </foreach>
+        </if>
     </delete>
 </mapper>

+ 6 - 4
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/ScheduleMapper.xml

@@ -75,10 +75,12 @@
         select
         <include refid="baseSql"/>
         from t_ds_schedules
-        where process_definition_code in
-        <foreach collection="processDefinitionCodeList" item="code" index="index" open="(" close=")" separator=",">
-            #{code}
-        </foreach>
+        <if test="processDefinitionCodeList != null and processDefinitionCodeList.size() != 0">
+            where process_definition_code in
+            <foreach collection="processDefinitionCodeList" item="code" index="index" open="(" close=")" separator=",">
+                #{code}
+            </foreach>
+        </if>
     </select>
 
     <select id="queryReleaseSchedulerListByProcessDefinitionCode"

+ 6 - 4
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/TaskInstanceMapper.xml

@@ -34,10 +34,12 @@
         update t_ds_task_instance
         set state = #{destStatus}
         where host = #{host}
-        and state in
-        <foreach collection="states" index="index" item="i" open="(" separator="," close=")">
-            #{i}
-        </foreach>
+        <if test="states != null and states.length != 0">
+            and state in
+            <foreach collection="states" index="index" item="i" open="(" separator="," close=")">
+                #{i}
+            </foreach>
+        </if>
     </update>
     <select id="queryTaskByProcessIdAndState" resultType="java.lang.Integer">
         select id

+ 6 - 4
dolphinscheduler-dao/src/main/resources/org/apache/dolphinscheduler/dao/mapper/UserMapper.xml

@@ -118,10 +118,12 @@
     <select id="selectByIds" resultType="org.apache.dolphinscheduler.dao.entity.User">
         select *
         from t_ds_user
-        where id in
-        <foreach item="id" index="index" collection="ids" open="(" separator="," close=")">
-            #{id}
-        </foreach>
+        <if test="ids != null and ids.size() != 0">
+            where id in
+            <foreach item="id" index="index" collection="ids" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
     </select>
     <select id="queryAuthedUserListByProjectId" resultType="org.apache.dolphinscheduler.dao.entity.User">
         select