landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp
branchRCL_3
changeset 6 f3bd2a0973b9
parent 0 667063e416a2
child 8 6fcbaa43369c
equal deleted inserted replaced
4:42de37ce7ce4 6:f3bd2a0973b9
   714     else
   714     else
   715         {
   715         {
   716         TInt err = iDbAccess->OpenDatabaseL(*iDbUri);
   716         TInt err = iDbAccess->OpenDatabaseL(*iDbUri);
   717         if (err != KErrNone)
   717         if (err != KErrNone)
   718             {
   718             {
   719             // Re-create database if below error codes
   719             // As this is a default landmarks db, all errors other than OutOfMemory 
   720             if (err == KErrCorrupt || err == KErrNotSupported)
   720             // should be handled by replacing a corrupt db or creating a new db if one is missing. 
       
   721             if (err == KErrNoMemory)
   721                 {
   722                 {
   722                 iSubSession->CreateDefaultDbL(*iDbUri, ETrue);
   723                 User::Leave(err);
   723                 }
   724                 }
   724             else
   725             else
   725                 {
   726                 {
   726                 iSubSession->CreateDefaultDbL(*iDbUri, EFalse);
   727                 if ((err == KErrNotFound) || (err == KErrPathNotFound)
       
   728                         || (err == KErrArgument) || (err == KErrAlreadyExists))
       
   729                     {
       
   730                     // Create a new database [default landmarks db]     
       
   731                     iSubSession->CreateDefaultDbL(*iDbUri, EFalse);
       
   732                     }
       
   733                 else
       
   734                     {
       
   735                     // Try deleting the corrupted database and then create a new one                
       
   736                     iSubSession->CreateDefaultDbL(*iDbUri, ETrue);
       
   737                     }
       
   738                 *DatabaseAccess()->InitFlagPtr() = ECreated;
       
   739                 User::LeaveIfError(iDbAccess->OpenDatabaseL(*iDbUri));
   727                 }
   740                 }
   728             *DatabaseAccess()->InitFlagPtr() = ECreated;
       
   729             User::LeaveIfError(iDbAccess->OpenDatabaseL(*iDbUri));
       
   730             }
   741             }
   731         }
   742         }
   732     CleanupStack::PopAndDestroy(); // DbLock
   743     CleanupStack::PopAndDestroy(); // DbLock
   733     }
   744     }
   734 
   745