diff --git a/libstuff/libstuff.cpp b/libstuff/libstuff.cpp index 095d8e08e..b9a389cd8 100644 --- a/libstuff/libstuff.cpp +++ b/libstuff/libstuff.cpp @@ -2535,7 +2535,7 @@ void SQueryLogClose() { // -------------------------------------------------------------------------- // Executes a SQLite query -int SQuery(sqlite3* db, const char* e, const string& sql, SQResult& result, int64_t warnThreshold, bool skipWarn) { +int SQuery(sqlite3* db, const char* e, const string& sql, SQResult& result, int64_t warnThreshold, bool skipWarn, bool skipQueryLog) { #define MAX_TRIES 3 // Execute the query and get the results uint64_t startTime = STimeNow(); @@ -2666,7 +2666,7 @@ int SQuery(sqlite3* db, const char* e, const string& sql, SQResult& result, int6 } uint64_t elapsed = STimeNow() - startTime; - if ((int64_t)elapsed > warnThreshold || (int64_t)elapsed > 10000) { + if (!skipQueryLog && ((int64_t)elapsed > warnThreshold || (int64_t)elapsed > 10000)) { // Avoid logging queries so long that we need dozens of lines to log them. string sqlToLog = sql.substr(0, 20000); SRedactSensitiveValues(sqlToLog); diff --git a/libstuff/libstuff.h b/libstuff/libstuff.h index bdd503b60..78f19f382 100644 --- a/libstuff/libstuff.h +++ b/libstuff/libstuff.h @@ -591,7 +591,7 @@ void SQueryLogOpen(const string& logFilename); void SQueryLogClose(); // Returns an SQLite result code. -int SQuery(sqlite3* db, const char* e, const string& sql, SQResult& result, int64_t warnThreshold = 2000 * STIME_US_PER_MS, bool skipWarn = false); +int SQuery(sqlite3* db, const char* e, const string& sql, SQResult& result, int64_t warnThreshold = 2000 * STIME_US_PER_MS, bool skipWarn = false, bool skipQueryLog = false); int SQuery(sqlite3* db, const char* e, const string& sql, int64_t warnThreshold = 2000 * STIME_US_PER_MS, bool skipWarn = false); bool SQVerifyTable(sqlite3* db, const string& tableName, const string& sql); bool SQVerifyTableExists(sqlite3* db, const string& tableName); diff --git a/sqlitecluster/SQLite.cpp b/sqlitecluster/SQLite.cpp index bbe69c248..015a8ecde 100644 --- a/sqlitecluster/SQLite.cpp +++ b/sqlitecluster/SQLite.cpp @@ -475,7 +475,7 @@ string SQLite::read(const string& query) const { return result[0][0]; } -bool SQLite::read(const string& query, SQResult& result) const { +bool SQLite::read(const string& query, SQResult& result, bool skipQueryLog) const { uint64_t before = STimeNow(); bool queryResult = false; _queryCount++; @@ -486,7 +486,7 @@ bool SQLite::read(const string& query, SQResult& result) const { queryResult = true; } else { _isDeterministicQuery = true; - queryResult = !SQuery(_db, "read only query", query, result); + queryResult = !SQuery(_db, "read only query", query, result, 2000 * STIME_US_PER_MS, false, skipQueryLog); if (_isDeterministicQuery && queryResult) { _queryCache.emplace(make_pair(query, result)); } diff --git a/sqlitecluster/SQLite.h b/sqlitecluster/SQLite.h index 509ff47fb..fd99090bd 100644 --- a/sqlitecluster/SQLite.h +++ b/sqlitecluster/SQLite.h @@ -75,7 +75,7 @@ class SQLite { // Performs a read-only query (eg, SELECT). This can be done inside or outside a transaction. Returns true on // success, and fills the 'result' with the result of the query. - bool read(const string& query, SQResult& result) const; + bool read(const string& query, SQResult& result, bool skipQueryLog = false) const; // Performs a read-only query (eg, SELECT) that returns a single value. string read(const string& query) const;