Current section
Files
Jump to
Current section
Files
lib/ayesql/runner.ex
defmodule AyeSQL.Runner do
@moduledoc """
This module defines an `AyeSQL.Runner`.
"""
alias AyeSQL.Query
@doc """
Callback to initialize the runner.
"""
@callback run(query :: Query.t(), options :: keyword()) ::
{:ok, term()} | {:error, term()}
@doc """
Uses the `AyeSQL.Runner` behaviour.
"""
defmacro __using__(_options) do
quote do
@behaviour AyeSQL.Runner
end
end
# Handles the result.
@doc false
@spec handle_result(map()) :: {:ok, [map()]}
def handle_result(result)
def handle_result(%{columns: nil}) do
{:ok, []}
end
def handle_result(%{columns: columns, rows: rows}) do
columns = Enum.map(columns, &String.to_atom/1)
result =
rows
|> Stream.map(&Stream.zip(columns, &1))
|> Enum.map(&Map.new/1)
{:ok, result}
end
def handle_result(result) do
{:ok, result}
end
end