105 lines
3.5 KiB
Elixir
105 lines
3.5 KiB
Elixir
|
|
defmodule Exqlite do
|
||
|
|
@moduledoc """
|
||
|
|
SQLite3 driver for Elixir.
|
||
|
|
"""
|
||
|
|
|
||
|
|
alias Exqlite.Connection
|
||
|
|
alias Exqlite.Error
|
||
|
|
alias Exqlite.Query
|
||
|
|
alias Exqlite.Result
|
||
|
|
|
||
|
|
@doc "See `Exqlite.Connection.connect/1`"
|
||
|
|
@spec start_link([Connection.connection_opt()]) :: {:ok, pid()} | {:error, Error.t()}
|
||
|
|
def start_link(opts) do
|
||
|
|
DBConnection.start_link(Connection, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec query(DBConnection.conn(), iodata(), list(), list()) ::
|
||
|
|
{:ok, Result.t()} | {:error, Exception.t()}
|
||
|
|
def query(conn, statement, params \\ [], opts \\ []) do
|
||
|
|
query = %Query{name: "", statement: IO.iodata_to_binary(statement)}
|
||
|
|
|
||
|
|
case DBConnection.prepare_execute(conn, query, params, opts) do
|
||
|
|
{:ok, _query, result} ->
|
||
|
|
{:ok, result}
|
||
|
|
|
||
|
|
otherwise ->
|
||
|
|
otherwise
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec query!(DBConnection.conn(), iodata(), list(), list()) :: Result.t()
|
||
|
|
def query!(conn, statement, params \\ [], opts \\ []) do
|
||
|
|
case query(conn, statement, params, opts) do
|
||
|
|
{:ok, result} -> result
|
||
|
|
{:error, err} -> raise err
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec prepare(DBConnection.conn(), iodata(), list()) ::
|
||
|
|
{:ok, Query.t()} | {:error, Exception.t()}
|
||
|
|
def prepare(conn, name, statement, opts \\ []) do
|
||
|
|
query = %Query{name: name, statement: statement}
|
||
|
|
DBConnection.prepare(conn, query, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec prepare!(DBConnection.conn(), iodata(), iodata(), list()) :: Query.t()
|
||
|
|
def prepare!(conn, name, statement, opts \\ []) do
|
||
|
|
query = %Query{name: name, statement: statement}
|
||
|
|
DBConnection.prepare!(conn, query, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec prepare_execute(DBConnection.conn(), iodata(), iodata(), list(), list()) ::
|
||
|
|
{:ok, Query.t(), Result.t()} | {:error, Error.t()}
|
||
|
|
def prepare_execute(conn, name, statement, params, opts \\ []) do
|
||
|
|
query = %Query{name: name, statement: statement}
|
||
|
|
DBConnection.prepare_execute(conn, query, params, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec prepare_execute!(DBConnection.conn(), iodata(), iodata(), list(), list()) ::
|
||
|
|
{Query.t(), Result.t()}
|
||
|
|
def prepare_execute!(conn, name, statement, params, opts \\ []) do
|
||
|
|
query = %Query{name: name, statement: statement}
|
||
|
|
DBConnection.prepare_execute!(conn, query, params, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec execute(DBConnection.conn(), Query.t(), list(), list()) ::
|
||
|
|
{:ok, Result.t()} | {:error, Error.t()}
|
||
|
|
def execute(conn, query, params, opts \\ []) do
|
||
|
|
DBConnection.execute(conn, query, params, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec execute!(DBConnection.conn(), Query.t(), list(), list()) :: Result.t()
|
||
|
|
def execute!(conn, query, params, opts \\ []) do
|
||
|
|
DBConnection.execute!(conn, query, params, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec close(DBConnection.conn(), Query.t(), list()) :: :ok | {:error, Exception.t()}
|
||
|
|
def close(conn, query, opts \\ []) do
|
||
|
|
with {:ok, _} <- DBConnection.close(conn, query, opts) do
|
||
|
|
:ok
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec close!(DBConnection.conn(), Query.t(), list()) :: :ok
|
||
|
|
def close!(conn, query, opts \\ []) do
|
||
|
|
DBConnection.close!(conn, query, opts)
|
||
|
|
:ok
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec transaction(DBConnection.conn(), (DBConnection.t() -> result), list()) ::
|
||
|
|
{:ok, result} | {:error, any}
|
||
|
|
when result: var
|
||
|
|
def transaction(conn, fun, opts \\ []) do
|
||
|
|
DBConnection.transaction(conn, fun, opts)
|
||
|
|
end
|
||
|
|
|
||
|
|
@spec rollback(DBConnection.t(), term()) :: no_return()
|
||
|
|
def rollback(conn, reason), do: DBConnection.rollback(conn, reason)
|
||
|
|
|
||
|
|
@spec child_spec([Connection.connection_opt()]) :: :supervisor.child_spec()
|
||
|
|
def child_spec(opts) do
|
||
|
|
DBConnection.child_spec(Connection, opts)
|
||
|
|
end
|
||
|
|
end
|