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