1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-08-31 18:31:04 +00:00

Resolve FIXME in ModStorageDatabaseSQLite3

This commit is contained in:
sfan5 2025-08-14 17:07:38 +02:00
parent 54d48decad
commit bb74b9d488
2 changed files with 9 additions and 16 deletions

View file

@ -821,6 +821,7 @@ ModStorageDatabaseSQLite3::~ModStorageDatabaseSQLite3()
FINALIZE_STATEMENT(get) FINALIZE_STATEMENT(get)
FINALIZE_STATEMENT(get_keys) FINALIZE_STATEMENT(get_keys)
FINALIZE_STATEMENT(get_all) FINALIZE_STATEMENT(get_all)
FINALIZE_STATEMENT(get_mods)
} }
void ModStorageDatabaseSQLite3::createDatabase() void ModStorageDatabaseSQLite3::createDatabase()
@ -840,6 +841,7 @@ void ModStorageDatabaseSQLite3::createDatabase()
void ModStorageDatabaseSQLite3::initStatements() void ModStorageDatabaseSQLite3::initStatements()
{ {
PREPARE_STATEMENT(get_mods, "SELECT DISTINCT `modname` FROM `entries`");
PREPARE_STATEMENT(get_all, "SELECT `key`, `value` FROM `entries` WHERE `modname` = ?"); PREPARE_STATEMENT(get_all, "SELECT `key`, `value` FROM `entries` WHERE `modname` = ?");
PREPARE_STATEMENT(get_keys, "SELECT `key` FROM `entries` WHERE `modname` = ?"); PREPARE_STATEMENT(get_keys, "SELECT `key` FROM `entries` WHERE `modname` = ?");
PREPARE_STATEMENT(get, PREPARE_STATEMENT(get,
@ -964,21 +966,11 @@ void ModStorageDatabaseSQLite3::listMods(std::vector<std::string> *res)
{ {
verifyDatabase(); verifyDatabase();
// FIXME: please don't do this. this should be sqlite3_step like all others. while (sqlite3_step(m_stmt_get_mods) == SQLITE_ROW) {
char *errmsg; auto name = sqlite_to_string_view(m_stmt_get_mods, 0);
int status = sqlite3_exec(m_database, res->emplace_back(name);
"SELECT `modname` FROM `entries` GROUP BY `modname`;",
[](void *res_vp, int n_col, char **cols, char **col_names) noexcept -> int {
try {
((decltype(res)) res_vp)->emplace_back(cols[0]);
} catch (...) {
return 1;
}
return 0;
}, (void *) res, &errmsg);
if (status != SQLITE_OK) {
auto msg = std::string("Error trying to list mods with metadata: ") + errmsg;
sqlite3_free(errmsg);
throw DatabaseException(msg);
} }
sqlite3_vrfy(sqlite3_errcode(m_database), SQLITE_DONE);
sqlite3_reset(m_stmt_get_mods);
} }

View file

@ -290,6 +290,7 @@ protected:
virtual void initStatements(); virtual void initStatements();
private: private:
sqlite3_stmt *m_stmt_get_mods = nullptr;
sqlite3_stmt *m_stmt_get_all = nullptr; sqlite3_stmt *m_stmt_get_all = nullptr;
sqlite3_stmt *m_stmt_get_keys = nullptr; sqlite3_stmt *m_stmt_get_keys = nullptr;
sqlite3_stmt *m_stmt_get = nullptr; sqlite3_stmt *m_stmt_get = nullptr;