<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://www.liquigraph.org/schema/1.0/liquigraph.xsd">
    <changeset id="KDH-156_vendor_to_d3_p4:1" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(:Track)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)<-[gpToLp:REPRESENTS]-(gp:GlobalParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, gpToLp, gp;
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:1'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:1'
                    WITH *
                    CALL apoc.merge.relationship(gp, type(gpToLp), null, gpToLp, nlp)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant;
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:2" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)-[lpToT]-(lp:LabelParticipant)-[cf:CREATED_FROM]->(ai:ArtistInfo)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, cf, ai
                ",
                "
                CALL apoc.util.sleep(1)
                MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                    ON CREATE SET
                        nlp.id = datetime.realtime().epochMillis,
                        nlp.uuid = apoc.create.uuid(),
                        nlp.createdAt = datetime(),
                        nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:2'
                    SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                        nlp.lastModifiedAt = datetime(),
                        nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:2'
                WITH *
                CALL apoc.merge.relationship(nlp, type(cf), null, cf, ai)
                YIELD rel AS rel
                RETURN nlp as labelParticipant",
                  {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:3" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)-[:INCLUDES]->(:Track)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)-[cf:CREATED_FROM]->(:ArtistInfo)
                WHERE lp.subaccountId <> pr.subaccountId
                DELETE cf;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:4" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)<-[lpToT:PARTICIPATED_IN]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, lpToT, t
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: pr.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:4'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:4'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(lpToT), {participated_as: lpToT.participated_as}, lpToT, t)
                    YIELD rel AS rel1
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:5" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    MATCH (lp)-[cf:CREATED_FROM]->(ta:TrackArtist)<-[:HAS_SOURCE_ARTIST]-(t)
                    RETURN pr, lp, cf, ta
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:5'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:5'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(cf), null, cf, ta)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:6" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    MATCH (lp)-[cf:CREATED_FROM]->(tw:TrackWriter)<-[:HAS_SOURCE_ARTIST]-(t)
                    RETURN pr, lp, cf, tw
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:6'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:6'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(cf), null, cf, tw)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:7" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)<-[lpToT:PARTICIPATED_IN]-(lp:LabelParticipant)
                WHERE lp.subaccountId <> pr.subaccountId
                OPTIONAL MATCH (lp)-[lpToTa:CREATED_FROM]->(:TrackArtist)<-[:HAS_SOURCE_ARTIST]-(t)
                OPTIONAL MATCH (lp)-[lpToTw:CREATED_FROM]->(:TrackWriter)<-[:HAS_SOURCE_ARTIST]-(t)
                DELETE lpToT, lpToTa, lpToTw;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:8" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)<-[gpToLp:REPRESENTS]-(gp:GlobalParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, gpToLp, gp
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                    ON CREATE SET
                        nlp.id = datetime.realtime().epochMillis,
                        nlp.uuid = apoc.create.uuid(),
                        nlp.createdAt = datetime(),
                        nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:8'
                    SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                        nlp.lastModifiedAt = datetime(),
                        nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:8'
                    WITH *
                    CALL apoc.merge.relationship(gp, type(gpToLp), null, gpToLp, nlp)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:9" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(p:Product)<-[lpToP:PARTICIPATED_IN]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, lpToP, p
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:9'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:9'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(lpToP), {participated_as: lpToP.participated_as}, lpToP, p)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:10" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)-[cf:CREATED_FROM]->(ai:ArtistInfo)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, cf, ai
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:10'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:10'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(cf), null, cf, ai)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:11" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)-[cf:CREATED_FROM]->(:ArtistInfo)
                WHERE lp.subaccountId <> pr.subaccountId
                DELETE cf;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:12" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(p:Product)<-[:PARTICIPATED_IN]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    MATCH (lp)-[lpToRa:CREATED_FROM]->(ra:ReleaseArtist {productId: p.id})
                    RETURN pr, lp, lpToRa, ra
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:12'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:12'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(lpToRa), null, lpToRa, ra)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:13" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(p:Product)<-[lpToP:PARTICIPATED_IN]-(lp:LabelParticipant)
                WHERE lp.subaccountId <> pr.subaccountId
                OPTIONAL MATCH (lp)-[lpToRa:CREATED_FROM]->(:ReleaseArtist {productId: p.id})
                DELETE lpToP, lpToRa;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:14" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:CREATED_FOR_PARTICIPANT]->(lp:LabelParticipant)-[cf:CREATED_FROM]->(ai:ArtistInfo)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, cf, ai
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:14'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:14'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(cf), null, cf, ai)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:15" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:CREATED_FOR_PARTICIPANT]->(lp:LabelParticipant)-[cf:CREATED_FROM]->(:ArtistInfo)
                WHERE lp.subaccountId <> pr.subaccountId
                DELETE cf;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:16" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[lpToP:CREATED_FOR_PARTICIPANT]->(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, lpToP
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:16'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:16'
                    WITH *
                    CALL apoc.merge.relationship(pr, type(lpToP), null, lpToP, nlp)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:17" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[lpToP:CREATED_FOR_PARTICIPANT]->(lp:LabelParticipant)
                WHERE lp.subaccountId <> pr.subaccountId
                DELETE lpToP;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:18" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(:Track)-[:IS_PLACEMENT_OF]->(:LabelSoundRecording)<-[:ON_LABEL_SOUND_RECORDING]-(lsrp:LabelSoundRecordingParticipation)<-[hlsrp:HAS_LABEL_SOUND_RECORDING_PARTICIPATION]-(lp:LabelParticipant)
                    WHERE lp.subaccountId <> pr.subaccountId
                    RETURN pr, lp, hlsrp, lsrp
                ",
                "
                    CALL apoc.util.sleep(1)
                    MERGE (nlp:LabelParticipant:Orchard {normalizedName: lp.normalizedName, vendorId: lp.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlp.id = datetime.realtime().epochMillis,
                            nlp.uuid = apoc.create.uuid(),
                            nlp.createdAt = datetime(),
                            nlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:18'
                        SET nlp += apoc.map.removeKeys(lp, ['id', 'uuid', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlp.lastModifiedAt = datetime(),
                            nlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:18'
                    WITH *
                    CALL apoc.merge.relationship(nlp, type(hlsrp), null, hlsrp, lsrp)
                    YIELD rel AS rel
                    RETURN nlp as labelParticipant
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:19" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)-[lsrToT]->(lsr:LabelSoundRecording)<-[:ON_LABEL_SOUND_RECORDING]-(lsrp:LabelSoundRecordingParticipation)<-[hlsrp:HAS_LABEL_SOUND_RECORDING_PARTICIPATION]-(lp:LabelParticipant)
                WHERE lp.subaccountId <> pr.subaccountId
                DELETE hlsrp;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:20" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)-[lsrToT]-(lsr:LabelSoundRecording)<-[olsr:ON_LABEL_SOUND_RECORDING]-(lsrp:LabelSoundRecordingParticipation)
                    WHERE lsr.subaccountId <> pr.subaccountId
                    RETURN pr, lsr, olsr, lsrp
                ",
                "
                    MERGE (nlsr:LabelSoundRecording:Orchard {isrc: lsr.isrc, vendorId: pr.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlsr.id = apoc.create.uuid(),
                            nlsr.createdAt = datetime(),
                            nlsr.createdBy = 'database/KDH-156_vendor_to_d3_p4:20'
                        SET nlsr += apoc.map.removeKeys(lsr, ['id', 'isrc', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlsr.lastModifiedAt = datetime(),
                            nlsr.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:20'
                    WITH *
                    CALL apoc.merge.relationship(lsrp, type(olsr), {}, olsr, nlsr)
                    YIELD rel
                    RETURN nlsr as labelSoundRecording
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:21" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)-[lsrToT]-(lsr:LabelSoundRecording)<-[olsr:ON_LABEL_SOUND_RECORDING]-(lsrp:LabelSoundRecordingParticipation)
                WHERE lsr.subaccountId <> pr.subaccountId
                DELETE olsr;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:22" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(:Track)-[:IS_PLACEMENT_OF]->(lsr:LabelSoundRecording)<-[lsrToGsr:REPRESENTS]-(gsr:GlobalSoundRecording)
                    WHERE lsr.subaccountId <> pr.subaccountId
                    RETURN pr, lsr, lsrToGsr, gsr
                ",
                "
                    MERGE (nlsr:LabelSoundRecording:Orchard {isrc: lsr.isrc, vendorId: pr.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlsr.id = apoc.create.uuid(),
                            nlsr.createdAt = datetime(),
                            nlsr.createdBy = 'database/KDH-156_vendor_to_d3_p4:22'
                        SET nlsr += apoc.map.removeKeys(lsr, ['id', 'isrc', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlsr.lastModifiedAt = datetime(),
                            nlsr.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:22'
                    WITH *
                    CALL apoc.merge.relationship(gsr, type(lsrToGsr), null, lsrToGsr, nlsr)
                    YIELD rel
                    RETURN true
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:23" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                CALL apoc.periodic.iterate(
                "
                    MATCH (pr:Project {id: $project_id})-[:INCLUDES]->(:Product)-[:INCLUDES]->(t:Track)-[lsrToT:IS_PLACEMENT_OF]->(lsr:LabelSoundRecording)
                    WHERE lsr.subaccountId <> pr.subaccountId
                    RETURN pr, lsr, lsrToT, t
                ",
                "
                    MERGE (nlsr:LabelSoundRecording:Orchard {isrc: lsr.isrc, vendorId: pr.vendorId, subaccountId: pr.subaccountId})
                        ON CREATE SET
                            nlsr.id = apoc.create.uuid(),
                            nlsr.createdAt = datetime(),
                            nlsr.createdBy = 'database/KDH-156_vendor_to_d3_p4:23'
                        SET nlsr += apoc.map.removeKeys(lsr, ['id', 'isrc', 'vendorId', 'subaccountId', 'createdAt', 'createdBy']),
                            nlsr.lastModifiedAt = datetime(),
                            nlsr.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:23'
                    WITH *
                    CALL apoc.merge.relationship(t, type(lsrToT), null, lsrToT, nlsr)
                    YIELD rel
                    RETURN nlsr as labelSoundRecording
                ",
                {batchSize:1, iterateList:true, parallel:false, params: {project_id: toInteger(event.PROJECT_ID)}}
                )
                YIELD total, failedOperations, errorMessages, failedBatches, batch
                RETURN total, failedOperations, errorMessages, failedBatches, batch;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:24" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                <![CDATA[
                WITH label_records AS (
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        NULL AS lsr_vendor_id,
                        NULL AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN facts.prod.label_participant_participated_in_orchard_product pip
                        ON p.release_id = pip.product_id
                    JOIN facts.prod.label_participant lp
                        ON pip.label_participant_id = lp.id
                    UNION
                    SELECT 
                        v.vendor_id AS v_id,
                        pr.project_id AS pr_id, 
                        pr.vendor_id AS pr_vendor_id,
                        pr.subaccount_id AS pr_subaccount_id,
                        lp.vendor_id AS lp_vendor_id,
                        lp.subaccount_id AS lp_subaccount_id,
                        lsr.vendor_id AS lsr_vendor_id,
                        lsr.subaccount_id AS lsr_subaccount_id
                    FROM orchard_app_reporting_v2.art_relations_prod_art_relations.vendor v
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.project pr
                        ON v.vendor_id = pr.vendor_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.releases p
                        ON pr.project_id = p.project_id
                    JOIN orchard_app_reporting_v2.art_relations_prod_art_relations.track t
                        ON p.release_id = t.release_id
                    LEFT JOIN facts.prod.label_participant_participated_in_orchard_track pit
                        ON t.id = pit.track_id
                    LEFT JOIN facts.prod.label_participant lp
                        ON pit.label_participant_id = lp.id
                    LEFT JOIN facts.prod.ORCHARD_TRACK_IS_PLACEMENT_OF_LABEL_SOUND_RECORDING AS ot_ipo_lsr
                        ON t.id = ot_ipo_lsr.track_id
                    LEFT JOIN facts.prod.label_sound_recording AS lsr
                        ON ot_ipo_lsr.label_sound_recording_id = lsr.id
                ),
                inconsistent_label_records AS (
                    SELECT 
                        v_id, 
                        pr_id
                    FROM label_records
                    WHERE (
                        lp_vendor_id <> 0
                        AND
                        pr_vendor_id = lp_vendor_id
                        AND
                        pr_subaccount_id <> lp_subaccount_id
                    )
                    OR (
                        pr_vendor_id = lsr_vendor_id
                        AND
                        pr_subaccount_id <> lsr_subaccount_id
                    )
                )
                SELECT DISTINCT pr_id as PROJECT_ID
                FROM inconsistent_label_records
                WHERE v_id IN (28905)
                ;
                ]]>
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (pr:Project {id: toInteger(event.PROJECT_ID)})-[:INCLUDES]->(:Product)-[:INCLUDES]->(:Track)-[lsrToT:IS_PLACEMENT_OF]->(lsr:LabelSoundRecording)
                WHERE lsr.subaccountId <> pr.subaccountId
                DELETE lsrToT;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:25" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                SELECT 1;
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (lp:LabelParticipant)<-[sahlp:HAS_LABEL_PARTICIPANT]-(sa:Subaccount)
                WHERE lp.vendorId IN [28905] and lp.subaccountId <> sa.id
                DELETE sahlp;
            ]]>
        </cypherquery>
    </changeset>
    <changeset id="KDH-156_vendor_to_d3_p4:26" author="ssavva" run-always="true">
        <precondition>
            <sqlquery>
                SELECT 1;
            </sqlquery>
        </precondition>
        <cypherquery>
            <![CDATA[
                MATCH (lp:LabelParticipant)
                WHERE lp.vendorId IN [28905] AND lp.subaccountId <> 0
                MATCH (v:Vendor)
                WHERE v.id = lp.vendorId
                MATCH (sa:Subaccount)
                WHERE sa.id = lp.subaccountId
                MERGE (v)-[vhlp:HAS_LABEL_PARTICIPANT]->(lp)
                    ON CREATE SET
                        vhlp.createdAt = datetime(),
                        vhlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:26',
                        vhlp.lastModifiedAt = datetime(),
                        vhlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:26'
                MERGE (sa)-[sahlp:HAS_LABEL_PARTICIPANT]->(lp)
                    ON CREATE SET
                        sahlp.createdAt = datetime(),
                        sahlp.createdBy = 'database/KDH-156_vendor_to_d3_p4:26',
                        sahlp.lastModifiedAt = datetime(),
                        sahlp.lastModifiedBy = 'database/KDH-156_vendor_to_d3_p4:26'
                RETURN true;
            ]]>
        </cypherquery>
    </changeset>
</changelog>
