<?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">
        <![CDATA[
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_release_delivery_job;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_release_delivery_job(IN enc_queue_detail_id BIGINT)
            BEGIN
                DECLARE updated_rows INT;
                DECLARE curRowCount CURSOR FOR SELECT ROW_COUNT();
                DECLARE EXIT HANDLER FOR NOT FOUND ROLLBACK;
                DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
                DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
                START TRANSACTION;
                SAVEPOINT start_point;
                    UPDATE encoding_queue_detail eqd
                    SET eqd.status = "ready_to_deliver"
                        , eqd.delivery_started = NULL
                        , eqd.delivery_ended = NULL
                        , eqd.error_log = ""
                        , eqd.delivery_server = NULL
                    WHERE eqd.encoding_queue_detail_id = enc_queue_detail_id;
                    OPEN curRowCount;
                    FETCH curRowCount INTO updated_rows;
                    IF updated_rows <= 0 THEN       	 
                        SELECT 'update_failed' AS success;
                        ROLLBACK TO SAVEPOINT start_point;
                    END IF;
                 
                    DELETE FROM delivery_batch_detail
                    WHERE encoding_queue_detail_id = enc_queue_detail_id;
                    
                    DELETE FROM process_pid
                    WHERE encoding_queue_detail_id = enc_queue_detail_id;
                    CLOSE curRowCount;
                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_release_delivery_job;;

                CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_release_delivery_job(IN enc_queue_detail_id BIGINT)
                BEGIN
                    DECLARE updated_rows INT;
                    DECLARE curRowCount CURSOR FOR SELECT ROW_COUNT();
                    DECLARE EXIT HANDLER FOR NOT FOUND ROLLBACK;
                    DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
                    DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
                    START TRANSACTION;
                    SAVEPOINT start_point;
                        UPDATE direct_delivery.encoding_queue_detail eqd, direct_delivery.delivery_queue dq
                        SET eqd.status = "ready_to_deliver"
                            , eqd.delivery_started = NULL
                            , eqd.delivery_ended = NULL 
                            , eqd.error_log = ""
                            , dq.status = "ready_to_deliver"
                            , eqd.delivery_server = NULL
                            , dq.delivery_server = NULL
                        WHERE eqd.encoding_queue_detail_id = dq.encoding_queue_detail_id 
                            AND dq.encoding_queue_detail_id = enc_queue_detail_id;
                        OPEN curRowCount;
                        FETCH curRowCount INTO updated_rows;
                        IF updated_rows <= 0 THEN			
                            SELECT 'update_failed' AS success;
                            ROLLBACK TO SAVEPOINT start_point;
                        END IF;
                        CLOSE curRowCount;
                        
                        UPDATE direct_delivery.delivery_pickup_queue
                        SET picked_up = "N"
                        WHERE encoding_queue_detail_id = enc_queue_detail_id;
                        DELETE FROM direct_delivery.process_pid 
                        WHERE encoding_queue_detail_id = enc_queue_detail_id;
                        OPEN curRowCount;
                        FETCH curRowCount INTO updated_rows;
                        IF updated_rows <= 0 THEN			
                            SELECT 'delete_failed' AS success;
                            ROLLBACK TO SAVEPOINT start_point;
                        END IF;
                        CLOSE curRowCount;
                    SELECT 1 AS success;
                    COMMIT;
                END;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
