N+1 fixes for CLI maintenance command (#28847)
This commit is contained in:
		
							parent
							
								
									b0207d7757
								
							
						
					
					
						commit
						d03fe2bdee
					
				@ -275,7 +275,7 @@ module Mastodon::CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def deduplicate_users_process_email
 | 
					    def deduplicate_users_process_email
 | 
				
			||||||
      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users GROUP BY email HAVING count(*) > 1").each do |row|
 | 
					      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users GROUP BY email HAVING count(*) > 1").each do |row|
 | 
				
			||||||
        users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a
 | 
					        users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a
 | 
				
			||||||
        ref_user = users.shift
 | 
					        ref_user = users.shift
 | 
				
			||||||
        say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
 | 
					        say "Multiple users registered with e-mail address #{ref_user.email}.", :yellow
 | 
				
			||||||
        say "e-mail will be disabled for the following accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
					        say "e-mail will be disabled for the following accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
				
			||||||
@ -289,7 +289,7 @@ module Mastodon::CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def deduplicate_users_process_confirmation_token
 | 
					    def deduplicate_users_process_confirmation_token
 | 
				
			||||||
      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row|
 | 
					      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE confirmation_token IS NOT NULL GROUP BY confirmation_token HAVING count(*) > 1").each do |row|
 | 
				
			||||||
        users = User.where(id: row['ids'].split(',')).order(created_at: :desc).to_a.drop(1)
 | 
					        users = User.where(id: row['ids'].split(',')).order(created_at: :desc).includes(:account).to_a.drop(1)
 | 
				
			||||||
        say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
					        say "Unsetting confirmation token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        users.each do |user|
 | 
					        users.each do |user|
 | 
				
			||||||
@ -313,7 +313,7 @@ module Mastodon::CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def deduplicate_users_process_password_token
 | 
					    def deduplicate_users_process_password_token
 | 
				
			||||||
      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row|
 | 
					      ActiveRecord::Base.connection.select_all("SELECT string_agg(id::text, ',') AS ids FROM users WHERE reset_password_token IS NOT NULL GROUP BY reset_password_token HAVING count(*) > 1").each do |row|
 | 
				
			||||||
        users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).to_a.drop(1)
 | 
					        users = User.where(id: row['ids'].split(',')).order(updated_at: :desc).includes(:account).to_a.drop(1)
 | 
				
			||||||
        say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
					        say "Unsetting password reset token for those accounts: #{users.map { |user| user.account.acct }.join(', ')}", :yellow
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        users.each do |user|
 | 
					        users.each do |user|
 | 
				
			||||||
@ -591,7 +591,7 @@ module Mastodon::CLI
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def deduplicate_local_accounts!(scope)
 | 
					    def deduplicate_local_accounts!(scope)
 | 
				
			||||||
      accounts = scope.order(id: :desc).to_a
 | 
					      accounts = scope.order(id: :desc).includes(:account_stat, :user).to_a
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      say "Multiple local accounts were found for username '#{accounts.first.username}'.", :yellow
 | 
					      say "Multiple local accounts were found for username '#{accounts.first.username}'.", :yellow
 | 
				
			||||||
      say 'All those accounts are distinct accounts but only the most recently-created one is fully-functional.', :yellow
 | 
					      say 'All those accounts are distinct accounts but only the most recently-created one is fully-functional.', :yellow
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user