From 779dc30d2e06a57d9505262d91fea6404ffa2e97 Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Tue, 19 May 2020 16:31:05 +1000 Subject: [PATCH] FIX: Join bookmarks migration on users to avoid missing user records * the post_actions table has no FK to users, so if a user has been deleted we may end up with dangling post_action records, which then interferes with the bookmarks migration because bookmarks DO have an FK to users --- ...20200409033412_create_bookmarks_from_post_action_bookmarks.rb | 1 + lib/tasks/bookmarks.rake | 1 + 2 files changed, 2 insertions(+) diff --git a/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb b/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb index 092a0e7b992..57b1885e350 100644 --- a/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb +++ b/db/migrate/20200409033412_create_bookmarks_from_post_action_bookmarks.rb @@ -16,6 +16,7 @@ class CreateBookmarksFromPostActionBookmarks < ActiveRecord::Migration[6.0] INNER JOIN posts ON posts.id = post_actions.post_id LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id INNER JOIN topics ON topics.id = posts.topic_id + INNER JOIN users ON users.id = post_actions.user_id WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL LIMIT 2000 SQL diff --git a/lib/tasks/bookmarks.rake b/lib/tasks/bookmarks.rake index d3cf545d2d0..87fe005b075 100644 --- a/lib/tasks/bookmarks.rake +++ b/lib/tasks/bookmarks.rake @@ -22,6 +22,7 @@ task "bookmarks:sync_to_table" => :environment do |_t, args| INNER JOIN posts ON posts.id = post_actions.post_id LEFT JOIN bookmarks ON bookmarks.post_id = post_actions.post_id AND bookmarks.user_id = post_actions.user_id INNER JOIN topics ON topics.id = posts.topic_id + INNER JOIN users ON users.id = post_actions.user_id WHERE bookmarks.id IS NULL AND post_action_type_id = :type_id AND post_actions.deleted_at IS NULL AND posts.deleted_at IS NULL LIMIT 2000 SQL