The codegen now can properly lookup array types.

Array type lookup failed previously because the typemapping class was
not yet receiving the list of types from the database. Fix was to pass
this data
This commit is contained in:
eelke 2018-11-17 09:47:50 +01:00
parent 287073afdc
commit be0064f730
8 changed files with 34 additions and 20 deletions

View file

@ -20,8 +20,10 @@ CodeGenerator::~CodeGenerator()
delete ui;
}
void CodeGenerator::Init(QString query, std::shared_ptr<const Pgsql::Result> dbres)
void CodeGenerator::Init(std::shared_ptr<PgDatabaseCatalog> catalog, QString query,
std::shared_ptr<const Pgsql::Result> dbres)
{
m_catalog = catalog;
m_query = query;
m_dbres = dbres;
generateCode();
@ -42,7 +44,7 @@ void CodeGenerator::generateCode()
QString buffer;
QTextStream stream(&buffer);
CodeBuilder builder;
builder.setLanguageConfig(getPglabCppLanguageConfig());
builder.setLanguageConfig(getPglabCppLanguageConfig(m_catalog));
builder.GenCodeForExecutingQuery(stream, m_query, *m_dbres, struct_name);
stream.flush();
ui->generatedCodeEditor->setPlainText(buffer);

View file

@ -9,6 +9,8 @@ namespace Ui {
class CodeGenerator;
}
class PgDatabaseCatalog;
class CodeGenerator : public PlgPage
{
Q_OBJECT
@ -17,13 +19,14 @@ public:
explicit CodeGenerator(QWidget *parent = nullptr);
~CodeGenerator();
void Init(QString query, std::shared_ptr<const Pgsql::Result> dbres);
void Init(std::shared_ptr<PgDatabaseCatalog> catalog, QString query, std::shared_ptr<const Pgsql::Result> dbres);
private slots:
void on_updateCodeButton_clicked();
private:
Ui::CodeGenerator *ui;
std::shared_ptr<PgDatabaseCatalog> m_catalog;
QString m_query;
std::shared_ptr<const Pgsql::Result> m_dbres;

View file

@ -62,7 +62,7 @@ void MainWindow::newCrudPage(const PgClass &table)
void MainWindow::newCodeGenPage(QString query, std::shared_ptr<const Pgsql::Result> dbres)
{
auto cgtab = new CodeGenerator(this);
cgtab->Init(query, dbres);
cgtab->Init(m_database->catalogue(), query, dbres);
addPage(cgtab, "Codegen");
}