pgLab/mainwindow.h
Eelke Klein 8af6bc4ac5 Added explain functionality.
Uses json format with jsoncpp as a parser. Then show it in a QTreeView.
Shows inclusive/exclusive times like explain.despesz does. Also a similar
coloring scheme as applied.
2016-12-29 13:48:35 +01:00

71 lines
1.3 KiB
C++

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSocketNotifier>
#include <memory>
#include <future>
#include "PgsqlConn.h"
class ExplainRoot;
class QueryResultModel;
class QueryExplainModel;
class SqlHighlighter;
namespace Ui {
class MainWindow;
}
namespace Pgsql {
class Connection;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
std::unique_ptr<Ui::MainWindow> ui;
std::unique_ptr<SqlHighlighter> highlighter;
std::unique_ptr<Pgsql::Connection> connection;
std::unique_ptr<QueryResultModel> resultModel;
std::unique_ptr<QueryExplainModel> explainModel;
Pgsql::Canceller queryCancel;
std::future<Pgsql::Result> queryFuture;
std::future<std::unique_ptr<ExplainRoot>> explainFuture;
struct {
std::unique_ptr<QSocketNotifier> notifier;
PostgresPollingStatusType poll_state;
} connectingState;
// struct {
// std::unique_ptr<QSocketNotifier> notifierRead;
// std::unique_ptr<QSocketNotifier> notifierWrite;
// } queryState;
void processNotice(const PGresult *result);
private slots:
void startConnect();
void performQuery();
void performExplain();
void socket_activate_connect(int socket);
void query_ready();
void explain_ready();
void cancel_query();
void receiveNotice(Pgsql::ErrorDetails notice);
};
#endif // MAINWINDOW_H