Commit f48bc5c3 authored by lain's avatar lain

Make User.following a postgres array.

parent 94db9ac4
......@@ -249,10 +249,9 @@ def get_or_fetch_by_nickname(nickname) 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 @@ def update_note_count(%User{} = 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)
......
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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment