<?xml version="1.0" encoding="UTF-8" ?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="org.apache.dolphinscheduler.dao.mapper.ScheduleMapper">
    <sql id="baseSql">
        id, process_definition_code, start_time, end_time, timezone_id, crontab, failure_strategy, user_id, release_state,
        warning_type, warning_group_id, process_instance_priority, worker_group, environment_code, create_time, update_time
    </sql>
    <sql id="baseSqlV2">
        ${alias}.id, ${alias}.process_definition_code, ${alias}.start_time, ${alias}.end_time, ${alias}.timezone_id,
        ${alias}.crontab, ${alias}.failure_strategy, ${alias}.user_id, ${alias}.release_state, ${alias}.warning_type,
        ${alias}.warning_group_id, ${alias}.process_instance_priority, ${alias}.worker_group, ${alias}.environment_code, ${alias}.create_time,
        ${alias}.update_time
    </sql>
    <select id="queryByProcessDefineCodePaging" resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        select p_f.name as process_definition_name, p.name as project_name,u.user_name,
        <include refid="baseSqlV2">
            <property name="alias" value="s"/>
        </include>
        from t_ds_schedules s
        join t_ds_process_definition p_f on s.process_definition_code = p_f.code
        join t_ds_project as p on p_f.project_code = p.code
        join t_ds_user as u on s.user_id = u.id
        where 1=1
        <if test="processDefinitionCode != 0">
            and s.process_definition_code = #{processDefinitionCode}
        </if>
        order by s.update_time desc
    </select>
    <select id="querySchedulerListByProjectName" resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        select p_f.name as process_definition_name, p_f.description as definition_description, p.name as project_name,u.user_name,s.*
        from t_ds_schedules s
        join t_ds_process_definition p_f on s.process_definition_code = p_f.code
        join t_ds_project as p on p_f.project_code = p.code
        join t_ds_user as u on s.user_id = u.id
        where p.name = #{projectName}
    </select>
    <select id="selectAllByProcessDefineArray" resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        select
        <include refid="baseSql"/>
        from t_ds_schedules
        where 1= 1
        <if test="processDefineCodes != null and processDefineCodes.length != 0 ">
            and process_definition_code in
            <foreach collection="processDefineCodes" index="index" item="i" open="(" separator="," close=")">
                #{i}
            </foreach>
        </if>
        and release_state = 1
    </select>
    <select id="queryByProcessDefinitionCode" resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        select
        <include refid="baseSql"/>
        from t_ds_schedules
        where process_definition_code = #{processDefinitionCode}
    </select>

    <select id="querySchedulesByProcessDefinitionCodes" resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        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>
    </select>

    <select id="queryReleaseSchedulerListByProcessDefinitionCode"
            resultType="org.apache.dolphinscheduler.dao.entity.Schedule">
        select
        <include refid="baseSql"/>
        from t_ds_schedules
        where process_definition_code = #{processDefinitionCode} and release_state = 1
    </select>
</mapper>
