Migrations: Set users.following_count to NOT NULL
authorlain <lain@soykaf.club>
Thu, 28 Nov 2019 16:01:43 +0000 (17:01 +0100)
committerlain <lain@soykaf.club>
Thu, 28 Nov 2019 16:01:43 +0000 (17:01 +0100)
Also set following_count for local users to the correct value and for remote
users to 0.

priv/repo/migrations/20191128153944_fix_missing_following_count.exs [new file with mode: 0644]

diff --git a/priv/repo/migrations/20191128153944_fix_missing_following_count.exs b/priv/repo/migrations/20191128153944_fix_missing_following_count.exs
new file mode 100644 (file)
index 0000000..3236de7
--- /dev/null
@@ -0,0 +1,53 @@
+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