11 #include <QSqlDatabase>
14 #include <QMutexLocker>
20 QSet<QString> DBLock::LockedBases_;
22 QMutex DBLock::LockedMutex_;
25 : Database_ { database }
35 !Database_.commit () :
36 !Database_.rollback ())
37 DumpError (Database_.lastError ());
40 QMutexLocker locker (&LockedMutex_);
41 LockedBases_.remove (Database_.connectionName ());
48 QMutexLocker locker (&LockedMutex_);
49 const auto& conn = Database_.connectionName ();
50 if (LockedBases_.contains (conn))
55 if (!Database_.transaction ())
57 DumpError (Database_.lastError ());
58 throw std::runtime_error (
"Could not start transaction");
68 void DBLock::DumpError (
const QSqlError& lastError)
70 qWarning () << lastError.text () <<
"|"
74 void DBLock::DumpError (
const QSqlQuery& lastQuery)
76 qWarning () <<
"query:" << lastQuery.lastQuery ();
77 DumpError (lastQuery.lastError ());
78 qWarning () <<
"bound values:" << lastQuery.boundValues ();
81 void DBLock::Execute (QSqlQuery& query)
87 throw std::runtime_error (
"Query execution failed.");