1
0
forked from BRT/arc
arc/database/DatabaseManager.h

45 lines
1.8 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
// Лёгкое периодическое обслуживание в течение сессии (вызывать с фонового
// потока по таймеру): кап general_logs по количеству, удаление старых
// завершённых событий/транзакций и подрезка WAL-файла. Без VACUUM —
// он берёт эксклюзивную блокировку и слишком тяжёл для частого вызова.
void performMaintenance();
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};
};