diff --git a/src/sqlite3.erl b/src/sqlite3.erl index e24ee76..930a211 100644 --- a/src/sqlite3.erl +++ b/src/sqlite3.erl @@ -51,7 +51,6 @@ -type result() :: {'ok', pid()} | 'ignore' | {'error', any()}. -spec start_link(atom()) -> result(). - start_link(Db) -> open(Db, []). @@ -314,7 +313,7 @@ write_many(Db, Tbl, Data) -> %%-------------------------------------------------------------------- -spec update(atom(), {atom(), sql_value()}, [{atom(), sql_value()}]) -> sql_non_query_result(). update(Tbl, {Key, Value}, Data) -> - update(?MODULE, Tbl, {Key, Value}, Data). + update(?MODULE, Tbl, {Key, Value}, Data). %%-------------------------------------------------------------------- %% @spec update(Db :: atom(), Tbl :: atom(), Key :: atom(), Value, Data) -> sql_non_query_result() @@ -389,7 +388,7 @@ read(Db, Tbl, {Column, Value}) -> %%-------------------------------------------------------------------- -spec read(atom(), atom(), {atom(), sql_value()}, [atom()]) -> sql_result(). read(Db, Tbl, {Key, Value}, Columns) -> - gen_server:call(Db, {read, Tbl, Key, Value, Columns}). + gen_server:call(Db, {read, Tbl, Key, Value, Columns}). %%-------------------------------------------------------------------- %% @spec delete(Tbl :: atom(), Key) -> any() @@ -536,16 +535,16 @@ init(Options) -> DbFile = proplists:get_value(file, Options), PrivDir = get_priv_dir(), case erl_ddll:load(PrivDir, atom_to_list(?DRIVER_NAME)) of - ok -> - Port = open_port({spawn, create_port_cmd(DbFile)}, [binary]), - {ok, #state{port = Port, ops = Options}}; - {error, permanent} -> %% already loaded! - Port = open_port({spawn, create_port_cmd(DbFile)}, [binary]), - {ok, #state{port = Port, ops = Options}}; - {error, Error} -> - Msg = io_lib:format("Error loading ~p: ~s", - [?DRIVER_NAME, erl_ddll:format_error(Error)]), - {stop, lists:flatten(Msg)} + ok -> + Port = open_port({spawn, create_port_cmd(DbFile)}, [binary]), + {ok, #state{port = Port, ops = Options}}; + {error, permanent} -> %% already loaded! + Port = open_port({spawn, create_port_cmd(DbFile)}, [binary]), + {ok, #state{port = Port, ops = Options}}; + {error, Error} -> + Msg = io_lib:format("Error loading ~p: ~s", + [?DRIVER_NAME, erl_ddll:format_error(Error)]), + {stop, lists:flatten(Msg)} end. %%-------------------------------------------------------------------- @@ -737,31 +736,33 @@ do_sql_bind_and_exec(SQL, Params, #state{port = Port}) -> exec(Port, {sql_bind_and_exec, SQL, Params}). exec(_Port, {create_function, _FunctionName, _Function}) -> - error_logger:error_report([{application, sqlite3}, "NOT IMPL YET"]); - %port_control(Port, ?SQL_CREATE_FUNCTION, list_to_binary(Cmd)), - %wait_result(Port); + error_logger:error_report([{application, sqlite3}, "NOT IMPL YET"]); +%port_control(Port, ?SQL_CREATE_FUNCTION, list_to_binary(Cmd)), +%wait_result(Port); exec(Port, {sql_exec, Cmd}) -> - port_control(Port, ?SQL_EXEC_COMMAND, Cmd), - wait_result(Port); + port_control(Port, ?SQL_EXEC_COMMAND, Cmd), + wait_result(Port); exec(Port, {sql_bind_and_exec, SQL, Params}) -> - Bin = term_to_binary({iolist_to_binary(SQL), Params}), - port_control(Port, ?SQL_BIND_AND_EXEC_COMMAND, Bin), - wait_result(Port). + Bin = term_to_binary({iolist_to_binary(SQL), Params}), + port_control(Port, ?SQL_BIND_AND_EXEC_COMMAND, Bin), + wait_result(Port). wait_result(Port) -> - receive - {Port, error, Code, Reason} -> - error_logger:error_msg("sqlite3 driver error: ~s~n", [Reason]), - % ?dbg("Error: ~p~n", [Reason]), - {error, Code, Reason}; - {Port, Reply} -> - % ?dbg("Reply: ~p~n", [Reply]), - Reply; - {'EXIT', Port, Reason} -> - error_logger:error_msg("sqlite3 driver port closed with reason ~p~n", [Reason]), - % ?dbg("Error: ~p~n", [Reason]), - {error, -1, Reason} - end. + receive + {Port, error, Code, Reason} -> + error_logger:error_msg("sqlite3 driver error: ~s~n", + [Reason]), + % ?dbg("Error: ~p~n", [Reason]), + {error, Code, Reason}; + {Port, Reply} -> + % ?dbg("Reply: ~p~n", [Reply]), + Reply; + {'EXIT', Port, Reason} -> + error_logger:error_msg("sqlite3 driver port closed with reason ~p~n", + [Reason]), + % ?dbg("Error: ~p~n", [Reason]), + {error, -1, Reason} + end. parse_table_info(Info) -> [_, Tail] = string:tokens(Info, "()"), diff --git a/src/sqlite3_lib.erl b/src/sqlite3_lib.erl index 1e2e521..29fea84 100644 --- a/src/sqlite3_lib.erl +++ b/src/sqlite3_lib.erl @@ -168,11 +168,11 @@ bin_to_hex(Binary) -> << <<(half_byte_to_hex(X)):8>> || <> <= Binary>>. %%-------------------------------------------------------------------- -spec update_set_sql([{atom(), sql_value()}]) -> iolist(). update_set_sql(Data) -> - ColValueToSqlFun = - fun({Col, Value}) -> - [atom_to_list(Col), " = ", value_to_sql(Value)] - end, - map_intersperse(ColValueToSqlFun, Data, ", "). + ColValueToSqlFun = + fun({Col, Value}) -> + [atom_to_list(Col), " = ", value_to_sql(Value)] + end, + map_intersperse(ColValueToSqlFun, Data, ", "). %%-------------------------------------------------------------------- %% @spec read_cols_sql(Columns::[atom()]) -> iolist() @@ -182,7 +182,7 @@ update_set_sql(Data) -> %%-------------------------------------------------------------------- -spec read_cols_sql([atom()]) -> iolist(). read_cols_sql(Columns) -> - map_intersperse(fun atom_to_list/1, Columns, ", "). + map_intersperse(fun atom_to_list/1, Columns, ", "). %%-------------------------------------------------------------------- %% @spec create_table_sql(Tbl :: atom(), ColumnData) -> iolist() @@ -356,7 +356,8 @@ sql_number(NumberStr) -> -spec sql_string(string()) -> binary(). sql_string(StringWithEscapedQuotes) -> - Res1 = re:replace(StringWithEscapedQuotes, "''", "'", [global, {return, binary}]), + Res1 = re:replace(StringWithEscapedQuotes, "''", "'", + [global, {return, binary}]), binary_part(Res1, 0, byte_size(Res1) - 1). -spec sql_blob(string()) -> binary(). @@ -386,8 +387,12 @@ constraint_sql(Constraint) -> -spec table_constraint_sql(any()) -> iolist(). table_constraint_sql(TableConstraint) -> case TableConstraint of - {primary_key, Columns} -> ["PRIMARY KEY(", map_intersperse(fun indexed_column_sql/1, Columns, ", "), ")"]; - {unique, Columns} -> ["UNIQUE(", map_intersperse(fun indexed_column_sql/1, Columns, ", "), ")"] + {primary_key, Columns} -> + ["PRIMARY KEY(", + map_intersperse(fun indexed_column_sql/1, Columns, ", "), ")"]; + {unique, Columns} -> + ["UNIQUE(", + map_intersperse(fun indexed_column_sql/1, Columns, ", "), ")"] %% TODO: foreign key end. @@ -409,8 +414,8 @@ indexed_column_sql(ColumnName) -> atom_to_list(ColumnName). -ifdef(TEST). -include_lib("eunit/include/eunit.hrl"). --define(FLAT(X), iolist_to_binary(X)). --define(assertFlat(Expected, Value), ?assertEqual(iolist_to_binary(Expected), iolist_to_binary(Value))). +-define(assertFlat(Expected, Value), + ?assertEqual(iolist_to_binary(Expected), iolist_to_binary(Value))). quote_test() -> ?assertFlat("'abc'", value_to_sql("abc")), @@ -422,7 +427,9 @@ create_table_sql_test() -> create_table_sql(user, [{id, integer, [primary_key]}, {name, text}])), ?assertFlat( "CREATE TABLE user (id INTEGER, name TEXT, PRIMARY KEY(id));", - create_table_sql(user, [{id, integer}, {name, text}], [{primary_key, [id]}])). + create_table_sql(user, + [{id, integer}, {name, text}], + [{primary_key, [id]}])). update_sql_test() -> ?assertFlat(