Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bab202f7 authored by Fyodor Kupolov's avatar Fyodor Kupolov Committed by Android (Google) Code Review
Browse files

Merge "Expand error codes in messages"

parents d57c1df3 6e98f468
Loading
Loading
Loading
Loading
+102 −1
Original line number Diff line number Diff line
@@ -18,8 +18,108 @@

#include <utils/String8.h>

#include <map>

namespace android {

static const std::map<int, std::string> sErrorCodesMap = {
    // Primary Result Code List
    {4,     "SQLITE_ABORT"},
    {23,    "SQLITE_AUTH"},
    {5,     "SQLITE_BUSY"},
    {14,    "SQLITE_CANTOPEN"},
    {19,    "SQLITE_CONSTRAINT"},
    {11,    "SQLITE_CORRUPT"},
    {101,   "SQLITE_DONE"},
    {16,    "SQLITE_EMPTY"},
    {1,     "SQLITE_ERROR"},
    {24,    "SQLITE_FORMAT"},
    {13,    "SQLITE_FULL"},
    {2,     "SQLITE_INTERNAL"},
    {9,     "SQLITE_INTERRUPT"},
    {10,    "SQLITE_IOERR"},
    {6,     "SQLITE_LOCKED"},
    {20,    "SQLITE_MISMATCH"},
    {21,    "SQLITE_MISUSE"},
    {22,    "SQLITE_NOLFS"},
    {7,     "SQLITE_NOMEM"},
    {26,    "SQLITE_NOTADB"},
    {12,    "SQLITE_NOTFOUND"},
    {27,    "SQLITE_NOTICE"},
    {0,     "SQLITE_OK"},
    {3,     "SQLITE_PERM"},
    {15,    "SQLITE_PROTOCOL"},
    {25,    "SQLITE_RANGE"},
    {8,     "SQLITE_READONLY"},
    {100,   "SQLITE_ROW"},
    {17,    "SQLITE_SCHEMA"},
    {18,    "SQLITE_TOOBIG"},
    {28,    "SQLITE_WARNING"},
    // Extended Result Code List
    {516,   "SQLITE_ABORT_ROLLBACK"},
    {261,   "SQLITE_BUSY_RECOVERY"},
    {517,   "SQLITE_BUSY_SNAPSHOT"},
    {1038,  "SQLITE_CANTOPEN_CONVPATH"},
    {782,   "SQLITE_CANTOPEN_FULLPATH"},
    {526,   "SQLITE_CANTOPEN_ISDIR"},
    {270,   "SQLITE_CANTOPEN_NOTEMPDIR"},
    {275,   "SQLITE_CONSTRAINT_CHECK"},
    {531,   "SQLITE_CONSTRAINT_COMMITHOOK"},
    {787,   "SQLITE_CONSTRAINT_FOREIGNKEY"},
    {1043,  "SQLITE_CONSTRAINT_FUNCTION"},
    {1299,  "SQLITE_CONSTRAINT_NOTNULL"},
    {1555,  "SQLITE_CONSTRAINT_PRIMARYKEY"},
    {2579,  "SQLITE_CONSTRAINT_ROWID"},
    {1811,  "SQLITE_CONSTRAINT_TRIGGER"},
    {2067,  "SQLITE_CONSTRAINT_UNIQUE"},
    {2323,  "SQLITE_CONSTRAINT_VTAB"},
    {267,   "SQLITE_CORRUPT_VTAB"},
    {3338,  "SQLITE_IOERR_ACCESS"},
    {2826,  "SQLITE_IOERR_BLOCKED"},
    {3594,  "SQLITE_IOERR_CHECKRESERVEDLOCK"},
    {4106,  "SQLITE_IOERR_CLOSE"},
    {6666,  "SQLITE_IOERR_CONVPATH"},
    {2570,  "SQLITE_IOERR_DELETE"},
    {5898,  "SQLITE_IOERR_DELETE_NOENT"},
    {4362,  "SQLITE_IOERR_DIR_CLOSE"},
    {1290,  "SQLITE_IOERR_DIR_FSYNC"},
    {1802,  "SQLITE_IOERR_FSTAT"},
    {1034,  "SQLITE_IOERR_FSYNC"},
    {6410,  "SQLITE_IOERR_GETTEMPPATH"},
    {3850,  "SQLITE_IOERR_LOCK"},
    {6154,  "SQLITE_IOERR_MMAP"},
    {3082,  "SQLITE_IOERR_NOMEM"},
    {2314,  "SQLITE_IOERR_RDLOCK"},
    {266,   "SQLITE_IOERR_READ"},
    {5642,  "SQLITE_IOERR_SEEK"},
    {5130,  "SQLITE_IOERR_SHMLOCK"},
    {5386,  "SQLITE_IOERR_SHMMAP"},
    {4618,  "SQLITE_IOERR_SHMOPEN"},
    {4874,  "SQLITE_IOERR_SHMSIZE"},
    {522,   "SQLITE_IOERR_SHORT_READ"},
    {1546,  "SQLITE_IOERR_TRUNCATE"},
    {2058,  "SQLITE_IOERR_UNLOCK"},
    {778,   "SQLITE_IOERR_WRITE"},
    {262,   "SQLITE_LOCKED_SHAREDCACHE"},
    {539,   "SQLITE_NOTICE_RECOVER_ROLLBACK"},
    {283,   "SQLITE_NOTICE_RECOVER_WAL"},
    {256,   "SQLITE_OK_LOAD_PERMANENTLY"},
    {520,   "SQLITE_READONLY_CANTLOCK"},
    {1032,  "SQLITE_READONLY_DBMOVED"},
    {264,   "SQLITE_READONLY_RECOVERY"},
    {776,   "SQLITE_READONLY_ROLLBACK"},
    {284,   "SQLITE_WARNING_AUTOINDEX"},
};

static std::string sqlite3_error_code_to_msg(int errcode) {
    auto it = sErrorCodesMap.find(errcode);
    if (it != sErrorCodesMap.end()) {
        return std::to_string(errcode) + " " + it->second;
    } else {
        return std::to_string(errcode);
    }
}

/* throw a SQLiteException with a message appropriate for the error in handle */
void throw_sqlite3_exception(JNIEnv* env, sqlite3* handle) {
    throw_sqlite3_exception(env, handle, NULL);
@@ -123,7 +223,8 @@ void throw_sqlite3_exception(JNIEnv* env, int errcode,
    if (sqlite3Message) {
        String8 fullMessage;
        fullMessage.append(sqlite3Message);
        fullMessage.appendFormat(" (code %d)", errcode); // print extended error code
        const char* errcode_msg = sqlite3_error_code_to_msg(errcode).c_str();
        fullMessage.appendFormat(" (code %s)", errcode_msg); // print extended error code
        if (message) {
            fullMessage.append(": ");
            fullMessage.append(message);