mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
Accept driver that don't support transactions
Improve report of transaction errors.
This commit is contained in:
parent
0fa37430a4
commit
e3349aefb0
17
lib/sql.cpp
17
lib/sql.cpp
@ -10,9 +10,11 @@
|
||||
#include "base.h"
|
||||
#include "sql.h"
|
||||
#include "settings.h"
|
||||
#include "widgets/MainWindow.h"
|
||||
|
||||
int DbTransaction::mutex;
|
||||
int DbTransaction::error;
|
||||
bool DbTransaction::hasTransaction;
|
||||
QList<quint64> DbTransaction::items;
|
||||
|
||||
quint64 DatabaseStamp;
|
||||
@ -40,7 +42,14 @@ bool DbTransaction::begin(const char *file, int line)
|
||||
mutex++;
|
||||
has_begun = true;
|
||||
debug("Begin", file, line);
|
||||
return mutex > 1 ? true : QSqlDatabase::database().transaction();
|
||||
if (mutex > 1 || !hasTransaction)
|
||||
return true;
|
||||
|
||||
QSqlDatabase db = QSqlDatabase::database();
|
||||
bool ret = db.transaction();
|
||||
if (!ret)
|
||||
MainWindow::dbSqlError(db.lastError());
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool DbTransaction::finish(const char *oper, const char *file, int line)
|
||||
@ -81,7 +90,11 @@ bool DbTransaction::finish(const char *oper, const char *file, int line)
|
||||
}
|
||||
mutex--;
|
||||
items.clear();
|
||||
return db.commit();
|
||||
|
||||
bool ret = db.commit();
|
||||
if (!ret)
|
||||
MainWindow::dbSqlError(db.lastError());
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool DbTransaction::commit(const char *file, int line)
|
||||
|
||||
@ -22,6 +22,7 @@ class DbTransaction
|
||||
static int mutex;
|
||||
static int error;
|
||||
static QList<quint64> items;
|
||||
static bool hasTransaction;
|
||||
bool has_begun;
|
||||
void debug(const char *func, const char *file, int line);
|
||||
bool finish(const char *oper, const char *file, int line);
|
||||
@ -41,6 +42,10 @@ class DbTransaction
|
||||
{
|
||||
items << v.toULongLong();
|
||||
}
|
||||
static void setHasTransaction(bool trans)
|
||||
{
|
||||
hasTransaction = trans;
|
||||
}
|
||||
};
|
||||
|
||||
#define Transaction DbTransaction __trans
|
||||
|
||||
@ -197,7 +197,15 @@ bool OpenDb::_openDatabase(QString connName, QString pass) const
|
||||
QSqlError e = db.lastError();
|
||||
if (!e.isValid() || e.type() != QSqlError::ConnectionError ||
|
||||
db.isOpen())
|
||||
{
|
||||
bool hasTrans = QSqlDatabase::database()
|
||||
.driver()->hasFeature(QSqlDriver::Transactions);
|
||||
DbTransaction::setHasTransaction(hasTrans);
|
||||
if (!hasTrans) {
|
||||
XCA_WARN(tr("The database driver does not support transactions. This may happen if the client and server have different versions. Continue with care."));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
XSqlQuery::clearTablePrefix();
|
||||
db.close();
|
||||
return false;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user