Files
danbooru/script/fixes/101_fix_media_asset_count.rb
2022-02-12 15:22:24 -06:00

28 lines
846 B
Ruby
Executable File

#!/usr/bin/env ruby
require_relative "base"
with_confirmation do
# Fix uploads that have a non-zero media_asset_count but no media assets.
records = Upload.where("media_asset_count != 0").where.not(id: UploadMediaAsset.select(:upload_id).distinct)
puts "Fixing #{records.size} records"
records.update_all(media_asset_count: 0)
end
with_confirmation do
# Fix uploads that have a media_asset_count inconsistent with the upload_media_assets table.
records = Upload.find_by_sql(<<~SQL.squish)
UPDATE uploads
SET media_asset_count = true_count
FROM (
SELECT upload_id, COUNT(*) AS true_count
FROM upload_media_assets
GROUP BY upload_id
) true_counts
WHERE uploads.id = upload_id AND uploads.media_asset_count != true_count
RETURNING uploads.*
SQL
puts "Fixing #{records.size} records"
end