Ability to list all keys from kv store 22/33522/2
authorPiotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
Mon, 12 Jan 2015 15:34:00 +0000 (16:34 +0100)
committerPiotr Bartosiewicz <p.bartosiewi@partner.samsung.com>
Mon, 12 Jan 2015 15:55:27 +0000 (16:55 +0100)
[Bug/Feature]   Add listKeys method. Mainly for debug purposes.
[Cause]         N/A
[Solution]      N/A
[Verification]  Build

Change-Id: I1d760e047e0393e8ecdb22c242f3ef52e7fdf9d5

src/config/kvstore.cpp
src/config/kvstore.hpp

index d6223fc..a9d3fb6 100644 (file)
@@ -174,6 +174,8 @@ void KVStore::prepareStatements()
         new sqlite3::Statement(mConn, "INSERT OR REPLACE INTO data (key, value) VALUES (?,?)"));
     mRemoveValuesStmt.reset(
         new sqlite3::Statement(mConn, "DELETE FROM data WHERE key = ?1  OR key GLOB escapeStr(?1) ||'.*' "));
+    mGetKeysStmt.reset(
+        new sqlite3::Statement(mConn, "SELECT key FROM data"));
 }
 
 void KVStore::createFunctions()
@@ -310,4 +312,25 @@ std::vector<std::string> KVStore::getInternal(const std::string& key, std::vecto
     return values;
 }
 
+std::vector<std::string> KVStore::getKeys()
+{
+    Transaction transaction = getTransaction();
+    ScopedReset scopedReset(mGetKeysStmt);
+
+    std::vector<std::string> result;
+
+    for (;;) {
+        int ret = ::sqlite3_step(mGetKeysStmt->get());
+        if (ret == SQLITE_DONE) {
+            return result;
+        }
+        if (ret != SQLITE_ROW) {
+            throw ConfigException("Error during stepping: " + mConn.getErrorMessage());
+        }
+        const char* key = reinterpret_cast<const char*>(sqlite3_column_text(mGetKeysStmt->get(),
+                                                                            FIRST_COLUMN));
+        result.push_back(key);
+    }
+}
+
 } // namespace config
index 44c0aa1..4dc978a 100644 (file)
@@ -106,6 +106,11 @@ public:
         return getInternal(key, static_cast<T*>(nullptr));
     }
 
+    /**
+     * Returns all stored keys.
+     */
+    std::vector<std::string> getKeys();
+
     KVStore::Transaction getTransaction();
 
 private:
@@ -139,6 +144,7 @@ private:
     std::unique_ptr<sqlite3::Statement> mGetValueListStmt;
     std::unique_ptr<sqlite3::Statement> mSetValueStmt;
     std::unique_ptr<sqlite3::Statement> mRemoveValuesStmt;
+    std::unique_ptr<sqlite3::Statement> mGetKeysStmt;
 
     void setupDb();
     void prepareStatements();