<?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-634_backfill_projects_2:1" author="owright" run-on-change="true">
        <query>
            <![CDATA[
                CALL apoc.periodic.iterate(
                    "
                        WITH 'mysql_artrelations' as url_alias,
                        '
                            SELECT project_id, vendor_id, subaccount_id, artist_id, deletions
                            FROM project
                            WHERE project_id in (
                                1905616, 1915278, 1919224, 1919880, 1922658, 1923475, 1928971, 1934437, 1935567, 1936699, 1937722, 1943242, 1948905, 1950153, 1959818, 1963739, 1966118, 1975169, 1997431, 2034157, 2034158, 2038580, 2039282, 2041561, 2046897, 2056285, 2068016, 2071631, 2127655, 2134952, 2169209, 2175528, 2182490, 2186775, 2189913, 2191698, 2201215, 2209598, 2215884, 2216619, 2223053, 2224156, 2243878, 2246748, 2264018, 2270215, 2271502, 2276571, 2290698, 2294086, 2300863, 2323921, 2328103, 2332020, 2334495, 2360332, 2361982, 2374824, 2378354, 2386970, 2389623, 2393618, 2397509, 2398104, 2400668, 2430779, 2435053, 2443444, 2445277, 2449053, 2454013, 2454571, 2471074, 2471076, 2501569, 2504129, 2518229, 2520948, 2547472, 2557997, 2558718, 2568204, 2576654, 2579279, 2587886, 2601575, 2610240, 2614381, 2621501, 2628081, 2628688, 2632666, 2634837, 2647584, 2661483, 2664278, 2672318, 2675657, 2686879, 2709384,
                                2709489, 2726671, 2735161, 2736319, 2746614, 2757273, 2760959, 2790783, 2798131, 2813058, 2813716, 2824486, 2830915, 2835490, 2843309, 2843654, 2858887, 2859389, 2859658, 2861151, 2863030, 2868005, 2869461, 2871203, 2881292, 2891245, 2892403, 2896120, 2917099, 2931807, 2935122, 2939695, 2951862, 2954086, 2957920, 2963008, 2963484, 2964466, 2968017, 2968533, 2986310, 2997514, 3001633, 3002993, 3012781, 3015971, 3018576, 3025422, 3035409, 3060777, 3077591, 3102026, 3105255, 3113030, 3140410, 3182350, 3186200, 3189396, 3195657, 3196653, 3199598, 3199840, 3200847, 3204798, 3206348, 3210630, 3213488, 3215358, 3216642, 3217409, 3224610, 3227956, 3227969, 3231237, 3232461, 3235180, 3235787, 3246231, 3247791, 3250287, 3251654, 3252352, 3252782, 3255518, 3294179, 3319104, 3324353, 3331292, 3346390, 3346416, 3346433, 3346453, 3346457, 3346467, 3346545, 3346651, 3346751, 3346774, 3346779, 3346918,
                                3346958, 3346962, 3346971, 3347002, 3347127, 3347252, 3347581, 3347698, 3353068, 3353075, 3353084, 3353101, 3353115, 3353171, 3353283, 3353290, 3353311, 3353321, 3353328, 3353351, 3353384, 3353388, 3353404, 3353417, 3353449, 3353472, 3353495, 3353511, 3353552, 3353682, 3353766, 3353815, 3357846, 3406787, 3409361, 3420196, 3423005, 3427117, 3457977, 3480497, 4768789, 4768790, 4768791, 4768792, 4768793, 4768794, 4768795, 4768796, 4768797, 4768798, 4768799, 4768800, 4768801, 4768802, 4768803, 4768804, 4768805, 4768806, 4768807, 4768808, 4768809, 4768810, 4768811, 4768812, 4768813, 4768814, 4768815, 4768816, 4768817, 4768818, 4768819, 4768820, 4768821, 4768822, 4768823, 4768824, 4768825, 4768826, 4768827, 4768828, 4768829, 4768830, 4768831, 4768832, 4768833, 4768834, 4768835, 4768836, 4768837, 4768838, 4768839, 4768840, 4768841, 4768842, 4768843, 4768844, 4768845, 4768846, 4768847, 4768848,
                                4768849, 4768850, 4768851, 4768852, 4768853, 4768854, 4768855, 4768856, 4768857, 4768858, 4768859, 4768860, 4768861, 4768862, 4768863, 4768864, 4768865, 4768866, 4768867, 4768868, 4768869, 4768870, 4768871, 4768872, 4768873, 4768874, 4768875, 4768876, 4768877, 4768878, 4768879, 4768880, 4768881, 4768882, 4768883, 4768884, 4768885, 4768886, 4768887, 4768888, 4768889, 4768890, 4768891, 4768892, 4768893, 4768894, 4768895, 4768896, 4768897, 4768898, 4768899, 4768900, 4768901, 4768902, 4768903, 4768904, 4768905, 4768906, 4768907, 4768908, 4768909, 4768910
                            )
                        ' 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 (pr:Project {id: toInteger(row.project_id)})
                            ON CREATE SET
                                pr.vendorId = toInteger(row.vendor_id),
                                pr.subaccountId = toInteger(row.subaccount_id),
                                pr.artistId = toInteger(row.artist_id),
                                pr.deletions = (row.deletions = 'Y'),
                                pr.createdAt = datetime(),
                                pr.createdBy = 'database/artarch-634_backfill_projects',
                                pr.lastModifiedAt = datetime(),
                                pr.lastModifiedBy = 'database/artarch-634_backfill_projects'
                            ON MATCH SET
                                pr.vendorId = toInteger(row.vendor_id),
                                pr.subaccountId = toInteger(row.subaccount_id),
                                pr.artistId = toInteger(row.artist_id),
                                pr.deletions = (row.deletions = 'Y'),
                                pr.lastModifiedAt = datetime(),
                                pr.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        MERGE (v:Vendor:Label:Orchard {id: pr.vendorId})
                            ON CREATE SET
                                v.createdAt = datetime(),
                                v.uuid = apoc.create.uuid(),
                                v.createdBy = 'database/artarch-634_backfill_projects',
                                v.lastModifiedAt = datetime(),
                                v.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        MERGE (pr)-[bt:BELONGS_TO]->(v)
                            ON CREATE SET
                                bt.createdAt = datetime(),
                                bt.createdBy = 'database/artarch-634_backfill_projects',
                                bt.lastModifiedAt = datetime(),
                                bt.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        WITH DISTINCT totalRows, rowNumber, row, pr, v
                        OPTIONAL MATCH (pr)-[incorrect_ownership:BELONGS_TO]->(sa:Subaccount:Label)
                        WHERE sa.id <> pr.subaccountId
                        DELETE incorrect_ownership
                        WITH DISTINCT totalRows, rowNumber, row, pr, v
                        FOREACH (isSubAccount IN CASE WHEN pr.subaccountId <> 0 THEN [1] ELSE [] END |
                            MERGE (sa:SubAccount:Subaccount:Label {id: pr.subaccountId})
                                ON CREATE SET
                                    sa.createdAt = datetime(),
                                    sa.uuid = apoc.create.uuid(),
                                    sa.createdBy = 'database/artarch-634_backfill_projects',
                                    sa.lastModifiedAt = datetime(),
                                    sa.lastModifiedBy = 'database/artarch-634_backfill_projects'
                            MERGE (pr)-[bts:BELONGS_TO]-(sa)
                                ON CREATE SET
                                    bts.createdAt = datetime(),
                                    bts.createdBy = 'database/artarch-634_backfill_projects',
                                    bts.lastModifiedAt = datetime(),
                                    bts.lastModifiedBy = 'database/artarch-634_backfill_projects'
                            MERGE (v)-[o:OWNS]->(sa)
                                ON CREATE SET
                                    o.createdAt = datetime(),
                                    o.createdBy = 'database/artarch-634_backfill_projects',
                                    o.lastModifiedAt = datetime(),
                                    o.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        )
                        FOREACH (isArtistInfo IN CASE WHEN pr.artistId <> 0 THEN [1] ELSE [] END |
                            MERGE (ai:ArtistInfo {id: pr.artistId})
                                ON CREATE SET
                                    ai.createdAt = datetime(),
                                    ai.createdBy = 'database/artarch-634_backfill_projects',
                                    ai.lastModifiedAt = datetime(),
                                    ai.lastModifiedBy = 'database/artarch-634_backfill_projects'
                            MERGE (pr)-[ha:HAS_ARTIST]->(ai)
                                ON CREATE SET
                                    ha.createdAt = datetime(),
                                    ha.createdBy = 'database/artarch-634_backfill_projects',
                                    ha.lastModifiedAt = datetime(),
                                    ha.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        )
                        WITH totalRows, rowNumber, pr, v, toInteger(row.artist_id) AS artistId
                        MATCH (:LabelParticipant)<-[cfp:CREATED_FOR_PARTICIPANT]-(pr)-[ha:HAS_ARTIST]->(oldAI:ArtistInfo)
                        WHERE oldAI.id <> artistId
                        DELETE ha, cfp
                        WITH totalRows, rowNumber, pr, v
                        MATCH (pr)-[:HAS_ARTIST]->(ai)
                        WHERE ai.name IS NOT NULL
                        MERGE (i:IncrementId {nodeName: \"LabelParticipant\"})
                            ON CREATE SET i.id = 1
                            ON MATCH SET i.id = i.id + 1
                        MERGE (lp:LabelParticipant:Orchard {
                            vendorId: pr.vendorId,
                            subaccountId: pr.subaccountId,
                            normalizedName: toLower(trim(apoc.text.regreplace(ai.name, '[ ]+', '')))
                        })
                        ON CREATE SET
                            lp.id = i.id - totalRows + rowNumber + 1,
                            lp.uuid = apoc.create.uuid(),
                            lp.createdAt = datetime(),
                            lp.createdBy = 'database/artarch-634_backfill_projects',
                            lp.lastModifiedAt = datetime(),
                            lp.lastModifiedBy = 'database/artarch-634_backfill_projects',
                            lp.name = trim(apoc.text.regreplace(ai.name, '[ ]{2,}', ' '))
                        MERGE (lp)-[cf:CREATED_FROM]->(ai)
                            ON CREATE SET
                                cf.createdAt = datetime(),
                                cf.createdBy = 'database/artarch-634_backfill_projects',
                                cf.lastModifiedAt = datetime(),
                                cf.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        MERGE (pr)-[cfp:CREATED_FOR_PARTICIPANT]->(lp)
                            ON CREATE SET
                                cfp.createdAt = datetime(),
                                cfp.createdBy = 'database/artarch-634_backfill_projects',
                                cfp.lastModifiedAt = datetime(),
                                cfp.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        MERGE (v)-[hlp:HAS_LABEL_PARTICIPANT]->(lp)
                            ON CREATE SET
                                hlp.createdAt = datetime(),
                                hlp.createdBy = 'database/artarch-634_backfill_projects',
                                hlp.lastModifiedAt = datetime(),
                                hlp.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        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.uuid = apoc.create.uuid(),
                                    sa.createdBy = 'database/artarch-634_backfill_projects',
                                    sa.lastModifiedAt = datetime(),
                                    sa.lastModifiedBy = 'database/artarch-634_backfill_projects'
                            MERGE (sa)-[shlp:HAS_LABEL_PARTICIPANT]->(lp)
                                ON CREATE SET
                                    shlp.createdAt = datetime(),
                                    shlp.createdBy = 'database/artarch-634_backfill_projects',
                                    shlp.lastModifiedAt = datetime(),
                                    shlp.lastModifiedBy = 'database/artarch-634_backfill_projects'
                        )
                    ",
                    {batchSize:1000}
                )
                YIELD failedOperations, errorMessages, failedBatches, batch
                CALL apoc.util.validate(failedOperations > 0, "At least one sub-operation failed: %s", [reduce(all_errors = "", error IN keys(errorMessages) | all_errors + ", " + error)])
                CALL apoc.util.validate(failedBatches > 0, "At least one batch failed: %s", [reduce(all_errors = "", error IN keys(batch.errors) | all_errors + ", " + error)])
                RETURN 0
            ]]>
        </query>
    </changeset>
</changelog>
