23 lines · 895 B
UPDATE activity
SET actor_id = (
  SELECT p.pusher_id FROM push_events p
  WHERE p.repo_id = activity.repo_id
    AND p.pusher_id IS NOT NULL
    AND p.before_sha = json_extract(activity.data, '$.before')
    AND p.after_sha = json_extract(activity.data, '$.after')
    AND (p.ref = 'refs/heads/' || json_extract(activity.data, '$.ref')
      OR p.ref = 'refs/tags/' || json_extract(activity.data, '$.ref'))
  LIMIT 1
)
WHERE actor_id IS NULL
  AND kind IN ('push', 'ref_created', 'ref_deleted')
  AND EXISTS (
    SELECT 1 FROM push_events p
    WHERE p.repo_id = activity.repo_id
      AND p.pusher_id IS NOT NULL
      AND p.before_sha = json_extract(activity.data, '$.before')
      AND p.after_sha = json_extract(activity.data, '$.after')
      AND (p.ref = 'refs/heads/' || json_extract(activity.data, '$.ref')
        OR p.ref = 'refs/tags/' || json_extract(activity.data, '$.ref'))
  );