fix: override Repo.all/2 to accept :limit/:offset opts for Oban Pro compat
This commit is contained in:
parent
3297147c31
commit
65df3f9242
1 changed files with 25 additions and 0 deletions
|
|
@ -2,4 +2,29 @@ defmodule Microwaveprop.Repo do
|
||||||
use Ecto.Repo,
|
use Ecto.Repo,
|
||||||
otp_app: :microwaveprop,
|
otp_app: :microwaveprop,
|
||||||
adapter: Ecto.Adapters.Postgres
|
adapter: Ecto.Adapters.Postgres
|
||||||
|
|
||||||
|
import Ecto.Query
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Overrides `Ecto.Repo.all/2` to accept `:limit` and `:offset` as
|
||||||
|
keyword options. Oban Pro 1.7's `DynamicLifeline` plugin passes
|
||||||
|
`Repo.all(query, limit: n)` directly, which Ecto ≥ 3.13 rejects
|
||||||
|
via `validate_query_opts!/2`. We fold those options into the query
|
||||||
|
before delegating so downstream callers (our code included) don't
|
||||||
|
have to change.
|
||||||
|
"""
|
||||||
|
defoverridable all: 2
|
||||||
|
|
||||||
|
@spec all(Ecto.Queryable.t(), Keyword.t()) :: [Ecto.Schema.t()] | [map()]
|
||||||
|
def all(queryable, opts) do
|
||||||
|
{limit, opts} = Keyword.pop(opts, :limit)
|
||||||
|
{offset, opts} = Keyword.pop(opts, :offset)
|
||||||
|
|
||||||
|
queryable =
|
||||||
|
queryable
|
||||||
|
|> then(fn q -> if limit, do: from(x in q, limit: ^limit), else: q end)
|
||||||
|
|> then(fn q -> if offset, do: from(x in q, offset: ^offset), else: q end)
|
||||||
|
|
||||||
|
super(queryable, opts)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue