CREATE TRIGGER au_updates_1
AFTER UPDATE OF
    prefix
ON
    updates
FOR EACH ROW
BEGIN

    SELECT debug(
        'TRIGGER au_updates_1',
        NEW.id,
        NEW.prefix
    );

    UPDATE
        updates
    SET
        path =
            CASE WHEN
                NEW.parent_id IS NOT NULL
            THEN
                (SELECT
                    path
                 FROM
                    updates
                 WHERE
                    id = NEW.parent_id
                )
                || '/'
                || strftime('%Y%j%H%M%S',mtime,'unixepoch')
                || substr(NEW.prefix,1,2)
            ELSE
                strftime('%Y%j%H%M%S',mtime,'unixepoch')
                || substr(NEW.prefix,1,2)
            END
    WHERE
        id = NEW.id
    ;

    

    INSERT INTO
        project_related_updates(
            update_id,
            project_id
        )
    SELECT
        NEW.id,
        projects_tree.parent
    FROM
        project_related_updates
    INNER JOIN
        projects_tree
    ON
        projects_tree.child = project_related_updates.project_id
    WHERE
        project_related_updates.update_id = NEW.id
    ;

    

    INSERT INTO
        projects_merkle(
            project_id,
            prefix,
            hash,
            num_updates
        )
    SELECT
        project_id,
        NEW.prefix,
        substr(agg_sha1_hex(update_uuid, update_uuid),1,8) AS hash,
        count(update_uuid) as num_updates
    FROM
        (
        SELECT
            project_related_updates.project_id,
            updates.uuid AS update_uuid
        FROM
            updates
        INNER JOIN
            project_related_updates
        ON
            project_related_updates.update_id = updates.id
        INNER JOIN
            project_related_updates up2
        ON
            up2.update_id = NEW.id AND
            up2.project_id = project_related_updates.project_id
        WHERE
            updates.prefix = NEW.prefix
        )
    GROUP BY
        project_id,
        NEW.prefix
    ;

END;