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

                DROP TRIGGER IF EXISTS before_insert_release_spatial_check_upc;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER before_insert_release_spatial_check_upc
                    BEFORE INSERT ON release_spatial
                    FOR EACH ROW
                BEGIN
                    DECLARE error_msg VARCHAR(255);
                    IF EXISTS (SELECT 1 FROM releases WHERE upc = NEW.upc) THEN
                        SET error_msg = CONCAT('Cannot insert: upc value ', NEW.upc, ' already exists in releases.upc');
                        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
                    END IF;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS before_insert_release_spatial_check_upc;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
    <changeSet id="2" author="hpalanivel">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;

                DROP TRIGGER IF EXISTS before_update_release_spatial_check_upc;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER before_update_release_spatial_check_upc
                    BEFORE UPDATE ON release_spatial
                    FOR EACH ROW
                BEGIN
                    DECLARE error_msg VARCHAR(255);
                    IF NEW.upc <> OLD.upc THEN
                        IF EXISTS (SELECT 1 FROM releases WHERE upc = NEW.upc) THEN
                            SET error_msg = CONCAT('Cannot update: upc value ', NEW.upc, ' already exists in releases.upc');
                            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
                        END IF;
                    END IF;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS before_update_release_spatial_check_upc;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
    <changeSet id="3" author="hpalanivel">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;

                DROP TRIGGER IF EXISTS before_insert_release_check_spatial_upc;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER before_insert_release_check_spatial_upc
                    BEFORE INSERT ON releases
                    FOR EACH ROW
                BEGIN
                    DECLARE error_msg VARCHAR(255);
                    IF EXISTS (SELECT 1 FROM release_spatial WHERE upc = NEW.upc) THEN
                        SET error_msg = CONCAT('Cannot insert: upc value ', NEW.upc, ' already exists in release_spatial.upc');
                        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
                    END IF;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS before_insert_release_check_spatial_upc;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
    <changeSet id="4" author="hpalanivel">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;

                DROP TRIGGER IF EXISTS before_update_release_check_spatial_upc;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER before_update_release_check_spatial_upc
                    BEFORE UPDATE ON releases
                    FOR EACH ROW
                BEGIN
                    DECLARE error_msg VARCHAR(255);
                    IF NEW.upc <> OLD.upc THEN
                        IF EXISTS (SELECT 1 FROM release_spatial WHERE upc = NEW.upc) THEN
                            SET error_msg = CONCAT('Cannot update: upc value ', NEW.upc, ' already exists in release_spatial.upc');
                            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
                        END IF;
                    END IF;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS before_update_release_check_spatial_upc;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
