[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: branches/extragear/graphics/digikam/1.0-databaseext/libs/database
From: Holger Foerster <hamsi2k () freenet ! de>
Date: 2009-11-20 10:51:23
Message-ID: 1258714283.101327.389.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1051952 by foerster:
Clean up some database code by using the DB driver to detect connection issues.
M +26 -76 databasecorebackend.cpp
M +2 -2 databasecorebackend.h
--- branches/extragear/graphics/digikam/1.0-databaseext/libs/database/databasecorebackend.cpp \
#1051951:1051952 @@ -126,6 +126,13 @@
QObject::connect(thread, SIGNAL(finished()),
q, SLOT(slotThreadFinished()));
}
+#ifdef DATABASCOREBACKEND_DEBUG
+ else
+ {
+ kDebug(50003) << "Database ["<< connectionName(thread) <<"] already open for \
thread ["<< thread <<"]."; + }
+#endif
+
return db;
}
@@ -167,7 +174,8 @@
bool success = db.open();
- if (success==false){
+ if (success==false)
+ {
kDebug(50003) << "Error while opening the database. Error was <" << \
db.lastError() << ">"; }
@@ -398,17 +406,17 @@
return d->parameters.m_DatabaseConfigs[d->parameters.databaseType].m_SQLStatements[actionName];
}
-bool DatabaseCoreBackend::execDBAction(const databaseAction &action, \
QList<QVariant>* values, QVariant *lastInsertId) +DatabaseCoreBackend::QueryState \
DatabaseCoreBackend::execDBAction(const databaseAction &action, QList<QVariant>* \
values, QVariant *lastInsertId) {
return execDBAction(action, QMap<QString, QVariant>(), values, lastInsertId);
}
-bool DatabaseCoreBackend::execDBAction(const databaseAction &action, const \
QMap<QString, QVariant>& bindingMap, +DatabaseCoreBackend::QueryState \
DatabaseCoreBackend::execDBAction(const databaseAction &action, const QMap<QString, \
QVariant>& bindingMap,
QList<QVariant>* values, QVariant \
*lastInsertId) {
Q_D(DatabaseCoreBackend);
- bool returnResult = true;
+ DatabaseCoreBackend::QueryState returnResult = DatabaseCoreBackend::NoErrors;
QSqlDatabase db = d->databaseForThread();
#ifdef DATABASCOREBACKEND_DEBUG
@@ -423,7 +431,7 @@
foreach (databaseActionElement actionElement, action.m_DBActionElements)
{
- bool result;
+ DatabaseCoreBackend::QueryState result;
if (actionElement.m_Mode==QString("query"))
{
result = execSql(actionElement.m_Statement, bindingMap, values, \
lastInsertId); @@ -432,7 +440,7 @@
{
result = execDirectSql(actionElement.m_Statement);
}
- if (result)
+ if (result==DatabaseCoreBackend::NoErrors)
{
if (wrapInTransaction)
db.commit();
@@ -525,7 +533,7 @@
{
if (!database.isOpen())
{
- kDebug(50003) << "Error while opening the database. Error was [" << \
query.driver()->lastError() << "]. Trying again."; + kDebug(50003) << \
"Error while opening the database. Error was [" << query.lastError() << "]. Trying \
again."; if (queryErrorHandling(query, retries++))
{
// TODO reopen the database
@@ -610,25 +618,10 @@
{
if (!query.isActive())
{
- if (query.driver()->lastError().type() == QSqlError::ConnectionError)
+ if (query.lastError().type() == QSqlError::ConnectionError)
{
return DatabaseCoreBackend::ConnectionError;
}
-
- // check if there is an connection error
- if (query.driver()->lastError().number() == -1)
- {
- Q_D(DatabaseCoreBackend);
- kDebug(50003) << "Detected unknown error. Trying to re-open the \
database.";
- d->closeDatabaseForThread();
- QSqlDatabase db = d->databaseForThread();
- if (!db.isOpen())
- {
- kDebug(50003) << "Error while opening the database. Details: ["<< \
db.lastError() <<"]";
- return DatabaseCoreBackend::ConnectionError;
- }else
- return DatabaseCoreBackend::SQLError;
- }
}
if (lastInsertId)
(*lastInsertId) = query.lastInsertId();
@@ -797,25 +790,9 @@
{
Q_D(DatabaseCoreBackend);
- // check if there is an connection error
- if (query.driver()->lastError().number() == -1)
+ kDebug(50003) << "Detected error type [" << query.lastError().type() << "]";
+ if (query.lastError().type() == QSqlError::ConnectionError || \
query.lastError().number()==2006) {
- kDebug(50003) << "Detected unknown error. Trying to re-open the database.";
- d->closeDatabaseForThread();
- QSqlDatabase db = d->databaseForThread();
- if (!db.isOpen())
- {
- kDebug(50003) << "Error while opening the database. Details: ["<< \
db.lastError() <<"]";
- if (d->checkConnectionError())
- return true;
- else
- return false;
- }else
- return true;
- }
- kDebug(50003) << "Detected error type [" << query.driver()->lastError().type() \
<< "]";
- if (query.driver()->lastError().type() == QSqlError::ConnectionError || \
query.driver()->lastError().number()==2006)
- {
if (d->checkConnectionError())
return true;
else
@@ -873,7 +850,7 @@
#ifdef DATABASCOREBACKEND_DEBUG
kDebug(50003) << "Trying to query ["<<query.lastQuery()<<"]";
#endif
- if (query.lastQuery().isEmpty() || query.exec())
+ if (query.exec())
break;
else
{
@@ -884,7 +861,6 @@
// TODO reopen the database
d->closeDatabaseForThread();
query = copyQuery(query);
- kDebug(50003) << "New created query. IsOpen():" << \
query.driver()->isOpen(); continue;
}
else
@@ -925,7 +901,11 @@
SqlQuery DatabaseCoreBackend::prepareQuery(const QString& sql)
{
SqlQuery query = getQuery();
- query.prepare(sql);
+ bool result = query.prepare(sql);
+ if (!result)
+ {
+ kDebug(50003) << "Prepare failed! Details: " << query.lastError();
+ }
return query;
}
@@ -965,25 +945,10 @@
if (!db.transaction())
{
d->decrementTransactionCount();
- if (db.driver()->lastError().type() == QSqlError::ConnectionError)
+ if (db.lastError().type() == QSqlError::ConnectionError)
{
return DatabaseCoreBackend::ConnectionError;
}
-
- // check if there is an connection error
- if (db.driver()->lastError().number() == -1)
- {
- Q_D(DatabaseCoreBackend);
- kDebug(50003) << "Detected unknown error. Trying to re-open \
the database.";
- d->closeDatabaseForThread();
- QSqlDatabase db = d->databaseForThread();
- if (!db.isOpen())
- {
- kDebug(50003) << "Error while opening the database. \
Details: ["<< db.lastError() <<"]";
- return DatabaseCoreBackend::ConnectionError;
- }else
- return DatabaseCoreBackend::SQLError;
- }
}
d->isInTransaction = true;
}
@@ -999,25 +964,10 @@
if (!db.commit())
{
d->incrementTransactionCount();
- if (db.driver()->lastError().type() == QSqlError::ConnectionError)
+ if (db.lastError().type() == QSqlError::ConnectionError)
{
return DatabaseCoreBackend::ConnectionError;
}
-
- // check if there is an connection error
- if (db.driver()->lastError().number() == -1)
- {
- Q_D(DatabaseCoreBackend);
- kDebug(50003) << "Detected unknown error. Trying to re-open \
the database.";
- d->closeDatabaseForThread();
- QSqlDatabase db = d->databaseForThread();
- if (!db.isOpen())
- {
- kDebug(50003) << "Error while opening the database. \
Details: ["<< db.lastError() <<"]";
- return DatabaseCoreBackend::ConnectionError;
- }else
- return DatabaseCoreBackend::SQLError;
- }
}
d->isInTransaction = false;
d->transactionFinished();
--- branches/extragear/graphics/digikam/1.0-databaseext/libs/database/databasecorebackend.h \
#1051951:1051952 @@ -183,8 +183,8 @@
* TODO: API docs
*/
databaseAction getDBAction(const QString &actionName);
- bool execDBAction(const databaseAction &action, QList<QVariant>* values = 0, \
QVariant *lastInsertId = 0);
- bool execDBAction(const databaseAction &action, const QMap<QString, QVariant>& \
bindingMap, + QueryState execDBAction(const databaseAction &action, \
QList<QVariant>* values = 0, QVariant *lastInsertId = 0); + QueryState \
execDBAction(const databaseAction &action, const QMap<QString, \
QVariant>& bindingMap,
QList<QVariant>* values = 0, QVariant *lastInsertId = 0);
QSqlQuery execDBActionQuery(const databaseAction &action, const QMap<QString, \
QVariant>& bindingMap);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic