From e28d57b64695d9f9a4a5939a9e8b71459d1fb9ae Mon Sep 17 00:00:00 2001
From: Piotr Bartosiewicz
Date: Mon, 12 Jan 2015 16:34:00 +0100
Subject: [PATCH] Ability to list all keys from kv store
[Bug/Feature] Add listKeys method. Mainly for debug purposes.
[Cause] N/A
[Solution] N/A
[Verification] Build
Change-Id: I1d760e047e0393e8ecdb22c242f3ef52e7fdf9d5
---
src/config/kvstore.cpp | 23 +++++++++++++++++++++++
src/config/kvstore.hpp | 6 ++++++
2 files changed, 29 insertions(+)
diff --git a/src/config/kvstore.cpp b/src/config/kvstore.cpp
index d6223fc..a9d3fb6 100644
--- a/src/config/kvstore.cpp
+++ b/src/config/kvstore.cpp
@@ -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 KVStore::getInternal(const std::string& key, std::vecto
return values;
}
+std::vector KVStore::getKeys()
+{
+ Transaction transaction = getTransaction();
+ ScopedReset scopedReset(mGetKeysStmt);
+
+ std::vector 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(sqlite3_column_text(mGetKeysStmt->get(),
+ FIRST_COLUMN));
+ result.push_back(key);
+ }
+}
+
} // namespace config
diff --git a/src/config/kvstore.hpp b/src/config/kvstore.hpp
index 44c0aa1..4dc978a 100644
--- a/src/config/kvstore.hpp
+++ b/src/config/kvstore.hpp
@@ -106,6 +106,11 @@ public:
return getInternal(key, static_cast(nullptr));
}
+ /**
+ * Returns all stored keys.
+ */
+ std::vector getKeys();
+
KVStore::Transaction getTransaction();
private:
@@ -139,6 +144,7 @@ private:
std::unique_ptr mGetValueListStmt;
std::unique_ptr mSetValueStmt;
std::unique_ptr mRemoveValuesStmt;
+ std::unique_ptr mGetKeysStmt;
void setupDb();
void prepareStatements();
--
2.7.4