Module can register action Window adds this action to its menu Clicking the menu item for the action has the expected result But menu structure still needs work (everything is now put into one dropdown menu)
125 lines
2.8 KiB
C++
125 lines
2.8 KiB
C++
#ifndef QUERYTAB_H
|
|
#define QUERYTAB_H
|
|
|
|
#include "ASyncDBConnection.h"
|
|
#include "QueryResultModel.h"
|
|
#include "QueryExplainModel.h"
|
|
#include "stopwatch.h"
|
|
#include "tuplesresultwidget.h"
|
|
|
|
#include <QWidget>
|
|
#include "plugin_support/PluginContentWidget.h"
|
|
#include "plugin_support/PluginModule.h"
|
|
#include <memory>
|
|
|
|
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<QAction*> getToolbarActions() override;
|
|
private:
|
|
|
|
using ResultTabContainer = std::vector<TuplesResultWidget*>;
|
|
|
|
Ui::QueryTab *ui;
|
|
SqlSyntaxHighlighter* highlighter;
|
|
ConnectionConfig m_config;
|
|
StopWatch m_stopwatch;
|
|
std::vector<QAction*> actions;
|
|
|
|
QueryParamListController *m_queryParamListController = nullptr;
|
|
|
|
bool m_new = true;
|
|
QString m_fileName; ///< use setFileName function to set
|
|
bool m_queryTextChanged = false;
|
|
|
|
std::shared_ptr<PgDatabaseCatalog> m_catalog;
|
|
ASyncDBConnection m_dbConnection;
|
|
|
|
std::unique_ptr<QueryExplainModel> 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<Pgsql::Result>, 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
|