# Current

[![Continuous Integration](](
[![Coverage Status](](

Current provides more powerful streaming mechanisms than those offered by [Ecto]( 
Forked from [Bourne]( which is inactive.

## Summary

### Keyset:

* 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.

### Cursor:

* 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.

## Example

defmodule My.Repo do
  use Ecto.Repo, otp_app: :mine
  use Current

import Ecto.Query
q = from(actor in Actor, where: actor.born <= 1980)

# You can stream through an `Enumerable`:, method: :keyset) |> Stream.each(&IO.inspect) |>, method: :cursor) |> Stream.each(&IO.inspect) |>

## Installation

  1. Add `current` to your list of dependencies in `mix.exs`:

  def deps do
    [{:current, "~> 2.0"}]

  2. Fetch and compile your new dependency:

  mix do deps.get current, deps.compile

  3. Drink your :tea:

  4. That's it!

## Usage

Refer to the [documentation](

### ASDF

Using Bash:
git clone ~/.asdf --branch v0.7.6
echo -e '\n. $HOME/.asdf/' >> ~/.bash_profile
echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile
source ~/.bash_profile
asdf plugin-add erlang
asdf plugin-add elixir
# cd path/to/current
asdf install
asdf reshim
mix local.hex --if-missing
mix local.rebar --force
mix do deps.get, compile

## Testing

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

## License

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 ``.