From 6646fa1a0a84e24e891a0790b9a29759ec0f111e Mon Sep 17 00:00:00 2001 From: Maas-Maarten Zeeman Date: Mon, 3 Jan 2022 23:49:43 +0100 Subject: [PATCH] Added tests for closed database behaviour --- c_src/esqlite3_nif.c | 21 ++++++++++++++------- test/esqlite_test.erl | 12 ++++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/c_src/esqlite3_nif.c b/c_src/esqlite3_nif.c index a3c2009..7fd0ac6 100644 --- a/c_src/esqlite3_nif.c +++ b/c_src/esqlite3_nif.c @@ -335,12 +335,11 @@ do_exec(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg) int rc; ERL_NIF_TERM eos = enif_make_int(env, 0); - enif_inspect_iolist_as_binary(env, - enif_make_list2(env, arg, eos), &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); 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"); } @@ -351,6 +350,10 @@ do_exec(ErlNifEnv *env, esqlite_connection *conn, const ERL_NIF_TERM arg) static ERL_NIF_TERM 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); 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 do_get_autocommit(ErlNifEnv *env, esqlite_connection *conn) { + if(!conn->db) { + return make_error_tuple(env, "closed"); + } + if(sqlite3_get_autocommit(conn->db) != 0) { return make_atom(env, "true"); - } else { - return make_atom(env, "false"); - } + } + + return make_atom(env, "false"); } 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); 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; return make_atom(env, "ok"); diff --git a/test/esqlite_test.erl b/test/esqlite_test.erl index d4f37bd..dc0281c 100644 --- a/test/esqlite_test.erl +++ b/test/esqlite_test.erl @@ -10,6 +10,18 @@ open_single_database_test() -> {ok, _C1} = esqlite3:open("test.db"), 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() -> {ok, _C1} = esqlite3:open("test.db"), {ok, _C2} = esqlite3:open("test.db"),