<?xml version="1.0" encoding="UTF-8"?>
<changelog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.liquigraph.org/schema/1.0/liquigraph.xsd">
    <changeset id="DS-8781_restore_public_relationships:1" author="savva" run-on-change="true">
        <query>
            <![CDATA[
                // Data is loaded by chunks
                // Get the total number of records
                WITH 'snowflake_orchard' AS url_alias,
                '
                    SELECT COUNT(*) as count
                    FROM chartmetric.raw_data.l_cm_track_cm_artist r
                    JOIN chartmetric.raw_data.cm_track t ON r.cm_track = t.id
                    WHERE t.isrc IS NOT NULL
                '
                AS sql
                CALL apoc.load.jdbc(url_alias, sql)
                YIELD row
                // Calculate params for the chunking
                WITH toInteger(row.COUNT) AS total, 1000000 AS step
                WITH range(0, total/step) AS items, step
                UNWIND items AS i
                WITH step AS limit, i * step AS offset
                // Process each chunk
                CALL apoc.periodic.iterate(
                    "
                        WITH 'snowflake_orchard' AS url_alias,
                        '
                            SELECT r.cm_artist, t.isrc
                            FROM chartmetric.raw_data.l_cm_track_cm_artist r
                            JOIN chartmetric.raw_data.cm_track t ON r.cm_track = t.id
                            WHERE t.isrc IS NOT NULL
                            ORDER BY r.id
                            LIMIT ' + $limit +' OFFSET ' + $offset
                        AS sql
                        CALL apoc.load.jdbc(url_alias, sql)
                        YIELD row
                        RETURN row
                    ",
                    "
                        MATCH (pp:PublicParticipant {chartmetricId: toInteger(row.CM_ARTIST)})
                        MATCH (psr:PublicSoundRecording {isrc: row.ISRC})
                        MERGE (pp)-[r:PARTICIPATED_IN]->(psr)
                    ",
                    {batchSize:1000, iterateList:false, parallel:false, params:{limit: limit, offset: offset}}
                )
                YIELD total
                RETURN total;
            ]]>
        </query>
    </changeset>
</changelog>
