Added extra check for closed database in update_hook
This commit is contained in:
@@ -309,14 +309,19 @@ 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 *db, const ERL_NIF_TERM arg)
|
do_set_update_hook(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
||||||
{
|
{
|
||||||
if(!enif_get_local_pid(env, arg, &db->notification_pid))
|
int rc;
|
||||||
return make_error_tuple(env, "invalid_pid");
|
|
||||||
|
|
||||||
sqlite3_update_hook(db->db, NULL, NULL);
|
if(!enif_get_local_pid(env, arg, &conn->notification_pid)) {
|
||||||
if(sqlite3_update_hook(db->db, update_callback, db) != SQLITE_OK)
|
return make_error_tuple(env, "invalid_pid");
|
||||||
return make_error_tuple(env, "sqlite3_update_hook_fail");
|
}
|
||||||
|
|
||||||
|
if(!conn->db) {
|
||||||
|
return make_error_tuple(env, "closed");
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlite3_update_hook(conn->db, update_callback, conn);
|
||||||
|
|
||||||
return make_atom(env, "ok");
|
return make_atom(env, "ok");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -447,7 +447,7 @@ step(#statement{raw_statement=RawStatement, raw_connection=RawConnection}, Timeo
|
|||||||
{rows, list(tuple())} |
|
{rows, list(tuple())} |
|
||||||
{'$busy', list(tuple())} |
|
{'$busy', list(tuple())} |
|
||||||
{'$done', list(tuple())} |
|
{'$done', list(tuple())} |
|
||||||
{error, term()}.
|
{error, _}.
|
||||||
multi_step(#statement{raw_statement=RawStatement, raw_connection=RawConnection}, ChunkSize, Timeout) ->
|
multi_step(#statement{raw_statement=RawStatement, raw_connection=RawConnection}, ChunkSize, Timeout) ->
|
||||||
Ref = make_ref(),
|
Ref = make_ref(),
|
||||||
ok = esqlite3_nif:multi_step(RawConnection, RawStatement, ChunkSize, Ref, self()),
|
ok = esqlite3_nif:multi_step(RawConnection, RawStatement, ChunkSize, Ref, self()),
|
||||||
|
|||||||
Reference in New Issue
Block a user