1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
#include "readwritelocker.h"
#include "parser/lexer.h"
#include "common/utils_sql.h"
#include <QReadWriteLock>
#include <QReadLocker>
#include <QWriteLocker>
#include <QDebug>
ReadWriteLocker::ReadWriteLocker(QReadWriteLock* lock, Mode mode)
{
init(lock, mode);
}
ReadWriteLocker::ReadWriteLocker(QReadWriteLock* lock, const QString& query, bool noLock)
{
init(lock, getMode(query, noLock));
}
ReadWriteLocker::~ReadWriteLocker()
{
if (readLocker)
{
delete readLocker;
readLocker = nullptr;
}
if (writeLocker)
{
delete writeLocker;
writeLocker = nullptr;
}
}
void ReadWriteLocker::init(QReadWriteLock* lock, ReadWriteLocker::Mode mode)
{
switch (mode)
{
case ReadWriteLocker::READ:
readLocker = new QReadLocker(lock);
break;
case ReadWriteLocker::WRITE:
writeLocker = new QWriteLocker(lock);
break;
case ReadWriteLocker::NONE:
// Nothing to lock.
break;
}
}
ReadWriteLocker::Mode ReadWriteLocker::getMode(const QString &query, bool noLock)
{
if (noLock)
return ReadWriteLocker::NONE;
QueryAccessMode queryMode = getQueryAccessMode(query);
switch (queryMode)
{
case QueryAccessMode::READ:
return ReadWriteLocker::READ;
case QueryAccessMode::WRITE:
return ReadWriteLocker::WRITE;
}
qCritical() << "Unhandled query access mode:" << static_cast<int>(queryMode);
return ReadWriteLocker::NONE;
}
|