The class that does all the work with the database. More...
#include <querythread.h>


Public Slots | |
| void | slotExecute (QueryQueue *queue) |
Signals | |
| void | querying (bool) |
| Emited at start and end of each query. | |
| void | signal_result (QueryThreadCommand result) |
Public Member Functions | |
| QueryWorker (QueryThreadConnSpecs &specs, QueryQueue *queryQueue, QObject *parent=0) | |
| ~QueryWorker () | |
| QueryThreadCommand | currentCmd () |
The class that does all the work with the database.
Normally, this class is instantiated in the QueryThread's run() method.
| QueryWorker::QueryWorker | ( | QueryThreadConnSpecs & | specs, | |
| QueryQueue * | queryQueue, | |||
| QObject * | parent = 0 | |||
| ) |
: QObject(parent), m_requester(0) { createConnection(specs, "ThreadConnection"); Q_ASSERT(queryQueue); this->m_queryQueue = queryQueue; };
| QueryWorker::~QueryWorker | ( | ) |
{};
| QueryThreadCommand QueryWorker::currentCmd | ( | ) |
Referenced by QueryThread::currentCmd().
{
QMutexLocker lock(&m_currentCmdMutex);
return m_currentCmd;
}
| void QueryWorker::querying | ( | bool | ) | [signal] |
Emited at start and end of each query.
Referenced by slotExecute().
| void QueryWorker::signal_result | ( | QueryThreadCommand | result | ) | [signal] |
Referenced by slotExecute().
| void QueryWorker::slotExecute | ( | QueryQueue * | queue | ) | [slot] |
{
QueryThreadCommand cmd = queue->dequeue();
if (!cmd.isValid()) return;
setCurrentCmd(cmd);
emit querying(true);
//Executing and setting of result;
QSharedPointer<QSqlQuery> result;
QSqlDatabase db = QSqlDatabase::database("ThreadConnection", false);
if (!db.isOpen() && !db.isOpenError())
connectToDatabase(db);
if (cmd.isEmpty() || db.isOpenError() || !db.isOpen()) {
qDebug() << "Threaded connection to database not open.";
result = QSharedPointer<QSqlQuery>(new QSqlQuery());
}
else {
do {
result = QSharedPointer<QSqlQuery>(new QSqlQuery(cmd.dequeueQuery(), db));
if (result->lastError().isValid() && !result->lastError().text().contains("canceling statement due to user request")) {
qWarning() << "Error from DB worker thread: " << result->lastError() << "\nAborting execution...";
qDebug() << "Caused in query: " << result->lastQuery();
break;
}
} while (!cmd.isEmpty());
}
releaseCurrentCmd();
cmd.setResult(result); // it's more efficient to assign a raw pointer than to copy the shared one...
emit signal_result(cmd);
emit querying(false);
};
1.7.1