r16719 - gnucash/branches/gda-dev2/src/backend/gda - 1) Mark book clean after initial load

Phil Longstaff plongstaff at cvs.gnucash.org
Tue Dec 25 11:47:50 EST 2007


Author: plongstaff
Date: 2007-12-25 11:47:50 -0500 (Tue, 25 Dec 2007)
New Revision: 16719
Trac: http://svn.gnucash.org/trac/changeset/16719

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
Log:
1) Mark book clean after initial load
2) Surround commit operation with a transaction if the db supports them



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2007-12-25 16:23:47 UTC (rev 16718)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2007-12-25 16:47:50 UTC (rev 16719)
@@ -248,6 +248,8 @@
         return;
     }
 
+	be->supports_transactions = gda_connection_supports_feature( be->pConnection, GDA_CONNECTION_FEATURE_TRANSACTIONS );
+
     // Set up the dictionary
     be->pDict = gda_dict_new();
     gda_dict_set_connection( be->pDict, be->pConnection );
@@ -311,8 +313,10 @@
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_GDA_BACKEND_VERSION );
-    g_return_if_fail( g_ascii_strcasecmp( type, GNC_ID_BOOK ) != 0 );
 
+	// Don't need to load anything for the books table
+    if( g_ascii_strcasecmp( type, GNC_ID_BOOK ) == 0 ) return;
+
     if( pData->initial_load != NULL ) {
         (pData->initial_load)( be_data->be );
     }
@@ -347,7 +351,7 @@
     be->loading = FALSE;
 
 	// Mark the book as clean
-	qof_instance_mark_clean( QOF_INSTANCE(book) );
+	qof_book_mark_saved( book );
 
     LEAVE( "" );
 }
@@ -599,6 +603,8 @@
 {
     GncGdaBackend *be = (GncGdaBackend*)be_start;
     gda_backend be_data;
+	GError* error;
+	gboolean status;
 
     ENTER( " " );
 
@@ -620,6 +626,20 @@
 
     if( !qof_instance_get_dirty_flag(inst) && !qof_instance_get_destroying(inst) ) return;
 
+#define TRANSACTION_NAME "trans"
+	error = NULL;
+	if( be->supports_transactions ) {
+		status = gda_connection_begin_transaction( be->pConnection, TRANSACTION_NAME,
+										GDA_TRANSACTION_ISOLATION_UNKNOWN, &error );
+		if( !status ) {
+			if( error != NULL ) {
+				g_warning( "Unable to begin transaction: %s\n", error->message );
+			} else {
+				g_warning( "Unable to begin transaction\n" );
+			}
+		}
+	}
+
     be_data.ok = FALSE;
     be_data.be = be;
     be_data.inst = inst;
@@ -627,8 +647,28 @@
 
     if( !be_data.ok ) {
         g_critical( "gnc_gda_commit_edit(): Unknown object type '%s'\n", inst->e_type );
+		if( be->supports_transactions ) {
+			status = gda_connection_rollback_transaction( be->pConnection, TRANSACTION_NAME, &error );
+			if( !status ) {
+				if( error != NULL ) {
+					g_warning( "Unable to roll back transaction: %s\n", error->message );
+				} else {
+					g_warning( "Unable to roll back transaction\n" );
+				}
+			}
+		}
         return;
     }
+	if( be->supports_transactions ) {
+		status = gda_connection_commit_transaction( be->pConnection, TRANSACTION_NAME, &error );
+		if( !status ) {
+			if( error != NULL ) {
+				g_warning( "Unable to commit transaction: %s\n", error->message );
+			} else {
+				g_warning( "Unable to commit transaction\n" );
+			}
+		}
+	}
 
     qof_instance_mark_clean(inst);
     qof_book_mark_saved( be->primary_book );

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2007-12-25 16:23:47 UTC (rev 16718)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2007-12-25 16:47:50 UTC (rev 16719)
@@ -44,6 +44,7 @@
   QofBook *primary_book;	/* The primary, main open book */
   gboolean	loading;		/* We are performing an initial load */
   gboolean  in_query;
+  gboolean  supports_transactions;
 };
 typedef struct GncGdaBackend_struct GncGdaBackend;
 



More information about the gnucash-changes mailing list