Files
qt5-legatus-legacy/Lts/Tools/DBUpdate/db_update.h
T
2026-08-13 18:33:10 +02:00

118 lines
2.9 KiB
C++
Executable File

/**
* @RDE_HEADER@
* DBUpdate
* $Id$
* $HeadURL$
* $Author$
* Created by Iuliana Ojog, 2021-02-17
*/
#pragma once
#include <QMainWindow>
#include <QStandardItemModel>
#include <QVector>
#include <QSqlDatabase>
#include <QProcess>
#include "logger.h"
#include "global_updates_model.h"
#include "exercises_model.h"
#include "show_history.h"
namespace Ui {
class DBUpdate;
}
namespace DBUpdate
{
struct Update
{
QString filename;
QString info;
QString project;
QString version;
QString date;
QString global_schemas;
QString exercise_schemas;
QString global_sql;
QString exercise_sql;
QString generated_sql;
QString generated_file;
};
class DBUpdate : public QMainWindow
{
friend class DBUpdateRun;
Q_OBJECT
public:
explicit DBUpdate(QWidget *parent = nullptr);
~DBUpdate();
bool init();
private slots:
void onClosedClicked();
void onUpdateLoad();
void onUpdateRun();
void onShowLogFile();
void onClearLogFile();
void onShowGlobalHistory(const QModelIndex &idx);
void onShowExerciseHistory(const QModelIndex &idx);
void onLoadSQL();
void onBackupDB();
private:
void enaDisa();
bool parseUpdateFile(const QString &fileName, bool showUi = true);
void saveUpdateSql();
private:
Ui::DBUpdate *m_ui;
QSqlDatabase m_db;
Update m_update;
bool m_showUi {true};
GlobalUpdatesModel *m_globalUpdatesModel{nullptr};
GlobalUpdatesProxyModel *m_globalUpdatesProxyModel{nullptr};
ExercisesModel *m_exercisesModel{nullptr};
ExercisesProxyModel *m_exercisesProxyModel{nullptr};
ShowHistory *m_showHistory{nullptr};
QString m_sql;
static QString m_defaultPath;
LOGGER_T m_logger;
};
class DBUpdateRun : public QObject
{
Q_OBJECT
public:
explicit DBUpdateRun(const QString &updateFile, bool generateOnly, bool withBackup, QObject *parent = nullptr);
~DBUpdateRun();
bool init();
bool runUpdate();
bool runPgDump(const QString &dumpFile, const QString &dbHost, const QString &dbName);
Q_SIGNALS:
void runSqlFailed();
void runSqlFinished();
void runPgDumpFailed();
void runPgDumpFinished();
private:
void onPsqlFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onPgDumpFinished(int exitCode, QProcess::ExitStatus exitStatus);
bool parseUpdateFile();
void generateSql();
bool runPsql();
QString executablePath(const QString &program);
void handleProcInit(const QString &program, const QStringList &args);
void handleProcFinished(int exitCode, QProcess::ExitStatus exitStatus);
void onErrorOccured(QProcess::ProcessError error);
private:
QSqlDatabase m_db;
Update m_update;
bool m_generateOnly;
bool m_withBackup;
GlobalUpdatesModel *m_globalUpdatesModel{nullptr};
ExercisesModel *m_exercisesModel{nullptr};
QProcess *m_proc;
LOGGER_T m_logger;
};
} // namespace DBUpdate