#ifndef QUERYTAB_H #define QUERYTAB_H #include "ASyncDBConnection.h" #include "QueryResultModel.h" #include "QueryExplainModel.h" #include "stopwatch.h" #include "tuplesresultwidget.h" #include #include "plugin_support/PluginContentWidget.h" #include "plugin_support/PluginModule.h" #include namespace Ui { class QueryTab; } namespace Pgsql { class ErrorDetails ; } class QTableView; class QTabWidget; class SqlSyntaxHighlighter; class ExplainRoot; class QueryResultModel; class QueryExplainModel; class PgTypeContainer; class OpenDatabase; class QueryParamListController; class PgDatabaseCatalog; class QueryTab : public PluginContentWidget { Q_OBJECT public: QueryTab(IPluginContentWidgetContext *context, QWidget *parent = nullptr); ~QueryTab() override; void newdoc(); bool load(const QString &filename); bool save(); bool saveAs(); void saveCopyAs(); void execute(); void explain(bool analyze); void cancel(); bool canClose() override; 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; 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; //QTabWidget *getTabWidget(); //void setTabCaption(const QString &caption, const QString &tooltip); void clearResult(); void markError(const Pgsql::ErrorDetails &details); private slots: void explain_ready(ExplainRoot::SPtr explain); void query_ready(std::shared_ptr, qint64 elapsedms); void queryTextChanged(); void connectionStateChanged(ASyncDBConnection::State state); void receiveNotice(Pgsql::ErrorDetails notice); void startConnect(); }; class QueryToolModule: public PluginModule { Q_OBJECT public: using PluginModule::PluginModule; void init() override; void menuAction_new(IPluginContentWidgetContext* context); private slots: }; #endif // QUERYTAB_H