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; |
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 } |