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

92 lines
3.1 KiB
C++
Executable File

/**
* EXM Database Administartion (Create Schema/Tables/Views etc)
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2015-09-15
*/
#pragma once
#include <QElapsedTimer>
#include <QString>
#include <QStringList>
#include <QMap>
#include <QSqlDatabase>
#include <CodeGen/SqlGenerator.h>
#include <NGLLogger/INGLLogger.h>
namespace CodeGen
{
class SqlGenerator;
}
namespace DBAdministration
{
class ExerciseTableGenerator : public QObject
{
Q_OBJECT
public:
explicit ExerciseTableGenerator(NGL::INGLLogger &logger, const QString &xmlPath, QObject *parent = nullptr);
virtual ~ExerciseTableGenerator();
bool init(const QSqlDatabase &database, const QString &ownSchemaName, bool createOwnSchema = false);
void close();
QStringList getAvailableServices() const { return m_sqlGeneratorMap.keys(); }
bool isServiceGlobal(const QString &svcAbbr) const;
// Write sql-stmt for a service into a file
bool writeServiceSqlToFile(const QString &svcName, const QString &dbSchema);
bool executeSql(const QString &svcName, const QString &dbSchema, QStringList &handledServices, const CodeGen::ExerciseDependency &ed);
bool executeSql(const QString &svcName, const QString &dbSchema, const QString &dbUser, QStringList &handledServices, const CodeGen::ExerciseDependency &ed);
// TODO: better naming
bool executeSqlTableRelated(const QString &svcName, const QString &dbSchema, const QString &dbUser);
bool existsSchema(const QString &dbSchema, const QSqlDatabase &dbConn) const;
//bool createDbSchemaIfNotExists(const QString &dbSchema) const;
bool createDbSchemaIfNotExists(const QString &dbSchema, QString dbUser) const;
bool dropDbSchema(const QString &dbSchema, const QString &dbUser) const;
bool existsTable(const QString &tableName, const QString &dbSchema) const;
bool insertTableData(const QString &table, const QString &dbSchema, const CodeGen::SqlGenerator *sqlGen );
bool executeSql();
// Methods for a specific exercise
bool writeExerciseServicesSql(qint32 exerciseId);
bool executeSql(qint32 exerciseId);
bool createExerciseSchema(qint32 exerciseId);
bool dropExerciseSchema(qint32 exerciseId, bool bDropUser);
QStringList getAvailableExerciseServices() const;
QStringList getAvailableGlobalServices() const;
bool resetSearchPath() const;
bool schemaIsEmpty(const QString &dbSchema) const;
Q_SIGNALS:
void aliveSignal();
protected:
void generateSqlDataForExercise(int exerciseId);
bool executeStmts(const QStringList &stmts);
bool executsSqlConstraints(const QStringList &constraintList,
const QStringList &sqlStmts,
const QString &dbSchema);
void checkAliveTimer();
private:
// QMap<svcAbbr,Pointer SqlGenerator>
QMap<QString,CodeGen::SqlGenerator*> m_sqlGeneratorMap;
QString m_xmlPath;
QString m_ownSchemaName;
QSqlDatabase m_database;
QElapsedTimer m_emitAliveTimer;
NGL::INGLLogger &m_logger;
};
} // namespace DBAdministration