Fix merge
This commit is contained in:
@@ -312,8 +312,6 @@ update_callback(void *arg, int sqlite_operation_type, char const *sqlite_databas
|
|||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
do_set_update_hook(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
do_set_update_hook(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
||||||
{
|
{
|
||||||
int rc;
|
|
||||||
|
|
||||||
if(!enif_get_local_pid(env, arg, &conn->notification_pid)) {
|
if(!enif_get_local_pid(env, arg, &conn->notification_pid)) {
|
||||||
return make_error_tuple(env, "invalid_pid");
|
return make_error_tuple(env, "invalid_pid");
|
||||||
}
|
}
|
||||||
@@ -382,15 +380,24 @@ do_insert(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
return make_ok_tuple(env, last_rowid_term);
|
return make_ok_tuple(env, last_rowid_term);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Return the last inserted rowid
|
||||||
|
*/
|
||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
do_last_insert_rowid(ErlNifEnv *env, esqlite_connection *conn)
|
do_last_insert_rowid(ErlNifEnv *env, esqlite_connection *conn)
|
||||||
{
|
{
|
||||||
|
if(!conn->db) {
|
||||||
|
return make_error_tuple(env, "closed");
|
||||||
|
}
|
||||||
|
|
||||||
sqlite3_int64 last_rowid = sqlite3_last_insert_rowid(conn->db);
|
sqlite3_int64 last_rowid = sqlite3_last_insert_rowid(conn->db);
|
||||||
ERL_NIF_TERM last_rowid_term = enif_make_int64(env, last_rowid);
|
ERL_NIF_TERM last_rowid_term = enif_make_int64(env, last_rowid);
|
||||||
|
|
||||||
return make_ok_tuple(env, last_rowid_term);
|
return make_ok_tuple(env, last_rowid_term);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
* Compile a sql statement
|
||||||
*/
|
*/
|
||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
do_prepare(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
||||||
@@ -750,6 +757,8 @@ evaluate_command(esqlite_command *cmd, esqlite_connection *conn)
|
|||||||
return do_column_types(cmd->env, stmt->statement);
|
return do_column_types(cmd->env, stmt->statement);
|
||||||
case cmd_close:
|
case cmd_close:
|
||||||
return do_close(cmd->env, conn, cmd->arg);
|
return do_close(cmd->env, conn, cmd->arg);
|
||||||
|
case cmd_last_insert_rowid:
|
||||||
|
return do_last_insert_rowid(cmd->env, conn);
|
||||||
case cmd_insert:
|
case cmd_insert:
|
||||||
return do_insert(cmd->env, conn, cmd->arg);
|
return do_insert(cmd->env, conn, cmd->arg);
|
||||||
case cmd_get_autocommit:
|
case cmd_get_autocommit:
|
||||||
|
|||||||
@@ -402,11 +402,11 @@ last_insert_rowid(Connection) ->
|
|||||||
|
|
||||||
%% @doc Get the last insert rowid.
|
%% @doc Get the last insert rowid.
|
||||||
%%
|
%%
|
||||||
-spec last_insert_rowid(connection(), timeout()) -> {ok, integer()} | {error, _}.
|
-spec last_insert_rowid(connection(), timeout()) -> {ok, rowid()} | {error, _}.
|
||||||
last_insert_rowid({connection, _Ref, Connection}, Timeout) ->
|
last_insert_rowid(#connection{raw_connection=RawConnection}, Timeout) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
ok = esqlite3_nif:last_insert_rowid(Connection, Ref, self()),
|
ok = esqlite3_nif:last_insert_rowid(RawConnection, Ref, self()),
|
||||||
receive_answer(Connection, Ref, Timeout).
|
receive_answer(RawConnection, Ref, Timeout).
|
||||||
|
|
||||||
%% @doc Get autocommit
|
%% @doc Get autocommit
|
||||||
%% @doc Check if the connection is in auto-commit mode.
|
%% @doc Check if the connection is in auto-commit mode.
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ insert(_Db, _Ref, _Dest, _Sql) ->
|
|||||||
|
|
||||||
%% @doc Get the last insert rowid.
|
%% @doc Get the last insert rowid.
|
||||||
%%
|
%%
|
||||||
%% @spec insert(connection(), Ref::reference(), Dest::pid()) -> {ok, integer()} | {error, message()}
|
-spec last_insert_rowid(raw_connection(), reference(), pid()) -> ok | {error, _}.
|
||||||
last_insert_rowid(_Db, _Ref, _Dest) ->
|
last_insert_rowid(_Db, _Ref, _Dest) ->
|
||||||
erlang:nif_error(nif_library_not_loaded).
|
erlang:nif_error(nif_library_not_loaded).
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,15 @@ open_single_database_test() ->
|
|||||||
ok.
|
ok.
|
||||||
|
|
||||||
close_test() ->
|
close_test() ->
|
||||||
|
%% Open and close the database immediately
|
||||||
{ok, C} = esqlite3:open(":memory:"),
|
{ok, C} = esqlite3:open(":memory:"),
|
||||||
ok = esqlite3:close(C),
|
ok = esqlite3:close(C),
|
||||||
|
|
||||||
|
%% Check if functions still return sensible values.
|
||||||
{error, closed} = esqlite3:set_update_hook(self(), C),
|
{error, closed} = esqlite3:set_update_hook(self(), C),
|
||||||
{error, closed} = esqlite3:changes(C),
|
{error, closed} = esqlite3:changes(C),
|
||||||
{error, closed} = esqlite3:get_autocommit(C),
|
{error, closed} = esqlite3:get_autocommit(C),
|
||||||
|
{error, closed} = esqlite3:last_insert_rowid(C),
|
||||||
|
|
||||||
{error, _} = esqlite3:exec("create table test(one, two, three)", C),
|
{error, _} = esqlite3:exec("create table test(one, two, three)", C),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user