#ifndef QUERYTAB_H #define QUERYTAB_H #include "ASyncDBConnection.h" #include "QueryResultModel.h" #include "QueryExplainModel.h" #include "stopwatch.h" #include "tuplesresultwidget.h" #include #include "PlgPage.h" #include namespace Ui { class QueryTab; } namespace Pgsql { class ErrorDetails ; } class QTableView; class QTabWidget; class DatabaseWindow; class SqlSyntaxHighlighter; class ExplainRoot; class QueryResultModel; class QueryExplainModel; class PgTypeContainer; class OpenDatabase; class QueryParamListController; class PgDatabaseCatalog; class QueryTab : public PlgPage { Q_OBJECT public: QueryTab(DatabaseWindow *win, QWidget *parent = nullptr); ~QueryTab(); void setConfig(const ConnectionConfig &config, std::shared_ptrcat); void newdoc(); // void open(); bool load(const QString &filename); bool save(); bool saveAs(); void saveCopyAs(); void execute(); void explain(bool analyze); void cancel(); bool canClose(); void copyQueryAsCString(); void copyQueryAsRawCppString(); void generateCode(); void exportData(const QString &filename); QString fileName() const { return m_fileName; } bool isChanged() const { return m_queryTextChanged; } bool isNew() const { return m_new; } void focusEditor(); virtual std::vector getToolbarActions() override; private: using ResultTabContainer = std::vector; Ui::QueryTab *ui; DatabaseWindow *m_win; SqlSyntaxHighlighter* highlighter; ConnectionConfig m_config; StopWatch m_stopwatch; std::vector actions; QueryParamListController *m_queryParamListController = nullptr; bool m_new = true; QString m_fileName; ///< use setFileName function to set bool m_queryTextChanged = false; std::shared_ptr m_catalog; ASyncDBConnection m_dbConnection; std::unique_ptr explainModel; ResultTabContainer resultList; void setFileName(const QString &filename); bool continueWithoutSavingWarning(); bool saveSqlTo(const QString &filename); QString promptUserForSaveSqlFilename(); void addLog(QString s); QString getCommand() const; std::string getCommandUtf8() const; void explain_ready(ExplainRoot::SPtr explain); void query_ready(Expected> dbres, qint64 elapsedms); QTabWidget *getTabWidget(); void setTabCaption(const QString &caption, const QString &tooltip); void clearResult(); void markError(const Pgsql::ErrorDetails &details); private slots: void queryTextChanged(); void connectionStateChanged(ASyncDBConnection::State state); void receiveNotice(Pgsql::ErrorDetails notice); void startConnect(); }; #endif // QUERYTAB_H