Added tests for closed database behaviour
This commit is contained in:
@@ -335,12 +335,11 @@ do_exec(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
int rc;
|
int rc;
|
||||||
ERL_NIF_TERM eos = enif_make_int(env, 0);
|
ERL_NIF_TERM eos = enif_make_int(env, 0);
|
||||||
|
|
||||||
enif_inspect_iolist_as_binary(env,
|
enif_inspect_iolist_as_binary(env, enif_make_list2(env, arg, eos), &bin);
|
||||||
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)
|
||||||
return make_sqlite3_error_tuple(env, rc, conn->db);
|
return make_sqlite3_error_tuple(env, rc, conn->db);
|
||||||
|
|
||||||
return make_atom(env, "ok");
|
return make_atom(env, "ok");
|
||||||
}
|
}
|
||||||
@@ -351,6 +350,10 @@ do_exec(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
do_changes(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
do_changes(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
||||||
{
|
{
|
||||||
|
if(!conn->db) {
|
||||||
|
return make_error_tuple(env, "closed");
|
||||||
|
}
|
||||||
|
|
||||||
int changes = sqlite3_changes(conn->db);
|
int changes = sqlite3_changes(conn->db);
|
||||||
|
|
||||||
ERL_NIF_TERM changes_term = enif_make_int64(env, changes);
|
ERL_NIF_TERM changes_term = enif_make_int64(env, changes);
|
||||||
@@ -499,11 +502,15 @@ do_bind(ErlNifEnv *env, sqlite3 *db, sqlite3_stmt *stmt, const ERL_NIF_TERM arg)
|
|||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
do_get_autocommit(ErlNifEnv *env, esqlite_connection *conn)
|
do_get_autocommit(ErlNifEnv *env, esqlite_connection *conn)
|
||||||
{
|
{
|
||||||
|
if(!conn->db) {
|
||||||
|
return make_error_tuple(env, "closed");
|
||||||
|
}
|
||||||
|
|
||||||
if(sqlite3_get_autocommit(conn->db) != 0) {
|
if(sqlite3_get_autocommit(conn->db) != 0) {
|
||||||
return make_atom(env, "true");
|
return make_atom(env, "true");
|
||||||
} else {
|
}
|
||||||
return make_atom(env, "false");
|
|
||||||
}
|
return make_atom(env, "false");
|
||||||
}
|
}
|
||||||
|
|
||||||
static ERL_NIF_TERM
|
static ERL_NIF_TERM
|
||||||
@@ -694,7 +701,7 @@ do_close(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg)
|
|||||||
|
|
||||||
rc = sqlite3_close_v2(conn->db);
|
rc = sqlite3_close_v2(conn->db);
|
||||||
if(rc != SQLITE_OK)
|
if(rc != SQLITE_OK)
|
||||||
return make_sqlite3_error_tuple(env, rc, conn->db);
|
return make_sqlite3_error_tuple(env, rc, conn->db);
|
||||||
|
|
||||||
conn->db = NULL;
|
conn->db = NULL;
|
||||||
return make_atom(env, "ok");
|
return make_atom(env, "ok");
|
||||||
|
|||||||
@@ -10,6 +10,18 @@ open_single_database_test() ->
|
|||||||
{ok, _C1} = esqlite3:open("test.db"),
|
{ok, _C1} = esqlite3:open("test.db"),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
|
close_test() ->
|
||||||
|
{ok, C} = esqlite3:open(":memory:"),
|
||||||
|
ok = esqlite3:close(C),
|
||||||
|
|
||||||
|
{error, closed} = esqlite3:set_update_hook(self(), C),
|
||||||
|
{error, closed} = esqlite3:changes(C),
|
||||||
|
{error, closed} = esqlite3:get_autocommit(C),
|
||||||
|
|
||||||
|
{error, _} = esqlite3:exec("create table test(one, two, three)", C),
|
||||||
|
|
||||||
|
ok.
|
||||||
|
|
||||||
open_multiple_same_databases_test() ->
|
open_multiple_same_databases_test() ->
|
||||||
{ok, _C1} = esqlite3:open("test.db"),
|
{ok, _C1} = esqlite3:open("test.db"),
|
||||||
{ok, _C2} = esqlite3:open("test.db"),
|
{ok, _C2} = esqlite3:open("test.db"),
|
||||||
|
|||||||
Reference in New Issue
Block a user