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