summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-02-21 22:20:29 +0100
committerlain <lain@soykaf.club>2018-02-21 22:20:29 +0100
commitf48bc5c3e1507c485d0515a4800e2123f848705f (patch)
treedf2b460bd8fe040e57f4784e71a8a9cc8565ce54
parent94db9ac4dba6ba02fcae1b9055b532818cf787c7 (diff)
downloadpleroma-f48bc5c3e1507c485d0515a4800e2123f848705f.tar.gz
pleroma-f48bc5c3e1507c485d0515a4800e2123f848705f.zip
Make User.following a postgres array.
-rw-r--r--lib/pleroma/user.ex5
-rw-r--r--priv/repo/migrations/20180221210540_make_following_postgres_array.exs18
2 files changed, 20 insertions, 3 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index bc7f2601f..a902c57e3 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -249,10 +249,9 @@ defmodule Pleroma.User do
end
end
- # TODO: these queries could be more efficient if the type in postgresql wasn't map, but array.
def get_followers(%User{id: id, follower_address: follower_address}) do
q = from u in User,
- where: fragment("? @> ?", u.following, ^follower_address ),
+ where: ^follower_address in u.following,
where: u.id != ^id
{:ok, Repo.all(q)}
@@ -291,7 +290,7 @@ defmodule Pleroma.User do
def update_follower_count(%User{} = user) do
follower_count_query = from u in User,
- where: fragment("? @> ?", u.following, ^user.follower_address),
+ where: ^user.follower_address in u.following,
where: u.id != ^user.id,
select: count(u.id)
diff --git a/priv/repo/migrations/20180221210540_make_following_postgres_array.exs b/priv/repo/migrations/20180221210540_make_following_postgres_array.exs
new file mode 100644
index 000000000..98ca7d9d7
--- /dev/null
+++ b/priv/repo/migrations/20180221210540_make_following_postgres_array.exs
@@ -0,0 +1,18 @@
+defmodule Pleroma.Repo.Migrations.MakeFollowingPostgresArray do
+ use Ecto.Migration
+
+ def change do
+ alter table(:users) do
+ add :following_temp, {:array, :string}
+ end
+
+ execute """
+ update users set following_temp = array(select jsonb_array_elements_text(following));
+ """
+
+ alter table(:users) do
+ remove :following
+ end
+ rename table(:users), :following_temp, to: :following
+ end
+end