Refactor key-value store query code
authorFelix Weilbach <felix.weilbach@nextcloud.com>
Tue, 16 Nov 2021 11:11:08 +0000 (12:11 +0100)
committerMatthieu Gallien (Rebase PR Action) <matthieu_gallien@yahoo.fr>
Wed, 17 Nov 2021 09:53:26 +0000 (09:53 +0000)
Signed-off-by: Felix Weilbach <felix.weilbach@nextcloud.com>
src/common/syncjournaldb.cpp
src/common/syncjournaldb.h

index 8c41aec63df107a3c449355b4667dc7502122e4c..9d1fd8fb60f90fea5cbded681cc647a2a642d0fa 100644 (file)
@@ -996,69 +996,42 @@ void SyncJournalDb::keyValueStoreSet(const QString &key, QVariant value)
 
 qint64 SyncJournalDb::keyValueStoreGetInt(const QString &key, qint64 defaultValue)
 {
-    QMutexLocker locker(&_mutex);
-    if (!checkConnect()) {
-        return defaultValue;
-    }
-
-    const auto query = _queryManager.get(PreparedSqlQueryManager::GetKeyValueStoreQuery, QByteArrayLiteral("SELECT value FROM key_value_store WHERE key = ?1;"), _db);
-    if (!query) {
-        return defaultValue;
-    }
-
-    query->bindValue(1, key);
-    query->exec();
-
-    if (!query->next().hasData) {
-        return defaultValue;
+    const auto sqlQuery = keyValueStoreExecuteSelectQuery(key);
+    if (sqlQuery.isValid()) {
+        return sqlQuery.get()->int64Value(0);
     }
-
-    return query->int64Value(0);
+    return defaultValue;
 }
 
-bool SyncJournalDb::keyValueStoreGetBool(const QString &key, bool defaultValue)
+bool SyncJournalDb::keyValueStoreGetBool(const QString &key, const bool defaultValue)
 {
-    QMutexLocker locker(&_mutex);
-    if (!checkConnect()) {
-        return defaultValue;
-    }
-
-    const auto query = _queryManager.get(PreparedSqlQueryManager::GetKeyValueStoreQuery,
-        QByteArrayLiteral("SELECT value FROM key_value_store WHERE key = ?1;"), _db);
-    if (!query) {
-        return defaultValue;
-    }
-
-    query->bindValue(1, key);
-    query->exec();
-
-    if (!query->next().hasData) {
-        return defaultValue;
+    const auto sqlQuery = keyValueStoreExecuteSelectQuery(key);
+    if (sqlQuery.isValid()) {
+        return sqlQuery.get()->intValue(0);
     }
-
-    return query->intValue(0);
+    return defaultValue;
 }
 
-QVariant SyncJournalDb::keyValueStoreGet(const QString &key, QVariant defaultValue)
+OCC::Optional<PreparedSqlQuery> SyncJournalDb::keyValueStoreExecuteSelectQuery(const QString &key)
 {
     QMutexLocker locker(&_mutex);
     if (!checkConnect()) {
-        return defaultValue;
+        return {};
     }
 
     const auto query = _queryManager.get(PreparedSqlQueryManager::GetKeyValueStoreQuery, QByteArrayLiteral("SELECT value FROM key_value_store WHERE key = ?1;"), _db);
     if (!query) {
-        return defaultValue;
+        return {};
     }
 
     query->bindValue(1, key);
     query->exec();
 
     if (!query->next().hasData) {
-        return defaultValue;
+        return {};
     }
 
-    return query->stringValue(0);
+    return query;
 }
 
 void SyncJournalDb::keyValueStoreDelete(const QString &key)
index 9a3db71256f5fe5065b87ff8a3ba6a68d53b62d3..9c90b49085b7ab2825bfd5337be19b054c3ca9ac 100644 (file)
@@ -70,8 +70,7 @@ public:
 
     void keyValueStoreSet(const QString &key, QVariant value);
     qint64 keyValueStoreGetInt(const QString &key, qint64 defaultValue);
-    bool keyValueStoreGetBool(const QString &key, bool defaultValue);
-    QVariant keyValueStoreGet(const QString &key, QVariant defaultValue = {});
+    bool keyValueStoreGetBool(const QString &key, const bool defaultValue);
     void keyValueStoreDelete(const QString &key);
 
     bool deleteFileRecord(const QString &filename, bool recursively = false);
@@ -373,6 +372,7 @@ public:
     int autotestFailCounter = -1;
 
 private:
+    OCC::Optional<PreparedSqlQuery> keyValueStoreExecuteSelectQuery(const QString &key);
     int getFileRecordCount();
     bool updateDatabaseStructure();
     bool updateMetadataTableStructure();