/** * @RDE_HEADER@ * DBUpdate * $Id$ * $HeadURL$ * $Author$ * Created by Iuliana Ojog, 2021-02-17 */ #pragma once #include #include #include #include #include #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