summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2021-02-18 21:03:06 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2021-02-18 21:03:06 +0300
commit998437d4a4111055e019f28dd84a8af1f9a27047 (patch)
tree3e23a9f7912f47464c59e2f910713b8e516c436a
parentb981edad8a7d8f27b231bc6164fc0546efbdb646 (diff)
[#3213] Experimental / debug feature: `database: [improved_hashtag_timeline: :preselect_hashtag_ids]`.
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex47
1 files changed, 35 insertions, 12 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index e012f2779..5392ce7c9 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -787,19 +787,42 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
defp restrict_hashtag_any(query, %{tag: [_ | _] = tags}) do
- from(
- [_activity, object] in query,
- where:
- fragment(
- """
- EXISTS (SELECT 1 FROM hashtags JOIN hashtags_objects
- ON hashtags_objects.hashtag_id = hashtags.id WHERE hashtags.name = ANY(?::citext[])
- AND hashtags_objects.object_id = ? LIMIT 1)
- """,
- ^tags,
- object.id
+ # TODO: refactor: debug / experimental feature
+ if Config.get([:database, :improved_hashtag_timeline]) == :preselect_hashtag_ids do
+ hashtag_ids =
+ from(ht in Pleroma.Hashtag,
+ where: fragment("name = ANY(?::citext[])", ^tags),
+ select: ht.id
)
- )
+ |> Repo.all()
+
+ from(
+ [_activity, object] in query,
+ where:
+ fragment(
+ """
+ EXISTS (
+ SELECT 1 FROM hashtags_objects WHERE hashtag_id = ANY(?) AND object_id = ? LIMIT 1)
+ """,
+ ^hashtag_ids,
+ object.id
+ )
+ )
+ else
+ from(
+ [_activity, object] in query,
+ where:
+ fragment(
+ """
+ EXISTS (SELECT 1 FROM hashtags JOIN hashtags_objects
+ ON hashtags_objects.hashtag_id = hashtags.id WHERE hashtags.name = ANY(?::citext[])
+ AND hashtags_objects.object_id = ? LIMIT 1)
+ """,
+ ^tags,
+ object.id
+ )
+ )
+ end
end
defp restrict_hashtag_any(query, %{tag: tag}) when is_binary(tag) do