summaryrefslogtreecommitdiff
path: root/platform/default/sqlite3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'platform/default/sqlite3.cpp')
-rw-r--r--platform/default/sqlite3.cpp110
1 files changed, 31 insertions, 79 deletions
diff --git a/platform/default/sqlite3.cpp b/platform/default/sqlite3.cpp
index 8a567d602e..ffa32db985 100644
--- a/platform/default/sqlite3.cpp
+++ b/platform/default/sqlite3.cpp
@@ -1,5 +1,7 @@
#include "sqlite3.hpp"
-#include <sqlite3.h>
+
+#include <mbgl/util/logging.hpp>
+#include <mbgl/util/traits.hpp>
#include <cassert>
#include <cstring>
@@ -7,11 +9,37 @@
#include <chrono>
#include <experimental/optional>
-#include <mbgl/util/logging.hpp>
+#include <sqlite3.h>
namespace mapbox {
namespace sqlite {
+static_assert(mbgl::underlying_type(ResultCode::OK) == SQLITE_OK, "error");
+static_assert(mbgl::underlying_type(ResultCode::Error) == SQLITE_ERROR, "error");
+static_assert(mbgl::underlying_type(ResultCode::Internal) == SQLITE_INTERNAL, "error");
+static_assert(mbgl::underlying_type(ResultCode::Perm) == SQLITE_PERM, "error");
+static_assert(mbgl::underlying_type(ResultCode::Abort) == SQLITE_ABORT, "error");
+static_assert(mbgl::underlying_type(ResultCode::Busy) == SQLITE_BUSY, "error");
+static_assert(mbgl::underlying_type(ResultCode::Locked) == SQLITE_LOCKED, "error");
+static_assert(mbgl::underlying_type(ResultCode::NoMem) == SQLITE_NOMEM, "error");
+static_assert(mbgl::underlying_type(ResultCode::ReadOnly) == SQLITE_READONLY, "error");
+static_assert(mbgl::underlying_type(ResultCode::Interrupt) == SQLITE_INTERRUPT, "error");
+static_assert(mbgl::underlying_type(ResultCode::IOErr) == SQLITE_IOERR, "error");
+static_assert(mbgl::underlying_type(ResultCode::Corrupt) == SQLITE_CORRUPT, "error");
+static_assert(mbgl::underlying_type(ResultCode::NotFound) == SQLITE_NOTFOUND, "error");
+static_assert(mbgl::underlying_type(ResultCode::Full) == SQLITE_FULL, "error");
+static_assert(mbgl::underlying_type(ResultCode::CantOpen) == SQLITE_CANTOPEN, "error");
+static_assert(mbgl::underlying_type(ResultCode::Protocol) == SQLITE_PROTOCOL, "error");
+static_assert(mbgl::underlying_type(ResultCode::Schema) == SQLITE_SCHEMA, "error");
+static_assert(mbgl::underlying_type(ResultCode::TooBig) == SQLITE_TOOBIG, "error");
+static_assert(mbgl::underlying_type(ResultCode::Constraint) == SQLITE_CONSTRAINT, "error");
+static_assert(mbgl::underlying_type(ResultCode::Mismatch) == SQLITE_MISMATCH, "error");
+static_assert(mbgl::underlying_type(ResultCode::Misuse) == SQLITE_MISUSE, "error");
+static_assert(mbgl::underlying_type(ResultCode::NoLFS) == SQLITE_NOLFS, "error");
+static_assert(mbgl::underlying_type(ResultCode::Auth) == SQLITE_AUTH, "error");
+static_assert(mbgl::underlying_type(ResultCode::Range) == SQLITE_RANGE, "error");
+static_assert(mbgl::underlying_type(ResultCode::NotADB) == SQLITE_NOTADB, "error");
+
class DatabaseImpl {
public:
DatabaseImpl(const char* filename, int flags)
@@ -69,84 +97,8 @@ public:
template <typename T>
using optional = std::experimental::optional<T>;
-static const char* codeToString(const int err) {
- switch (err) {
- case SQLITE_OK: return "SQLITE_OK";
- case SQLITE_ERROR: return "SQLITE_ERROR";
- case SQLITE_INTERNAL: return "SQLITE_INTERNAL";
- case SQLITE_PERM: return "SQLITE_PERM";
- case SQLITE_ABORT: return "SQLITE_ABORT";
- case SQLITE_BUSY: return "SQLITE_BUSY";
- case SQLITE_LOCKED: return "SQLITE_LOCKED";
- case SQLITE_NOMEM: return "SQLITE_NOMEM";
- case SQLITE_READONLY: return "SQLITE_READONLY";
- case SQLITE_INTERRUPT: return "SQLITE_INTERRUPT";
- case SQLITE_IOERR: return "SQLITE_IOERR";
- case SQLITE_CORRUPT: return "SQLITE_CORRUPT";
- case SQLITE_NOTFOUND: return "SQLITE_NOTFOUND";
- case SQLITE_FULL: return "SQLITE_FULL";
- case SQLITE_CANTOPEN: return "SQLITE_CANTOPEN";
- case SQLITE_PROTOCOL: return "SQLITE_PROTOCOL";
- case SQLITE_EMPTY: return "SQLITE_EMPTY";
- case SQLITE_SCHEMA: return "SQLITE_SCHEMA";
- case SQLITE_TOOBIG: return "SQLITE_TOOBIG";
- case SQLITE_CONSTRAINT: return "SQLITE_CONSTRAINT";
- case SQLITE_MISMATCH: return "SQLITE_MISMATCH";
- case SQLITE_MISUSE: return "SQLITE_MISUSE";
- case SQLITE_NOLFS: return "SQLITE_NOLFS";
- case SQLITE_AUTH: return "SQLITE_AUTH";
- case SQLITE_FORMAT: return "SQLITE_FORMAT";
- case SQLITE_RANGE: return "SQLITE_RANGE";
- case SQLITE_NOTADB: return "SQLITE_NOTADB";
- case SQLITE_NOTICE: return "SQLITE_NOTICE";
- case SQLITE_WARNING: return "SQLITE_WARNING";
- case SQLITE_ROW: return "SQLITE_ROW";
- case SQLITE_DONE: return "SQLITE_DONE";
- default: return "<unknown>";
- }
-}
-
static void errorLogCallback(void *, const int err, const char *msg) {
- auto severity = mbgl::EventSeverity::Info;
-
- switch (err) {
- case SQLITE_ERROR: // Generic error
- case SQLITE_INTERNAL: // Internal logic error in SQLite
- case SQLITE_PERM: // Access permission denied
- case SQLITE_ABORT: // Callback routine requested an abort
- case SQLITE_BUSY: // The database file is locked
- case SQLITE_LOCKED: // A table in the database is locked
- case SQLITE_NOMEM: // A malloc() failed
- case SQLITE_READONLY: // Attempt to write a readonly database
- case SQLITE_INTERRUPT: // Operation terminated by sqlite3_interrupt(
- case SQLITE_IOERR: // Some kind of disk I/O error occurred
- case SQLITE_CORRUPT: // The database disk image is malformed
- case SQLITE_NOTFOUND: // Unknown opcode in sqlite3_file_control()
- case SQLITE_FULL: // Insertion failed because database is full
- case SQLITE_CANTOPEN: // Unable to open the database file
- case SQLITE_PROTOCOL: // Database lock protocol error
- case SQLITE_EMPTY: // Internal use only
- case SQLITE_SCHEMA: // The database schema changed
- case SQLITE_TOOBIG: // String or BLOB exceeds size limit
- case SQLITE_CONSTRAINT: // Abort due to constraint violation
- case SQLITE_MISMATCH: // Data type mismatch
- case SQLITE_MISUSE: // Library used incorrectly
- case SQLITE_NOLFS: // Uses OS features not supported on host
- case SQLITE_AUTH: // Authorization denied
- case SQLITE_FORMAT: // Not used
- case SQLITE_RANGE: // 2nd parameter to sqlite3_bind out of range
- case SQLITE_NOTADB: // File opened that is not a database file
- severity = mbgl::EventSeverity::Error;
- break;
- case SQLITE_WARNING: // Warnings from sqlite3_log()
- severity = mbgl::EventSeverity::Warning;
- break;
- case SQLITE_NOTICE: // Notifications from sqlite3_log()
- default:
- break;
- }
-
- mbgl::Log::Record(severity, mbgl::Event::Database, "%s (%s)", msg, codeToString(err));
+ mbgl::Log::Record(mbgl::EventSeverity::Debug, mbgl::Event::Database, err, "%s", msg);
}
const static bool sqliteVersionCheck __attribute__((unused)) = []() {