Current section
Files
Jump to
Current section
Files
lib/indexer_stream.ex
defmodule Kdb.Indexer.Stream do
alias Exqlite.Sqlite3
def query(conn, sql, params \\ []) do
Stream.resource(
fn -> prepare_cursor(conn, sql, params) end,
fn cursor -> fetch_next(conn, cursor) end,
fn cursor -> close_cursor(conn, cursor) end
)
end
defp prepare_cursor(conn, sql, params) do
{:ok, stmt} = Sqlite3.prepare(conn, sql)
Sqlite3.bind(stmt, params)
stmt
end
defp fetch_next(conn, stmt) do
case Sqlite3.step(conn, stmt) do
{:row, row} -> {[row], stmt}
:done -> {:halt, stmt}
end
end
defp close_cursor(conn, stmt) do
Sqlite3.release(conn, stmt)
end
end