Merge branch 'master' into cleanup-connection-and-statement-types

This commit is contained in:
Maas-Maarten Zeeman
2022-01-04 11:07:22 +01:00
committed by GitHub
4 changed files with 70 additions and 0 deletions

View File

@@ -64,6 +64,7 @@ typedef enum {
cmd_close,
cmd_stop,
cmd_insert,
cmd_last_insert_rowid,
cmd_get_autocommit,
} command_type;
@@ -381,6 +382,14 @@ do_insert(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
return make_ok_tuple(env, last_rowid_term);
}
static ERL_NIF_TERM
do_last_insert_rowid(ErlNifEnv *env, esqlite_connection *conn)
{
sqlite3_int64 last_rowid = sqlite3_last_insert_rowid(conn->db);
ERL_NIF_TERM last_rowid_term = enif_make_int64(env, last_rowid);
return make_ok_tuple(env, last_rowid_term);
}
/*
*/
static ERL_NIF_TERM
@@ -980,6 +989,34 @@ esqlite_insert(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
return push_command(env, db, cmd);
}
static ERL_NIF_TERM
esqlite_last_insert_rowid(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
esqlite_connection *db;
esqlite_command *cmd = NULL;
ErlNifPid pid;
if(argc != 3)
return enif_make_badarg(env);
if(!enif_get_resource(env, argv[0], esqlite_connection_type, (void **) &db))
return enif_make_badarg(env);
if(!enif_is_ref(env, argv[1]))
return make_error_tuple(env, "invalid_ref");
if(!enif_get_local_pid(env, argv[2], &pid))
return make_error_tuple(env, "invalid_pid");
cmd = command_create();
if(!cmd)
return make_error_tuple(env, "command_create_failed");
/* command */
cmd->type = cmd_last_insert_rowid;
cmd->ref = enif_make_copy(cmd->env, argv[1]);
cmd->pid = pid;
return push_command(env, db, cmd);
}
static ERL_NIF_TERM
esqlite_get_autocommit(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
@@ -1320,6 +1357,7 @@ static ErlNifFunc nif_funcs[] = {
{"changes", 3, esqlite_changes},
{"prepare", 4, esqlite_prepare},
{"insert", 4, esqlite_insert},
{"last_insert_rowid", 3, esqlite_last_insert_rowid},
{"get_autocommit", 3, esqlite_get_autocommit},
{"multi_step", 5, esqlite_multi_step},
{"reset", 4, esqlite_reset},