[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