- Feature: Handle sync vs async via an option passed in at Dataloader.new() and KV.new(). Example:
def dataloader(ctx \\ %{}) do
Dataloader.new(async?: !MyApp.Repo.in_transaction?())
|> Dataloader.add_source(MainLoader, MainLoader.data(ctx))
end
Note that ecto sources will automatically handle whether to perform queries sync or async depending on if it's in a transaction.
IMPORTANT: The option MUST be passed to Dataloader.new
for this to work properly. In order for this to happen automatically, upgrade to 2.0
- Support Telemetry 1.0
- Various typo and doc fixes.
- Improvement: KV data sources now pass opts to
Dataloader.run_tasks/3
(#94) - Improvement: Add support for
where
andjoin_where
inhas_many
andmany_to_many
associations (#119) - Bug Fix: Avoid preloads in lateral subqueries (#98)
- Bug Fix: Use existing database prefix when preloading via lateral join (#107)
- Bug Fix: Fix issue with
Dataloader.Ecto.run_batches/1
(#126) - Doc improvements
- Improvement: Optimize out inspect calls when keys are not found (#84)
- KV source bug fixes (#75)
- Doc improvements
- Bug Fix: Depend on
ecto
instead ofecto_sql
. Fixes Ecto 2.x support (#67)
- Improvement: Ecto 3 support (which is just improving the tests)
- Improvement: Better error messages if you pass a non-ecto schema to
Dataloader.load/4
orDatalaoder.get/4
- Bug Fix: Fix dialyzer spec for run_batch function
- Bug Fix: Fix loading of nested through associations (#65)
Breaking change: Dependency changed from ecto
to ecto_sql
which
unintentionally breaks Dataloader.Ecto
on Ecto 2.x projects
(#67).
- Bug Fix: Poor supervisor structure has been improved, which fixes large memory usage issues
-
Enhancement: Improved error handling when sources fail to load This provides two additional configurable methods of error handling (these options can be passed to
Dataloader.new/1
)::return_nil_on_error
- This is the previous default. Errors are logged, and values returnnil
.:raise_on_error
- this will raise aDataloader.GetError
when one of theget
methods are called. This is now the default behaviour for handling errors:tuples
- this changes theget/4
/get_many/4
methods to return:ok
/:error
tuples instead of just the value. This frees up the caller to handle errors any way they see fit
-
Enhancement: Improved caching characteristics on the KV source
-
Enhancement: More flexible cardinality mapping for Ecto source
-
Enhancement: Uniq the batched KV and Ecto values
-
Bug Fix: When using the Ecto source it properly coerces all inputs for known fields.
Note: when upgrading it may be necessary to clear out your _build
directory so
that the compiler picks up the protocol change.
- Errors are raised instead of silently returning nil. See
:return_nil_on_error
option to keep the previous behavior. Dataloader.get/4
will raise an error if you pass in anitem_key
that was not previously loaded. See #52 for discussion.
- Enhancement: Custom batch functions for Ecto
- Bug Fix: Ecto source properly caches results now.
- Initial release