53 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
	
		
			1 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Pleroma.Repo.Migrations.FixMissingFollowingCount do
 | 
						|
  use Ecto.Migration
 | 
						|
 | 
						|
  def up do
 | 
						|
    """
 | 
						|
    UPDATE
 | 
						|
      users
 | 
						|
    SET
 | 
						|
      following_count = sub.count
 | 
						|
    FROM
 | 
						|
      (
 | 
						|
        SELECT
 | 
						|
          users.id AS sub_id
 | 
						|
          ,COUNT (following_relationships.id)
 | 
						|
        FROM
 | 
						|
          following_relationships
 | 
						|
          ,users
 | 
						|
        WHERE
 | 
						|
          users.id = following_relationships.follower_id
 | 
						|
        AND following_relationships.state = 'accept'
 | 
						|
        GROUP BY
 | 
						|
          users.id
 | 
						|
      ) AS sub
 | 
						|
    WHERE
 | 
						|
      users.id = sub.sub_id
 | 
						|
    AND users.local = TRUE
 | 
						|
    ;
 | 
						|
    """
 | 
						|
    |> execute()
 | 
						|
 | 
						|
    """
 | 
						|
    UPDATE
 | 
						|
      users
 | 
						|
    SET
 | 
						|
      following_count = 0
 | 
						|
    WHERE
 | 
						|
      following_count IS NULL
 | 
						|
    """
 | 
						|
    |> execute()
 | 
						|
 | 
						|
    execute("ALTER TABLE users
 | 
						|
      ALTER COLUMN following_count SET DEFAULT 0,
 | 
						|
      ALTER COLUMN following_count SET NOT NULL
 | 
						|
    ")
 | 
						|
  end
 | 
						|
 | 
						|
  def down do
 | 
						|
    execute("ALTER TABLE users
 | 
						|
      ALTER COLUMN following_count DROP DEFAULT,
 | 
						|
      ALTER COLUMN following_count DROP NOT NULL
 | 
						|
    ")
 | 
						|
  end
 | 
						|
end
 |