92 lines
3.1 KiB
C++
Executable File
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
|