Skip to content

Commit 390ad76

Browse files
committed
more specs
1 parent 2dfebfc commit 390ad76

File tree

2 files changed

+48
-8
lines changed

2 files changed

+48
-8
lines changed

lib/exqlite.ex

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,30 +44,29 @@ defmodule Exqlite do
4444
defp open_flag_value(unquote(name)), do: unquote(value)
4545
end
4646

47+
@default_open_flags [:readwrite, :create, :exrescode]
48+
4749
@doc """
4850
Opens a new sqlite database at the Path provided.
4951
`path` can be `":memory"` to keep the sqlite database in memory.
5052
5153
## Options
5254
5355
* `:flags` - flags to use to open the database for reading and writing.
54-
Defaults to `[:readwrite, :create, :exrescode]`.
56+
Defaults to `#{inspect(@default_open_flags)}`.
5557
See https://www.sqlite.org/c3ref/c_open_autoproxy.html for more options.
5658
5759
"""
5860
@spec open(String.t(), [open_flag]) :: {:ok, conn} | {:error, Error.t()}
59-
def open(path, flags \\ [:readwrite, :create, :exrescode]) do
61+
def open(path, flags \\ @default_open_flags) do
6062
path = String.to_charlist(path)
6163

6264
flags =
6365
Enum.reduce(flags, 0, fn flag, acc ->
6466
Bitwise.bor(acc, open_flag_value(flag))
6567
end)
6668

67-
case Nif.open(path, flags) do
68-
{:ok, _conn} = ok -> ok
69-
{:error, reason} -> {:error, Error.exception(message: reason)}
70-
end
69+
wrap_error(Nif.open(path, flags))
7170
end
7271

7372
@doc """
@@ -265,9 +264,11 @@ defmodule Exqlite do
265264
If this function is called multiple times, only the last pid will
266265
receive the notifications
267266
"""
267+
@spec set_log_hook(pid) :: :ok | {:error, Error.t()}
268268
def set_log_hook(pid), do: wrap_error(Nif.set_log_hook(pid))
269269

270270
# TODO sql / statement
271+
@compile inline: [wrap_error: 1]
271272
defp wrap_error({:error, reason}) do
272273
{:error, Error.exception(message: reason)}
273274
end

lib/exqlite/nif.ex

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,61 @@ defmodule Exqlite.Nif do
99
:erlang.load_nif(path, 0)
1010
end
1111

12-
def open(_conn, _flags), do: :erlang.nif_error(:not_loaded)
12+
@spec open(charlist, [Exqlite.open_flag()]) ::
13+
{:ok, Exqlite.conn()} | {:error, String.t()}
14+
def open(_path, _flags), do: :erlang.nif_error(:not_loaded)
15+
16+
@spec close(Exqlite.conn()) :: :ok | {:error, String.t()}
1317
def close(_conn), do: :erlang.nif_error(:not_loaded)
18+
19+
@spec execute(Exqlite.conn(), iodata) :: :ok | {:error, String.t()}
1420
def execute(_conn, _sql), do: :erlang.nif_error(:not_loaded)
21+
22+
@spec changes(Exqlite.conn()) :: {:ok, non_neg_integer} | {:error, String.t()}
1523
def changes(_conn), do: :erlang.nif_error(:not_loaded)
24+
25+
@spec prepare(Exqlite.conn(), iodata) :: {:ok, Exqlite.stmt()} | {:error, String.t()}
1626
def prepare(_conn, _sql), do: :erlang.nif_error(:not_loaded)
27+
28+
@spec bind(Exqlite.conn(), Exqlite.stmt(), [Exqlite.bind_arg()]) ::
29+
:ok | {:error, String.t()}
1730
def bind(_conn, _stmt, _args), do: :erlang.nif_error(:not_loaded)
31+
32+
@spec step(Exqlite.conn(), Exqlite.stmt()) ::
33+
{:row, Exqlite.returned_row()} | :done | :busy | {:error, String.t()}
1834
def step(_conn, _stmt), do: :erlang.nif_error(:not_loaded)
35+
36+
@spec multi_step(Exqlite.conn(), Exqlite.stmt(), non_neg_integer) ::
37+
{:rows | :done, [Exqlite.returned_row()]} | :busy | {:error, String.t()}
1938
def multi_step(_conn, _stmt, _max_rows), do: :erlang.nif_error(:not_loaded)
20-
def multi_bind_step(_conn, _stmt, _rows), do: :erlang.nif_error(:not_loaded)
39+
40+
@spec columns(Exqlite.conn(), Exqlite.stmt()) ::
41+
{:ok, [String.t()]} | {:error, String.t()}
2142
def columns(_conn, _stmt), do: :erlang.nif_error(:not_loaded)
43+
44+
@spec last_insert_rowid(Exqlite.conn()) ::
45+
{:ok, non_neg_integer} | {:error, String.t()}
2246
def last_insert_rowid(_conn), do: :erlang.nif_error(:not_loaded)
47+
48+
@spec transaction_status(Exqlite.conn()) ::
49+
{:ok, :transaction | :idle} | {:error, String.t()}
2350
def transaction_status(_conn), do: :erlang.nif_error(:not_loaded)
51+
52+
@spec serialize(Exqlite.conn(), charlist) :: {:ok, binary} | {:error, String.t()}
2453
def serialize(_conn, _database), do: :erlang.nif_error(:not_loaded)
54+
55+
@spec deserialize(Exqlite.conn(), charlist, iodata) :: :ok | {:error, String.t()}
2556
def deserialize(_conn, _database, _serialized), do: :erlang.nif_error(:not_loaded)
57+
58+
@spec release(Exqlite.stmt()) :: :ok | {:error, String.t()}
2659
def release(_stmt), do: :erlang.nif_error(:not_loaded)
60+
61+
@spec enable_load_extension(Exqlite.conn(), integer) :: :ok | {:error, String.t()}
2762
def enable_load_extension(_conn, _flag), do: :erlang.nif_error(:not_loaded)
63+
64+
@spec set_update_hook(Exqlite.conn(), pid) :: :ok | {:error, String.t()}
2865
def set_update_hook(_conn, _pid), do: :erlang.nif_error(:not_loaded)
66+
67+
@spec set_log_hook(pid) :: :ok | {:error, String.t()}
2968
def set_log_hook(_pid), do: :erlang.nif_error(:not_loaded)
3069
end

0 commit comments

Comments
 (0)