diff options
author | lain <lain@soykaf.club> | 2018-02-21 22:20:29 +0100 |
---|---|---|
committer | lain <lain@soykaf.club> | 2018-02-21 22:20:29 +0100 |
commit | f48bc5c3e1507c485d0515a4800e2123f848705f (patch) | |
tree | df2b460bd8fe040e57f4784e71a8a9cc8565ce54 | |
parent | 94db9ac4dba6ba02fcae1b9055b532818cf787c7 (diff) | |
download | pleroma-f48bc5c3e1507c485d0515a4800e2123f848705f.tar.gz pleroma-f48bc5c3e1507c485d0515a4800e2123f848705f.zip |
Make User.following a postgres array.
-rw-r--r-- | lib/pleroma/user.ex | 5 | ||||
-rw-r--r-- | priv/repo/migrations/20180221210540_make_following_postgres_array.exs | 18 |
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 |