32 #include <QSqlDatabase>
35 #include <QMutexLocker>
40 QMutex LeechCraft::Util::DBLock::LockedMutex_;
43 : Database_ (database)
45 , Initialized_ (false)
54 if (Good_ ? !Database_.commit () : !Database_.rollback ())
55 DumpError (Database_.lastError ());
58 QMutexLocker locker (&LockedMutex_);
59 LockedBases_.remove (Database_.connectionName ());
66 QMutexLocker locker (&LockedMutex_);
67 const auto& conn = Database_.connectionName ();
68 if (LockedBases_.contains (conn))
73 if (!Database_.transaction ())
75 DumpError (Database_.lastError ());
76 throw std::runtime_error (
"Could not start transaction");
88 qWarning () << lastError.text () <<
"|"
89 << lastError.type () <<
"|"
90 << lastError.number ();
95 qWarning () <<
"query:" << lastQuery.lastQuery ();
96 DumpError (lastQuery.lastError ());
97 qWarning () <<
"bound values:" << lastQuery.boundValues ();
106 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.