Make user timelines faster for users with few statuses.
authorRoger Braun <roger@rogerbraun.net>
Sat, 1 Jul 2017 14:43:10 +0000 (16:43 +0200)
committerRoger Braun <roger@rogerbraun.net>
Sat, 1 Jul 2017 14:43:10 +0000 (16:43 +0200)
lib/pleroma/web/activity_pub/activity_pub.ex
lib/pleroma/web/ostatus/ostatus_controller.ex
priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs [new file with mode: 0644]

index 79c1d5b6951aedb79b53d6fa8448f20fd367e147..69a2d8f4ef23c18d5d59eff3b17e1b43af602ea7 100644 (file)
@@ -112,7 +112,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
 
   defp restrict_actor(query, %{"actor_id" => actor_id}) do
     from activity in query,
-      where: fragment("? @> ?", activity.data, ^%{actor: actor_id})
+      where: fragment("?->>'actor' = ?", activity.data, ^actor_id)
   end
   defp restrict_actor(query, _), do: query
 
index e676a60c3dd8efc7a1360ff8f1233416fa018ff6..05acfd04bc0f3d5879b4a4c4e3b9d185e8676339 100644 (file)
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
   def feed(conn, %{"nickname" => nickname}) do
     user = User.get_cached_by_nickname(nickname)
     query = from activity in Activity,
-      where: fragment("? @> ?", activity.data, ^%{actor: user.ap_id}),
+      where: fragment("?->>'actor' = ?", activity.data, ^user.ap_id),
       limit: 20,
       order_by: [desc: :inserted_at]
 
diff --git a/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs b/priv/repo/migrations/20170701142005_add_actor_index_to_activity.exs
new file mode 100644 (file)
index 0000000..82c6439
--- /dev/null
@@ -0,0 +1,7 @@
+defmodule Pleroma.Repo.Migrations.AddActorIndexToActivity do
+  use Ecto.Migration
+
+  def change do
+    create index(:activities, ["(data->>'actor')", "inserted_at desc"], name: :activities_actor_index)
+  end
+end