Work in progress
This commit is contained in:
@@ -5,18 +5,79 @@
|
||||
-module(esqlite).
|
||||
-author("Maas-Maarten Zeeman <mmzeeman@xs4all.nl>").
|
||||
|
||||
-export([open/1, prepare/2]).
|
||||
-export([open/1, open/2, exec/2, exec/3, close/1, close/2]).
|
||||
|
||||
-on_load(init/0).
|
||||
|
||||
-define(DEFAULT_TIMEOUT, infinity).
|
||||
|
||||
init() ->
|
||||
ok = erlang:load_nif(code:priv_dir(esqlite) ++ "/esqlite_nif", 0).
|
||||
|
||||
%% @doc Open a new database connection
|
||||
%%
|
||||
open(_Filename) ->
|
||||
open(Filename) ->
|
||||
open(Filename, ?DEFAULT_TIMEOUT).
|
||||
|
||||
%% @doc Open a database connection
|
||||
%%
|
||||
open(Filename, Timeout) ->
|
||||
Db = esqlite_start(),
|
||||
|
||||
Ref = make_ref(),
|
||||
ok = esqlite_open(Db, Ref, Filename, self()),
|
||||
case receive_answer(Ref, Timeout) of
|
||||
ok ->
|
||||
{ok, Db};
|
||||
Other ->
|
||||
{error, Other}
|
||||
end.
|
||||
|
||||
%% @doc Execute Sql statement
|
||||
%%
|
||||
exec(Sql, Db) ->
|
||||
exec(Sql, Db, ?DEFAULT_TIMEOUT).
|
||||
|
||||
exec(Sql, Db, Timeout) ->
|
||||
Ref = make_ref(),
|
||||
ok = esqlite_exec(Db, Ref, self(), Sql),
|
||||
receive_answer(Ref, Timeout).
|
||||
|
||||
%% @doc Close the database
|
||||
%%
|
||||
close(Db) ->
|
||||
close(Db, ?DEFAULT_TIMEOUT).
|
||||
|
||||
close(Db, Timeout) ->
|
||||
Ref = make_ref(),
|
||||
ok = esqlite_close(Db, Ref, self()),
|
||||
receive_answer(Ref, Timeout).
|
||||
|
||||
|
||||
%% ---- Internal ----
|
||||
esqlite_start() ->
|
||||
exit(nif_library_not_loaded).
|
||||
|
||||
prepare(_Db, _Sql) ->
|
||||
esqlite_open(_Db, _Ref, _Dest, _Filename) ->
|
||||
exit(nif_library_not_loaded).
|
||||
|
||||
esqlite_exec(_Db, _Ref, _Dest, _Sql) ->
|
||||
exit(nif_library_not_loaded).
|
||||
|
||||
esqlite_close(_Db, _Ref, _Dest) ->
|
||||
exit(nif_library_not_loaded).
|
||||
|
||||
receive_answer(Ref, Timeout) ->
|
||||
receive
|
||||
{Ref, Resp} ->
|
||||
Resp;
|
||||
Other ->
|
||||
throw(Other)
|
||||
after Timeout ->
|
||||
throw({error, timeout, Ref})
|
||||
end.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user