32 #include <QSqlDatabase> 35 #include <QMutexLocker> 39 QSet<QString> LeechCraft::Util::DBLock::LockedBases_;
40 QMutex LeechCraft::Util::DBLock::LockedMutex_;
43 : Database_ (database)
52 if (Good_ ? !Database_.commit () : !Database_.rollback ())
53 DumpError (Database_.lastError ());
56 QMutexLocker locker (&LockedMutex_);
57 LockedBases_.remove (Database_.connectionName ());
64 QMutexLocker locker (&LockedMutex_);
65 const auto& conn = Database_.connectionName ();
66 if (LockedBases_.contains (conn))
71 if (!Database_.transaction ())
73 DumpError (Database_.lastError ());
74 throw std::runtime_error (
"Could not start transaction");
86 qWarning () << lastError.text () <<
"|" 87 << lastError.type () <<
"|" 88 << lastError.number ();
93 qWarning () <<
"query:" << lastQuery.lastQuery ();
94 DumpError (lastQuery.lastError ());
95 qWarning () <<
"bound values:" << lastQuery.boundValues ();
104 throw std::runtime_error (
"Query execution failed.");
UTIL_DB_API ~DBLock()
Destructor.
DBLock(const DBLock &)=delete
static UTIL_DB_API void DumpError(const QSqlError &error)
Dumps the error to the qWarning() stream.
UTIL_DB_API void Good()
Notifies the lock about successful higher-level operations.
UTIL_DB_API void Init()
Initializes the transaction.
static UTIL_DB_API void Execute(QSqlQuery &query)
Tries to execute the given query.