44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
defmodule Ecto.Adapters.SQL.Stream do
 | 
						|
  @moduledoc false
 | 
						|
 | 
						|
  defstruct [:meta, :statement, :params, :opts]
 | 
						|
 | 
						|
  def build(meta, statement, params, opts) do
 | 
						|
    %__MODULE__{meta: meta, statement: statement, params: params, opts: opts}
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
alias Ecto.Adapters.SQL.Stream
 | 
						|
 | 
						|
defimpl Enumerable, for: Stream do
 | 
						|
  def count(_), do: {:error, __MODULE__}
 | 
						|
 | 
						|
  def member?(_, _), do: {:error, __MODULE__}
 | 
						|
 | 
						|
  def slice(_), do: {:error, __MODULE__}
 | 
						|
 | 
						|
  def reduce(stream, acc, fun) do
 | 
						|
    %Stream{meta: meta, statement: statement, params: params, opts: opts} = stream
 | 
						|
    Ecto.Adapters.SQL.reduce(meta, statement, params, opts, acc, fun)
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
defimpl Collectable, for: Stream do
 | 
						|
  def into(stream) do
 | 
						|
    %Stream{meta: meta, statement: statement, params: params, opts: opts} = stream
 | 
						|
    {state, fun} = Ecto.Adapters.SQL.into(meta, statement, params, opts)
 | 
						|
    {state, make_into(fun, stream)}
 | 
						|
  end
 | 
						|
 | 
						|
  defp make_into(fun, stream) do
 | 
						|
    fn
 | 
						|
      state, :done ->
 | 
						|
        fun.(state, :done)
 | 
						|
        stream
 | 
						|
 | 
						|
      state, acc ->
 | 
						|
        fun.(state, acc)
 | 
						|
    end
 | 
						|
  end
 | 
						|
end
 |