#ifndef CODEBUILDER_H #define CODEBUILDER_H #include "Pgsql_declare.h" #include #include class LanguageConfig; class QTextStream; class CodeBuilder { public: void setLanguageConfig(std::shared_ptr config){ m_configuration = config; } void GenCodeForExecutingQuery(QTextStream &q, const QString &query, const Pgsql::Result &result, QString structname); void GenReturnStructDefinition(QTextStream &q, const Pgsql::Result &result, QString structname) const; // Generating code for performing query and going through the result // - Code for executing the query // - Code for looping the result // - Code for processing a single row // - Declaration of struct for holding single row result QString columnNameToVariableName(QString column_name) const; QString getTypeName(Oid dbtype) const; private: class ColumnData { public: Oid oid; QString columnName; QString varName; ///< either field of the struct or in loop local var name }; using ColumnDataList = std::vector; std::shared_ptr m_configuration; void GenFieldAssignments(QTextStream &q, const Pgsql::Result &result); void genFieldDeclaration(QTextStream &q, const QString &format, const QString &column_name, Oid column_type) const; ColumnDataList createColumnDataList(const Pgsql::Result &result); }; #endif // CODEBUILDER_H