From 4ef8f815c9bb8793f2ab3ec522a57117d0435700 Mon Sep 17 00:00:00 2001 From: Jason Wray Date: Thu, 8 Sep 2016 13:01:19 -0400 Subject: [core] Implement SQLite error logging (#6291) --- platform/default/sqlite3.cpp | 13 +++++++++++++ platform/default/sqlite3.hpp | 1 + 2 files changed, 14 insertions(+) (limited to 'platform/default') diff --git a/platform/default/sqlite3.cpp b/platform/default/sqlite3.cpp index b6db71a752..da50a1db87 100644 --- a/platform/default/sqlite3.cpp +++ b/platform/default/sqlite3.cpp @@ -7,6 +7,8 @@ #include #include +#include + const static bool sqliteVersionCheck __attribute__((unused)) = []() { if (sqlite3_libversion_number() / 1000000 != SQLITE_VERSION_NUMBER / 1000000) { char message[96]; @@ -26,6 +28,7 @@ template using optional = std::experimental::optional; Database::Database(const std::string &filename, int flags) { + sqlite3_config(SQLITE_CONFIG_LOG, errorLogCallback, nullptr); const int err = sqlite3_open_v2(filename.c_str(), &db, flags, nullptr); if (err != SQLITE_OK) { const auto message = sqlite3_errmsg(db); @@ -55,6 +58,16 @@ Database::operator bool() const { return db != nullptr; } +void Database::errorLogCallback(void *, const int err, const char *msg) { + if (err == SQLITE_ERROR) { + mbgl::Log::Error(mbgl::Event::Database, "%s (Code %i)", msg, err); + } else if (err == SQLITE_WARNING) { + mbgl::Log::Warning(mbgl::Event::Database, "%s (Code %i)", msg, err); + } else { + mbgl::Log::Info(mbgl::Event::Database, "%s (Code %i)", msg, err); + } +} + void Database::setBusyTimeout(std::chrono::milliseconds timeout) { assert(db); const int err = sqlite3_busy_timeout(db, diff --git a/platform/default/sqlite3.hpp b/platform/default/sqlite3.hpp index cdc6f87380..cba432272b 100644 --- a/platform/default/sqlite3.hpp +++ b/platform/default/sqlite3.hpp @@ -51,6 +51,7 @@ public: private: sqlite3 *db = nullptr; + static void errorLogCallback(void *arg, const int err, const char *msg); }; class Statement { -- cgit v1.2.1