<?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="ARTARCH-638_backfill_missing_track_artist:1" author="gaguirre" run-on-change="true">
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    "
                        WITH 'mysql_artrelations' as url_alias,
                        '
                            SELECT id, track_id, name, type
                            FROM track_artist ta
                            WHERE ta.id IN (48049673,1085796,94151191,52365021,92517867,94151083,1085824,1085792,92517976,94151062,1085782,94529123,94151118,64396845,30704117,5720892,2302884,94151198,1085739,2303031,92517881,92517713,92517685,94418359,44395765,58214190,94151114,1085771,94150947,94150892,94150969,1085780,2302755,94150917,58558975,29121553,92517911,94150963,94151110,94151726,92572904,30704114,94151138,2302878,2302765,2302758,1085761,92517977,1085785,94151042,1085751,93684685,94151199,94151202,94150924,1085776,64396691,94151049,94151022,94150952,94151036,1085808,92517732,1085834,94151091,41740295,94150883,94151187,1085749,1085783,44395770,5720884,92517838,94151094,94151069,41740299,58214191,94585045,1085777,58559006,1085743,94150991,58558944,2303040,94151058,94585147,92517933,94150950,30704124,94151105,94151150,768772,1085740,1085787,1085801,92517958,94151009,94151116,94585098,94151121,94150916,94151017,94150891,94453641,52365340,92517807,94151326,2303045,1085738,2303032,1085823,94150905,1085745,1085764,94469075,5720880,92517706,94151119,94150930,52468653,92517835,94151739,2302759,64396923,1085762,1085786,94150903,94150980,94151185,92517960,94151000,1085816,44395768,64396710,94151135,94150880,92517899,2302750,94150949,52490046,94585157,93741559,94151096,1085752,64396920,2302891,94150944,1085760,92517693,92517870,92517705,1085818,41743300,92559976,94151044,44395771,1085826,94151320,94150894,1085789,58559070,92517695,1085806,94151039,1085781,1085825,94151065,94151106,29121555,94529132,92517908,1085770,1085753,94150974,94150948,94151001,94151317,94680618,94529129,94151313,52490045,94151011,1085799,94151053,94151057,94151040,94680617,94151136,94151115,92517811,1085839,92517907,1085814,92517714,94151021,94151077,92517747,2302766,94151060,92517771,94150982,58214187,94102591,92517748,92517935,56356548,2302889,52365015,94150926,94151141,2302877,41743301,94151144,94151050,94151013,41740296,94150920,2303042,52365014,94151097,1085750,94151147,94151078,94151024,94150939,94151194,2302761,94150954,94150975,92517776,94151314,92517828,94151051,94150931,2303038,92517954,44395769,92517808,94151045,94151092,2554784,768777,94151019,94151033,5720877,94151063,1085778,94680616,92517686,94151079,94151059,94150960,94151006,92517696,2302762,93665769,94151201,94151029,2303033,52365016,2554441,94150986,94150973,2500907,64396919,94150933,58559045,94151148,94150966,94151043,94150899,58559033,92517702,94151143,92517852,94151098,1085800,94151005,52490047,1085841,1085821,94585042,94150914,1085754,94151710,41743299,94150908,2303030,92517709,41743297,41743298,92517746,94151737,94151084,94680196,1085849,92517701,94150946,94150881,94151003,94151183,94150886,1085766,30704121,58559078,94151055,92517962,94151012,92517831,1085830,92517822,94151066,94151004,58558977,2302756,94151730,94159983,92949429,56356553,94150910,1085790,92517823,44395766,41743296,94151054,2302892,94150957,1085774,94151101,92517707,44395763,30704115,2303044,58559058,94151047,1085822,92517966,64396428,1085838,94150985,94151020,94151145,94150956,1085813,94151124,94150932,1085833,52365334,94151100,94585164,94150940,56356543,64396924,94151316,2303048,64396918,94151028,94151197,92517895,2302874,94150915,92517704,94150925,44395767,64396917,58214188,94151068,94150936,92517928,44395773,94150979,93182952,30704116,2303036,58559066,30704113,5720891,94151103,94151712,94150929,30704126,94151067,94151190,5720889,93910095,93050616,56356558,92517802,94151189,92517898,93684684,92517886,2302887,94150988,1085831,2303029,92517725,94150904,60180577,92517856,1085811,94150934,94150911,1085817,92517784,2302886,5720887,92517876,58214184,94680197,94151318,94151037,94151735,94150876,2303047,92517698,2302881,94151080,94151173,44395772,94151736,94666088,1085820,92517821,94151090,1085812,94151188,92517782,58559099,94150999,94151738,92517896,92517989,94151064,92517689,94151780,1085758,94135217,92576784,94151193,92750818,94151132,1085829,94151007,94151032,1085747,2302757,94151731,92517726,1085843,92517961,94150919,93182951,52365018,52365019,1085815,94151086,94151111,94151184,2302875,58214185,94151122,94151149,94453605,94151087,52365332,94151130,768773,768775,768776,94150967,1085802,94151192,58214180,2302760,94150992,94150977,92517697,92517909,94150987,94151076,94151052,92517893,2303034,5720882,2303046,41740301,94151046,94151196,56356555,94151728,94529125,94151733,58214189,94151195,2302749,5720881,29121556,1085805,94151002,5720876,2302890,93708973,94150993,92517731,94151120,94151200,92517750,92517703,94151071,2303037,1085836,94150942,2303035,94150928,94150998,94151025,2500908,22450936,2302879,1085746,94150978,92517682,94151732,52468654,2303039,64396425,94529127,94151123,94151126,94151070,94151127,94151113,94150972,93946749,94151117,94151095,92517690,2302763,94150965,768774,92517849,1085804,94151085,94151018,94151048,92517694,1085765,94151315,92517827,92517845,1085828,94151088,94151031,94151323,1085741,94151139,94529130,94151140,58214181,94151142,92517733,1085768,92517801,94151740,94150884,58214177,92517743,94150885,2303041,92531862,94150902,94151056,94151061,2302883,94150959,94151027,2302888,94150896,1085791,92517769,2302752,1085794,52490048,92517892,93425982,94151075,52468657,41743295,94585163,56356570,92517880,94150921,94151038,94151082,2302873,92517727,94151072,92517820,1085832,94150996,94151763,92718737,94529131,94151319,1085772,5720879,92735548,94150927,94150958,58214186,94150922,94529124,1085840,2302885,56356554,94150901,94150968,1085819,92517734,94150918,64396426,94150909,94151073,93327861,94150976,92517683,92517681,92517887,93698617,94151133,2554783,1085773,94150937,94585161,94151131,92517983,1085763,52365017,1085848,94151023,44395764,92517795,94151109,1085809,1085807,1085793,94151711,92517857,94150879,94151104,94151014,94150943,5720888,1085748,64396916,41743302,1085827,1085755,92517866,94680519,94529126,92517787,56356545,1085788,94150882,94151034,30704120,94151035,92517924,29121554,1085797,64396427,5720890,56356569,94151107,58559023,30704119,5720886,1085759,64396421,92517684,94151099,1085835,92517862,94150951,1085810,2302753,1085850,94585160,92517855,76733579,94150897,92814846,94151128,2302876,94150941,94150971,30704118,94151146,94151134,94150962,1085845,92517687,1085837,92517688,92517888,94151137,92517930,1085842,94151081,92517891,94585183,2303043,1085779,94150984,1085775,94150878,94151026,58214178,5720883,1085769,94150970,93645215,94150889,92517794,92517971,94151734,94470001,94151108,94150945,1085756,94151102,94151125,56356535,94150893,94151010,2302754,94512078,94150938,30704125,2302751,94455483,94151112,94150895,94150935,94585170,1085847,92517847,41740300,41740302,2554442,1085803,94151327,64396922,92517914,5720878,30704123,2302880,1085844,94151727,94150953,94151015,2302764,52490049,94150906,94529128,94151186,64396422,52365335,94151089,2476391,1085742,92517708,94151729,94151321,1085798,1085795,64396728,94150964,1085757,52365020,58214183,94151016,94151714,30704122,2302882,52468658,94680406,94150983,41740294,5720885,94150997,94150995,94151129,58214179,94151074,52365341,41740297,58214182,52365331,93980014,55610527,94150913,41740298,56356539,94150994,44395761,94151008,94151093,64396423,94150955,1085744,64396921,1085767,94150961,44395762,1085784,94150923,94150981,2476392,1085846,94150877,94151030)
                        ' as sql
                        CALL apoc.load.jdbc(url_alias, sql)
                        YIELD row
                        RETURN row
                    ",
                    "
                        MERGE (ta:TrackArtist {id: toInteger(row.id)})
                            ON CREATE SET
                                ta.trackId = toInteger(row.track_id),
                                ta.name = row.name,
                                ta.type = row.type,
                                ta.createdAt = datetime(),
                                ta.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                ta.lastModifiedAt = datetime(),
                                ta.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                            ON MATCH SET
                                ta.trackId = toInteger(row.track_id),
                                ta.name = row.name,
                                ta.type = row.type,
                                ta.lastModifiedAt = datetime(),
                                ta.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        WITH *
                        MATCH (t:Track:Orchard {id: ta.trackId})
                        MATCH (p:Product:Orchard)-[:INCLUDES]->(t)
                        MATCH (pr:Project)-[:INCLUDES]->(p)
                        WHERE EXISTS(pr.subaccountId)
                        MERGE (t)-[hsa:HAS_SOURCE_ARTIST]->(ta)
                            ON CREATE SET
                                hsa.createdAt = datetime(),
                                hsa.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                hsa.lastModifiedAt = datetime(),
                                hsa.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        MERGE (i:IncrementId {nodeName: 'LabelParticipant'})
                            ON CREATE SET i.id = 1
                            ON MATCH SET i.id = i.id + 1
                        MERGE (
                            lp:LabelParticipant:Orchard {
                                normalizedName: toLower(trim(apoc.text.regreplace(ta.name, '[ ]+', ''))),
                                vendorId: pr.vendorId,
                                subaccountId: pr.subaccountId
                            }
                        )
                            ON CREATE SET
                                lp.id = i.id,
                                lp.uuid = apoc.create.uuid(),
                                lp.createdAt = datetime(),
                                lp.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                lp.lastModifiedAt = datetime(),
                                lp.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                lp.name = trim(apoc.text.regreplace(ta.name, '[ ]{2,}', ' '))
                            ON MATCH SET
                                lp.lastModifiedAt = datetime(),
                                lp.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        MERGE (lp)-[participation:PARTICIPATED_IN {participated_as: ta.type}]->(t)
                            ON CREATE SET
                                participation.createdAt = datetime(),
                                participation.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                participation.lastModifiedAt = datetime(),
                                participation.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        MERGE (lp)-[cf:CREATED_FROM]->(ta)
                            ON CREATE SET
                                cf.createdAt = datetime(),
                                cf.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                cf.lastModifiedAt = datetime(),
                                cf.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        MERGE (v:Vendor:Label:Orchard {id: lp.vendorId})
                            ON CREATE SET
                                v.createdAt = datetime(),
                                v.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                v.lastModifiedAt = datetime(),
                                v.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        MERGE (v)-[hlp:HAS_LABEL_PARTICIPANT]->(lp)
                            ON CREATE SET
                                hlp.createdAt = datetime(),
                                hlp.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                hlp.lastModifiedAt = datetime(),
                                hlp.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        FOREACH (hasSubAccount IN
                                    CASE WHEN not (lp.subaccountId = 0) THEN [1] ELSE [] END |
                            MERGE (sa:SubAccount:Subaccount:Label {id: lp.subaccountId})
                                ON CREATE SET
                                    sa.createdAt = datetime(),
                                    sa.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                    sa.lastModifiedAt = datetime(),
                                    sa.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                            MERGE (sa)-[shlp:HAS_LABEL_PARTICIPANT]->(lp)
                                ON CREATE SET
                                    shlp.createdAt = datetime(),
                                    shlp.createdBy = 'database/ARTARCH-638_backfill_missing_track_artist',
                                    shlp.lastModifiedAt = datetime(),
                                    shlp.lastModifiedBy = 'database/ARTARCH-638_backfill_missing_track_artist'
                        )
                    ",
                    {batchSize:100, iterateList:true, parallel:false}
                );
            ]]>
        </query>
    </changeset>
</changelog>
