metadataengine/server/src/mdsmanipulationengine.cpp
branchRCL_3
changeset 6 646a02f170b9
parent 2 b73a2e62868f
child 7 3cebc1a84278
--- a/metadataengine/server/src/mdsmanipulationengine.cpp	Fri Feb 19 23:14:48 2010 +0200
+++ b/metadataengine/server/src/mdsmanipulationengine.cpp	Fri Mar 12 15:44:28 2010 +0200
@@ -34,14 +34,6 @@
 
 __USES_LOGGER
 
-// ======== LOCAL FUNCTIONS ========
-
-static void TransactionCleanupL(void* aConn)
-   {
-   CMdSSqLiteConnection* conn = (CMdSSqLiteConnection*)aConn;
-   conn->TransactionRollbackL();
-   }
-
 // ---------------------------------------------------------------------------
 // NewL
 // ---------------------------------------------------------------------------
@@ -156,63 +148,39 @@
         RMdsStatement objStmt;
         CleanupClosePushL(objStmt);
 		
-		if( KObjectCount > 1 )
-		    {
-	        RMdSTransaction transaction( connection );
-	        CleanupClosePushL(transaction);
-	        const TInt beginError( transaction.Error() );
-	        if( beginError != KErrNone )
-	            {
-	            CleanupStack::PopAndDestroy( &transaction );
-	            }
-	    
-		    for ( TInt i = 0; i < KObjectCount; ++i )
-			    {
-			    aBuffer.PositionL( items.iObjects.iPtr.iOffset + i * sizeof(TMdCObject) );
-			    TItemId id = KNoId;
-			    TRAPD( err, id = iManipulate->AddObjectL( connection, aBuffer, 
-			            baseObjStmt, objStmt, aServerSession ) );
-			    if (err == KErrNone)
-				    {
-				    aResultBuffer.InsertL( id );
-				    }
-			    else
-				    {
-				    aResultBuffer.InsertL( KNoId );
-				    if(resultIds.iErrorCode == KErrNone)
-					    {
-					    resultIds.iErrorCode = err;
-					    }
-				    }
-			    }
-		    if( beginError == KErrNone )
-		        {
-	            transaction.CommitL();
-	            CleanupStack::PopAndDestroy( &transaction );
-		        }
-		    }
-		else
-		    {
-            for ( TInt i = 0; i < KObjectCount; ++i )
+        RMdSTransaction transaction( connection );
+        CleanupClosePushL(transaction);
+        const TInt beginError( transaction.Error() );
+        if( beginError != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( &transaction );
+            }
+    
+        for ( TInt i = 0; i < KObjectCount; ++i )
+            {
+            aBuffer.PositionL( items.iObjects.iPtr.iOffset + i * sizeof(TMdCObject) );
+            TItemId id = KNoId;
+            TRAPD( err, id = iManipulate->AddObjectL( connection, aBuffer, 
+                    baseObjStmt, objStmt, aServerSession ) );
+            if (err == KErrNone)
                 {
-                aBuffer.PositionL( items.iObjects.iPtr.iOffset + i * sizeof(TMdCObject) );
-                TItemId id = KNoId;
-                TRAPD( err, id = iManipulate->AddObjectL( connection, aBuffer, 
-                        baseObjStmt, objStmt, aServerSession ) );
-                if (err == KErrNone)
+                aResultBuffer.InsertL( id );
+                }
+            else
+                {
+                aResultBuffer.InsertL( KNoId );
+                if(resultIds.iErrorCode == KErrNone)
                     {
-                    aResultBuffer.InsertL( id );
-                    }
-                else
-                    {
-                    aResultBuffer.InsertL( KNoId );
-                    if(resultIds.iErrorCode == KErrNone)
-                        {
-                        resultIds.iErrorCode = err;
-                        }
+                    resultIds.iErrorCode = err;
                     }
                 }
-		    }
+            }
+        if( beginError == KErrNone )
+            {
+            transaction.CommitL();
+            CleanupStack::PopAndDestroy( &transaction );
+            }
+
         CleanupStack::PopAndDestroy(&objStmt);
         CleanupStack::PopAndDestroy(&baseObjStmt);
 		}
@@ -229,12 +197,13 @@
 		resultIds.iEventIds.iPtr.iOffset = aResultBuffer.Position();
 		resultIds.iEventIds.iPtr.iCount = KEventCount;
 	    
-	    if( KEventCount > 1 )
-	        {
-	        //More than 1 event, transaction will be used.
-	        connection.TransactionBeginL();
-	        CleanupStack::PushL(TCleanupItem(&TransactionCleanupL, &connection));
-	        }
+        RMdSTransaction transaction( connection );
+        CleanupClosePushL(transaction);
+        const TInt beginError( transaction.Error() );
+        if( beginError != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( &transaction );
+            }
 
 		for ( TInt i = 0; i < KEventCount; ++i )
 			{
@@ -257,11 +226,11 @@
 				}
 			}
 
-		if( KEventCount > 1 )
-		    {
-		    connection.TransactionCommitL();
-		    CleanupStack::Pop();  //TransactionCleanup()
-	        }
+        if( beginError == KErrNone )
+            {
+            transaction.CommitL();
+            CleanupStack::PopAndDestroy( &transaction );
+            }
 		}
 	else
 		{
@@ -276,12 +245,13 @@
 		resultIds.iRelationIds.iPtr.iOffset = aResultBuffer.Position();
 		resultIds.iRelationIds.iPtr.iCount = KRelationCount;
 	    
-	    if( KRelationCount > 1 )
-	        {
-	        //More than 1 relation, transaction will be used.
-	        connection.TransactionBeginL();
-	        CleanupStack::PushL(TCleanupItem(&TransactionCleanupL, &connection));
-	        }
+        RMdSTransaction transaction( connection );
+        CleanupClosePushL(transaction);
+        const TInt beginError( transaction.Error() );
+        if( beginError != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( &transaction );
+            }
 
 	    for ( TInt i = 0; i < KRelationCount; ++i )
 			{
@@ -304,11 +274,11 @@
 				}
 			}
 
-	    if( KRelationCount > 1 )
-	        {
-	        connection.TransactionCommitL();
-	        CleanupStack::Pop();   //TransactionCleanup()
-	        }
+        if( beginError == KErrNone )
+            {
+            transaction.CommitL();
+            CleanupStack::PopAndDestroy( &transaction );
+            }
 		}
 	else
 		{
@@ -596,6 +566,14 @@
 		resultIds.iObjectIds.iPtr.iOffset = aResultBuffer.Position();
 		resultIds.iObjectIds.iPtr.iCount = items.iObjects.iPtr.iCount;
 
+        RMdSTransaction transaction( connection );
+        CleanupClosePushL(transaction);
+        const TInt beginError( transaction.Error() );
+        if( beginError != KErrNone )
+            {
+            CleanupStack::PopAndDestroy( &transaction );
+            }
+		
 		for ( TInt i = 0; i < items.iObjects.iPtr.iCount; ++i )
 			{
 			aBuffer.PositionL( items.iObjects.iPtr.iOffset + i * sizeof(TMdCObject) );
@@ -615,6 +593,11 @@
 					}
 				}
 			}
+        if( beginError == KErrNone )
+            {
+            transaction.CommitL();
+            CleanupStack::PopAndDestroy( &transaction );
+            }
 		}
 	else
 		{