diff -r 10e98eab6f85 -r a359256acfc6 browserutilities/recenturlstore/RecentUrlSrc/RecentUrlStore.cpp --- a/browserutilities/recenturlstore/RecentUrlSrc/RecentUrlStore.cpp Fri Jul 03 15:54:40 2009 +0100 +++ b/browserutilities/recenturlstore/RecentUrlSrc/RecentUrlStore.cpp Thu Aug 27 07:44:59 2009 +0300 @@ -140,56 +140,52 @@ void CRecentUrlStore::GetDataL (RDbNamedDatabase& aDataBase, CDesCArray& aUrls, CDesCArray& aTitles, const TDesC& aUrl) { - - TInt rowCount(0); - - // select values from the database filtered by url - if (aUrl.Length()) - { - HBufC* domain = aUrl.AllocLC(); - domain->Des().LowerCase(); - iSQLStatement.Format(KSQLSelect, domain, domain); - CleanupStack::PopAndDestroy(); - } - else - { - iSQLStatement.Format(KSQLSelectAll); - } - + // shouldn't happen but if it's too long just skip it! + if ( aUrl.Length() <= KUrlSize) + { + TInt rowCount(0); - RDbView view; - - TInt err = view.Prepare(aDataBase, TDbQuery(iSQLStatement)); - if (err == KErrNone) - { - err = view.EvaluateAll(); - if (err == KErrNone) - { - view.FirstL(); - // loop through rows and build the list - while (view.AtRow() && rowCount++ < KMaxRows) - { - view.GetL(); - aUrls.AppendL(view.ColDes(KUrlCol)); - aTitles.AppendL(view.ColDes(KTitleCol)); - view.NextL(); - } - /* - * This loop will keep the number of rows in the database at a reasonable size by - * deleting old rows (deletes rows beyond KMaxRows). Should be at most 1 row deleted. - * Its more efficiant to delete it here than in the SaveData because in this function - * we already have the list and know its size - */ - while (view.AtRow()) - { - view.GetL(); - iSQLStatement.Format(KSQLDelete, &aUrl); - aDataBase.Execute(iSQLStatement); - view.NextL(); - } - } - } - view.Close(); + // select values from the database filtered by url + if (aUrl.Length()) + { + HBufC* domain = aUrl.AllocLC(); + domain->Des().LowerCase(); + iSQLStatement.Format(KSQLSelect, domain, domain); + CleanupStack::PopAndDestroy(); + } + else + { + iSQLStatement.Format(KSQLSelectAll); + } + + RDbView view; + CleanupClosePushL( view ); + User::LeaveIfError( view.Prepare(aDataBase, TDbQuery(iSQLStatement)) ); + User::LeaveIfError( view.EvaluateAll() ); + view.FirstL(); + // loop through rows and build the list + while (view.AtRow() && rowCount++ < KMaxRows) + { + view.GetL(); + aUrls.AppendL(view.ColDes(KUrlCol)); + aTitles.AppendL(view.ColDes(KTitleCol)); + view.NextL(); + } + /* + * This loop will keep the number of rows in the database at a reasonable size by + * deleting old rows (deletes rows beyond KMaxRows). Should be at most 1 row deleted. + * Its more efficiant to delete it here than in the SaveData because in this function + * we already have the list and know its size + */ + while (view.AtRow()) + { + view.GetL(); + iSQLStatement.Format(KSQLDelete, &aUrl); + aDataBase.Execute(iSQLStatement); + view.NextL(); + } + CleanupStack::PopAndDestroy( &view ); + } } //----------------------------------------------------------------------------- @@ -197,68 +193,69 @@ // Deletes a single row from the database. //----------------------------------------------------------------------------- EXPORT_C void CRecentUrlStore::DeleteData (const TDesC& aUrl) - { - RDbNamedDatabase dataBase; - if (OpenDatabase(dataBase) == KErrNone) - { - iSQLStatement.Format(KSQLDelete, &aUrl); - dataBase.Execute(iSQLStatement); - dataBase.Close(); - } - } + { + // shouldn't happen but if it's too long just skip it! + if ( aUrl.Length() <= KUrlSize) + { + RDbNamedDatabase dataBase; + if (OpenDatabase(dataBase) == KErrNone) + { + iSQLStatement.Format(KSQLDelete, &aUrl); + dataBase.Execute(iSQLStatement); + dataBase.Close(); + } + } + } //----------------------------------------------------------------------------- // CRecentUrlStore::SaveDataL // Save the url in store. //----------------------------------------------------------------------------- -EXPORT_C void CRecentUrlStore::SaveData (const TDesC& aUrl, const TDesC& aTitle) +EXPORT_C void CRecentUrlStore::SaveDataL (const TDesC& aUrl, const TDesC& aTitle) { - RDbNamedDatabase dataBase; - TInt urlLength (aUrl.Length()); - + TInt urlLength (aUrl.Length()); // shouldn't happen but if it's too long for the data store just skip it! - if (urlLength > KUrlSize) + if (urlLength <= KUrlSize) { - return; - } - - if (OpenDatabase(dataBase) == KErrNone) - { - // find the point where the domain starts and ends - TInt domainLength(urlLength); - TInt domainStart(0); - - TInt startPos = aUrl.Find(KDomainDelim); - if (startPos != KErrNotFound) + RDbNamedDatabase dataBase; + CleanupClosePushL( dataBase ); + if (OpenDatabase(dataBase) == KErrNone) { - domainStart = startPos + (KDomainDelim().Length()); // first char after delim - TInt len = aUrl.Right(urlLength - domainStart).Find(KDomainDelim); - if (len > 0) // ignore delim following delim. we don't want an empty string + // find the point where the domain starts and ends + TInt domainLength(urlLength); + TInt domainStart(0); + + TInt startPos = aUrl.Find(KDomainDelim); + if (startPos != KErrNotFound) { - domainLength = len; - } - else - { - domainLength -= domainStart; + domainStart = startPos + (KDomainDelim().Length()); // first char after delim + TInt len = aUrl.Right(urlLength - domainStart).Find(KDomainDelim); + if (len > 0) // ignore delim following delim. we don't want an empty string + { + domainLength = len; + } + else + { + domainLength -= domainStart; + } } - } - - // make sure it's not too big for the data store - domainLength = (domainLength > KDomainSize) ? KDomainSize : domainLength; - TInt titleLength = (aTitle.Length() > KTitleSize) ? KTitleSize : aTitle.Length(); + + // make sure it's not too big for the data store + domainLength = (domainLength > KDomainSize) ? KDomainSize : domainLength; + TInt titleLength = (aTitle.Length() > KTitleSize) ? KTitleSize : aTitle.Length(); + + HBufC* domain = aUrl.Mid(domainStart,domainLength).AllocLC(); + domain->Des().LowerCase(); + HBufC* title = aTitle.Left(titleLength).AllocLC(); + + // delete and re-insert + iSQLStatement.Format(KSQLDelete, &aUrl); + dataBase.Execute(iSQLStatement); + iSQLStatement.Format(KSQLInsert, domain, &aUrl, title); + dataBase.Execute(iSQLStatement); - HBufC* domain = aUrl.Mid(domainStart,domainLength).AllocLC(); - domain->Des().LowerCase(); - HBufC* title = aTitle.Left(titleLength).AllocLC(); - - // delete and re-insert - iSQLStatement.Format(KSQLDelete, &aUrl); - dataBase.Execute(iSQLStatement); - iSQLStatement.Format(KSQLInsert, domain, &aUrl, title); - CleanupStack::PopAndDestroy(2); // domain, title - - dataBase.Execute(iSQLStatement); - dataBase.Close(); + CleanupStack::PopAndDestroy(3, &dataBase ); + } } } @@ -279,34 +276,27 @@ //----------------------------------------------------------------------------- void CRecentUrlStore::DeleteOldRowsL (RDbNamedDatabase& aDataBase) { - TInt rowCount(0); - iSQLStatement.Format(KSQLSelectAll); RDbView view; + CleanupClosePushL( view ); - TInt err = view.Prepare(aDataBase, TDbQuery(iSQLStatement)); - if (err == KErrNone) - { - err = view.EvaluateAll(); - if (err == KErrNone) - { - view.FirstL(); - // loop through rows we want to keep - while (view.AtRow() && rowCount++ < KMaxRows) - { - view.NextL(); - } - // delete the rows that are old - while (view.AtRow()) - { - view.DeleteL(); - view.NextL(); - } - } - } - view.Close(); + User::LeaveIfError( view.Prepare(aDataBase, TDbQuery(iSQLStatement))); + User::LeaveIfError( view.EvaluateAll() ); + view.FirstL(); + // loop through rows we want to keep + while (view.AtRow() && rowCount++ < KMaxRows) + { + view.NextL(); + } + // delete the rows that are old + while (view.AtRow()) + { + view.DeleteL(); + view.NextL(); + } + CleanupStack::PopAndDestroy( &view ); } //-----------------------------------------------------------------------------