metadataengine/server/src/mdsschema.cpp
branchRCL_3
changeset 6 646a02f170b9
parent 0 c53acadfccc6
child 7 3cebc1a84278
--- a/metadataengine/server/src/mdsschema.cpp	Fri Feb 19 23:14:48 2010 +0200
+++ b/metadataengine/server/src/mdsschema.cpp	Fri Mar 12 15:44:28 2010 +0200
@@ -256,7 +256,7 @@
 			{
 			// add base objectdef[number]
 			clause->BufferL().Format( KBaseObjectDefinition, &MdeConstants::Object::KBaseObject, namespaceDefId );
-			TRAP_IGNORE( connection.ExecuteL( clause->ConstBufferL(), emptyRowData ) );			
+			connection.ExecuteL( clause->ConstBufferL(), emptyRowData );			
 
 			// add relations[number]
 			clause->BufferL().Format( KCreateRelationsTable, namespaceDefId );
@@ -320,7 +320,8 @@
 
 			// add updateremovedrelations[number]
             clauseTrigger->ReserveSpaceL( KMdsTriggerUpdateRemovedRelation().Size() + ( KMaxUintValueLength * 5 ) );  
-            clauseTrigger->BufferL().Format( KMdsTriggerUpdateRemovedRelation, namespaceDefId, namespaceDefId, EMdERelationFlagNotPresent | EMdERelationFlagDeleted, EMdERelationFlagNotPresent | EMdERelationFlagDeleted, namespaceDefId );
+            clauseTrigger->BufferL().Format( KMdsTriggerUpdateRemovedRelation, namespaceDefId, namespaceDefId, 
+                    EMdERelationFlagNotPresent | EMdERelationFlagDeleted, EMdERelationFlagNotPresent | EMdERelationFlagDeleted, namespaceDefId );
             connection.ExecuteL( clauseTrigger->ConstBufferL(), emptyRowData );
 
 			// add relationleftobjectidindex[number]
@@ -357,7 +358,7 @@
 				AddObjectToSqlClauseL( objectDef, clause, ETrue );
 
 				clause->AppendL( KMdsSqlClauseObjTableEnd );
-				TRAP_IGNORE( connection.ExecuteL( clause->ConstBufferL(), emptyRowData ) );
+				connection.ExecuteL( clause->ConstBufferL(), emptyRowData );
 
 				objectDef->SetTableStoredInDB();
 				}
@@ -393,6 +394,7 @@
     CleanupClosePushL( emptyRowData );
     clause->BufferL().Format( KMdsPropertyIndexCreate, &aTableName, &aPropertyName, aNamespaceId,
     		&aTableName, aNamespaceId, &aPropertyName );
+    // Ignore possible SQL error, MDS can still live without this index
 	TRAP_IGNORE( connection.ExecuteL( clause->ConstBufferL(), emptyRowData ) );
 	CleanupStack::PopAndDestroy( 2, clause ); // emptyRowData, clause
 	}
@@ -408,9 +410,6 @@
     CreateObjectTablesL();
 	StoreSchemaToDBL();
 	CreateCol2PropTableL();
-
-    transaction.CommitL();
-    CleanupStack::PopAndDestroy( &transaction );
     
     TUint propertyCount = iProperties.Count();
     for ( TUint i = 0; i < propertyCount; ++i )
@@ -419,6 +418,10 @@
     	CreatePropertyIndexL( propertyInfo.iPropertyName, propertyInfo.iTableName,
     			propertyInfo.iNamespaceId );
     	}
+    
+    transaction.CommitL();
+    CleanupStack::PopAndDestroy( &transaction );
+    
     iProperties.Reset();
 	}
 
@@ -564,7 +567,7 @@
 	for (TUint i = 0; i < KNumClauses; i++)
 		{
 		TRAP( error,connection.ExecuteL( (*descarray)[i], emptyRowData ) );
-		if ( error != KErrNone && error != KSqlErrGeneral )
+		if ( error != KErrNone )
 			{
 			User::Leave( error );
 			}
@@ -574,12 +577,26 @@
 
 	const TInt count = iNamespaceDefs.Count();
 	
+    RMdSTransaction transaction( connection );
+    CleanupClosePushL(transaction);
+    const TInt beginError( transaction.Error() );
+    if( beginError != KErrNone )
+        {
+        CleanupStack::PopAndDestroy( &transaction );
+        }
+	
 	// add only namespaceDef to DB
 	for( TInt i = 0; i < count; ++i )
 		{
 		iNamespaceDefs[i]->StoreToDBL( ETrue );
 		}
 
+    if( beginError == KErrNone )
+        {
+        transaction.CommitL();
+        CleanupStack::PopAndDestroy( &transaction );
+        }	
+
 	CleanupStack::PopAndDestroy( &emptyRowData );
 	}
 
@@ -588,6 +605,16 @@
 	_LIT( KMdsSqlClauseDeleteBoFromOd,  "DELETE FROM ObjectDef WHERE ObjectDefId=?;" );
 	_LIT( KMdsSqlClauseDeleteBoFromPd,  "DELETE FROM PropertyDef WHERE ObjectDefId=?;" );
 
+    CMdSSqLiteConnection& connection = MMdSDbConnectionPool::GetDefaultDBL();
+
+    RMdSTransaction transaction( connection );
+    CleanupClosePushL(transaction);
+    const TInt beginError( transaction.Error() );
+    if( beginError != KErrNone )
+        {
+        CleanupStack::PopAndDestroy( &transaction );
+        }
+    
 	iBaseObject->StoreToDBL( KNoDefId );
 	
 	const TInt count = iNamespaceDefs.Count();
@@ -598,11 +625,16 @@
 		iNamespaceDefs[i]->StoreToDBL();
 		}
 
+    if( beginError == KErrNone )
+        {
+        transaction.CommitL();
+        CleanupStack::PopAndDestroy( &transaction );
+        }   
+	
 	RRowData removeBo;
 	CleanupClosePushL( removeBo );
 	removeBo.AppendL( TColumn( KBaseObjectDefId ) );
 
-	CMdSSqLiteConnection& connection = MMdSDbConnectionPool::GetDefaultDBL();
 	TRAPD( err, connection.ExecuteL( KMdsSqlClauseDeleteBoFromOd,  removeBo ) );
 	TRAP ( err, connection.ExecuteL( KMdsSqlClauseDeleteBoFromPd,  removeBo ) );