<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
        http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
    <changeSet id="101" author="jian">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_get_connection_limit;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_get_connection_limit(IN dms_id INT, IN ot VARCHAR(30))
            BEGIN
                SELECT IFNULL(dds.connection_limit,0) AS connection_limit, 
                    (SELECT count(eqd.encoding_queue_detail_id)
                    FROM encoding_queue_detail eqd 
                    INNER JOIN encoding_queue eq ON eq.encoding_queue_id = eqd.encoding_queue_id
                    WHERE eqd.status IN ('delivering', 'queued_for_delivery')
                        AND eqd.dms_master_master_id = dms_id
                        AND eq.encoding_order_type = ot
                    ) AS current_connections
                FROM dms_delivery_spec dds
                WHERE dds.dms_master_master_id = dms_id
                    AND dds.order_type = ot;
            END;;
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_get_connection_limit;;
            
            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_get_connection_limit()
            BEGIN
                SELECT IFNULL(dds.connection_limit,0) AS connection_limit,
                    IF(xx.encoding_queue_detail_id IS NULL, 0, COUNT(xx.encoding_queue_detail_id)) AS current_connections
                FROM dms_delivery_spec dds
                LEFT JOIN (
                    SELECT eqd.encoding_queue_detail_id, eqd.dms_master_master_id, eq.encoding_order_type
                    FROM encoding_queue_detail eqd
                    INNER JOIN encoding_queue eq ON eq.encoding_queue_id = eqd.encoding_queue_id
                    WHERE eqd.status IN ('delivering', 'queued_for_delivery')
                        AND eqd.dms_master_master_id = dms_id
                ) xx ON dds.dms_master_master_id = xx.dms_master_master_id
                    AND dds.order_type = xx.encoding_order_type
                WHERE dds.dms_master_master_id = dms_id
                    AND dds.order_type = ot;
            END;;
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
