New trick to get 0 terminated strings from an iolist
This commit is contained in:
@@ -265,8 +265,10 @@ do_exec(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
{
|
{
|
||||||
ErlNifBinary bin;
|
ErlNifBinary bin;
|
||||||
int rc;
|
int rc;
|
||||||
|
ERL_NIF_TERM eos = enif_make_int(env, 0);
|
||||||
|
|
||||||
enif_inspect_iolist_as_binary(env, arg, &bin);
|
enif_inspect_iolist_as_binary(env,
|
||||||
|
enif_make_list2(env, arg, eos), &bin);
|
||||||
|
|
||||||
rc = sqlite3_exec(conn->db, (char *) bin.data, NULL, NULL, NULL);
|
rc = sqlite3_exec(conn->db, (char *) bin.data, NULL, NULL, NULL);
|
||||||
if(rc != SQLITE_OK)
|
if(rc != SQLITE_OK)
|
||||||
@@ -285,8 +287,10 @@ do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
ERL_NIF_TERM esqlite_stmt;
|
ERL_NIF_TERM esqlite_stmt;
|
||||||
const char *tail;
|
const char *tail;
|
||||||
int rc;
|
int rc;
|
||||||
|
ERL_NIF_TERM eos = enif_make_int(env, 0);
|
||||||
|
|
||||||
enif_inspect_iolist_as_binary(env, arg, &bin);
|
enif_inspect_iolist_as_binary(env,
|
||||||
|
enif_make_list2(env, arg, eos), &bin);
|
||||||
|
|
||||||
stmt = enif_alloc_resource(esqlite_statement_type, sizeof(esqlite_statement));
|
stmt = enif_alloc_resource(esqlite_statement_type, sizeof(esqlite_statement));
|
||||||
if(!stmt)
|
if(!stmt)
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ exec(Sql, Connection) ->
|
|||||||
%% @spec exec(iolist(), connection(), timeout()) -> integer() | {error, error_message()}
|
%% @spec exec(iolist(), connection(), timeout()) -> integer() | {error, error_message()}
|
||||||
exec(Sql, {connection, _Ref, Connection}, Timeout) ->
|
exec(Sql, {connection, _Ref, Connection}, Timeout) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
ok = esqlite3_nif:exec(Connection, Ref, self(), add_eos(Sql)),
|
ok = esqlite3_nif:exec(Connection, Ref, self(), Sql),
|
||||||
receive_answer(Ref, Timeout).
|
receive_answer(Ref, Timeout).
|
||||||
|
|
||||||
%% @doc Prepare a statement
|
%% @doc Prepare a statement
|
||||||
@@ -210,7 +210,7 @@ prepare(Sql, Connection) ->
|
|||||||
%% @spec(iolist(), connection(), timeout()) -> {ok, prepared_statement()} | {error, error_message()}
|
%% @spec(iolist(), connection(), timeout()) -> {ok, prepared_statement()} | {error, error_message()}
|
||||||
prepare(Sql, {connection, _Ref, Connection}, Timeout) ->
|
prepare(Sql, {connection, _Ref, Connection}, Timeout) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
ok = esqlite3_nif:prepare(Connection, Ref, self(), add_eos(Sql)),
|
ok = esqlite3_nif:prepare(Connection, Ref, self(), Sql),
|
||||||
receive_answer(Ref, Timeout).
|
receive_answer(Ref, Timeout).
|
||||||
|
|
||||||
%% @doc Step
|
%% @doc Step
|
||||||
@@ -270,8 +270,6 @@ close({connection, _Ref, Connection}, Timeout) ->
|
|||||||
receive_answer(Ref, Timeout).
|
receive_answer(Ref, Timeout).
|
||||||
|
|
||||||
%% Internal functions
|
%% Internal functions
|
||||||
add_eos(IoList) ->
|
|
||||||
[IoList, 0].
|
|
||||||
|
|
||||||
receive_answer(Ref, Timeout) ->
|
receive_answer(Ref, Timeout) ->
|
||||||
receive
|
receive
|
||||||
|
|||||||
Reference in New Issue
Block a user