/** * EXM Database Administartion (Create Schema/Tables/Views etc) * $Id$ * $HeadURL$ * $Author$ * Created by Hanna E. Rathje, SLSE, 2015-09-15 */ #pragma once #include #include #include #include #include #include #include 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 QMap m_sqlGeneratorMap; QString m_xmlPath; QString m_ownSchemaName; QSqlDatabase m_database; QElapsedTimer m_emitAliveTimer; NGL::INGLLogger &m_logger; }; } // namespace DBAdministration