<?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="1" author="mdadhania">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
        <![CDATA[
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_claim_delivery_job;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_claim_delivery_job(IN hostname VARCHAR(255),IN enc_queue_detail_id BIGINT,IN pid INT, IN encoder_ids VARCHAR(100))
            BEGIN
                DECLARE updated_rows INT;
                DECLARE curRowCount CURSOR FOR SELECT ROW_COUNT();
                DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
                START TRANSACTION;
                    UPDATE encoding_queue_detail
                    SET status = "delivering"
                        , delivery_started = NOW()
                        , delivery_server = hostname
                    WHERE encoding_queue_detail_id
                        AND encoding_queue_detail_id = enc_queue_detail_id  
                        AND status = "queued_for_delivery";
                    OPEN curRowCount;
                    FETCH curRowCount INTO updated_rows;
                    IF updated_rows <= 0 THEN
                        SELECT 0 AS success;
                        ROLLBACK;
                    END IF;
                    SELECT 1 AS success;
                COMMIT;
            END;;
        ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_claim_delivery_job;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_claim_delivery_job(IN hostname VARCHAR(255),IN enc_queue_detail_id BIGINT,IN pid INT, IN encoder_ids VARCHAR(100))
            BEGIN
                DECLARE updated_rows INT;
                DECLARE curRowCount CURSOR FOR SELECT ROW_COUNT();
                DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
                START TRANSACTION;
                    UPDATE encoding_queue_detail
                    SET status = "delivering"
                        , delivery_started = NOW()
                        , delivery_server = hostname
                    WHERE encoding_queue_detail_id
                        AND encoding_queue_detail_id = enc_queue_detail_id  
                        AND status = "queued_for_delivery";
                    OPEN curRowCount;
                    FETCH curRowCount INTO updated_rows;
                    IF updated_rows > 0 THEN
                        INSERT INTO process_pid (encoding_queue_detail_id, pid) VALUES (enc_queue_detail_id,pid);
                    ELSE
                        SELECT 0 AS success;
                        ROLLBACK;
                    END IF;    
                    SELECT 1 AS success;
                COMMIT;
            END;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
