r17067 - gnucash/branches/gda-dev2/src/backend/gda - Load transactions, transaction slots, splits and split slots in 4

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Apr 6 11:02:46 EDT 2008


Author: plongstaff
Date: 2008-04-06 11:02:46 -0400 (Sun, 06 Apr 2008)
New Revision: 17067
Trac: http://svn.gnucash.org/trac/changeset/17067

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
   gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
Log:
Load transactions, transaction slots, splits and split slots in 4
individual queries - speeds up transaction loading.



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-04-06 15:02:46 UTC (rev 17067)
@@ -1533,17 +1533,18 @@
     return count;
 }
 
-void
-gnc_gda_append_guid_list_to_sql( GString* sql, GList* list )
+guint
+gnc_gda_append_guid_list_to_sql( GString* sql, GList* list, guint maxCount )
 {
 	gchar guid_buf[GUID_ENCODING_LENGTH+1];
 	gboolean first_guid = TRUE;
+	guint count;
 
-	g_return_if_fail( sql != NULL );
+	g_return_val_if_fail( sql != NULL, 0 );
 
-	if( list == NULL ) return;
+	if( list == NULL ) return 0;
 
-	for( ; list != NULL; list = list->next ) {
+	for( count = 0; list != NULL && count < maxCount; list = list->next, count++ ) {
 		QofInstance* inst = QOF_INSTANCE(list->data);
     	guid_to_string_buff( qof_instance_get_guid( inst ), guid_buf );
 
@@ -1555,6 +1556,8 @@
 		g_string_append( sql, "'" );
 		first_guid = FALSE;
     }
+
+	return count;
 }
 /* ================================================================= */
 static void

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	2008-04-06 00:37:42 UTC (rev 17066)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2008-04-06 15:02:46 UTC (rev 17067)
@@ -199,7 +199,7 @@
                 const gpointer pObject, const col_cvt_t* table_row, GdaQuery* query );
 void gnc_gda_create_objectref_guid_col( GdaServerProvider* server, GdaConnection* cnn,
 	            GdaServerOperation* op, const col_cvt_t* table_row );
-void gnc_gda_append_guid_list_to_sql( GString* str, GList* list );
+guint gnc_gda_append_guid_list_to_sql( GString* str, GList* list, guint maxCount );
 
 void _retrieve_guid_( gpointer pObject, gpointer pValue );
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-04-06 15:02:46 UTC (rev 17067)
@@ -545,7 +545,7 @@
 		g_string_append( sql, "= " );
 		single_item = TRUE;
 	}
-	gnc_gda_append_guid_list_to_sql( sql, list );
+	(void)gnc_gda_append_guid_list_to_sql( sql, list, G_MAXUINT );
 	if( !single_item ) {
 		g_string_append( sql, ")" );
 	}

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-04-06 15:02:46 UTC (rev 17067)
@@ -398,7 +398,7 @@
 
 	sql = g_string_new( "" );
 	g_string_printf( sql, "SELECT account_guid,SUM(QUANTITY_NUM) AS quantity_num,quantity_denom FROM %s WHERE ACCOUNT_GUID IN (", SPLIT_TABLE );
-	gnc_gda_append_guid_list_to_sql( sql, list );
+	(void)gnc_gda_append_guid_list_to_sql( sql, list, G_MAXUINT );
 	g_string_append( sql, ") GROUP BY ACCOUNT_GUID" );
 
 	get_account_balance_for_list_from_sql( be, result_list, sql->str );
@@ -529,7 +529,7 @@
 
 	sql = g_string_sized_new( 40+(GUID_ENCODING_LENGTH+3)*g_list_length( list ) );
 	g_string_append_printf( sql, "SELECT * FROM %s WHERE %s IN (", SPLIT_TABLE, guid_col_table[0].col_name );
-	gnc_gda_append_guid_list_to_sql( sql, list );
+	(void)gnc_gda_append_guid_list_to_sql( sql, list, G_MAXUINT );
 	g_string_append( sql, ")" );
 
 	// Execute the query and load the splits
@@ -571,12 +571,13 @@
     }
     xaccTransBeginEdit( pTx );
     gnc_gda_load_object( be, pModel, row, GNC_ID_TRANS, pTx, tx_col_table );
-    gnc_gda_slots_load( be, QOF_INSTANCE(pTx) );
+//    gnc_gda_slots_load( be, QOF_INSTANCE(pTx) );
 	*pList = g_list_append( *pList, pTx );
-    load_all_splits_for_tx( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
+//    load_all_splits_for_tx( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
 
-    qof_instance_mark_clean( QOF_INSTANCE(pTx) );
-    xaccTransCommitEdit( pTx );
+	// Leave the transaction open for edit until all of the slots and splits are loaded
+//    qof_instance_mark_clean( QOF_INSTANCE(pTx) );
+//    xaccTransCommitEdit( pTx );
 
     g_assert( pTx == xaccTransLookup( &tx_guid, be->primary_book ) );
 }
@@ -595,15 +596,23 @@
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
 		GList* tx_list = NULL;
+		GList* node;
 
         for( r = 0; r < numRows; r++ ) {
             load_single_tx( be, pModel, r, &tx_list );
         }
 
-//		if( tx_list != NULL ) {
-//			gnc_gda_slots_load_for_list( be, tx_list );
-//			load_splits_for_tx_list( be, tx_list );
-//		}
+		if( tx_list != NULL ) {
+			gnc_gda_slots_load_for_list( be, tx_list );
+			load_splits_for_tx_list( be, tx_list );
+		}
+
+		// Commit all of the transactions
+		for( node = tx_list; node != NULL; node = node->next ) {
+			Transaction* pTx = GNC_TRANSACTION(node->data);
+    		qof_instance_mark_clean( QOF_INSTANCE(pTx) );
+    		xaccTransCommitEdit( pTx );
+		}
     }
 }
 



More information about the gnucash-changes mailing list