Corrected some usage of QueueTask that was already broken as QueueTask is defunct.

This commit is contained in:
eelke 2018-12-31 11:38:54 +01:00
parent 1da8ef7407
commit f996703937
8 changed files with 95 additions and 144 deletions

View file

@ -4,6 +4,14 @@
namespace { namespace {
class registerMetaTypes {
public:
registerMetaTypes()
{
qRegisterMetaType<ExplainRoot::SPtr>();
}
} registerMetaTypes_instance;
ExplainTreeModelItemPtr createPlanItemFromJson(Json::Value &plan) ExplainTreeModelItemPtr createPlanItemFromJson(Json::Value &plan)
{ {

View file

@ -1,9 +1,9 @@
#pragma once #pragma once
#include <QList> #include <QList>
//#include <QVariant>
#include <vector> #include <vector>
#include <memory> #include <memory>
#include <QMetaType>
namespace Json { namespace Json {
@ -161,3 +161,4 @@ public:
}; };
Q_DECLARE_METATYPE(ExplainRoot::SPtr);

View file

@ -50,11 +50,6 @@ namespace DatabaseWindow_details {
return m_window->getDatabase(); return m_window->getDatabase();
} }
void QueueTask(TSQueue::t_Callable ) override
{
// m_window->QueueTask(c);
}
void showStatusMessage(const QString &msg) override void showStatusMessage(const QString &msg) override
{ {
m_window->statusBar()->showMessage(msg); m_window->statusBar()->showMessage(msg);

View file

@ -54,14 +54,11 @@ QueryTab::QueryTab(IPluginContentWidgetContext *context_, QWidget *parent)
connect(ui->removeButton, &QPushButton::clicked, m_queryParamListController, connect(ui->removeButton, &QPushButton::clicked, m_queryParamListController,
&QueryParamListController::on_removeParam); &QueryParamListController::on_removeParam);
context()->QueueTask([this]() { startConnect(); }); startConnect();
} }
QueryTab::~QueryTab() QueryTab::~QueryTab()
{ {
// m_dbConnection.blockSignals(true);
// m_dbConnection.closeConnection();
delete ui; delete ui;
} }
@ -158,7 +155,16 @@ void QueryTab::execute()
auto cb = [this](Expected<std::shared_ptr<Pgsql::Result>> res, qint64 elapsedms) auto cb = [this](Expected<std::shared_ptr<Pgsql::Result>> res, qint64 elapsedms)
{ {
context()->QueueTask([this, res, elapsedms]() { query_ready(res, elapsedms); }); if (res.valid()) {
auto && dbresult = res.get();
QMetaObject::invokeMethod(this, "query_ready",
Q_ARG(std::shared_ptr<Pgsql::Result>, dbresult),
Q_ARG(qint64, elapsedms));
}
else {
/// \todo handle error
}
}; };
if (m_queryParamListController->empty()) if (m_queryParamListController->empty())
@ -201,7 +207,8 @@ void QueryTab::explain(bool analyze)
explain = ExplainRoot::createFromJson(root); explain = ExplainRoot::createFromJson(root);
} }
} }
context()->QueueTask([this, explain]() { explain_ready(explain); }); QMetaObject::invokeMethod(this, "explain_ready",
Q_ARG(ExplainRoot::SPtr, explain));
}).detach(); }).detach();
} }
} }
@ -436,86 +443,80 @@ std::string QueryTab::getCommandUtf8() const
//} //}
void QueryTab::query_ready(Expected<std::shared_ptr<Pgsql::Result>> exp_res, qint64 elapsedms) void QueryTab::query_ready(std::shared_ptr<Pgsql::Result> dbres, qint64 elapsedms)
{ {
if (exp_res.valid()) { if (dbres) {
auto dbres = exp_res.get(); addLog("query_ready with result");
if (dbres) { auto st = dbres->resultStatus();
addLog("query_ready with result"); if (st == PGRES_TUPLES_OK) {
auto st = dbres->resultStatus(); //int n_rows = dbres->getRows();
if (st == PGRES_TUPLES_OK) { //QString rowcount_str = QString("rows: %1").arg(dbres->getRows());
//int n_rows = dbres->getRows();
//QString rowcount_str = QString("rows: %1").arg(dbres->getRows());
auto result_model = std::make_shared<QueryResultModel>(nullptr , dbres, auto result_model = std::make_shared<QueryResultModel>(nullptr , dbres,
m_catalog); m_catalog);
TuplesResultWidget *trw = new TuplesResultWidget; TuplesResultWidget *trw = new TuplesResultWidget;
trw->setResult(result_model, elapsedms); trw->setResult(result_model, elapsedms);
resultList.push_back(trw); resultList.push_back(trw);
ui->tabWidget->addTab(trw, "Data"); ui->tabWidget->addTab(trw, "Data");
if (resultList.size() == 1) if (resultList.size() == 1)
ui->tabWidget->setCurrentWidget(trw); ui->tabWidget->setCurrentWidget(trw);
} }
else { else {
if (st == PGRES_COMMAND_OK) { if (st == PGRES_COMMAND_OK) {
int tuples_affected = dbres->tuplesAffected(); int tuples_affected = dbres->tuplesAffected();
QString msg; QString msg;
if (tuples_affected >= 0) if (tuples_affected >= 0)
msg = tr("Query returned succesfully: %1 rows affected, execution time %2") msg = tr("Query returned succesfully: %1 rows affected, execution time %2")
.arg(QString::number(tuples_affected)) .arg(QString::number(tuples_affected))
.arg(msfloatToHumanReadableString(elapsedms)); .arg(msfloatToHumanReadableString(elapsedms));
else else
msg = tr("Query returned succesfully, execution time %1") msg = tr("Query returned succesfully, execution time %1")
.arg(msfloatToHumanReadableString(elapsedms)); .arg(msfloatToHumanReadableString(elapsedms));
ui->messagesEdit->append(msg); ui->messagesEdit->append(msg);
ui->tabWidget->setCurrentWidget(ui->messageTab); ui->tabWidget->setCurrentWidget(ui->messageTab);
} }
else { else {
// if (st == PGRES_EMPTY_QUERY) { // if (st == PGRES_EMPTY_QUERY) {
// statusBar()->showMessage(tr("Empty query.")); // statusBar()->showMessage(tr("Empty query."));
// } // }
// else if (st == PGRES_COPY_OUT) { // else if (st == PGRES_COPY_OUT) {
// statusBar()->showMessage(tr("COPY OUT.")); // statusBar()->showMessage(tr("COPY OUT."));
// } // }
// else if (st == PGRES_COPY_IN) { // else if (st == PGRES_COPY_IN) {
// statusBar()->showMessage(tr("COPY IN.")); // statusBar()->showMessage(tr("COPY IN."));
// } // }
// else if (st == PGRES_BAD_RESPONSE) { // else if (st == PGRES_BAD_RESPONSE) {
// statusBar()->showMessage(tr("BAD RESPONSE.")); // statusBar()->showMessage(tr("BAD RESPONSE."));
// } // }
// else if (st == PGRES_NONFATAL_ERROR) { // else if (st == PGRES_NONFATAL_ERROR) {
// statusBar()->showMessage(tr("NON FATAL ERROR.")); // statusBar()->showMessage(tr("NON FATAL ERROR."));
// } // }
// else if (st == PGRES_FATAL_ERROR) { // else if (st == PGRES_FATAL_ERROR) {
// statusBar()->showMessage(tr("FATAL ERROR.")); // statusBar()->showMessage(tr("FATAL ERROR."));
// } // }
// else if (st == PGRES_COPY_BOTH) { // else if (st == PGRES_COPY_BOTH) {
// statusBar()->showMessage(tr("COPY BOTH shouldn't happen is for replication.")); // statusBar()->showMessage(tr("COPY BOTH shouldn't happen is for replication."));
// } // }
// else if (st == PGRES_SINGLE_TUPLE) { // else if (st == PGRES_SINGLE_TUPLE) {
// statusBar()->showMessage(tr("SINGLE TUPLE result.")); // statusBar()->showMessage(tr("SINGLE TUPLE result."));
// } // }
// else { // else {
// statusBar()->showMessage(tr("No tuples returned, possibly an error...")); // statusBar()->showMessage(tr("No tuples returned, possibly an error..."));
// } // }
ui->tabWidget->setCurrentWidget(ui->messageTab); ui->tabWidget->setCurrentWidget(ui->messageTab);
auto details = dbres->diagDetails(); auto details = dbres->diagDetails();
markError(details); markError(details);
receiveNotice(details); receiveNotice(details);
} }
} }
} }
else { else {
m_stopwatch.stop(); m_stopwatch.stop();
addLog("query_ready with NO result"); addLog("query_ready with NO result");
} }
}
else {
// we have an error
}
} }
void QueryTab::markError(const Pgsql::ErrorDetails &details) void QueryTab::markError(const Pgsql::ErrorDetails &details)

View file

@ -94,8 +94,6 @@ private:
QString getCommand() const; QString getCommand() const;
std::string getCommandUtf8() const; std::string getCommandUtf8() const;
void explain_ready(ExplainRoot::SPtr explain);
void query_ready(Expected<std::shared_ptr<Pgsql::Result>> dbres, qint64 elapsedms);
//QTabWidget *getTabWidget(); //QTabWidget *getTabWidget();
//void setTabCaption(const QString &caption, const QString &tooltip); //void setTabCaption(const QString &caption, const QString &tooltip);
@ -104,6 +102,9 @@ private:
private slots: private slots:
void explain_ready(ExplainRoot::SPtr explain);
void query_ready(std::shared_ptr<Pgsql::Result>, qint64 elapsedms);
void queryTextChanged(); void queryTextChanged();
void connectionStateChanged(ASyncDBConnection::State state); void connectionStateChanged(ASyncDBConnection::State state);
void receiveNotice(Pgsql::ErrorDetails notice); void receiveNotice(Pgsql::ErrorDetails notice);

View file

@ -28,7 +28,6 @@ win32:RC_ICONS += pglab.ico
SOURCES += main.cpp\ SOURCES += main.cpp\
QueryResultModel.cpp \ QueryResultModel.cpp \
QueryExplainModel.cpp \ QueryExplainModel.cpp \
tsqueue.cpp \
CreateDatabaseDialog.cpp \ CreateDatabaseDialog.cpp \
ConnectionManagerWindow.cpp \ ConnectionManagerWindow.cpp \
ConnectionListModel.cpp \ ConnectionListModel.cpp \
@ -93,7 +92,6 @@ PropertyProxyModel.cpp \
HEADERS += \ HEADERS += \
QueryResultModel.h \ QueryResultModel.h \
QueryExplainModel.h \ QueryExplainModel.h \
tsqueue.h \
CreateDatabaseDialog.h \ CreateDatabaseDialog.h \
ConnectionManagerWindow.h \ ConnectionManagerWindow.h \
ConnectionListModel.h \ ConnectionListModel.h \

View file

@ -1,27 +0,0 @@
#include "tsqueue.h"
TSQueue::TSQueue()
{}
void TSQueue::add(t_Callable callable)
{
std::lock_guard<std::mutex> g(m);
futureQueue.push_back(std::move(callable));
}
bool TSQueue::empty()
{
std::lock_guard<std::mutex> g(m);
return futureQueue.empty();
}
TSQueue::t_Callable TSQueue::pop()
{
std::lock_guard<std::mutex> g(m);
auto f = std::move(futureQueue.front());
futureQueue.pop_front();
if (futureQueue.empty()) {
}
return f;
}

View file

@ -1,26 +0,0 @@
#ifndef TSQUEUE_H
#define TSQUEUE_H
//#include "Win32Event.h"
#include <deque>
#include <functional>
#include <mutex>
class TSQueue {
public:
using t_Callable = std::function<void()>;
TSQueue();
void add(t_Callable callable);
bool empty();
t_Callable pop();
private:
using t_CallableQueue = std::deque<t_Callable>;
std::mutex m;
t_CallableQueue futureQueue;
};
#endif // TSQUEUE_H