<?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="DIS-1036_backfill_missing_track_writer:1" author="gaguirre" run-on-change="true">
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    "
                        WITH 'mysql_artrelations' as url_alias,
                        '
                            SELECT
                                tw.track_writer_id,
                                tw.unique_track_id,
                                tw.writer_name
                            FROM track_writer tw
                            WHERE tw.track_writer_id IN (66693170,66696564,66696753,66498891,66635842,66699092,66685608,66697096,66646110,66696796,66696537,66696676,66700015,66700026,66714629,66685907,66696256,66696511,66696710,66696527,66696742,66696805,66704029,66696505,66696638,66693161,66696652,65615805,66696759,66696547,66696699,66696633,66696749,66685641,66688828,66696499,66696722,66696506,66700062,66700051,66700061,66696618,66696716,66692394,66700399,66702731,66696502,66696675,66696725,66696579,66696673,66696631,66704541,66690310,66697065,66700056,66696834,66696538,66696552,66697589,66696467,66696504,66692390,66693585,66696619,66696584,66696783,66696642,66696647,66696531,66696553,66696795,66689697,66696758,66696632,66696672,66692388,66696767,66693263,66696974,66690981,66693001,66694087,66685873,66696546,66696711,66696613,66697063,66696473,66674537,66696793,66696757,66698966,66693581,66696543,66696818,66686935,66696744,66697064,66696665,66696572,66696590,66696629,66705836,66712970,66696625,66635860,66715688,66700044,66696501,66696688,66696803,66696518,66696581,66696545,66696721,66696267,66692393,66700400,66696812,66696768,66696656,66696821,66696659,66696636,66697044,66692400,66693180,66696801,66696623,66696560,66696530,66696602,66696788,66696762,66696779,66700393,66700065,66711960,53453586,66696570,66696516,66662681,66696733,66696641,66696550,66696585,66499101,66697077,66697066,66685890,66696661,66669988,66703281,66693000,66499047,66637591,66703034,66696820,66696535,66696520,66635821,66697612,66696569,66635816,66705604,66696651,66696558,66697092,66699350,66697091,66696287,66696555,66703857,66714240,66697287,66696542,66696712,66696709,66499159,66696523,66696705,66696571,66696680,66696605,66711956,66700492,66696828,66696591,66696597,66705933,66696777,66696702,66696693,66696707,66696743,66693154,66662167,66696662,66696526,66697078,66696760,66696761,66696660,66696683,66696648,66696704,66696561,66662675,66690970,66696695,66697071,66703973,66696524,66696682,66696616,66696608,66696568,66696729,66696815,66696781,66693174,66696708,66690980,66703179,66693179,66715702,66696612,66697075,66637587,66696755,66697074,66696614,66635831,66703444,66696778,66696587,66696634,66705368,66696806,66696687,66696610,66696606,66697079,66697699,66702590,66696654,66688003,66696738,66696713,66697087,66698963,66696791,66696775,66698880,66696622,66697057,66697070,66696811,66706989,66697090,66698265,66703072,66696601,66696831,66697093,66696809,66704030,66696583,66696715,66696533,53461406,66696751,66696596,66696588,66705135,66566616,66692399,66696650,66692586,66702561,66712463,66696263,66696679,66696663,66697062,66696628,66690934,66697912,66697043,66700030,66697072,66696717,66696624,66696697,66696681,66696696,66691801,66696653,53461407,66696773,66696500,66711718,66696657,66696728,66698266,66696737,66696750,66693002,66696766,66696816,66696639,66696691,53453959,66696752,66696544,66696617,66671113,53453960,66711865,66700064,66696271,66696799,66696671,66696521,66696577,66696776,66696769,66703507,66696732,66697086,66696574,66696643,66696706,66635853,66693173,66696701,66696514,66696668,66696698,66696726,66696593,66696600,66696718,66696826,66697094,66697061,66696754,66696644,66696649,66698268,66696667,66696823,66700037,66697089,66696782,66696469,66696829,66712465,66686943,66499054,66697084,66696519,66696621,66687692,66696736,66696630,66696645,66703448,66696765,66696723,66696764,66704393,66696528,66696724,66697058,66675509,66696677,66696720,66690988,66702567,66696774,66696808,66690996,66697069,66696731,66696595,66696615,66696286,66696646,66696566,66696586,66696635,66699352,66701675,66690967,66697041,53461408,66696830,66697098,66696562,66696694,66697088,66414955,66697059,66696804,66696525,66699095,66696784,66699102,66699100,66711972,66696730,66696573,66696575,66696689,66696658,66696692,66697919,66696666,66696576,66684588,66696589,66696620,66704236,66696719,53453589,66700047,66696627,53453957,66498521,66700024,66699103,66696819,66696790,66696554,66696604,66697060,66696599,66696678,66696789,66696807,66696700,66697702,66696810,66696684,66696582,66696534,66696655,66696813,66696746,66696512,66697073,66696797,66693609,66696465,66696509,66697095,66693573,66696756,66696685,66696513,66696522,66686588,66700043,66696563,66686030,66662523,66697608,66697056,66692334,66697085,66696780,66696507,66696674,66712969,66697081,66696814,66703456,66696611,66696551,66716119,66690972,66697097,66697067,66696592,66696503,66696557,66696281,66696603,66417205,66505380,66704298,66696594,66697611,66696792,66696640,66696798,66696748,66696565,66696802,66696747,66696626,66696664,66696690,66635834,66696745,66696727,66696508,66696824,66696266,66696686,66702730,66636829,66696772,66696817,66696559,66696670,66711730,66692389,66689711,66696770,66694098,66696833,66696536,66696515,66694084,66696763,66696567,66695554,66696282,66696517,66696540,66697076,66696669,66696607,66690978,66696800,53453961,66700033,66697068,66696578,66669996,66699349,66700022,66697080,66696288,66696787,66696786,66696637,66697605,66696714,66696794,66705826,66685598,66696827,66696703,66635845,66696609,66696822,66696832,66703134,66675872,66711944,66696771,66696580,66690924,66697598,66697042,66685642,66700395,66697565,66696785,66696470,66696510,66696532)
                        ' as sql
                        CALL apoc.load.jdbc(url_alias, sql)
                        YIELD row
                        RETURN row
                    ",
                    "
                        WITH collect(row) AS rows
                        UNWIND range(0, size(rows) - 1) AS rowNumber
                        WITH rowNumber, size(rows) AS totalRows, rows[rowNumber] AS row
                        MERGE (tw:TrackWriter {id: toInteger(row.track_writer_id)})
                            ON CREATE SET
                                tw.uniqueTrackId = toInteger(row.unique_track_id),
                                tw.writerName = row.writer_name,
                                tw.createdAt = datetime(),
                                tw.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                tw.lastModifiedAt = datetime(),
                                tw.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                            ON MATCH SET
                                tw.uniqueTrackId = toInteger(row.unique_track_id),
                                tw.writerName = row.writer_name,
                                tw.lastModifiedAt = datetime(),
                                tw.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        WITH tw, rowNumber, totalRows
                        MATCH (t:Track:Orchard {id: tw.uniqueTrackId})
                        MATCH (p:Product:Orchard)-[:INCLUDES]->(t)
                        MATCH (pr:Project)-[:INCLUDES]->(p)
                        WHERE EXISTS(pr.subaccountId)
                        MERGE (t)-[hsa:HAS_SOURCE_ARTIST]->(tw)
                            ON CREATE SET
                                hsa.createdAt = datetime(),
                                hsa.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                hsa.lastModifiedAt = datetime(),
                                hsa.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        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(tw.writerName, '[ ]+', ''))),
                                vendorId: pr.vendorId,
                                subaccountId: pr.subaccountId
                            }
                        )
                            ON CREATE SET
                                lp.id = i.id - totalRows + rowNumber + 1,
                                lp.uuid = apoc.create.uuid(),
                                lp.createdAt = datetime(),
                                lp.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                lp.lastModifiedAt = datetime(),
                                lp.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer',
                                lp.name = trim(apoc.text.regreplace(tw.writerName, '[ ]{2,}', ' '))
                            ON MATCH SET
                                lp.lastModifiedAt = datetime(),
                                lp.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        MERGE (lp)-[participation:PARTICIPATED_IN {participated_as: 'track_writer'}]->(t)
                            ON CREATE SET
                                participation.createdAt = datetime(),
                                participation.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                participation.lastModifiedAt = datetime(),
                                participation.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                            ON MATCH SET
                                participation.lastModifiedAt = datetime(),
                                participation.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        MERGE (lp)-[cf:CREATED_FROM]->(tw)
                            ON CREATE SET
                                cf.createdAt = datetime(),
                                cf.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                cf.lastModifiedAt = datetime(),
                                cf.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        MERGE (v:Vendor:Label:Orchard {id: lp.vendorId})
                            ON CREATE SET
                                v.createdAt = datetime(),
                                v.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                v.lastModifiedAt = datetime(),
                                v.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        MERGE (v)-[hlp:HAS_LABEL_PARTICIPANT]->(lp)
                            ON CREATE SET
                                hlp.createdAt = datetime(),
                                hlp.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                hlp.lastModifiedAt = datetime(),
                                hlp.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        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/DIS-1036_backfill_missing_track_writer',
                                    sa.lastModifiedAt = datetime(),
                                    sa.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                            MERGE (sa)-[shlp:HAS_LABEL_PARTICIPANT]->(lp)
                                ON CREATE SET
                                    shlp.createdAt = datetime(),
                                    shlp.createdBy = 'database/DIS-1036_backfill_missing_track_writer',
                                    shlp.lastModifiedAt = datetime(),
                                    shlp.lastModifiedBy = 'database/DIS-1036_backfill_missing_track_writer'
                        )
                    ",
                    {batchSize:50, iterateList:true, parallel:false}
                );
            ]]>
        </query>
    </changeset>
</changelog>
