40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
#pragma once
|
||
|
||
#include <QSqlDatabase>
|
||
#include <QString>
|
||
#include <QMap>
|
||
#include <QMutex>
|
||
#include <QSet>
|
||
#include <atomic>
|
||
|
||
class DatabaseManager {
|
||
public:
|
||
static DatabaseManager& instance();
|
||
|
||
QSqlDatabase database();
|
||
void initSchema();
|
||
void cleanupOldData(int days = 5);
|
||
void closeConnection();
|
||
|
||
// Путь к файлу БД из config.ini (с раскрытием ~). Единая точка вычисления.
|
||
static QString dbFilePath();
|
||
// Удалить файл БД вместе с WAL/SHM-сайдкарами и sentinel-файлом.
|
||
static void wipeDatabaseFiles();
|
||
// Создать sentinel <dbPath>.wipe — отложенное удаление БД при следующем старте.
|
||
static void writeWipeSentinel();
|
||
|
||
// Флаг «удалить БД при выходе», выставляется из GUI-потока.
|
||
void setWipeOnExit(bool wipe) { m_wipeOnExit.store(wipe); }
|
||
bool wipeOnExit() const { return m_wipeOnExit.load(); }
|
||
|
||
private:
|
||
DatabaseManager();
|
||
~DatabaseManager();
|
||
|
||
static QString connectionName();
|
||
|
||
QRecursiveMutex mutex;
|
||
QSet<QString> activeConnections;
|
||
QMap<QString, QSqlDatabase> connectionPool;
|
||
std::atomic<bool> m_wipeOnExit{false};
|
||
}; |