mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-27 17:28:41 +00:00
Add mod storage PostgreSQL backend
This commit is contained in:
parent
9dbac989bd
commit
aaa05f901a
4 changed files with 315 additions and 0 deletions
|
@ -20,12 +20,18 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||
|
||||
// This file is an edited copy of test_authdatabase.cpp
|
||||
|
||||
#include "cmake_config.h"
|
||||
|
||||
#include "test.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
#include "database/database-dummy.h"
|
||||
#include "database/database-files.h"
|
||||
#include "database/database-sqlite3.h"
|
||||
#if USE_POSTGRESQL
|
||||
#include "database/database-postgresql.h"
|
||||
#endif
|
||||
#include "filesys.h"
|
||||
|
||||
namespace
|
||||
|
@ -104,6 +110,46 @@ private:
|
|||
std::string dir;
|
||||
ModMetadataDatabase *mod_meta_db = nullptr;
|
||||
};
|
||||
|
||||
#if USE_POSTGRESQL
|
||||
void clearPostgreSQLDatabase(const std::string &connect_string)
|
||||
{
|
||||
ModMetadataDatabasePostgreSQL db(connect_string);
|
||||
std::vector<std::string> modnames;
|
||||
db.beginSave();
|
||||
db.listMods(&modnames);
|
||||
for (const std::string &modname : modnames)
|
||||
db.removeModEntries(modname);
|
||||
db.endSave();
|
||||
}
|
||||
|
||||
class PostgreSQLProvider : public ModMetadataDatabaseProvider
|
||||
{
|
||||
public:
|
||||
PostgreSQLProvider(const std::string &connect_string): m_connect_string(connect_string) {}
|
||||
|
||||
~PostgreSQLProvider()
|
||||
{
|
||||
if (m_db)
|
||||
m_db->endSave();
|
||||
delete m_db;
|
||||
}
|
||||
|
||||
ModMetadataDatabase *getModMetadataDatabase() override
|
||||
{
|
||||
if (m_db)
|
||||
m_db->endSave();
|
||||
delete m_db;
|
||||
m_db = new ModMetadataDatabasePostgreSQL(m_connect_string);
|
||||
m_db->beginSave();
|
||||
return m_db;
|
||||
};
|
||||
|
||||
private:
|
||||
std::string m_connect_string;
|
||||
ModMetadataDatabase *m_db = nullptr;
|
||||
};
|
||||
#endif // USE_POSTGRESQL
|
||||
}
|
||||
|
||||
class TestModMetadataDatabase : public TestBase
|
||||
|
@ -193,6 +239,33 @@ void TestModMetadataDatabase::runTests(IGameDef *gamedef)
|
|||
runTestsForCurrentDB();
|
||||
|
||||
delete mod_meta_provider;
|
||||
|
||||
#if USE_POSTGRESQL
|
||||
const char *env_postgresql_connect_string = getenv("MINETEST_POSTGRESQL_CONNECT_STRING");
|
||||
if (env_postgresql_connect_string) {
|
||||
std::string connect_string(env_postgresql_connect_string);
|
||||
|
||||
rawstream << "-------- PostgreSQL database (same object)" << std::endl;
|
||||
|
||||
clearPostgreSQLDatabase(connect_string);
|
||||
mod_meta_db = new ModMetadataDatabasePostgreSQL(connect_string);
|
||||
mod_meta_provider = new FixedProvider(mod_meta_db);
|
||||
|
||||
runTestsForCurrentDB();
|
||||
|
||||
delete mod_meta_db;
|
||||
delete mod_meta_provider;
|
||||
|
||||
rawstream << "-------- PostgreSQL database (new objects)" << std::endl;
|
||||
|
||||
clearPostgreSQLDatabase(connect_string);
|
||||
mod_meta_provider = new PostgreSQLProvider(connect_string);
|
||||
|
||||
runTestsForCurrentDB();
|
||||
|
||||
delete mod_meta_provider;
|
||||
}
|
||||
#endif // USE_POSTGRESQL
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue