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