activityfw/activitydatabase/hsactivitydbserver/src/hsactivitystorage_p.cpp
changeset 66 32469d7d46ff
parent 61 8e5041d13c84
equal deleted inserted replaced
61:8e5041d13c84 66:32469d7d46ff
    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 &params)
   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;