aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAaron Tinio <aptinio@gmail.com>2019-05-16 06:25:14 +0800
committerAaron Tinio <aptinio@gmail.com>2019-05-16 06:25:14 +0800
commit793f1834d2bc37ba3d4ba11fb669078950994adb (patch)
tree99519a6205de10f6d9b842b920caa7faddc2fbc1 /lib
parent2b6119dfbf47f118dfb102fc09f6450e59ccf15e (diff)
downloadpleroma-793f1834d2bc37ba3d4ba11fb669078950994adb.tar.gz
Use named binding to conditionally join object
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/activity.ex19
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex13
2 files changed, 15 insertions, 17 deletions
diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex
index 4a0919478..3fd4003f8 100644
--- a/lib/pleroma/activity.ex
+++ b/lib/pleroma/activity.ex
@@ -60,21 +60,24 @@ defmodule Pleroma.Activity do
timestamps()
end
- def with_preloaded_object(query) do
- query
- |> join(
- :inner,
- [activity],
- o in Object,
+ def with_joined_object(query) do
+ join(query, :inner, [activity], o in Object,
on:
fragment(
"(?->>'id') = COALESCE(?->'object'->>'id', ?->>'object')",
o.data,
activity.data,
activity.data
- )
+ ),
+ as: :object
)
- |> preload([activity, object], object: object)
+ end
+
+ def with_preloaded_object(query) do
+ query
+ |> has_named_binding?(:object)
+ |> if(do: query, else: with_joined_object(query))
+ |> preload([activity, object: object], object: object)
end
def with_preloaded_bookmark(query, %User{} = user) do
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 6087a1cdc..2fd073d3a 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -750,16 +750,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
blocks = info.blocks || []
domain_blocks = info.domain_blocks || []
+ query =
+ if has_named_binding?(query, :object), do: query, else: Activity.with_joined_object(query)
+
from(
- activity in query,
- inner_join: o in Object,
- on:
- fragment(
- "(?->>'id') = COALESCE(?->'object'->>'id', ?->>'object')",
- o.data,
- activity.data,
- activity.data
- ),
+ [activity, object: o] in query,
where: fragment("not (? = ANY(?))", activity.actor, ^blocks),
where: fragment("not (? && ?)", activity.recipients, ^blocks),
where: