From 6322c1e123c102d603bd9f6e8bd443568c2fd1cb Mon Sep 17 00:00:00 2001 From: Alex S Date: Mon, 15 Apr 2019 11:43:02 +0700 Subject: [PATCH] migration optimization changelog wording --- CHANGELOG.md | 2 +- .../20190414125034_migrate_old_bookmarks.exs | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c538dd9f0..24d6456b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,7 +54,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Deps: Updated Cowboy to 2.6 - Deps: Updated Ecto to 3.0.7 - Don't ship finmoji by default, they can be installed as an emoji pack -- `User.bookmarks` in separate table, added support max_id & since_id for bookmark timeline endpoints. +- Mastodon API: Added support max_id & since_id for bookmark timeline endpoints. ### Fixed - Followers counter not being updated when a follower is blocked diff --git a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs index 1930fc3cf..c30c302f7 100644 --- a/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs +++ b/priv/repo/migrations/20190414125034_migrate_old_bookmarks.exs @@ -1,16 +1,26 @@ defmodule Pleroma.Repo.Migrations.MigrateOldBookmarks do use Ecto.Migration + import Ecto.Query alias Pleroma.Activity alias Pleroma.Bookmark alias Pleroma.User alias Pleroma.Repo def up do - Repo.all(User) - |> Enum.each(fn user -> - Enum.each(user.old_bookmarks, fn id -> - activity = Activity.get_create_by_object_ap_id(id) - {:ok, _} = Bookmark.create(user.id, activity.id) + query = + from(u in User, + where: u.local == true, + where: fragment("array_length(?, 1)", u.old_bookmarks) > 0, + select: %{id: u.id, old_bookmarks: u.old_bookmarks} + ) + + Repo.transaction(fn -> + Repo.stream(query) + |> Enum.each(fn user -> + Enum.each(user.old_bookmarks, fn id -> + activity = Activity.get_create_by_object_ap_id(id) + {:ok, _} = Bookmark.create(user.id, activity.id) + end) end) end) end