From f9967039375ee9d476583210974571cab1530df0 Mon Sep 17 00:00:00 2001 From: eelke Date: Mon, 31 Dec 2018 11:38:54 +0100 Subject: [PATCH] Corrected some usage of QueueTask that was already broken as QueueTask is defunct. --- core/ExplainTreeModelItem.cpp | 8 ++ core/ExplainTreeModelItem.h | 3 +- pglab/DatabaseWindow.cpp | 5 -- pglab/QueryTab.cpp | 163 +++++++++++++++++----------------- pglab/QueryTab.h | 5 +- pglab/pglab.pro | 2 - pglab/tsqueue.cpp | 27 ------ pglab/tsqueue.h | 26 ------ 8 files changed, 95 insertions(+), 144 deletions(-) delete mode 100644 pglab/tsqueue.cpp delete mode 100644 pglab/tsqueue.h diff --git a/core/ExplainTreeModelItem.cpp b/core/ExplainTreeModelItem.cpp index 5f71489..035c671 100644 --- a/core/ExplainTreeModelItem.cpp +++ b/core/ExplainTreeModelItem.cpp @@ -4,6 +4,14 @@ namespace { + class registerMetaTypes { + public: + registerMetaTypes() + { + qRegisterMetaType(); + } + } registerMetaTypes_instance; + ExplainTreeModelItemPtr createPlanItemFromJson(Json::Value &plan) { diff --git a/core/ExplainTreeModelItem.h b/core/ExplainTreeModelItem.h index f800874..f78bb73 100644 --- a/core/ExplainTreeModelItem.h +++ b/core/ExplainTreeModelItem.h @@ -1,9 +1,9 @@ #pragma once #include -//#include #include #include +#include namespace Json { @@ -161,3 +161,4 @@ public: }; +Q_DECLARE_METATYPE(ExplainRoot::SPtr); diff --git a/pglab/DatabaseWindow.cpp b/pglab/DatabaseWindow.cpp index 9def9b1..dd813da 100644 --- a/pglab/DatabaseWindow.cpp +++ b/pglab/DatabaseWindow.cpp @@ -50,11 +50,6 @@ namespace DatabaseWindow_details { return m_window->getDatabase(); } - void QueueTask(TSQueue::t_Callable ) override - { -// m_window->QueueTask(c); - } - void showStatusMessage(const QString &msg) override { m_window->statusBar()->showMessage(msg); diff --git a/pglab/QueryTab.cpp b/pglab/QueryTab.cpp index e97e4e9..703c799 100644 --- a/pglab/QueryTab.cpp +++ b/pglab/QueryTab.cpp @@ -54,14 +54,11 @@ QueryTab::QueryTab(IPluginContentWidgetContext *context_, QWidget *parent) connect(ui->removeButton, &QPushButton::clicked, m_queryParamListController, &QueryParamListController::on_removeParam); - context()->QueueTask([this]() { startConnect(); }); + startConnect(); } QueryTab::~QueryTab() { -// m_dbConnection.blockSignals(true); -// m_dbConnection.closeConnection(); - delete ui; } @@ -158,7 +155,16 @@ void QueryTab::execute() auto cb = [this](Expected> 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, dbresult), + Q_ARG(qint64, elapsedms)); + } + else { + /// \todo handle error + + } }; if (m_queryParamListController->empty()) @@ -201,7 +207,8 @@ void QueryTab::explain(bool analyze) explain = ExplainRoot::createFromJson(root); } } - context()->QueueTask([this, explain]() { explain_ready(explain); }); + QMetaObject::invokeMethod(this, "explain_ready", + Q_ARG(ExplainRoot::SPtr, explain)); }).detach(); } } @@ -436,86 +443,80 @@ std::string QueryTab::getCommandUtf8() const //} -void QueryTab::query_ready(Expected> exp_res, qint64 elapsedms) +void QueryTab::query_ready(std::shared_ptr dbres, qint64 elapsedms) { - if (exp_res.valid()) { - auto dbres = exp_res.get(); - if (dbres) { - addLog("query_ready with result"); - auto st = dbres->resultStatus(); - if (st == PGRES_TUPLES_OK) { - //int n_rows = dbres->getRows(); - //QString rowcount_str = QString("rows: %1").arg(dbres->getRows()); + if (dbres) { + addLog("query_ready with result"); + auto st = dbres->resultStatus(); + if (st == PGRES_TUPLES_OK) { + //int n_rows = dbres->getRows(); + //QString rowcount_str = QString("rows: %1").arg(dbres->getRows()); - auto result_model = std::make_shared(nullptr , dbres, - m_catalog); - TuplesResultWidget *trw = new TuplesResultWidget; - trw->setResult(result_model, elapsedms); - resultList.push_back(trw); - ui->tabWidget->addTab(trw, "Data"); - if (resultList.size() == 1) - ui->tabWidget->setCurrentWidget(trw); + auto result_model = std::make_shared(nullptr , dbres, + m_catalog); + TuplesResultWidget *trw = new TuplesResultWidget; + trw->setResult(result_model, elapsedms); + resultList.push_back(trw); + ui->tabWidget->addTab(trw, "Data"); + if (resultList.size() == 1) + ui->tabWidget->setCurrentWidget(trw); - } - else { - if (st == PGRES_COMMAND_OK) { - int tuples_affected = dbres->tuplesAffected(); - QString msg; - if (tuples_affected >= 0) - msg = tr("Query returned succesfully: %1 rows affected, execution time %2") - .arg(QString::number(tuples_affected)) - .arg(msfloatToHumanReadableString(elapsedms)); - else - msg = tr("Query returned succesfully, execution time %1") - .arg(msfloatToHumanReadableString(elapsedms)); + } + else { + if (st == PGRES_COMMAND_OK) { + int tuples_affected = dbres->tuplesAffected(); + QString msg; + if (tuples_affected >= 0) + msg = tr("Query returned succesfully: %1 rows affected, execution time %2") + .arg(QString::number(tuples_affected)) + .arg(msfloatToHumanReadableString(elapsedms)); + else + msg = tr("Query returned succesfully, execution time %1") + .arg(msfloatToHumanReadableString(elapsedms)); - ui->messagesEdit->append(msg); + ui->messagesEdit->append(msg); - ui->tabWidget->setCurrentWidget(ui->messageTab); - } - else { - // if (st == PGRES_EMPTY_QUERY) { - // statusBar()->showMessage(tr("Empty query.")); - // } - // else if (st == PGRES_COPY_OUT) { - // statusBar()->showMessage(tr("COPY OUT.")); - // } - // else if (st == PGRES_COPY_IN) { - // statusBar()->showMessage(tr("COPY IN.")); - // } - // else if (st == PGRES_BAD_RESPONSE) { - // statusBar()->showMessage(tr("BAD RESPONSE.")); - // } - // else if (st == PGRES_NONFATAL_ERROR) { - // statusBar()->showMessage(tr("NON FATAL ERROR.")); - // } - // else if (st == PGRES_FATAL_ERROR) { - // statusBar()->showMessage(tr("FATAL ERROR.")); - // } - // else if (st == PGRES_COPY_BOTH) { - // statusBar()->showMessage(tr("COPY BOTH shouldn't happen is for replication.")); - // } - // else if (st == PGRES_SINGLE_TUPLE) { - // statusBar()->showMessage(tr("SINGLE TUPLE result.")); - // } - // else { - // statusBar()->showMessage(tr("No tuples returned, possibly an error...")); - // } - ui->tabWidget->setCurrentWidget(ui->messageTab); - auto details = dbres->diagDetails(); - markError(details); - receiveNotice(details); - } - } - } - else { - m_stopwatch.stop(); - addLog("query_ready with NO result"); - } - } - else { - // we have an error - } + ui->tabWidget->setCurrentWidget(ui->messageTab); + } + else { +// if (st == PGRES_EMPTY_QUERY) { +// statusBar()->showMessage(tr("Empty query.")); +// } +// else if (st == PGRES_COPY_OUT) { +// statusBar()->showMessage(tr("COPY OUT.")); +// } +// else if (st == PGRES_COPY_IN) { +// statusBar()->showMessage(tr("COPY IN.")); +// } +// else if (st == PGRES_BAD_RESPONSE) { +// statusBar()->showMessage(tr("BAD RESPONSE.")); +// } +// else if (st == PGRES_NONFATAL_ERROR) { +// statusBar()->showMessage(tr("NON FATAL ERROR.")); +// } +// else if (st == PGRES_FATAL_ERROR) { +// statusBar()->showMessage(tr("FATAL ERROR.")); +// } +// else if (st == PGRES_COPY_BOTH) { +// statusBar()->showMessage(tr("COPY BOTH shouldn't happen is for replication.")); +// } +// else if (st == PGRES_SINGLE_TUPLE) { +// statusBar()->showMessage(tr("SINGLE TUPLE result.")); +// } +// else { +// statusBar()->showMessage(tr("No tuples returned, possibly an error...")); +// } + ui->tabWidget->setCurrentWidget(ui->messageTab); + auto details = dbres->diagDetails(); + markError(details); + receiveNotice(details); + } + } + } + else { + m_stopwatch.stop(); + addLog("query_ready with NO result"); + } } void QueryTab::markError(const Pgsql::ErrorDetails &details) diff --git a/pglab/QueryTab.h b/pglab/QueryTab.h index bac8480..15fe669 100644 --- a/pglab/QueryTab.h +++ b/pglab/QueryTab.h @@ -94,8 +94,6 @@ private: 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); @@ -104,6 +102,9 @@ private: 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); diff --git a/pglab/pglab.pro b/pglab/pglab.pro index a2dcd1e..4b399cc 100644 --- a/pglab/pglab.pro +++ b/pglab/pglab.pro @@ -28,7 +28,6 @@ win32:RC_ICONS += pglab.ico SOURCES += main.cpp\ QueryResultModel.cpp \ QueryExplainModel.cpp \ - tsqueue.cpp \ CreateDatabaseDialog.cpp \ ConnectionManagerWindow.cpp \ ConnectionListModel.cpp \ @@ -93,7 +92,6 @@ PropertyProxyModel.cpp \ HEADERS += \ QueryResultModel.h \ QueryExplainModel.h \ - tsqueue.h \ CreateDatabaseDialog.h \ ConnectionManagerWindow.h \ ConnectionListModel.h \ diff --git a/pglab/tsqueue.cpp b/pglab/tsqueue.cpp deleted file mode 100644 index ef3a0f9..0000000 --- a/pglab/tsqueue.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "tsqueue.h" - -TSQueue::TSQueue() -{} - -void TSQueue::add(t_Callable callable) -{ - std::lock_guard g(m); - futureQueue.push_back(std::move(callable)); -} - -bool TSQueue::empty() -{ - std::lock_guard g(m); - return futureQueue.empty(); -} - -TSQueue::t_Callable TSQueue::pop() -{ - std::lock_guard g(m); - auto f = std::move(futureQueue.front()); - futureQueue.pop_front(); - if (futureQueue.empty()) { - } - return f; -} - diff --git a/pglab/tsqueue.h b/pglab/tsqueue.h deleted file mode 100644 index 779624e..0000000 --- a/pglab/tsqueue.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef TSQUEUE_H -#define TSQUEUE_H - -//#include "Win32Event.h" -#include -#include -#include - -class TSQueue { -public: - using t_Callable = std::function; - - TSQueue(); - void add(t_Callable callable); - bool empty(); - t_Callable pop(); - -private: - using t_CallableQueue = std::deque; - - std::mutex m; - t_CallableQueue futureQueue; -}; - - -#endif // TSQUEUE_H