@@ -4,66 +4,84 @@ defmodule Exqlite.Nif do
4
4
@ compile { :autoload , false }
5
5
@ on_load { :load_nif , 0 }
6
6
7
- # TODO it's not just a string
8
- @ type error :: String . t ( ) | Keyword . t ( )
7
+ @ type usage_error ::
8
+ { :error ,
9
+ reason ::
10
+ atom
11
+ | { :wrong_type , term }
12
+ | Keyword . t ( ) }
13
+
14
+ @ type sqlite_error :: { :error , rc :: integer , msg :: String . t ( ) }
15
+ @ type error :: usage_error | sqlite_error
9
16
10
17
def load_nif do
11
18
path = :filename . join ( :code . priv_dir ( :exqlite ) , ~c" sqlite3_nif" )
12
19
:erlang . load_nif ( path , 0 )
13
20
end
14
21
15
- @ spec open ( charlist , [ Exqlite . open_flag ( ) ] ) :: { :ok , Exqlite . conn ( ) } | { : error, error }
22
+ @ spec open ( charlist , [ Exqlite . open_flag ( ) ] ) :: { :ok , Exqlite . conn ( ) } | error
16
23
def open ( _path , _flags ) , do: :erlang . nif_error ( :not_loaded )
17
24
18
- @ spec close ( Exqlite . conn ( ) ) :: :ok | { : error, error }
25
+ @ spec close ( Exqlite . conn ( ) ) :: :ok | error
19
26
def close ( _conn ) , do: :erlang . nif_error ( :not_loaded )
20
27
21
- @ spec execute ( Exqlite . conn ( ) , iodata ) :: :ok | { : error, error }
28
+ @ spec execute ( Exqlite . conn ( ) , iodata ) :: :ok | error
22
29
def execute ( _conn , _sql ) , do: :erlang . nif_error ( :not_loaded )
23
30
24
- @ spec changes ( Exqlite . conn ( ) ) :: { :ok , non_neg_integer } | { : error, error }
31
+ @ spec changes ( Exqlite . conn ( ) ) :: { :ok , non_neg_integer } | error
25
32
def changes ( _conn ) , do: :erlang . nif_error ( :not_loaded )
26
33
27
- @ spec prepare ( Exqlite . conn ( ) , iodata ) :: { :ok , Exqlite . stmt ( ) } | { : error, error }
34
+ @ spec prepare ( Exqlite . conn ( ) , iodata ) :: { :ok , Exqlite . stmt ( ) } | error
28
35
def prepare ( _conn , _sql ) , do: :erlang . nif_error ( :not_loaded )
29
36
30
- @ spec bind ( Exqlite . conn ( ) , Exqlite . stmt ( ) , [ Exqlite . bind_arg ( ) ] ) ::
31
- :ok | { :error , error }
37
+ @ spec bind ( Exqlite . conn ( ) , Exqlite . stmt ( ) , [ Exqlite . bind_arg ( ) ] ) :: :ok | error
32
38
def bind ( _conn , _stmt , _args ) , do: :erlang . nif_error ( :not_loaded )
33
39
34
40
@ spec step ( Exqlite . conn ( ) , Exqlite . stmt ( ) ) ::
35
- { :row , Exqlite . returned_row ( ) } | :done | { : error, error }
41
+ { :row , Exqlite . returned_row ( ) } | :done | error
36
42
def step ( _conn , _stmt ) , do: :erlang . nif_error ( :not_loaded )
37
43
44
+ @ spec interrupt ( Exqlite . conn ( ) ) :: :ok | error
45
+ def interrupt ( _conn ) , do: :erlang . nif_error ( :not_loaded )
46
+
38
47
@ spec multi_step ( Exqlite . conn ( ) , Exqlite . stmt ( ) , non_neg_integer ) ::
39
- { :rows | :done , [ Exqlite . returned_row ( ) ] } | { : error, error }
48
+ { :rows | :done , [ Exqlite . returned_row ( ) ] } | error
40
49
def multi_step ( _conn , _stmt , _max_rows ) , do: :erlang . nif_error ( :not_loaded )
41
50
42
- @ spec columns ( Exqlite . conn ( ) , Exqlite . stmt ( ) ) :: { :ok , [ String . t ( ) ] } | { : error, error }
51
+ @ spec columns ( Exqlite . conn ( ) , Exqlite . stmt ( ) ) :: { :ok , [ String . t ( ) ] } | error
43
52
def columns ( _conn , _stmt ) , do: :erlang . nif_error ( :not_loaded )
44
53
45
- @ spec last_insert_rowid ( Exqlite . conn ( ) ) :: { :ok , non_neg_integer } | { : error, error }
54
+ @ spec last_insert_rowid ( Exqlite . conn ( ) ) :: { :ok , non_neg_integer } | error
46
55
def last_insert_rowid ( _conn ) , do: :erlang . nif_error ( :not_loaded )
47
56
48
57
@ spec transaction_status ( Exqlite . conn ( ) ) ::
49
- { :ok , :transaction | :idle } | { : error, error }
58
+ { :ok , :transaction | :idle } | error
50
59
def transaction_status ( _conn ) , do: :erlang . nif_error ( :not_loaded )
51
60
52
- @ spec serialize ( Exqlite . conn ( ) , charlist ) :: { :ok , binary } | { : error, error }
61
+ @ spec serialize ( Exqlite . conn ( ) , charlist ) :: { :ok , binary } | error
53
62
def serialize ( _conn , _database ) , do: :erlang . nif_error ( :not_loaded )
54
63
55
- @ spec deserialize ( Exqlite . conn ( ) , charlist , iodata ) :: :ok | { : error, error }
64
+ @ spec deserialize ( Exqlite . conn ( ) , charlist , iodata ) :: :ok | error
56
65
def deserialize ( _conn , _database , _serialized ) , do: :erlang . nif_error ( :not_loaded )
57
66
58
- @ spec release ( Exqlite . stmt ( ) ) :: :ok | { : error, error }
67
+ @ spec release ( Exqlite . stmt ( ) ) :: :ok | error
59
68
def release ( _stmt ) , do: :erlang . nif_error ( :not_loaded )
60
69
61
- @ spec enable_load_extension ( Exqlite . conn ( ) , integer ) :: :ok | { : error, error }
70
+ @ spec enable_load_extension ( Exqlite . conn ( ) , integer ) :: :ok | error
62
71
def enable_load_extension ( _conn , _flag ) , do: :erlang . nif_error ( :not_loaded )
63
72
64
- @ spec set_update_hook ( Exqlite . conn ( ) , pid ) :: :ok | { : error, error }
73
+ @ spec set_update_hook ( Exqlite . conn ( ) , pid ) :: :ok | error
65
74
def set_update_hook ( _conn , _pid ) , do: :erlang . nif_error ( :not_loaded )
66
75
67
- @ spec set_log_hook ( pid ) :: :ok | { : error, error }
76
+ @ spec set_log_hook ( pid ) :: :ok | error
68
77
def set_log_hook ( _pid ) , do: :erlang . nif_error ( :not_loaded )
78
+
79
+ @ spec error_info ( Exqlite . conn ( ) ) :: % {
80
+ errcode: integer ,
81
+ extended_errcode: integer ,
82
+ errstr: String . t ( ) ,
83
+ errmsg: String . t ( ) ,
84
+ error_offset: integer
85
+ }
86
+ def error_info ( _conn ) , do: :erlang . nif_error ( :not_loaded )
69
87
end
0 commit comments