mirror of
https://github.com/discourse/discourse.git
synced 2025-03-22 08:35:31 +08:00
PERF: much faster Badge.ensure_consistency
This commit is contained in:
parent
e6f22725c8
commit
3d406b047c
@ -132,12 +132,24 @@ class Badge < ActiveRecord::Base
|
|||||||
exec_sql <<-SQL.squish
|
exec_sql <<-SQL.squish
|
||||||
DELETE FROM user_badges
|
DELETE FROM user_badges
|
||||||
USING user_badges ub
|
USING user_badges ub
|
||||||
LEFT JOIN users u ON u.id = ub.user_id
|
LEFT JOIN users u ON u.id = ub.user_id
|
||||||
WHERE u.id IS NULL
|
WHERE u.id IS NULL
|
||||||
AND user_badges.id = ub.id
|
AND user_badges.id = ub.id
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
Badge.find_each(&:reset_grant_count!)
|
exec_sql <<-SQL.squish
|
||||||
|
WITH X AS (
|
||||||
|
SELECT badge_id
|
||||||
|
, COUNT(user_id) users
|
||||||
|
FROM user_badges
|
||||||
|
GROUP BY badge_id
|
||||||
|
)
|
||||||
|
UPDATE badges
|
||||||
|
SET grant_count = X.users
|
||||||
|
FROM X
|
||||||
|
WHERE id = X.badge_id
|
||||||
|
AND grant_count <> X.users
|
||||||
|
SQL
|
||||||
end
|
end
|
||||||
|
|
||||||
def awarded_for_trust_level?
|
def awarded_for_trust_level?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user