<?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="pshrivastava">
        <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
            DROP PROCEDURE IF EXISTS `sp_update_catalog_library`;;
			
            CREATE PROCEDURE `sp_update_catalog_library`()
            BEGIN
            
            SET group_concat_max_len=1024*800;
            
            UPDATE `catalog_library` clu,
            (SELECT r.`upc`,
                GROUP_CONCAT(DISTINCT CASE WHEN ra.role = 'composer' THEN ra.artist_name END ) AS release_composer,
                GROUP_CONCAT(DISTINCT CASE WHEN ra.role = 'orchestra' THEN ra.artist_name END ) AS release_orchestra,
                GROUP_CONCAT(DISTINCT CASE WHEN ra.role = 'conductor' THEN ra.artist_name END ) AS release_conductor,
                GROUP_CONCAT(DISTINCT CASE WHEN ra.role = 'ensemble' THEN ra.artist_name END ) AS release_ensembles,
                lnr.`release_notes`
            FROM art_relations.releases r
            LEFT JOIN art_relations.release_artist ra ON ra.`release_id` = r.`release_id`
            LEFT JOIN art_relations.listening_notes_release lnr ON lnr.`upc` = r.`upc`
            GROUP BY r.`upc`) release_info
            SET clu.`release_composer` = release_info.`release_composer`,
            clu.`release_orchestra` = release_info.`release_orchestra`,
            clu.`release_ensembles` = release_info.`release_ensembles`,
            clu.`release_conductor` = release_info.`release_conductor`,
            clu.`release_listening_notes` = release_info.`release_notes`
            WHERE clu.`upc` = release_info.`upc`;
            
            UPDATE `catalog_library` cl
            INNER JOIN art_relations.listening_notes_track lnt ON lnt.`upc` = cl.`upc` AND lnt.`cd` = cl.`cd` AND lnt.`track_id` = cl.`track_id` 
            SET cl.track_listening_notes = lnt.track_notes;
            
            END;;
        </sql>
        <rollback>
            <sql dbms="mysql" endDelimiter=";;" splitStatements="true" stripComments="true">
                DROP PROCEDURE IF EXISTS `sp_update_catalog_library`;;
            </sql>
        </rollback>
    </changeSet>    
</databaseChangeLog>
