Current provides more powerful streaming mechanisms than those offered by Ecto. Forked from Bourne which is inactive.
- Iterates by monotonic key say BIGSERIAL identifier.
- Either ascending or descending order.
- Essentially performs repeated SELECT * FROM table WHERE id > N LIMIT 1000 statements, feeding N from the last seen key.
- Does not require a transaction.
- Iterates using a cursor - leveraging server functionality for streaming large row sets.
- You can read more here.
- Essentially a SELECT * FROM table that is streamed in sets of rows.
- Requires a transaction.
defmodule My.Repo do
use Ecto.Repo, otp_app: :mine
use Current
end
import Ecto.Query
q = from(actor in Actor, where: actor.born <= 1980)
# You can stream through an `Enumerable`:
My.Repo.stream(q, method: :keyset) |> Stream.each(&IO.inspect) |> Stream.run
My.Repo.stream(q, method: :cursor) |> Stream.each(&IO.inspect) |> Stream.run
- Add
current
to your list of dependencies inmix.exs
:
def deps do
[{:current, "~> 2.0"}]
end
- Fetch and compile your new dependency:
mix do deps.get current, deps.compile
-
Drink your 🍵
-
That's it!
Refer to the documentation.
Using Bash:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.6
echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bash_profile
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile
source ~/.bash_profile
asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin-add elixir https://github.com/asdf-vm/asdf-elixir.git
# cd path/to/current
asdf install
asdf reshim
mix local.hex --if-missing
mix local.rebar --force
mix do deps.get, compile
The test suite relies on a locally running postgres insatnce. You can use docker to create one quickly:
docker run --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres
Current is free and unencumbered software released into the public domain, with fallback provisions for jurisdictions that don't recognize the public domain.
For details, see LICENSE.md
.