<?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="3" author="cgorman">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            DROP PROCEDURE IF EXISTS sp_get_renewed_dd_items;;

            CREATE DEFINER='theorchard_dd'@'127.0.0.1' PROCEDURE sp_get_renewed_dd_items(IN dms_id INT, IN enc_ids TEXT, IN max_jobs INT)
            BEGIN
                SET @processing = 0;
                SET @stmtStr = CONCAT('
                    SELECT count(eqd.encoding_queue_detail_id) INTO @processing
                    FROM encoding_queue eq
                    INNER JOIN encoding_queue_detail eqd ON eq.encoding_queue_id = eqd.encoding_queue_id
                    INNER JOIN dms_delivery_spec dds ON dds.dms_master_master_id = eqd.dms_master_master_id 
                        AND eq.encoding_order_type = dds.order_type 
                        AND dds.encoding = "Y"
                    WHERE eqd.status in ("ready_to_encode", "encoding", "encoded", "ready_to_deliver", "queued_for_delivery", "delivering")
                        AND eq.encoder_id IN (', enc_ids, ')
                        AND dds.dms_master_master_id = ', dms_id);
                PREPARE stmt FROM @stmtStr;
                EXECUTE stmt;

                SET @maxJobs = IF (max_jobs > @processing, max_jobs - @processing, 0);
                SET @stmtStr = CONCAT('
                    SELECT eq.encoding_order_id, eq.encoder_id, eqd.encoding_queue_detail_id, eqd.dms_master_master_id, upc, eq.encoding_order_type, eq.meta_update, eqd.cd, eqd.track_id, eqd.clip_number, jp.priority AS encoding_order_priority, cmm.priority
                    FROM encoding_queue eq
                    INNER JOIN encoding_queue_detail eqd ON eq.encoding_queue_id = eqd.encoding_queue_id
                    INNER JOIN dms_delivery_spec dds ON dds.dms_master_master_id = eqd.dms_master_master_id
                    INNER JOIN customer_master_master cmm ON cmm.customer_master_master_id = eqd.dms_master_master_id
                    INNER JOIN job_priority jp ON eqd.encoding_queue_detail_id = jp.encoding_queue_detail_id
                        AND eq.encoding_order_type = dds.order_type
                        AND dds.encoding = "Y"
                    WHERE eqd.status = "new"
                        AND eq.encoder_id IN (', enc_ids, ')
                        AND dds.dms_master_master_id = ', dms_id, '
                    ORDER BY jp.priority, eqd.encoding_queue_detail_id
                    LIMIT 0, ?;');
                PREPARE stmt FROM @stmtStr;
                EXECUTE stmt USING @maxJobs;
            END;;
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
                DROP PROCEDURE IF EXISTS sp_get_renewed_dd_items;;

                CREATE DEFINER='theorchard_dd'@'127.0.0.1' PROCEDURE sp_get_renewed_dd_items(IN dms_id INT, IN enc_ids TEXT, IN max_jobs INT)
                BEGIN

                    SET @processing = 0;
                    SET @stmtStr = CONCAT('
                        SELECT count(eqd.encoding_queue_detail_id) INTO @processing
                        FROM encoding_queue eq
                        INNER JOIN encoding_queue_detail eqd ON eq.encoding_queue_id = eqd.encoding_queue_id
                        INNER JOIN dms_delivery_spec dds ON dds.dms_master_master_id = eqd.dms_master_master_id
                            AND eq.encoding_order_type = dds.order_type
                            AND dds.encoding = "Y"
                        WHERE eqd.status in ("ready_to_encode", "encoding", "encoded", "ready_to_deliver", "queued_for_delivery", "delivering")
                            AND eq.encoder_id IN (', enc_ids, ')
                            AND dds.dms_master_master_id = ', dms_id);
                    PREPARE stmt FROM @stmtStr;
                    EXECUTE stmt;

                    SET @maxJobs = IF (max_jobs > @processing, max_jobs - @processing, 0);
                    SET @stmtStr = CONCAT('
                        SELECT eq.encoding_order_id, eq.encoder_id, eqd.encoding_queue_detail_id, eqd.dms_master_master_id, upc, eq.encoding_order_type, eq.meta_update, eqd.cd, eqd.track_id, eqd.clip_number
                        FROM encoding_queue eq
                        INNER JOIN encoding_queue_detail eqd ON eq.encoding_queue_id = eqd.encoding_queue_id
                        INNER JOIN dms_delivery_spec dds ON dds.dms_master_master_id = eqd.dms_master_master_id
                        INNER JOIN job_priority jp ON eqd.encoding_queue_detail_id = jp.encoding_queue_detail_id
                            AND eq.encoding_order_type = dds.order_type
                            AND dds.encoding = "Y"
                        WHERE eqd.status = "new"
                            AND eq.encoder_id IN (', enc_ids, ')
                            AND dds.dms_master_master_id = ', dms_id, '
                        ORDER BY jp.priority, eqd.encoding_queue_detail_id
                        LIMIT 0, ?;');
                    PREPARE stmt FROM @stmtStr;
                    EXECUTE stmt USING @maxJobs;
                END;;
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
