Allow temporary and in-memory databases
This commit is contained in:
2
Makefile
2
Makefile
@@ -8,7 +8,7 @@ compile:
|
|||||||
$(REBAR_COMPILE)
|
$(REBAR_COMPILE)
|
||||||
|
|
||||||
test:
|
test:
|
||||||
$(REBAR_COMPILE) skip_deps=true eunit
|
$(REBAR) eunit
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
-rm -rf deps ebin priv doc/* .eunit c_src/*.o
|
-rm -rf deps ebin priv doc/* .eunit c_src/*.o
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
-spec start_link(atom()) -> result().
|
-spec start_link(atom()) -> result().
|
||||||
|
|
||||||
start_link(Db) ->
|
start_link(Db) ->
|
||||||
open(Db, [{db, "./" ++ atom_to_list(Db) ++ ".db"}]).
|
open(Db, []).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% @spec start_link(Db :: atom(), Options) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
%% @spec start_link(Db :: atom(), Options) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
||||||
@@ -75,11 +75,7 @@ start_link(Db) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-spec start_link(atom(), [{atom(), any()}]) -> result().
|
-spec start_link(atom(), [{atom(), any()}]) -> result().
|
||||||
start_link(Db, Options) ->
|
start_link(Db, Options) ->
|
||||||
Opts = case proplists:get_value(db, Options) of
|
open(Db, Options).
|
||||||
undefined -> [{db, "./" ++ atom_to_list(Db) ++ ".db"} | Options];
|
|
||||||
_ -> Options
|
|
||||||
end,
|
|
||||||
open(Db, Opts).
|
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% @spec open(Db :: atom()) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
%% @spec open(Db :: atom()) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
||||||
@@ -93,7 +89,7 @@ start_link(Db, Options) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-spec open(atom()) -> result().
|
-spec open(atom()) -> result().
|
||||||
open(Db) ->
|
open(Db) ->
|
||||||
open(Db, [{db, "./" ++ atom_to_list(Db) ++ ".db"}]).
|
open(Db, []).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% @spec open(Db :: atom(), Options :: [{atom(), any()}]) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
%% @spec open(Db :: atom(), Options :: [{atom(), any()}]) -> {ok, Pid :: pid()} | ignore | {error, Error}
|
||||||
@@ -109,7 +105,24 @@ open(Db) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-spec open(atom(), [{atom(), any()}]) -> result().
|
-spec open(atom(), [{atom(), any()}]) -> result().
|
||||||
open(Db, Options) ->
|
open(Db, Options) ->
|
||||||
gen_server:start_link({local, Db}, ?MODULE, Options, []).
|
Opts = case proplists:lookup(db, Options) of
|
||||||
|
none ->
|
||||||
|
DbName = case proplists:is_defined(temporary, Options) of
|
||||||
|
true ->
|
||||||
|
"";
|
||||||
|
false ->
|
||||||
|
case proplists:is_defined(in_memory, Options) of
|
||||||
|
true ->
|
||||||
|
":memory:";
|
||||||
|
false ->
|
||||||
|
"./" ++ atom_to_list(Db) ++ ".db"
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
[{db, DbName} | Options];
|
||||||
|
{db, _} ->
|
||||||
|
Options
|
||||||
|
end,
|
||||||
|
gen_server:start_link({local, Db}, ?MODULE, Opts, []).
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% @spec close(Db :: atom()) -> ok
|
%% @spec close(Db :: atom()) -> ok
|
||||||
@@ -520,9 +533,11 @@ value_to_sql(X) -> sqlite3_lib:value_to_sql(X).
|
|||||||
-spec init([any()]) -> {'ok', #state{}} | {'stop', string()}.
|
-spec init([any()]) -> {'ok', #state{}} | {'stop', string()}.
|
||||||
init(Options) ->
|
init(Options) ->
|
||||||
Dbase = proplists:get_value(db, Options),
|
Dbase = proplists:get_value(db, Options),
|
||||||
|
io:format(user, "Dbase: ~p", [Dbase]),
|
||||||
PrivDir = get_priv_dir(),
|
PrivDir = get_priv_dir(),
|
||||||
case erl_ddll:load(PrivDir, atom_to_list(?DRIVER_NAME)) of
|
case erl_ddll:load(PrivDir, atom_to_list(?DRIVER_NAME)) of
|
||||||
ok ->
|
ok ->
|
||||||
|
io:format(user, "~p", [create_port_cmd(Dbase)]),
|
||||||
Port = open_port({spawn, create_port_cmd(Dbase)}, [binary]),
|
Port = open_port({spawn, create_port_cmd(Dbase)}, [binary]),
|
||||||
{ok, #state{port = Port, ops = Options}};
|
{ok, #state{port = Port, ops = Options}};
|
||||||
{error, Error} ->
|
{error, Error} ->
|
||||||
@@ -787,5 +802,4 @@ build_primary_key_constraint(Tail, Acc) ->
|
|||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
-ifdef(TEST).
|
-ifdef(TEST).
|
||||||
-include_lib("eunit/include/eunit.hrl").
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
-endif.
|
-endif.
|
||||||
|
|||||||
Reference in New Issue
Block a user