about summary refs log tree commit diff
path: root/db/migrate/20180812173710_copy_status_stats.rb
diff options
context:
space:
mode:
authorThibaut Girka <thib@sitedethib.com>2018-08-18 18:04:49 +0200
committerThibaut Girka <thib@sitedethib.com>2018-08-18 18:04:49 +0200
commitbfeac6747a58b660f0d1b3766c7cfb3ea2655fce (patch)
treee9d1366c30b94df21ec767276fbde175428399fb /db/migrate/20180812173710_copy_status_stats.rb
parent7423c0c1308555db3072ae64141250fdd33ce235 (diff)
parent298ee84488758fc08a0ae9233e04c9637aa2fe02 (diff)
Merge branch 'master' into glitch-soc/merge-upstream
Conflicts:
	.circleci/config.yml
	app/controllers/authorize_follows_controller.rb
	app/javascript/packs/public.js

Moved new stuff from packs/public.js to core/public.js.
Added appropriate use_pack in new controllers.
Diffstat (limited to 'db/migrate/20180812173710_copy_status_stats.rb')
-rw-r--r--db/migrate/20180812173710_copy_status_stats.rb17
1 files changed, 10 insertions, 7 deletions
diff --git a/db/migrate/20180812173710_copy_status_stats.rb b/db/migrate/20180812173710_copy_status_stats.rb
index 64a564ca0..0c5907c30 100644
--- a/db/migrate/20180812173710_copy_status_stats.rb
+++ b/db/migrate/20180812173710_copy_status_stats.rb
@@ -3,13 +3,16 @@ class CopyStatusStats < ActiveRecord::Migration[5.2]
 
   def up
     safety_assured do
-      execute <<-SQL.squish
-        INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
-        SELECT id, reblogs_count, favourites_count, created_at, updated_at
-        FROM statuses
-        ON CONFLICT (status_id) DO UPDATE
-        SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
-      SQL
+      Status.where.not(id: StatusStat.select('status_id')).select('id').find_in_batches do |statuses|
+        execute <<-SQL.squish
+          INSERT INTO status_stats (status_id, reblogs_count, favourites_count, created_at, updated_at)
+          SELECT id, reblogs_count, favourites_count, created_at, updated_at
+          FROM statuses
+          WHERE id IN (#{statuses.map(&:id).join(', ')})
+          ON CONFLICT (status_id) DO UPDATE
+          SET reblogs_count = EXCLUDED.reblogs_count, favourites_count = EXCLUDED.favourites_count
+        SQL
+      end
     end
   end