activityfw/activityserviceplugin/activitydatastorage.cpp
changeset 66 32469d7d46ff
parent 61 8e5041d13c84
equal deleted inserted replaced
61:8e5041d13c84 66:32469d7d46ff
     9 * Initial Contributors:
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    10 * Nokia Corporation - initial contribution.
    11 *
    11 *
    12 * Contributors:
    12 * Contributors:
    13 *
    13 *
    14 * Description: 
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 #include "activitydatastorage.h"
    17 #include "activitydatastorage.h"
    18 
    18 
    19 #include <QSqlDatabase>
    19 #include <QSqlDatabase>
    26 ActivityDataStorage::ActivityDataStorage()
    26 ActivityDataStorage::ActivityDataStorage()
    27 {
    27 {
    28     QSqlDatabase database;
    28     QSqlDatabase database;
    29     if (QSqlDatabase::contains(KConnectionName)) {
    29     if (QSqlDatabase::contains(KConnectionName)) {
    30         database = QSqlDatabase::database(KConnectionName);
    30         database = QSqlDatabase::database(KConnectionName);
    31     } else {   
    31     } else {
    32         database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName);
    32         database = QSqlDatabase::addDatabase("QSQLITE", KConnectionName);
    33         database.setDatabaseName("activitydatastorage.db");    
    33         database.setDatabaseName("activitydatastorage.db");
    34         if (!database.open()) {
    34         if (!database.open()) {
    35             qFatal(qPrintable(database.lastError().text()));
    35             qFatal(qPrintable(database.lastError().text()));
    36         }
    36         }
    37     }
    37     }
    38 
    38 
    47 }
    47 }
    48 
    48 
    49 bool ActivityDataStorage::addActivity(const QString &activityId, const QVariant &data)
    49 bool ActivityDataStorage::addActivity(const QString &activityId, const QVariant &data)
    50 {
    50 {
    51     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
    51     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
    52     
    52 
    53     QByteArray streamedData;
    53     QByteArray streamedData;
    54     {
    54     {
    55         QDataStream stream(&streamedData, QIODevice::WriteOnly);
    55         QDataStream stream(&streamedData, QIODevice::WriteOnly);
    56         stream << data;
    56         stream << data;
    57     }    
    57     }
    58     
    58 
    59     // insert data
    59     // insert data
    60     QSqlQuery query(database);
    60     QSqlQuery query(database);
    61     if (!query.prepare("INSERT INTO Activities(Name, Data) VALUES(:Name, :Data)")) {
    61     if (!query.prepare("INSERT INTO Activities(Name, Data) VALUES(:Name, :Data)")) {
    62         qCritical(qPrintable(query.lastError().text()));
    62         qCritical(qPrintable(query.lastError().text()));
    63         return false;
    63         return false;
    65     query.bindValue(":Name", activityId);
    65     query.bindValue(":Name", activityId);
    66     query.bindValue(":Data", streamedData);
    66     query.bindValue(":Data", streamedData);
    67     if (!query.exec()) {
    67     if (!query.exec()) {
    68         qCritical(qPrintable(query.lastError().text()));
    68         qCritical(qPrintable(query.lastError().text()));
    69         return false;
    69         return false;
    70     }        
    70     }
    71     
    71 
    72     return true;
    72     return true;
    73 }
    73 }
    74 
    74 
    75 bool ActivityDataStorage::removeActivity(const QString &activityId)
    75 bool ActivityDataStorage::removeActivity(const QString &activityId)
    76 {
    76 {
    84 }
    84 }
    85 
    85 
    86 bool ActivityDataStorage::updateActivity(const QString &activityId, const QVariant &data)
    86 bool ActivityDataStorage::updateActivity(const QString &activityId, const QVariant &data)
    87 {
    87 {
    88     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
    88     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
    89     
    89 
    90     QByteArray streamedData;
    90     QByteArray streamedData;
    91     {
    91     {
    92         QDataStream stream(&streamedData, QIODevice::WriteOnly);
    92         QDataStream stream(&streamedData, QIODevice::WriteOnly);
    93         stream << data;
    93         stream << data;
    94     }    
    94     }
    95     
    95 
    96     // update data
    96     // update data
    97     QSqlQuery query(database);
    97     QSqlQuery query(database);
    98     if (!query.prepare("UPDATE Activities SET Data = :Data WHERE Name = :Name")) {
    98     if (!query.prepare("UPDATE Activities SET Data = :Data WHERE Name = :Name")) {
    99         qCritical(qPrintable(query.lastError().text()));
    99         qCritical(qPrintable(query.lastError().text()));
   100         return false;
   100         return false;
   103     query.bindValue(":Name", activityId);
   103     query.bindValue(":Name", activityId);
   104     if (!query.exec()) {
   104     if (!query.exec()) {
   105         qCritical(qPrintable(query.lastError().text()));
   105         qCritical(qPrintable(query.lastError().text()));
   106         return false;
   106         return false;
   107     }
   107     }
   108     
   108 
   109     return query.numRowsAffected() > 0;
   109     return query.numRowsAffected() > 0;
   110 }
   110 }
   111 
   111 
   112 QVariant ActivityDataStorage::activityData(const QString &activityId) const
   112 QVariant ActivityDataStorage::activityData(const QString &activityId) const
   113 {
   113 {
   115     QSqlQuery query(database);
   115     QSqlQuery query(database);
   116     if (!query.exec(QString("SELECT Data FROM Activities WHERE Name = '%1'").arg(activityId))) {
   116     if (!query.exec(QString("SELECT Data FROM Activities WHERE Name = '%1'").arg(activityId))) {
   117         qCritical(qPrintable(query.lastError().text()));
   117         qCritical(qPrintable(query.lastError().text()));
   118         return QVariant();
   118         return QVariant();
   119     }
   119     }
   120     
   120 
   121     QVariant result;
   121     QVariant result;
   122     if (query.next()) {
   122     if (query.next()) {
   123         QByteArray data(query.value(0).toByteArray());
   123         QByteArray data(query.value(0).toByteArray());
   124         QDataStream stream(&data, QIODevice::ReadOnly);
   124         QDataStream stream(&data, QIODevice::ReadOnly);
   125         stream >> result;
   125         stream >> result;
   126     }   
   126     }
   127     return result;
   127     return result;
   128 }
   128 }
   129 
   129 
   130 bool ActivityDataStorage::checkTables()
   130 bool ActivityDataStorage::checkTables()
   131 {
   131 {
   132     QStringList expectedTables("Activities");
   132     QStringList expectedTables("Activities");
   133     QStringList actualTables = QSqlDatabase::database(KConnectionName).tables();
   133     QStringList actualTables = QSqlDatabase::database(KConnectionName).tables();
   134     return (expectedTables == actualTables);    
   134     return (expectedTables == actualTables);
   135 }
   135 }
   136 
   136 
   137 void ActivityDataStorage::recreateTables()
   137 void ActivityDataStorage::recreateTables()
   138 {
   138 {
   139     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
   139     QSqlDatabase database = QSqlDatabase::database(KConnectionName);
   140     
   140 
   141     if (!database.transaction()) {
   141     if (!database.transaction()) {
   142         qFatal(qPrintable(database.lastError().text()));
   142         qFatal(qPrintable(database.lastError().text()));
   143     }
   143     }
   144     
   144 
   145     // drop any existing tables
   145     // drop any existing tables
   146     {
   146     {
   147         QSqlQuery dropQuery(database);
   147         QSqlQuery dropQuery(database);
   148         foreach(const QString &tableName, database.tables()) {
   148         foreach(const QString &tableName, database.tables()) {
   149             if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) {
   149             if (!dropQuery.exec(QString("DROP TABLE %1").arg(tableName))) {
   156     {
   156     {
   157         QSqlQuery createQuery(database);
   157         QSqlQuery createQuery(database);
   158         QString statement(
   158         QString statement(
   159             "CREATE TABLE Activities("
   159             "CREATE TABLE Activities("
   160             "Name TEXT NOT NULL PRIMARY KEY UNIQUE,"
   160             "Name TEXT NOT NULL PRIMARY KEY UNIQUE,"
   161             "Data BLOB NOT NULL)");    
   161             "Data BLOB NOT NULL)");
   162         
   162 
   163         if (!createQuery.exec(statement)) {
   163         if (!createQuery.exec(statement)) {
   164             qFatal(qPrintable(createQuery.lastError().text()));
   164             qFatal(qPrintable(createQuery.lastError().text()));
   165         }
   165         }
   166     }
   166     }
   167     
   167 
   168     if (!database.commit()) {
   168     if (!database.commit()) {
   169         qFatal(qPrintable(database.lastError().text()));
   169         qFatal(qPrintable(database.lastError().text()));
   170     }    
   170     }
   171 }
   171 }