blob: cdf8110688f22e7662e3715474a2005ec079d00a (
plain) (
blame)
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, Dialect dialect, bool noLock)
{
init(lock, getMode(query, dialect, 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, Dialect dialect, bool noLock)
{
if (noLock)
return ReadWriteLocker::NONE;
QueryAccessMode queryMode = getQueryAccessMode(query, dialect);
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;
}
|