aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/repo.ex
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2020-09-22 17:13:46 +0200
committerlain <lain@soykaf.club>2020-09-22 17:13:46 +0200
commitc95859e45b18dec1d00f721ef3c5b4bb1406ea37 (patch)
treec22f7a200c0e0e551796bf5e9f1b09afccd64dd4 /lib/pleroma/repo.ex
parent9853c90abba213bdc87dccf5620cb0d9eb19c049 (diff)
parent02f12ec6253093d8bedaf84d78d0f7e533745e1b (diff)
downloadpleroma-c95859e45b18dec1d00f721ef3c5b4bb1406ea37.tar.gz
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into issue/2115
Diffstat (limited to 'lib/pleroma/repo.ex')
-rw-r--r--lib/pleroma/repo.ex23
1 files changed, 21 insertions, 2 deletions
diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex
index f317e4d58..4524bd5e2 100644
--- a/lib/pleroma/repo.ex
+++ b/lib/pleroma/repo.ex
@@ -49,7 +49,21 @@ defmodule Pleroma.Repo do
end
end
- def chunk_stream(query, chunk_size) do
+ @doc """
+ Returns a lazy enumerable that emits all entries from the data store matching the given query.
+
+ `returns_as` use to group records. use the `batches` option to fetch records in bulk.
+
+ ## Examples
+
+ # fetch records one-by-one
+ iex> Pleroma.Repo.chunk_stream(Pleroma.Activity.Queries.by_actor(ap_id), 500)
+
+ # fetch records in bulk
+ iex> Pleroma.Repo.chunk_stream(Pleroma.Activity.Queries.by_actor(ap_id), 500, :batches)
+ """
+ @spec chunk_stream(Ecto.Query.t(), integer(), atom()) :: Enumerable.t()
+ def chunk_stream(query, chunk_size, returns_as \\ :one) do
# We don't actually need start and end funcitons of resource streaming,
# but it seems to be the only way to not fetch records one-by-one and
# have individual records be the elements of the stream, instead of
@@ -69,7 +83,12 @@ defmodule Pleroma.Repo do
records ->
last_id = List.last(records).id
- {records, last_id}
+
+ if returns_as == :one do
+ {records, last_id}
+ else
+ {[records], last_id}
+ end
end
end,
fn _ -> :ok end