From f660d05cc253e98c9a0f07255f6d4491f49157d0 Mon Sep 17 00:00:00 2001 From: Maas-Maarten Zeeman Date: Sun, 22 May 2022 22:28:28 +0200 Subject: [PATCH] Removed error code retrieval from the c code. Will be moved to erlang --- c_src/esqlite3_nif.c | 221 +----------------------------------------- test/esqlite_test.erl | 4 +- 2 files changed, 3 insertions(+), 222 deletions(-) diff --git a/c_src/esqlite3_nif.c b/c_src/esqlite3_nif.c index e082db2..35a9a63 100644 --- a/c_src/esqlite3_nif.c +++ b/c_src/esqlite3_nif.c @@ -82,228 +82,9 @@ make_row_tuple(ErlNifEnv *env, ERL_NIF_TERM value) return enif_make_tuple2(env, make_atom(env, "row"), value); } -static const char * -get_sqlite3_return_code_msg(int r) -{ - switch(r) { - case SQLITE_OK: return "ok"; - case SQLITE_ERROR : return "sqlite_error"; - case SQLITE_INTERNAL: return "internal"; - case SQLITE_PERM: return "perm"; - case SQLITE_ABORT: return "abort"; - case SQLITE_BUSY: return "$busy"; - case SQLITE_LOCKED: return "locked"; - case SQLITE_NOMEM: return "nomem"; - case SQLITE_READONLY: return "readonly"; - case SQLITE_INTERRUPT: return "interrupt"; - case SQLITE_IOERR: return "ioerror"; - case SQLITE_CORRUPT: return "corrupt"; - case SQLITE_NOTFOUND: return "notfound"; - case SQLITE_FULL: return "full"; - case SQLITE_CANTOPEN: return "cantopen"; - case SQLITE_PROTOCOL: return "protocol"; - case SQLITE_EMPTY: return "empty"; - case SQLITE_SCHEMA: return "schema"; - case SQLITE_TOOBIG: return "toobig"; - case SQLITE_CONSTRAINT: return "constraint"; - case SQLITE_MISMATCH: return "mismatch"; - case SQLITE_MISUSE: return "misuse"; - case SQLITE_NOLFS: return "nolfs"; - case SQLITE_AUTH: return "auth"; - case SQLITE_FORMAT: return "format"; - case SQLITE_RANGE: return "range"; - case SQLITE_NOTADB: return "notadb"; - case SQLITE_ROW: return "row"; - case SQLITE_DONE: return "$done"; - } - - return "unknown"; -} - -ERL_NIF_TERM -make_two_atom_tuple(ErlNifEnv *env, const char *one, const char *two) { - return enif_make_tuple2(env, make_atom(env, one), make_atom(env, two)); -} - -ERL_NIF_TERM -make_extended_error_tuple(ErlNifEnv *env, int code) { - switch(code) { - case SQLITE_MISUSE: - return make_two_atom_tuple(env, "misuse", "invoked_incorrectly"); - case SQLITE_ERROR_MISSING_COLLSEQ: - return make_two_atom_tuple(env, "error", "missing_collesq"); - case SQLITE_ERROR_RETRY: - return make_two_atom_tuple(env, "error", "retry"); - case SQLITE_ERROR_SNAPSHOT: - return make_two_atom_tuple(env, "error", "snapshot"); - case SQLITE_IOERR_READ: - return make_two_atom_tuple(env, "ioerr", "read"); - case SQLITE_IOERR_SHORT_READ: - return make_two_atom_tuple(env, "ioerr", "short_read"); - case SQLITE_IOERR_WRITE: - return make_two_atom_tuple(env, "ioerr", "write"); - case SQLITE_IOERR_FSYNC: - return make_two_atom_tuple(env, "ioerr", "fsync"); - case SQLITE_IOERR_DIR_FSYNC: - return make_two_atom_tuple(env, "ioerr", "dir_fsync"); - case SQLITE_IOERR_TRUNCATE: - return make_two_atom_tuple(env, "ioerr", "truncate"); - case SQLITE_IOERR_FSTAT: - return make_two_atom_tuple(env, "ioerr", "fstat"); - case SQLITE_IOERR_UNLOCK: - return make_two_atom_tuple(env, "ioerr", "unlock"); - case SQLITE_IOERR_RDLOCK: - return make_two_atom_tuple(env, "ioerr", "rdlock"); - case SQLITE_IOERR_DELETE: - return make_two_atom_tuple(env, "ioerr", "delete"); - case SQLITE_IOERR_BLOCKED: - return make_two_atom_tuple(env, "ioerr", "blocked"); - case SQLITE_IOERR_NOMEM: - return make_two_atom_tuple(env, "ioerr", "nomem"); - case SQLITE_IOERR_ACCESS: - return make_two_atom_tuple(env, "ioerr", "access"); - case SQLITE_IOERR_CHECKRESERVEDLOCK: - return make_two_atom_tuple(env, "ioerr", "checkreservedlock"); - case SQLITE_IOERR_LOCK: - return make_two_atom_tuple(env, "ioerr", "lock"); - case SQLITE_IOERR_CLOSE: - return make_two_atom_tuple(env, "ioerr", "close"); - case SQLITE_IOERR_DIR_CLOSE: - return make_two_atom_tuple(env, "ioerr", "dir_close"); - case SQLITE_IOERR_SHMOPEN: - return make_two_atom_tuple(env, "ioerr", "shmopen"); - case SQLITE_IOERR_SHMSIZE: - return make_two_atom_tuple(env, "ioerr", "shmsize"); - case SQLITE_IOERR_SHMLOCK: - return make_two_atom_tuple(env, "ioerr", "shmlock"); - case SQLITE_IOERR_SHMMAP: - return make_two_atom_tuple(env, "ioerr", "shmmap"); - case SQLITE_IOERR_SEEK: - return make_two_atom_tuple(env, "ioerr", "seek"); - case SQLITE_IOERR_DELETE_NOENT: - return make_two_atom_tuple(env, "ioerr", "delete_noent"); - case SQLITE_IOERR_MMAP: - return make_two_atom_tuple(env, "ioerr", "mmap"); - case SQLITE_IOERR_GETTEMPPATH: - return make_two_atom_tuple(env, "ioerr", "gettemppath"); - case SQLITE_IOERR_CONVPATH: - return make_two_atom_tuple(env, "ioerr", "convpath"); - case SQLITE_IOERR_VNODE: - return make_two_atom_tuple(env, "ioerr", "vnode"); - case SQLITE_IOERR_AUTH: - return make_two_atom_tuple(env, "ioerr", "auth"); - case SQLITE_IOERR_BEGIN_ATOMIC: - return make_two_atom_tuple(env, "ioerr", "begin_atomic"); - case SQLITE_IOERR_COMMIT_ATOMIC: - return make_two_atom_tuple(env, "ioerr", "commit_atomic"); - case SQLITE_IOERR_ROLLBACK_ATOMIC: - return make_two_atom_tuple(env, "ioerr", "rollback_atomic"); - case SQLITE_IOERR_DATA: - return make_two_atom_tuple(env, "ioerr", "data"); - case SQLITE_IOERR_CORRUPTFS: - return make_two_atom_tuple(env, "ioerr", "corruptfs"); - case SQLITE_LOCKED_SHAREDCACHE: - return make_two_atom_tuple(env, "locked", "sharedcache"); - case SQLITE_LOCKED_VTAB: - return make_two_atom_tuple(env, "locked", "vtab"); - case SQLITE_BUSY_RECOVERY: - return make_two_atom_tuple(env, "busy", "recovery"); - case SQLITE_BUSY_SNAPSHOT: - return make_two_atom_tuple(env, "busy", "snapshot"); - case SQLITE_BUSY_TIMEOUT: - return make_two_atom_tuple(env,"busy", "timeout"); - case SQLITE_CANTOPEN_NOTEMPDIR: - return make_two_atom_tuple(env, "cantopen", "notempdir"); - case SQLITE_CANTOPEN_ISDIR: - return make_two_atom_tuple(env, "cantopen", "isdir"); - case SQLITE_CANTOPEN_FULLPATH: - return make_two_atom_tuple(env, "cantopen", "fullpath"); - case SQLITE_CANTOPEN_CONVPATH: - return make_two_atom_tuple(env, "cantopen", "convpath"); - case SQLITE_CANTOPEN_DIRTYWAL: - return make_two_atom_tuple(env, "cantopen", "dirtywal"); - case SQLITE_CANTOPEN_SYMLINK: - return make_two_atom_tuple(env, "cantopen", "symlink"); - case SQLITE_CORRUPT_VTAB: - return make_two_atom_tuple(env, "corrupt", "vtab"); - case SQLITE_CORRUPT_SEQUENCE: - return make_two_atom_tuple(env, "corrupt", "sequence"); - case SQLITE_CORRUPT_INDEX: - return make_two_atom_tuple(env, "corrupt", "index"); - case SQLITE_READONLY_RECOVERY: - return make_two_atom_tuple(env, "readonly", "recovery"); - case SQLITE_READONLY_CANTLOCK: - return make_two_atom_tuple(env, "readonly", "cantlock"); - case SQLITE_READONLY_ROLLBACK: - return make_two_atom_tuple(env, "readonly", "rollback"); - case SQLITE_READONLY_DBMOVED: - return make_two_atom_tuple(env, "readonly", "dbmoved"); - case SQLITE_READONLY_CANTINIT: - return make_two_atom_tuple(env, "readonly", "cantinit"); - case SQLITE_READONLY_DIRECTORY: - return make_two_atom_tuple(env, "readonly", "directory"); - case SQLITE_ABORT_ROLLBACK: - return make_two_atom_tuple(env, "abort", "rollback"); - case SQLITE_CONSTRAINT_CHECK: - return make_two_atom_tuple(env, "constraint", "check"); - case SQLITE_CONSTRAINT_COMMITHOOK: - return make_two_atom_tuple(env, "constraint", "commithook"); - case SQLITE_CONSTRAINT_FOREIGNKEY: - return make_two_atom_tuple(env, "constraint", "foreignkey"); - case SQLITE_CONSTRAINT_FUNCTION: - return make_two_atom_tuple(env, "constraint", "function"); - case SQLITE_CONSTRAINT_NOTNULL: - return make_two_atom_tuple(env, "constraint", "notnull"); - case SQLITE_CONSTRAINT_PRIMARYKEY: - return make_two_atom_tuple(env, "constraint", "primarykey"); - case SQLITE_CONSTRAINT_TRIGGER: - return make_two_atom_tuple(env, "constraint", "trigger"); - case SQLITE_CONSTRAINT_UNIQUE: - return make_two_atom_tuple(env, "constraint", "unique"); - case SQLITE_CONSTRAINT_VTAB: - return make_two_atom_tuple(env, "constraint", "vtab"); - case SQLITE_CONSTRAINT_ROWID: - return make_two_atom_tuple(env, "constraint", "rowid"); - case SQLITE_CONSTRAINT_PINNED: - return make_two_atom_tuple(env, "constraint", "pinned"); - case SQLITE_CONSTRAINT_DATATYPE: - return make_two_atom_tuple(env, "constraint", "datatype"); - case SQLITE_NOTICE_RECOVER_WAL: - return make_two_atom_tuple(env, "notice", "recover_wal"); - case SQLITE_NOTICE_RECOVER_ROLLBACK: - return make_two_atom_tuple(env, "notice", "recover_rollback"); - case SQLITE_WARNING_AUTOINDEX: - return make_two_atom_tuple(env, "warning", "autoindex"); - case SQLITE_AUTH_USER: - return make_two_atom_tuple(env, "auth", "user"); - case SQLITE_OK_LOAD_PERMANENTLY: - return make_two_atom_tuple(env, "ok", "load_permanently"); - case SQLITE_OK_SYMLINK: - /* internal use only */ - return make_two_atom_tuple(env, "ok", "symlink"); - } - - return enif_make_tuple2(env, make_atom(env, "code"), enif_make_int(env, code)); -} - -static const char * -get_sqlite3_error_msg(int error_code, sqlite3 *db) -{ - static const char *msg; - - if(error_code == SQLITE_MISUSE) - return "Sqlite3 was invoked incorrectly."; - - msg = sqlite3_errmsg(db); - if(!msg) - return "No sqlite3 error message found."; - - return msg; -} - static ERL_NIF_TERM make_sqlite3_error_tuple(ErlNifEnv *env, int error_code) { - return enif_make_tuple2(env, make_atom(env, "error"), make_extended_error_tuple(env, error_code)); + return enif_make_tuple2(env, make_atom(env, "error"), enif_make_int(env, error_code)); } /* diff --git a/test/esqlite_test.erl b/test/esqlite_test.erl index 85adbf6..c36b017 100644 --- a/test/esqlite_test.erl +++ b/test/esqlite_test.erl @@ -28,7 +28,7 @@ close_test() -> {error, closed} = esqlite3:get_autocommit(C), {error, closed} = esqlite3:last_insert_rowid(C), - ?assertEqual({error, {misuse, invoked_incorrectly}}, + ?assertEqual({error, 21}, esqlite3:exec(C, "create table test(one, two, three)")), ok. @@ -42,7 +42,7 @@ prepare_test() -> prepare_after_close_test() -> {ok, C} = esqlite3:open(":memory:"), ?assertEqual(ok, esqlite3:close(C)), - ?assertMatch({error, {misuse, invoked_incorrectly}}, esqlite3:prepare(C, "select 1")), + ?assertMatch({error, 21}, esqlite3:prepare(C, "select 1")), ok. column_names_test() ->