[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/plasma/private
From:       Marco Martin <notmart () gmail ! com>
Date:       2011-01-06 23:26:14
Message-ID: 20110106232614.65418AC8B0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1212424 by mart:

use a pointer since to remove a connection is necesary that the qsqldatabase is \
deleted, ouch


 M  +22 -13    storage.cpp  
 M  +2 -1      storage_p.h  


--- trunk/KDE/kdelibs/plasma/private/storage.cpp #1212423:1212424
@@ -45,22 +45,27 @@
             : ServiceJob(destination, operation, parameters, parent),
               m_clientName(destination)
 {
-    m_db = QSqlDatabase::addDatabase("QSQLITE", \
                QString("plasma-storage-%1").arg(++connectionId));
-    m_db.setDatabaseName(KStandardDirs::locateLocal("appdata", \
"plasma-storage.db")); +    m_db = new \
QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE", \
QString("plasma-storage-%1").arg(++connectionId))); +    \
m_db->setDatabaseName(KStandardDirs::locateLocal("appdata", "plasma-storage.db"));  
-    if (!m_db.open()) {
-        kWarning() << "Unable to open the plasma storage cache database: " << \
                m_db.lastError();
-    } else if (!m_db.tables().contains(m_clientName)) {
-        QSqlQuery query(m_db);
+    if (!m_db->open()) {
+        kWarning() << "Unable to open the plasma storage cache database: " << \
m_db->lastError(); +    } else if (!m_db->tables().contains(m_clientName)) {
+        QSqlQuery query(*m_db);
         //bindValue doesn't seem to be able to replace stuff in create table
         query.prepare(QString("create table ")+m_clientName+" (valueGroup \
varchar(256), id varchar(256), data clob, creationTime datetime, accessTime datetime, \
primary key (valueGroup, id))");  query.exec();
     }
 }
 
+StorageJob::~StorageJob()
+{
+    delete m_db;
+}
+
 void StorageJob::start()
 {
-    if (!m_db.isOpen()) {
+    if (!m_db->isOpen()) {
         return;
     }
 
@@ -73,7 +78,7 @@
 
 
     if (operationName() == "save") {
-      QSqlQuery query(m_db);
+      QSqlQuery query(*m_db);
       query.prepare("delete from "+m_clientName+" where valueGroup=:valueGroup and \
id = :id");  query.bindValue(":valueGroup", valueGroup);
       query.bindValue(":id", params["key"].toString());
@@ -87,7 +92,7 @@
       setResult(success);
 
     } else if (operationName() == "retrieve") {
-        QSqlQuery query(m_db);
+        QSqlQuery query(*m_db);
 
         //a bit redundant but should be the faster way with less string \
concatenation as possible  if (params["key"].toString().isEmpty()) {
@@ -126,7 +131,7 @@
         }
 
     } else if (operationName() == "delete") {
-        QSqlQuery query(m_db);
+        QSqlQuery query(*m_db);
 
         if (params["key"].toString().isEmpty()) {
             query.prepare("delete from "+m_clientName+" where \
valueGroup=:valueGroup"); @@ -141,7 +146,7 @@
         setResult(success);
 
     } else if (operationName() == "expire") {
-        QSqlQuery query(m_db);
+        QSqlQuery query(*m_db);
         if (valueGroup.isEmpty()) {
             query.prepare("delete from "+m_clientName+" where accessTime < :date");
             QDateTime time(QDateTime::currentDateTime());
@@ -162,8 +167,12 @@
         setError(true);
     }
     //TODO: use a single shared db per thread
-    m_db.close();
-    QSqlDatabase::removeDatabase(m_db.connectionName());
+    m_db->commit();
+    m_db->close();
+    QString name = m_db->connectionName();
+    delete m_db;
+    m_db = 0;
+    QSqlDatabase::removeDatabase(name);
 }
 
 Plasma::ServiceJob* Storage::createJob(const QString &operation, QMap<QString, \
                QVariant> &parameters)
--- trunk/KDE/kdelibs/plasma/private/storage_p.h #1212423:1212424
@@ -37,9 +37,10 @@
                const QString& operation,
                const QMap<QString, QVariant>& parameters,
                QObject *parent = 0);
+    ~StorageJob();
     void start();
 private:
-    QSqlDatabase m_db;
+    QSqlDatabase *m_db;
     QString m_clientName;
 };
 //End StorageJob


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic