QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGCSqlHelper.cc
Go to the documentation of this file.
1#include "QGCSqlHelper.h"
2
3#include <QtCore/QLatin1Char>
4#include <QtCore/QStringLiteral>
5#include <QtSql/QSqlQuery>
6
7namespace QGCSqlHelper {
8
9QString escapeLikePattern(const QString& text)
10{
11 QString escaped = text;
12 escaped.replace(QLatin1Char('\\'), QStringLiteral("\\\\"));
13 escaped.replace(QLatin1Char('%'), QStringLiteral("\\%"));
14 escaped.replace(QLatin1Char('_'), QStringLiteral("\\_"));
15 return escaped;
16}
17
18void applySqlitePragmas(QSqlDatabase& db)
19{
20 QSqlQuery q(db);
21 q.exec(QStringLiteral("PRAGMA journal_mode=WAL"));
22 q.exec(QStringLiteral("PRAGMA synchronous=NORMAL"));
23}
24
25// ── ScopedConnection ───────────────────────────────────────────────────
26
27std::atomic<int> ScopedConnection::s_connId{0};
28
29ScopedConnection::ScopedConnection(const QString& dbPath, bool readOnly)
30{
31 if (dbPath.isEmpty()) {
32 return;
33 }
34
35 _connName = QStringLiteral("QGCSql_%1").arg(s_connId.fetch_add(1));
36
37 QSqlDatabase db = QSqlDatabase::addDatabase(QStringLiteral("QSQLITE"), _connName);
38 db.setDatabaseName(dbPath);
39 if (readOnly) {
40 db.setConnectOptions(QStringLiteral("QSQLITE_OPEN_READONLY"));
41 }
42
43 if (db.open()) {
45 _valid = true;
46 }
47}
48
50{
51 if (!_connName.isEmpty()) {
52 {
53 QSqlDatabase db = QSqlDatabase::database(_connName, false);
54 if (db.isOpen()) {
55 db.close();
56 }
57 }
58 QSqlDatabase::removeDatabase(_connName);
59 }
60}
61
62QSqlDatabase ScopedConnection::database() const
63{
64 return QSqlDatabase::database(_connName, false);
65}
66
67} // namespace QGCSqlHelper
ScopedConnection(const QString &dbPath, bool readOnly=false)
QSqlDatabase database() const
Lightweight SQL utilities shared across QGC components.
QString escapeLikePattern(const QString &text)
void applySqlitePragmas(QSqlDatabase &db)
Applies standard QGC pragmas: WAL journal mode + NORMAL synchronous.