<?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="anevrekar">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
        <![CDATA[
			DROP TABLE IF EXISTS `ROLLBACK-releases_format`;;
			DROP TABLE IF EXISTS `ROLLBACK-releases`;;

			CREATE TABLE `ROLLBACK-releases_format`
			SELECT r.upc, r.format, COUNT(t.id) AS tracks, ai.vendor_id
			FROM releases r
			INNER JOIN artist_info ai ON r.artist_id = ai.artist_id
			LEFT JOIN track t ON r.release_id = t.release_id 
			WHERE r.format NOT IN ('EP','Full Length','Single') GROUP BY r.upc;;

			CREATE TABLE `ROLLBACK-releases`
			SELECT r.*, ra.release_artist_id, ra.role, ra.artist_name, ra.url,rg.id AS release_subgenre_id, rg.subgenre_id,
			rs.release_status_id, rs.`status`, rs.date AS release_status_date, rs.changed_by, rs.changed_by_type, rs.upc_REMOVED,
			rc.release_correction_id AS correction_id, rc.status AS release_correction_status, rc.last_updated AS rc_last_updated, rc.last_updated_by AS rc_last_updated_by, rc.last_updated_type AS rc_last_updated_type, raq.release_approval_id, raq.release_correction_id, raq.checked_out_by, raq.admin_approval, raq.status AS release_approval_status,
			raq.approved_by, raq.last_updated AS approval_last_updated, raq.date_submitted, raq.initiate_errorcorrection, raq.submitted_by,
			tw.track_writer_id, tw.writer_name, tw.cd, tw.track_id, tw.unique_track_id,
			re.id AS release_exclusive_id, re.dms_customer_id, re.sale_start_date AS re_sale_start_date,
			rcd.release_correction_detail_id, rcd.table_name, rcd.field_name, rcd.key_id, rcd.key_value, rcd.last_updated AS rcd_last_updated, rcd.last_updated_by AS rcd_last_updated_by, rcd.last_updated_type AS rcd_last_updated_type 
			FROM releases r
			INNER JOIN `ROLLBACK-releases_format` rrf ON r.upc = rrf.upc
			LEFT JOIN release_correction rc ON r.release_id = rc.release_id
			LEFT JOIN release_correction_detail rcd ON rc.release_correction_id = rcd.release_correction_id
			LEFT JOIN release_artist ra ON r.release_id = ra.release_id
			LEFT JOIN release_status rs ON r.release_id = rs.release_id
			LEFT JOIN release_approval_queue raq ON r.release_id = raq.release_id
			LEFT JOIN release_subgenre rg ON r.release_id = rg.release_id
			LEFT JOIN track_writer tw ON r.upc = tw.upc
			LEFT JOIN release_exclusive re ON r.upc = re.upc
			WHERE (rrf.vendor_id = 7123 AND rrf.tracks = 0);;

			UPDATE releases r
			INNER JOIN `ROLLBACK-releases_format` rf ON r.upc = rf.upc
			SET r.format =
			(CASE
			  WHEN (rf.tracks = 1) THEN 'Single'
			  WHEN (rf.tracks > 1  AND rf.tracks < 4) THEN 'EP'
			  ELSE 'Full Length'
			END)
			WHERE (rf.vendor_id != 7123) OR (rf.vendor_id = 7123 AND rf.tracks > 0);;

			DELETE ra.* FROM release_artist ra
			INNER JOIN `ROLLBACK-releases` rr ON ra.release_id = rr.release_id;;

			DELETE rg.* FROM release_subgenre rg
			INNER JOIN `ROLLBACK-releases` rr ON rg.release_id = rr.release_id;;

			DELETE rs.* FROM release_status rs
			INNER JOIN `ROLLBACK-releases` rr ON rs.release_id = rr.release_id;;
			
			DELETE raq.* FROM release_approval_queue raq
			INNER JOIN `ROLLBACK-releases` rr ON raq.release_id = rr.release_id;;
			
			DELETE rcd.* FROM release_correction_detail rcd
			INNER JOIN `ROLLBACK-releases` rr ON rcd.release_correction_id = rr.correction_id;;
			
			DELETE rc.* FROM release_correction rc
			INNER JOIN `ROLLBACK-releases` rr ON rc.release_id = rr.correction_id;;

			DELETE tw.* FROM track_writer tw
			INNER JOIN `ROLLBACK-releases` rr ON tw.upc = rr.upc;;

			DELETE re.* FROM release_exclusive re
			INNER JOIN `ROLLBACK-releases` rr ON re.upc= rr.upc;;

			DELETE r.* FROM releases r
			INNER JOIN `ROLLBACK-releases` rr ON r.release_id = rr.release_id;;
        ]]>
        </sql>
        <rollback>
            <![CDATA[
				INSERT INTO releases(release_id, last_updated, upc, display_upc, artist_id, subaccount_id, vendor_release_identifier, release_name, label, description, release_date, listprice, sellprice, display, deletions, distribution, applfees, referral_id, date_added_REMOVE, genre_id, FORMAT, 
				orig_release_year, promocode, c_line, manufacturer_upc, album_download, download_price, priority, territory, sale_start_date, vod_start_date, original_release_date, vendor_catalog_number, language_id, 
				promobox_no,additional_id,dracatalog,channel_id,product_type_id,trackdown_black_list,not_for_distribution, europe_public_domain, karaoke, unknown_artist, new_release,
				product_format, promos_number, promo_upc, sync_only, country_of_origin, short_synopsis, keywords, production_co, preorder_date, amd_id, wholesale_price_tier,
				season, episode, production_number, network, genre_note, physical_release_date, theatrical_release_date, original_digital_release_date, est,
				vod,rsd_comment,int_mkt_manager,tms_id, brand, digital_only, product_subtype_id, VERSION, ingestion_completed, release_status, meta_language, itunes_previewable, subtitle_language_id, compilation)
				SELECT release_id, last_updated, upc, display_upc, artist_id, subaccount_id, vendor_release_identifier, release_name, label, description, release_date, listprice, sellprice, display, deletions, distribution, applfees, referral_id, date_added_REMOVE, genre_id, FORMAT, 
				orig_release_year, promocode, c_line, manufacturer_upc, album_download, download_price, priority, territory, sale_start_date, vod_start_date, original_release_date, vendor_catalog_number, language_id, 
				promobox_no,additional_id,dracatalog,channel_id,product_type_id,trackdown_black_list,not_for_distribution, europe_public_domain, karaoke, unknown_artist, new_release,
				product_format, promos_number, promo_upc, sync_only, country_of_origin, short_synopsis, keywords, production_co, preorder_date, amd_id, wholesale_price_tier,
				season, episode, production_number, network, genre_note, physical_release_date, theatrical_release_date, original_digital_release_date, est,
				vod,rsd_comment,int_mkt_manager,tms_id, brand, digital_only, product_subtype_id, VERSION, ingestion_completed, release_status, meta_language, itunes_previewable, subtitle_language_id, compilation FROM `ROLLBACK-releases`
				GROUP BY upc;;

				INSERT INTO release_artist(release_artist_id, upc, role, release_id, artist_name,url)
				SELECT release_artist_id, upc, role, release_id, artist_name,url FROM `ROLLBACK-releases` WHERE release_artist_id IS NOT NULL  GROUP BY release_artist_id;;

				INSERT INTO release_subgenre(id, upc, subgenre_id, release_id)
				SELECT release_subgenre_id, upc, subgenre_id, release_id FROM `ROLLBACK-releases` WHERE release_subgenre_id IS NOT NULL GROUP BY  release_subgenre_id;;

				INSERT INTO release_status(release_status_id, release_id, STATUS, DATE, changed_by, changed_by_type, upc_REMOVED)
				SELECT release_status_id, release_id, STATUS, release_status_date, changed_by, changed_by_type, upc_REMOVED FROM `ROLLBACK-releases`
				WHERE STATUS IS NOT NULL
				GROUP BY release_status_id;;
				
				INSERT INTO release_correction(release_id,release_correction_id,`status`,last_updated,last_updated_by,last_updated_type)
				SELECT release_id, correction_id, release_correction_status, rc_last_updated, rc_last_updated_by, rc_last_updated_type
				FROM `ROLLBACK-releases` WHERE correction_id IS NOT NULL GROUP BY correction_id;;
				
				INSERT INTO release_correction_detail (`release_correction_id`,table_name,field_name,key_id,key_value,last_updated,last_updated_by,last_updated_type)
				SELECT correction_id, table_name, field_name, key_id, key_value, rcd_last_updated, rcd_last_updated_by, rcd_last_updated_type
				FROM `ROLLBACK-releases` WHERE release_correction_detail_id IS NOT NULL GROUP BY release_correction_detail_id;;

				INSERT INTO release_approval_queue(release_approval_id, release_id, release_correction_id, checked_out_by,admin_approval, STATUS, approved_by, last_updated, date_submitted, initiate_errorcorrection,submitted_by)
				SELECT release_approval_id, release_id, release_correction_id, checked_out_by,admin_approval, release_approval_status, approved_by, last_updated, date_submitted, initiate_errorcorrection,submitted_by FROM `ROLLBACK-releases`
				WHERE release_approval_status IS NOT NULL
				GROUP BY release_approval_id;;

				INSERT INTO track_writer(track_writer_id, writer_name, upc, cd, track_id, unique_track_id)
				SELECT track_writer_id, writer_name, upc, cd, track_id, unique_track_id FROM `ROLLBACK-releases`
				WHERE writer_name IS NOT NULL
				GROUP BY track_writer_id;;

				INSERT INTO release_exclusive(id, upc, dms_customer_id, sale_start_date, release_id)
				SELECT release_exclusive_id, upc, dms_customer_id, re_sale_start_date, release_id FROM `ROLLBACK-releases`
				WHERE release_exclusive_id IS NOT NULL
				GROUP BY release_exclusive_id;;
				
				UPDATE releases r INNER JOIN `ROLLBACK-releases_format` rt 
				ON r.upc = rt.upc SET r.format = rt.format;;
            ]]>
        </rollback>
    </changeSet>
</databaseChangeLog>
