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

            DROP PROCEDURE IF EXISTS sp_close_delivery_job_vtf;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_close_delivery_job_vtf(package_size BIGINT, enc_queue_detail_id BIGINT)
            BEGIN
                DECLARE EXIT HANDLER FOR NOT FOUND ROLLBACK;
                DECLARE EXIT HANDLER FOR SQLEXCEPTION
                BEGIN
                    SELECT 0 AS success;
                    ROLLBACK;
                END;
                DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
                START TRANSACTION;
                UPDATE encoding_queue_detail
                SET
                    `status` = "delivered",
                    error_log = "",
                    delivery_ended = NOW(),
                    package_size = package_size
                WHERE
                    encoding_queue_detail_id = enc_queue_detail_id
                    AND `status` = "delivering"
                ;
                SELECT ROW_COUNT() AS success;
                COMMIT;
            END;;
        ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
            USE direct_delivery;;

            DROP PROCEDURE IF EXISTS sp_close_delivery_job_vtf;;

            CREATE DEFINER=theorchard_dd@127.0.0.1 PROCEDURE sp_close_delivery_job_vtf(package_size BIGINT, 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
                BEGIN
                 SELECT 0 AS success;
                 ROLLBACK;
                END;
                DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
                START TRANSACTION;
                SAVEPOINT start_point;
                UPDATE encoding_queue_detail
                SET `status` = "delivered", error_log = "", delivery_ended = NOW(), package_size = package_size
                WHERE encoding_queue_detail_id = enc_queue_detail_id AND `status` = "delivering";
                OPEN curRowCount;
                FETCH curRowCount INTO updated_rows;
                IF updated_rows <= 0 THEN
                    SELECT 0 AS success;
                    ROLLBACK TO SAVEPOINT start_point;
                END IF;
                CLOSE curRowCount;
                DELETE FROM direct_delivery_location
                WHERE encoding_queue_detail_id = enc_queue_detail_id;
                OPEN curRowCount;
                FETCH curRowCount INTO updated_rows;
                IF updated_rows <= 0 THEN
                    SELECT 0 AS success;
                    ROLLBACK TO SAVEPOINT start_point;
                END IF;
                CLOSE curRowCount;
                SELECT 1 AS success;
                COMMIT;
            END;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
