Skip to content
forked from mtwilliams/bourne

🚤 Better streaming for Ecto. (Updated to Ecto 3)

License

Notifications You must be signed in to change notification settings

cherryman/bourne

 
 

Repository files navigation

Bourne

Continuous Integration Code Coverage Documentation Package

Bourne provides more powerful streaming mechanisms than those offered by Ecto or Tributary. Notably, it provides both cursor and keyset pagination methods, as well as the ability to create a GenStage producer with similar semantics to GenStage.from_enumerable.

Example

defmodule My.Repo do
  use Ecto.Repo, otp_app: :mine
  use Bourne
end

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

# You can stream through an `Enumerable`:
My.Repo.stream(q) |> Stream.each(&IO.inspect) |> Stream.run

# Alternatively, you can stream through a GenStage producer:
defmodule InspectorConsumer do
  use GenStage

  def start_link do
    GenStage.start_link(InspectorConsumer, [])
  end

  def init([]) do
    {:consumer, :ok}
  end

  def handle_events(rows, _from, state) do
    Enum.each(rows, &IO.inspect/1)
    {:noreply, [], state}
  end
end

method = Enum.take_random(~W{cursor keyset}a, 1)
{:ok, producer} = My.Repo.streamer(q, method: method)
{:ok, consumer} = InspectorConsumer.start_link
GenStage.sync_subscribe(consumer, to: producer)

Installation

  1. Add bourne to your list of dependencies in mix.exs:
def deps do
  [{:bourne, "~> 1.0"}]
end
  1. Fetch and compile your new dependency:
mix do deps.get bourne, deps.compile
  1. Drink your 🍵

  2. That's it!

Usage

Refer to the documentation.

License

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

About

🚤 Better streaming for Ecto. (Updated to Ecto 3)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Elixir 100.0%