diff -r ea59c434026a -r 79c49924ae23 mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp --- a/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Wed Jun 23 18:10:13 2010 +0300 +++ b/mpserviceplugins/mpxsqlitedbcommon/src/mpxdbmanager.cpp Tue Jul 06 14:13:36 2010 +0300 @@ -867,30 +867,27 @@ { MPX_FUNC("CMPXDbManager::CloseAllDatabases"); - if (iInitialized) - { - // Close all prepared statements if a db is closed - // - ResetPreparedQueries(); + // Close all prepared statements if a db is closed + // + ResetPreparedQueries(); - TInt count(iDatabaseHandles.Count()); - for (TInt i = 0; i < count; ++i) - { - delete iDatabaseHandles[i].iAliasname; - iDatabaseHandles[i].iAliasname = 0; + TInt count(iDatabaseHandles.Count()); + for (TInt i = 0; i < count; ++i) + { + delete iDatabaseHandles[i].iAliasname; + iDatabaseHandles[i].iAliasname = 0; #ifdef __RAMDISK_PERF_ENABLE - RemoveDummyFile(i); - delete iDatabaseHandles[i].iOrigFullFilePath; - iDatabaseHandles[i].iOrigFullFilePath = 0; - delete iDatabaseHandles[i].iTargetFullFilePath; - iDatabaseHandles[i].iTargetFullFilePath = 0; + RemoveDummyFile(i); + delete iDatabaseHandles[i].iOrigFullFilePath; + iDatabaseHandles[i].iOrigFullFilePath = 0; + delete iDatabaseHandles[i].iTargetFullFilePath; + iDatabaseHandles[i].iTargetFullFilePath = 0; #endif //__RAMDISK_PERF_ENABLE - } + } - iDatabaseHandles.Reset(); - iDatabase.Close(); - iInitialized = EFalse; - } + iDatabaseHandles.Reset(); + iDatabase.Close(); + iInitialized = EFalse; } // ---------------------------------------------------------------------------- @@ -1732,6 +1729,16 @@ } // ---------------------------------------------------------------------------- +// CleanupTransaction: close transaction when creating DB +// ---------------------------------------------------------------------------- +// +static void CleanupTransaction(TAny * aDatabase) + { + TInt err = ((RSqlDatabase*)aDatabase)->Exec(KRollbackTransaction); + MPX_DEBUG2("CMPXDbManager CleanupTransaction rollback, error %d", err); + } + +// ---------------------------------------------------------------------------- // CMPXDbManager::CreateTablesL // ---------------------------------------------------------------------------- // @@ -1739,11 +1746,26 @@ RSqlDatabase& aDatabase, TBool aCorrupt) { + MPX_FUNC("CMPXDbManager::CreateTablesL"); + TInt err = aDatabase.Exec(KBeginTransaction); + if (err < 0) + { + MPX_DEBUG2("SQL BEGIN TRANSACTION error %d", err); + User::Leave (err); + } + CleanupStack::PushL(TCleanupItem(&CleanupTransaction, &aDatabase)); TInt count(iTables.Count()); for (TInt i = 0; i < count; ++i) { iTables[i]->CreateTableL(aDatabase, aCorrupt); } + err = aDatabase.Exec(KCommitTransaction); + if (err < 0) + { + MPX_DEBUG2("SQL COMMIT TRANSACTION error %d", err); + User::Leave (err); + } + CleanupStack::Pop(); } // ----------------------------------------------------------------------------