From cd8a7fe47298be12620cab62be8cf0816fabb095 Mon Sep 17 00:00:00 2001 From: Jude Melton-Houghton Date: Tue, 15 Nov 2022 10:45:12 -0500 Subject: Add MetaDataRef:get_keys (#12841) --- src/database/database-sqlite3.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/database/database-sqlite3.cpp') diff --git a/src/database/database-sqlite3.cpp b/src/database/database-sqlite3.cpp index 0406fadc8..5511a46de 100644 --- a/src/database/database-sqlite3.cpp +++ b/src/database/database-sqlite3.cpp @@ -775,6 +775,7 @@ ModMetadataDatabaseSQLite3::~ModMetadataDatabaseSQLite3() FINALIZE_STATEMENT(m_stmt_set) FINALIZE_STATEMENT(m_stmt_has) FINALIZE_STATEMENT(m_stmt_get) + FINALIZE_STATEMENT(m_stmt_get_keys) FINALIZE_STATEMENT(m_stmt_get_all) } @@ -796,6 +797,7 @@ void ModMetadataDatabaseSQLite3::createDatabase() void ModMetadataDatabaseSQLite3::initStatements() { PREPARE_STATEMENT(get_all, "SELECT `key`, `value` FROM `entries` WHERE `modname` = ?"); + PREPARE_STATEMENT(get_keys, "SELECT `key` FROM `entries` WHERE `modname` = ?"); PREPARE_STATEMENT(get, "SELECT `value` FROM `entries` WHERE `modname` = ? AND `key` = ? LIMIT 1"); PREPARE_STATEMENT(has, @@ -825,6 +827,24 @@ bool ModMetadataDatabaseSQLite3::getModEntries(const std::string &modname, Strin return true; } +bool ModMetadataDatabaseSQLite3::getModKeys(const std::string &modname, + std::vector *storage) +{ + verifyDatabase(); + + str_to_sqlite(m_stmt_get_keys, 1, modname); + while (sqlite3_step(m_stmt_get_keys) == SQLITE_ROW) { + const char *key_data = (const char *) sqlite3_column_blob(m_stmt_get_keys, 0); + size_t key_len = sqlite3_column_bytes(m_stmt_get_keys, 0); + storage->emplace_back(key_data, key_len); + } + sqlite3_vrfy(sqlite3_errcode(m_database), SQLITE_DONE); + + sqlite3_reset(m_stmt_get_keys); + + return true; +} + bool ModMetadataDatabaseSQLite3::getModEntry(const std::string &modname, const std::string &key, std::string *value) { -- cgit v1.2.3