35 settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); |
35 settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); |
36 if (!settings.contains(ActivityStorageProperty)) { |
36 if (!settings.contains(ActivityStorageProperty)) { |
37 settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); |
37 settings.setValue(ActivityStorageProperty, ActivityDefaultStorage); |
38 } |
38 } |
39 QString databaseFile = settings.value(ActivityStorageProperty).toString(); |
39 QString databaseFile = settings.value(ActivityStorageProperty).toString(); |
40 |
40 |
41 if (QSqlDatabase::contains(ActivityStorageName)) { |
41 if (QSqlDatabase::contains(ActivityStorageName)) { |
42 mConn = QSqlDatabase::database(ActivityStorageName); |
42 mConn = QSqlDatabase::database(ActivityStorageName); |
43 } else { |
43 } else { |
44 mConn = QSqlDatabase::addDatabase(ActivityStorageDriver, ActivityStorageName); |
44 mConn = QSqlDatabase::addDatabase(ActivityStorageDriver, ActivityStorageName); |
45 mConn.setDatabaseName(databaseFile); |
45 mConn.setDatabaseName(databaseFile); |
46 if (!mConn.open()) { |
46 if (!mConn.open()) { |
47 qWarning(qPrintable(mConn.lastError().text())); |
47 qWarning(qPrintable(mConn.lastError().text())); |
48 return; |
48 return; |
49 } |
49 } |
50 } |
50 } |
70 { |
70 { |
71 // stream whole entry to bytearray |
71 // stream whole entry to bytearray |
72 QByteArray streamedData; |
72 QByteArray streamedData; |
73 QDataStream stream(&streamedData, QIODevice::WriteOnly); |
73 QDataStream stream(&streamedData, QIODevice::WriteOnly); |
74 stream << activity; |
74 stream << activity; |
75 |
75 |
76 //insert data |
76 //insert data |
77 QSqlQuery query(mConn); |
77 QSqlQuery query(mConn); |
78 query.prepare(ActivitySelectActivityQuery); |
78 query.prepare(ActivitySelectActivityQuery); |
79 bind(query, activity); |
79 bind(query, activity); |
80 exec(query); |
80 exec(query); |
81 if(query.next()) { |
81 if (query.next()) { |
82 return KErrGeneral; |
82 return KErrGeneral; |
83 } |
83 } |
84 query.prepare(ActivityInsertActivityQuery); |
84 query.prepare(ActivityInsertActivityQuery); |
85 QVariantHash additionalData; |
85 QVariantHash additionalData; |
86 additionalData.insert(ActivityDataKeyword, streamedData); |
86 additionalData.insert(ActivityDataKeyword, streamedData); |
97 { |
97 { |
98 // stream whole entry to bytearray |
98 // stream whole entry to bytearray |
99 QByteArray streamedData; |
99 QByteArray streamedData; |
100 QDataStream stream(&streamedData, QIODevice::WriteOnly); |
100 QDataStream stream(&streamedData, QIODevice::WriteOnly); |
101 stream << activity; |
101 stream << activity; |
102 |
102 |
103 // update |
103 // update |
104 QSqlQuery query(mConn); |
104 QSqlQuery query(mConn); |
105 query.prepare(ActivityUpdateActivityQuery); |
105 query.prepare(ActivityUpdateActivityQuery); |
106 QVariantHash additionalData; |
106 QVariantHash additionalData; |
107 additionalData.insert(ActivityDataKeyword, streamedData); |
107 additionalData.insert(ActivityDataKeyword, streamedData); |
129 } |
129 } |
130 // ----------------------------------------------------------------------------- |
130 // ----------------------------------------------------------------------------- |
131 // |
131 // |
132 // ----------------------------------------------------------------------------- |
132 // ----------------------------------------------------------------------------- |
133 // |
133 // |
134 int HsActivityStoragePrivate::requestedActivityName(QString& result, |
134 int HsActivityStoragePrivate::requestedActivityName(QString &result, |
135 const QVariantHash &activity) |
135 const QVariantHash &activity) |
136 { |
136 { |
137 QSqlQuery query(mConn); |
137 QSqlQuery query(mConn); |
138 query.prepare(ActivitySelectActiveQuery); |
138 query.prepare(ActivitySelectActiveQuery); |
139 bind(query, activity); |
139 bind(query, activity); |
140 int retVal(KErrNone); |
140 int retVal(KErrNone); |
157 |
157 |
158 // ----------------------------------------------------------------------------- |
158 // ----------------------------------------------------------------------------- |
159 // |
159 // |
160 // ----------------------------------------------------------------------------- |
160 // ----------------------------------------------------------------------------- |
161 // |
161 // |
162 int HsActivityStoragePrivate::applicationActivities(QList<QVariantHash> & result, |
162 int HsActivityStoragePrivate::applicationActivities(QList<QVariantHash> & result, |
163 const QVariantHash & condition) |
163 const QVariantHash &condition) |
164 { |
164 { |
165 return activities(result, ActivityApplicationActivitiesQuery, condition); |
165 return activities(result, ActivityApplicationActivitiesQuery, condition); |
166 } |
166 } |
167 |
167 |
168 // ----------------------------------------------------------------------------- |
168 // ----------------------------------------------------------------------------- |
186 // |
186 // |
187 // ----------------------------------------------------------------------------- |
187 // ----------------------------------------------------------------------------- |
188 // |
188 // |
189 bool HsActivityStoragePrivate::checkTables() |
189 bool HsActivityStoragePrivate::checkTables() |
190 { |
190 { |
191 return (QStringList("Activities") == mConn.tables()); |
191 return (QStringList("Activities") == mConn.tables()); |
192 } |
192 } |
193 |
193 |
194 // ----------------------------------------------------------------------------- |
194 // ----------------------------------------------------------------------------- |
195 // |
195 // |
196 // ----------------------------------------------------------------------------- |
196 // ----------------------------------------------------------------------------- |
200 //start sql transaction |
200 //start sql transaction |
201 if (!mConn.transaction()) { |
201 if (!mConn.transaction()) { |
202 qErrnoWarning(qPrintable(mConn.lastError().text())); |
202 qErrnoWarning(qPrintable(mConn.lastError().text())); |
203 return; |
203 return; |
204 } |
204 } |
205 |
205 |
206 // drop any existing tables |
206 // drop any existing tables |
207 QSqlQuery query(mConn); |
207 QSqlQuery query(mConn); |
208 foreach (const QString &tableName, mConn.tables()) { |
208 foreach(const QString &tableName, mConn.tables()) { |
209 query.prepare(ActivityDropQuery); |
209 query.prepare(ActivityDropQuery); |
210 query.bindValue(ActivityTableKeyword, tableName); |
210 query.bindValue(ActivityTableKeyword, tableName); |
211 exec(query); |
211 exec(query); |
212 } |
212 } |
213 |
213 |
214 // create new table |
214 // create new table |
215 query.prepare(ActivityCreateQuery); |
215 query.prepare(ActivityCreateQuery); |
216 exec(query); |
216 exec(query); |
217 |
217 |
218 //finish sql transaction |
218 //finish sql transaction |
219 if (!mConn.commit()) { |
219 if (!mConn.commit()) { |
220 qErrnoWarning(qPrintable(mConn.lastError().text())); |
220 qErrnoWarning(qPrintable(mConn.lastError().text())); |
221 } |
221 } |
222 } |
222 } |
223 |
223 |
224 // ----------------------------------------------------------------------------- |
224 // ----------------------------------------------------------------------------- |
225 // |
225 // |
226 // ----------------------------------------------------------------------------- |
226 // ----------------------------------------------------------------------------- |
227 // |
227 // |
228 int HsActivityStoragePrivate::getSqlErrorCode(const QSqlQuery& query) |
228 int HsActivityStoragePrivate::getSqlErrorCode(const QSqlQuery &query) |
229 { |
229 { |
230 const QSqlError err(query.lastError()); |
230 const QSqlError err(query.lastError()); |
231 const QString errStr(err.text()); |
231 const QString errStr(err.text()); |
232 |
232 |
233 if (QSqlError ::NoError == err.type()) { |
233 if (QSqlError ::NoError == err.type()) { |
234 return 0; |
234 return 0; |
235 } else { |
235 } else { |
236 qErrnoWarning(qPrintable(errStr)); |
236 qErrnoWarning(qPrintable(errStr)); |
237 return err.number(); |
237 return err.number(); |
240 |
240 |
241 // ----------------------------------------------------------------------------- |
241 // ----------------------------------------------------------------------------- |
242 // |
242 // |
243 // ----------------------------------------------------------------------------- |
243 // ----------------------------------------------------------------------------- |
244 // |
244 // |
245 bool HsActivityStoragePrivate::exec(QSqlQuery& query) |
245 bool HsActivityStoragePrivate::exec(QSqlQuery &query) |
246 { |
246 { |
247 const bool retVal = query.exec(); |
247 const bool retVal = query.exec(); |
248 qErrnoWarning(qPrintable(query.lastQuery())); |
248 qErrnoWarning(qPrintable(query.lastQuery())); |
249 if (!retVal) { |
249 if (!retVal) { |
250 getSqlErrorCode(query); |
250 getSqlErrorCode(query); |
254 |
254 |
255 // ----------------------------------------------------------------------------- |
255 // ----------------------------------------------------------------------------- |
256 // |
256 // |
257 // ----------------------------------------------------------------------------- |
257 // ----------------------------------------------------------------------------- |
258 // |
258 // |
259 bool HsActivityStoragePrivate::exec(const QString &queryStr, const QVariantHash& params) |
259 bool HsActivityStoragePrivate::exec(const QString &queryStr, const QVariantHash ¶ms) |
260 { |
260 { |
261 QSqlQuery query(mConn); |
261 QSqlQuery query(mConn); |
262 query.prepare(queryStr); |
262 query.prepare(queryStr); |
263 bind(query, params); |
263 bind(query, params); |
264 query.exec(); |
264 query.exec(); |
265 return getSqlErrorCode(query); |
265 return getSqlErrorCode(query); |
266 |
266 |
267 } |
267 } |
268 // ----------------------------------------------------------------------------- |
268 // ----------------------------------------------------------------------------- |
269 // |
269 // |
270 // ----------------------------------------------------------------------------- |
270 // ----------------------------------------------------------------------------- |
271 // |
271 // |
272 void HsActivityStoragePrivate::bind( QSqlQuery& query, |
272 void HsActivityStoragePrivate::bind(QSqlQuery &query, |
273 const QVariantHash &activity, |
273 const QVariantHash &activity, |
274 const QVariantHash &additionalData) |
274 const QVariantHash &additionalData) |
275 { |
275 { |
276 const QChar tag(' '); |
276 const QChar tag(' '); |
277 QString queryString( query.lastQuery() ); |
277 QString queryString(query.lastQuery()); |
278 QVariantHash::const_iterator iter; |
278 QVariantHash::const_iterator iter; |
279 int offset(0); |
279 int offset(0); |
280 QStringList tokens; |
280 QStringList tokens; |
281 |
281 |
282 //explode SQL query to tokens |
282 //explode SQL query to tokens |
283 do { |
283 do { |
284 offset = queryString.indexOf(tag, 0); |
284 offset = queryString.indexOf(tag, 0); |
285 if (0 < offset) { |
285 if (0 < offset) { |
286 tokens << queryString.left(offset++); |
286 tokens << queryString.left(offset++); |
287 queryString = queryString.right(queryString.length() - offset); |
287 queryString = queryString.right(queryString.length() - offset); |
290 tokens << queryString; |
290 tokens << queryString; |
291 } |
291 } |
292 break; |
292 break; |
293 } |
293 } |
294 } while (true); |
294 } while (true); |
295 |
295 |
296 //current Sql driver doesnt support proper query formating. |
296 //current Sql driver doesnt support proper query formating. |
297 //reuest filtering data has to be binded in right order. |
297 //reuest filtering data has to be binded in right order. |
298 QStringList::iterator token = tokens.begin(); |
298 QStringList::iterator token = tokens.begin(); |
299 //iterate all tokens |
299 //iterate all tokens |
300 for (; token != tokens.end(); token = tokens.erase(token)) { |
300 for (; token != tokens.end(); token = tokens.erase(token)) { |
301 //iterate all provided data and chcek if it match pattern |
301 //iterate all provided data and chcek if it match pattern |
302 for ( iter = activity.constBegin(); |
302 for (iter = activity.constBegin(); |
303 iter != activity.constEnd(); |
303 iter != activity.constEnd(); |
304 ++iter ) { |
304 ++iter) { |
305 if( (*token).contains(iter.key()) ){ |
|
306 query.bindValue(iter.key(), iter.value()); |
|
307 break; |
|
308 } |
|
309 } |
|
310 for (iter = additionalData.constBegin(); |
|
311 iter != additionalData.constEnd(); |
|
312 ++iter) { |
|
313 if ((*token).contains(iter.key())) { |
305 if ((*token).contains(iter.key())) { |
314 query.bindValue(iter.key(), iter.value()); |
306 query.bindValue(iter.key(), iter.value()); |
315 break; |
307 break; |
316 } |
308 } |
317 } |
309 } |
318 } |
310 for (iter = additionalData.constBegin(); |
319 } |
311 iter != additionalData.constEnd(); |
320 |
312 ++iter) { |
321 // ----------------------------------------------------------------------------- |
313 if ((*token).contains(iter.key())) { |
322 // |
314 query.bindValue(iter.key(), iter.value()); |
323 // ----------------------------------------------------------------------------- |
315 break; |
324 // |
316 } |
325 int HsActivityStoragePrivate::activities(QList<QVariantHash> &results, |
317 } |
326 const QString &queryStr, |
318 } |
327 const QVariantHash &conditions) |
319 } |
|
320 |
|
321 // ----------------------------------------------------------------------------- |
|
322 // |
|
323 // ----------------------------------------------------------------------------- |
|
324 // |
|
325 int HsActivityStoragePrivate::activities(QList<QVariantHash> &results, |
|
326 const QString &queryStr, |
|
327 const QVariantHash &conditions) |
328 { |
328 { |
329 results.clear(); |
329 results.clear(); |
330 |
330 |
331 QSqlQuery query(mConn); |
331 QSqlQuery query(mConn); |
332 query.prepare(queryStr); |
332 query.prepare(queryStr); |
333 bind(query, conditions); |
333 bind(query, conditions); |
334 if (exec(query)) { |
334 if (exec(query)) { |
335 QVariantHash activityEntry; |
335 QVariantHash activityEntry; |