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

                DROP TRIGGER IF EXISTS `after_delete_vendor`;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER after_delete_vendor AFTER DELETE ON vendor
                FOR EACH ROW
                BEGIN
                    INSERT INTO `art_relations_log`.`vendor_log` SET
                    `log_timestamp` = NOW(),
                    `log_action` = 'delete',
                    `vendor_id` = OLD.`vendor_id`,
                    `is_distributor`= OLD.`is_distributor`,
                    `name` = OLD.`name`,
                    `company` = OLD.`company`,
                    `newsletter` = OLD.`newsletter`,
                    `login` = OLD.`login`,
                    `old_passwords` = OLD.`old_passwords`,
                    `bademail` = OLD.`bademail`,
                    `last_update` = OLD.`last_update`,
                    `passwords` = OLD.`passwords`,
                    `is_login_null` = OLD.`is_login_null`,
                    `referral` = OLD.`referral`,
                    `join_vendor_id` = OLD.`join_vendor_id`,
                    `owner` = OLD.`owner`,
                    `priority` = OLD.`priority`,
                    `region` = OLD.`region`,
                    `primary_genre` = OLD.`primary_genre`,
                    `est_total_releases` = OLD.`est_total_releases`,
                    `est_total_tracks` = OLD.`est_total_tracks`,
                    `date_created` = OLD.`date_created`,
                    `overall_priority` = OLD.`overall_priority`,
                    `assigned_to` = OLD.`assigned_to`,
                    `status` = OLD.`status`,
                    `website` = OLD.`website`,
                    `ca_rep` = OLD.`ca_rep`,
                    `tax_form_received` = OLD.`tax_form_received`,
                    `w8_tax_form_date` = OLD.`w8_tax_form_date`,
                    `date_signed` = OLD.`date_signed`,
                    `payment_type` = OLD.`payment_type`,
                    `wire_info` = OLD.`wire_info`,
                    `wel_email_sender` = OLD.`wel_email_sender`,
                    `wel_email_send_date` = OLD.`wel_email_send_date`,
                    `label_summary` = OLD.`label_summary`,
                    `myspace_url` = OLD.`myspace_url`,
                    `additional_id` = OLD.`additional_id`,
                    `monthly_accounting` = OLD.`monthly_accounting`,
                    `original_owner` = OLD.`original_owner`,
                    `show_release_builder` = OLD.`show_release_builder`,
                    `recurring_payment_threshold` = OLD.`recurring_payment_threshold`,
                    `ssn` = OLD.`ssn`,
                    `checks` = OLD.`checks`,
                    `tax_name` = OLD.`tax_name`,
                    `tax_id_type` = OLD.`tax_id_type`,
                    `tax_id_country` = OLD.`tax_id_country`,
                    `foreign_tax_id` = OLD.`foreign_tax_id`,
                    `country` = OLD.`country`,
                    `number_format` = OLD.`number_format`,
                    `language` = OLD.`language`,
                    `token` = OLD.`token`,
                    `allow_orchard_credit` = OLD.`allow_orchard_credit`,
                    `api_vendor_id` = OLD.`api_vendor_id`,
                    `contact_email` = OLD.`contact_email`,
                    `label_identifier` = OLD.`label_identifier`,
                    `is_owned` = OLD.`is_owned`;
                END
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS `after_delete_vendor`;;
            ]]>
            </sql>
        </rollback>
    </changeSet>
    <changeSet id="2" author="jchung">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS after_insert_vendor;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER after_insert_vendor AFTER INSERT ON vendor
                FOR EACH ROW 
                BEGIN
                    CALL cloudsearch.sp_upsert_vendor(NEW.vendor_id);
                    INSERT INTO `art_relations_log`.`vendor_log` SET
                        `log_timestamp` = NOW(),
                        `log_action` = 'insert',
                        `vendor_id` = NEW.`vendor_id`,
                        `is_distributor`= NEW.`is_distributor`,
                        `name` = NEW.`name`,
                        `company` = NEW.`company`,
                        `newsletter` = NEW.`newsletter`,
                        `login` = NEW.`login`,
                        `old_passwords` = NEW.`old_passwords`,
                        `bademail` = NEW.`bademail`,
                        `last_update` = NEW.`last_update`,
                        `passwords` = NEW.`passwords`,
                        `is_login_null` = NEW.`is_login_null`,
                        `referral` = NEW.`referral`,
                        `join_vendor_id` = NEW.`join_vendor_id`,
                        `owner` = NEW.`owner`,
                        `priority` = NEW.`priority`,
                        `region` = NEW.`region`,
                        `primary_genre` = NEW.`primary_genre`,
                        `est_total_releases` = NEW.`est_total_releases`,
                        `est_total_tracks` = NEW.`est_total_tracks`,
                        `date_created` = NEW.`date_created`,
                        `overall_priority` = NEW.`overall_priority`,
                        `assigned_to` = NEW.`assigned_to`,
                        `status` = NEW.`status`,
                        `website` = NEW.`website`,
                        `ca_rep` = NEW.`ca_rep`,
                        `tax_form_received` = NEW.`tax_form_received`,
                        `w8_tax_form_date` = NEW.`w8_tax_form_date`,
                        `date_signed` = NEW.`date_signed`,
                        `payment_type` = NEW.`payment_type`,
                        `wire_info` = NEW.`wire_info`,
                        `wel_email_sender` = NEW.`wel_email_sender`,
                        `wel_email_send_date` = NEW.`wel_email_send_date`,
                        `label_summary` = NEW.`label_summary`,
                        `myspace_url` = NEW.`myspace_url`,
                        `additional_id` = NEW.`additional_id`,
                        `monthly_accounting` = NEW.`monthly_accounting`,
                        `original_owner` = NEW.`original_owner`,
                        `show_release_builder` = NEW.`show_release_builder`,
                        `recurring_payment_threshold` = NEW.`recurring_payment_threshold`,
                        `ssn` = NEW.`ssn`,
                        `checks` = NEW.`checks`,
                        `tax_name` = NEW.`tax_name`,
                        `tax_id_type` = NEW.`tax_id_type`,
                        `tax_id_country` = NEW.`tax_id_country`,
                        `foreign_tax_id` = NEW.`foreign_tax_id`,
                        `country` = NEW.`country`,
                        `number_format` = NEW.`number_format`,
                        `language` = NEW.`language`,
                        `token` = NEW.`token`,
                        `allow_orchard_credit` = NEW.`allow_orchard_credit`,
                        `api_vendor_id` = NEW.`api_vendor_id`,
                        `contact_email` = NEW.`contact_email`,
                        `label_identifier` = NEW.`label_identifier`,
                        `is_owned` = NEW.`is_owned`;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
                <![CDATA[
                    USE art_relations;;
                    DROP TRIGGER IF EXISTS after_insert_vendor;;

                    CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER after_insert_vendor AFTER INSERT ON vendor FOR EACH ROW 
                    BEGIN
                        CALL cloudsearch.sp_upsert_vendor(NEW.vendor_id);
                    END;;
                ]]>
            </sql>
        </rollback>
    </changeSet>
    <changeSet id="3" author="jchung">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            <![CDATA[
                USE art_relations;;
                DROP TRIGGER IF EXISTS after_update_vendor;;

                CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER after_update_vendor AFTER UPDATE ON vendor
                FOR EACH ROW 
                BEGIN
                    IF (
                        NEW.company != OLD.company 
                        OR (ISNULL(NEW.company) AND NOT ISNULL(OLD.company))
                        OR (NOT ISNULL(NEW.company) AND ISNULL(OLD.company))
                    )
                    OR (
                        NEW.owner != OLD.owner
                        OR (ISNULL(NEW.owner) AND NOT ISNULL(OLD.owner))
                        OR (NOT ISNULL(NEW.owner) AND ISNULL(OLD.owner))
                    )
                    OR (
                        NEW.assigned_to != OLD.assigned_to
                        OR (ISNULL(NEW.assigned_to) AND NOT ISNULL(OLD.assigned_to))
                        OR (NOT ISNULL(NEW.assigned_to) AND ISNULL(OLD.assigned_to))
                    )
                    OR (
                        (
                            NEW.status != OLD.status
                            OR (ISNULL(NEW.owner) AND NOT ISNULL(OLD.owner))
                            OR (NOT ISNULL(NEW.owner) AND ISNULL(OLD.owner))
                        )
                        AND NEW.status IN ('signed', 'deletion')
                    )
                    OR (
                        NEW.label_identifier != OLD.label_identifier
                        OR (ISNULL(NEW.label_identifier) AND NOT ISNULL(OLD.label_identifier))
                        OR (NOT ISNULL(NEW.label_identifier) AND ISNULL(OLD.label_identifier))
                    )
                    THEN
                        CALL art_relations.sp_cloudsearch_upsert_subaccounts_by_vendor_id(NEW.vendor_id);
                        CALL art_relations.sp_cloudsearch_upsert_releases_by_vendor_id(NEW.vendor_id);
                        CALL art_relations.sp_cloudsearch_upsert_artists_by_vendor_id(NEW.vendor_id);
                        CALL cloudsearch.sp_upsert_vendor(NEW.vendor_id);
                    END IF;

                    INSERT INTO `art_relations_log`.`vendor_log` SET
                        `log_timestamp` = NOW(),
                        `log_action` = 'update',
                        `vendor_id` = NEW.`vendor_id`,
                        `is_distributor`= NEW.`is_distributor`,
                        `name` = NEW.`name`,
                        `company` = NEW.`company`,
                        `newsletter` = NEW.`newsletter`,
                        `login` = NEW.`login`,
                        `old_passwords` = NEW.`old_passwords`,
                        `bademail` = NEW.`bademail`,
                        `last_update` = NEW.`last_update`,
                        `passwords` = NEW.`passwords`,
                        `is_login_null` = NEW.`is_login_null`,
                        `referral` = NEW.`referral`,
                        `join_vendor_id` = NEW.`join_vendor_id`,
                        `owner` = NEW.`owner`,
                        `priority` = NEW.`priority`,
                        `region` = NEW.`region`,
                        `primary_genre` = NEW.`primary_genre`,
                        `est_total_releases` = NEW.`est_total_releases`,
                        `est_total_tracks` = NEW.`est_total_tracks`,
                        `date_created` = NEW.`date_created`,
                        `overall_priority` = NEW.`overall_priority`,
                        `assigned_to` = NEW.`assigned_to`,
                        `status` = NEW.`status`,
                        `website` = NEW.`website`,
                        `ca_rep` = NEW.`ca_rep`,
                        `tax_form_received` = NEW.`tax_form_received`,
                        `w8_tax_form_date` = NEW.`w8_tax_form_date`,
                        `date_signed` = NEW.`date_signed`,
                        `payment_type` = NEW.`payment_type`,
                        `wire_info` = NEW.`wire_info`,
                        `wel_email_sender` = NEW.`wel_email_sender`,
                        `wel_email_send_date` = NEW.`wel_email_send_date`,
                        `label_summary` = NEW.`label_summary`,
                        `myspace_url` = NEW.`myspace_url`,
                        `additional_id` = NEW.`additional_id`,
                        `monthly_accounting` = NEW.`monthly_accounting`,
                        `original_owner` = NEW.`original_owner`,
                        `show_release_builder` = NEW.`show_release_builder`,
                        `recurring_payment_threshold` = NEW.`recurring_payment_threshold`,
                        `ssn` = NEW.`ssn`,
                        `checks` = NEW.`checks`,
                        `tax_name` = NEW.`tax_name`,
                        `tax_id_type` = NEW.`tax_id_type`,
                        `tax_id_country` = NEW.`tax_id_country`,
                        `foreign_tax_id` = NEW.`foreign_tax_id`,
                        `country` = NEW.`country`,
                        `number_format` = NEW.`number_format`,
                        `language` = NEW.`language`,
                        `token` = NEW.`token`,
                        `allow_orchard_credit` = NEW.`allow_orchard_credit`,
                        `api_vendor_id` = NEW.`api_vendor_id`,
                        `contact_email` = NEW.`contact_email`,
                        `label_identifier` = NEW.`label_identifier`,
                        `is_owned` = NEW.`is_owned`;
                END;;
            ]]>
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
                <![CDATA[
                    USE art_relations;;
                    DROP TRIGGER IF EXISTS after_update_vendor;;

                    CREATE DEFINER = 'theorchard'@'10.10.%' TRIGGER after_update_vendor AFTER UPDATE ON vendor FOR EACH ROW 
                    BEGIN
                        IF (
                            NEW.company != OLD.company 
                            OR (ISNULL(NEW.company) AND NOT ISNULL(OLD.company))
                            OR (NOT ISNULL(NEW.company) AND ISNULL(OLD.company))
                        )
                        OR (
                            NEW.owner != OLD.owner
                            OR (ISNULL(NEW.owner) AND NOT ISNULL(OLD.owner))
                            OR (NOT ISNULL(NEW.owner) AND ISNULL(OLD.owner))
                        )
                        OR (
                            NEW.assigned_to != OLD.assigned_to
                            OR (ISNULL(NEW.assigned_to) AND NOT ISNULL(OLD.assigned_to))
                            OR (NOT ISNULL(NEW.assigned_to) AND ISNULL(OLD.assigned_to))
                        )
                        OR (
                            (
                                NEW.status != OLD.status
                                OR (ISNULL(NEW.owner) AND NOT ISNULL(OLD.owner))
                                OR (NOT ISNULL(NEW.owner) AND ISNULL(OLD.owner))
                            )
                            AND NEW.status IN ('signed', 'deletion')
                        )
                        OR (
                            NEW.label_identifier != OLD.label_identifier
                            OR (ISNULL(NEW.label_identifier) AND NOT ISNULL(OLD.label_identifier))
                            OR (NOT ISNULL(NEW.label_identifier) AND ISNULL(OLD.label_identifier))
                        )
                        THEN
                            CALL art_relations.sp_cloudsearch_upsert_subaccounts_by_vendor_id(NEW.vendor_id);
                            CALL art_relations.sp_cloudsearch_upsert_releases_by_vendor_id(NEW.vendor_id);
                            CALL art_relations.sp_cloudsearch_upsert_artists_by_vendor_id(NEW.vendor_id);
                            CALL cloudsearch.sp_upsert_vendor(NEW.vendor_id);
                        END IF;
                    END;;
                ]]>
            </sql>
        </rollback>
    </changeSet>
</databaseChangeLog>
