Skip to content

Commit 5870b15

Browse files
authored
Correct typespecs (#177)
1 parent 6e44e9e commit 5870b15

File tree

3 files changed

+17
-16
lines changed

3 files changed

+17
-16
lines changed

lib/exqlite/connection.ex

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ defmodule Exqlite.Connection do
452452
end
453453
end
454454

455+
@spec maybe_changes(Sqlite3.db(), Query.t()) :: integer() | nil
455456
defp maybe_changes(db, %Query{command: command})
456457
when command in [:update, :insert, :delete] do
457458
case Sqlite3.changes(db) do

lib/exqlite/sqlite3.ex

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ defmodule Exqlite.Sqlite3 do
1919
@type db() :: reference()
2020
@type statement() :: reference()
2121
@type reason() :: atom() | String.t()
22-
@type row() :: []
22+
@type row() :: list()
2323

2424
@doc """
2525
Opens a new sqlite database at the Path provided.
@@ -46,7 +46,6 @@ defmodule Exqlite.Sqlite3 do
4646
case Sqlite3NIF.execute(conn, sql) do
4747
:ok -> :ok
4848
{:error, reason} -> {:error, reason}
49-
_ -> {:error, "unhandled error"}
5049
end
5150
end
5251

@@ -57,7 +56,7 @@ defmodule Exqlite.Sqlite3 do
5756
5857
See: https://sqlite.org/c3ref/changes.html
5958
"""
60-
@spec changes(db()) :: {:ok, integer()}
59+
@spec changes(db()) :: {:ok, integer()} | {:error, reason()}
6160
def changes(conn), do: Sqlite3NIF.changes(conn)
6261

6362
@spec prepare(db(), String.t()) :: {:ok, statement()} | {:error, reason()}
@@ -68,29 +67,29 @@ defmodule Exqlite.Sqlite3 do
6867
@spec bind(db(), statement(), nil) :: :ok | {:error, reason()}
6968
def bind(conn, statement, nil), do: bind(conn, statement, [])
7069

71-
@spec bind(db(), statement(), []) :: :ok | {:error, reason()}
70+
@spec bind(db(), statement(), list()) :: :ok | {:error, reason()}
7271
def bind(conn, statement, args) do
7372
Sqlite3NIF.bind(conn, statement, Enum.map(args, &convert/1))
7473
end
7574

76-
@spec columns(db(), statement()) :: {:ok, []} | {:error, reason()}
75+
@spec columns(db(), statement()) :: {:ok, [binary()]} | {:error, reason()}
7776
def columns(conn, statement), do: Sqlite3NIF.columns(conn, statement)
7877

79-
@spec step(db(), statement()) :: :done | :busy | {:row, []}
78+
@spec step(db(), statement()) :: :done | :busy | {:row, [row()]} | {:error, reason()}
8079
def step(conn, statement), do: Sqlite3NIF.step(conn, statement)
8180

82-
@spec multi_step(db(), statement()) :: :busy | {:rows, [row()]} | {:done, [row()]}
81+
@spec multi_step(db(), statement()) :: :busy | {:rows, [row()]} | {:done, [row()]} | {:error, reason()}
8382
def multi_step(conn, statement) do
8483
chunk_size = Application.get_env(:exqlite, :default_chunk_size, 50)
8584
multi_step(conn, statement, chunk_size)
8685
end
8786

8887
@spec multi_step(db(), statement(), integer()) ::
89-
:busy | {:rows, [row()]} | {:done, [row()]}
88+
:busy | {:rows, [row()]} | {:done, [row()]} | {:error, reason()}
9089
def multi_step(conn, statement, chunk_size) do
9190
case Sqlite3NIF.multi_step(conn, statement, chunk_size) do
9291
:busy ->
93-
{:error, "Database busy"}
92+
:busy
9493

9594
{:error, reason} ->
9695
{:error, reason}
@@ -187,7 +186,7 @@ defmodule Exqlite.Sqlite3 do
187186
@doc """
188187
Allow loading native extensions.
189188
"""
190-
@spec enable_load_extension(db(), boolean) :: :ok | {:error, any}
189+
@spec enable_load_extension(db(), boolean()) :: :ok | {:error, reason()}
191190
def enable_load_extension(conn, flag) do
192191
if flag do
193192
Sqlite3NIF.enable_load_extension(conn, 1)

lib/exqlite/sqlite3_nif.ex

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ defmodule Exqlite.Sqlite3NIF do
1010
@type db() :: reference()
1111
@type statement() :: reference()
1212
@type reason() :: :atom | String.Chars.t()
13+
@type row() :: list()
1314

1415
def load_nif() do
1516
path = :filename.join(:code.priv_dir(:exqlite), 'sqlite3_nif')
@@ -25,24 +26,24 @@ defmodule Exqlite.Sqlite3NIF do
2526
@spec execute(db(), String.Chars.t()) :: :ok | {:error, reason()}
2627
def execute(_conn, _sql), do: :erlang.nif_error(:not_loaded)
2728

28-
@spec changes(db()) :: {:ok, integer()}
29+
@spec changes(db()) :: {:ok, integer()} | {:error, reason()}
2930
def changes(_conn), do: :erlang.nif_error(:not_loaded)
3031

3132
@spec prepare(db(), String.Chars.t()) :: {:ok, statement()} | {:error, reason()}
3233
def prepare(_conn, _sql), do: :erlang.nif_error(:not_loaded)
3334

34-
@spec bind(db(), statement(), []) ::
35+
@spec bind(db(), statement(), list()) ::
3536
:ok | {:error, reason()} | {:error, {atom(), any()}}
3637
def bind(_conn, _statement, _args), do: :erlang.nif_error(:not_loaded)
3738

38-
@spec step(db(), statement()) :: :done | :busy | {:row, []}
39+
@spec step(db(), statement()) :: :done | :busy | {:row, [row()]} | {:error, reason()}
3940
def step(_conn, _statement), do: :erlang.nif_error(:not_loaded)
4041

4142
@spec multi_step(db(), statement(), integer()) ::
42-
:busy | {:rows, [[]]} | {:done, [[]]}
43+
:busy | {:rows, [row()]} | {:done, [row()]} | {:error, reason()}
4344
def multi_step(_conn, _statement, _chunk_size), do: :erlang.nif_error(:not_loaded)
4445

45-
@spec columns(db(), statement()) :: {:ok, []} | {:error, reason()}
46+
@spec columns(db(), statement()) :: {:ok, list(binary())} | {:error, reason()}
4647
def columns(_conn, _statement), do: :erlang.nif_error(:not_loaded)
4748

4849
@spec last_insert_rowid(db()) :: {:ok, integer()}
@@ -60,7 +61,7 @@ defmodule Exqlite.Sqlite3NIF do
6061
@spec release(db(), statement()) :: :ok | {:error, reason()}
6162
def release(_conn, _statement), do: :erlang.nif_error(:not_loaded)
6263

63-
@spec enable_load_extension(db(), boolean()) :: :ok | {:error, reason()}
64+
@spec enable_load_extension(db(), integer()) :: :ok | {:error, reason()}
6465
def enable_load_extension(_conn, _flag), do: :erlang.nif_error(:not_loaded)
6566

6667
# TODO: add statement inspection tooling https://sqlite.org/c3ref/expanded_sql.html

0 commit comments

Comments
 (0)