r16922 - gnucash/branches/gda-dev2/src - 1) Add gnc_gda_slots_load_for_list() to load all of the slots for a list

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Feb 3 13:53:03 EST 2008


Author: plongstaff
Date: 2008-02-03 13:53:03 -0500 (Sun, 03 Feb 2008)
New Revision: 16922
Trac: http://svn.gnucash.org/trac/changeset/16922

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c
   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-book-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-budget-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-schedxaction-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.h
   gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-bill-term-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-customer-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-employee-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-entry-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-invoice-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-job-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-order-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-tax-table-gda.c
   gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-vendor-gda.c
Log:
1) Add gnc_gda_slots_load_for_list() to load all of the slots for a list
of items.  This is currently used when opening a register to load all of
the slots for all of the splits for each tx, rather than loading the
slots for each split separately.  Should cut down on number of db
requests and improve performance.  Can be used for other item types in
the future.
2) Start to use the same idea for grouping db request for all splits for
a list of transactions.  Not complete yet, but should further improve
register performance.
3) Simplify parameter list for gnc_gda_slots_load()



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -174,8 +174,7 @@
         pAccount = xaccMallocAccount( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_ACCOUNT, pAccount, col_table );
-    gnc_gda_slots_load( be, xaccAccountGetGUID( pAccount ),
-                        qof_instance_get_slots( QOF_INSTANCE(pAccount) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pAccount) );
     load_balances( be, pAccount );
 
     qof_instance_mark_clean( QOF_INSTANCE(pAccount) );

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-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -1325,10 +1325,8 @@
     gnc_gda_register_col_type_handler( CT_NUMERIC, &numeric_handler );
 }
 
-static void retrieve_guid( gpointer pObject, gpointer pValue );
-
-static void 
-retrieve_guid( gpointer pObject, gpointer pValue )
+void 
+_retrieve_guid_( gpointer pObject, gpointer pValue )
 {
     GUID* pGuid = (GUID*)pObject;
     GUID* guid = (GUID*)pValue;
@@ -1343,7 +1341,7 @@
 // Table to retrieve just the guid
 static col_cvt_t guid_table[] =
 {
-    { "guid", CT_GUID, 0, 0, NULL, NULL, NULL, retrieve_guid },
+    { "guid", CT_GUID, 0, 0, NULL, NULL, NULL, _retrieve_guid_ },
     { NULL }
 };
 
@@ -1364,7 +1362,7 @@
 // Table to retrieve just the guid
 static col_cvt_t tx_guid_table[] =
 {
-    { "tx_guid", CT_GUID, 0, 0, NULL, NULL, NULL, retrieve_guid },
+    { "tx_guid", CT_GUID, 0, 0, NULL, NULL, NULL, _retrieve_guid_ },
     { NULL }
 };
 

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-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h	2008-02-03 18:53:03 UTC (rev 16922)
@@ -197,6 +197,8 @@
 void gnc_gda_create_objectref_guid_col( GdaServerProvider* server, GdaConnection* cnn,
 	            xmlNodePtr array_data, const col_cvt_t* table_row, gboolean pkey );
 
+void _retrieve_guid_( gpointer pObject, gpointer pValue );
+
 G_MODULE_EXPORT const gchar *
 g_module_check_init( GModule *module );
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-book-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-book-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-book-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -145,8 +145,7 @@
 	}
 
     gnc_gda_load_object( be, pModel, row, GNC_ID_BOOK, pBook, col_table );
-    gnc_gda_slots_load( be, gnc_book_get_guid( pBook ),
-                            qof_instance_get_slots( QOF_INSTANCE(pBook) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pBook) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pBook) );
 }

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-budget-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-budget-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-budget-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -83,8 +83,7 @@
     gnc_gda_load_object( be, pModel, row, GNC_ID_BUDGET, pBudget, col_table );
 	r = g_new0( Recurrence, 1 );
 	gnc_gda_recurrence_load( be, gnc_budget_get_guid( pBudget ), r );
-    gnc_gda_slots_load( be, gnc_budget_get_guid( pBudget ),
-                            qof_instance_get_slots( QOF_INSTANCE(pBudget) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pBudget) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pBudget) );
 }

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -124,8 +124,7 @@
     pCommodity = gnc_commodity_new( pBook, NULL, NULL, NULL, NULL, 100 );
 
     gnc_gda_load_object( be, pModel, row, GNC_ID_COMMODITY, pCommodity, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(pCommodity) ),
-                            qof_instance_get_slots( QOF_INSTANCE(pCommodity) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pCommodity) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pCommodity) );
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -110,8 +110,7 @@
     lot = gnc_lot_new( be->primary_book );
 
     gnc_gda_load_object( be, pModel, row, GNC_ID_LOT, lot, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(lot) ),
-                            qof_instance_get_slots( QOF_INSTANCE(lot) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(lot) );
 
     qof_instance_mark_clean( QOF_INSTANCE(lot) );
 }

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-schedxaction-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-schedxaction-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-schedxaction-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -186,8 +186,7 @@
     gnc_gda_load_object( be, pModel, row, /*GNC_ID_SCHEDXACTION*/GNC_SX_ID, pSx, col_table );
 	gnc_gda_recurrence_load_list( be, guid, &schedule );
 	gnc_sx_set_schedule( pSx, schedule );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(pSx) ),
-                            qof_instance_get_slots( QOF_INSTANCE(pSx) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pSx) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pSx) );
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -92,9 +92,9 @@
 
 /* Special column table because we need to be able to access the table by
 a column other than the primary key */
-static col_cvt_t guid_col_table[] =
+static col_cvt_t obj_guid_col_table[] =
 {
-    { "obj_guid", CT_GUID, 0, 0, NULL, NULL, get_obj_guid, set_obj_guid },
+    { "obj_guid", CT_GUID, 0, 0, NULL, NULL, get_obj_guid, _retrieve_guid_ },
     { NULL }
 };
 
@@ -379,7 +379,7 @@
     slot_info.be = be;
     slot_info.guid = guid;
     (void)gnc_gda_do_db_operation( be, OP_DB_DELETE, TABLE_NAME,
-                                TABLE_NAME, &slot_info, guid_col_table );
+                                TABLE_NAME, &slot_info, obj_guid_col_table );
 }
 
 static void
@@ -404,7 +404,7 @@
 }
 
 void
-gnc_gda_slots_load( GncGdaBackend* be, const GUID* guid, KvpFrame* pFrame )
+gnc_gda_slots_load( GncGdaBackend* be, QofInstance* inst )
 {
     gchar* buf;
     GdaObject* ret;
@@ -414,11 +414,14 @@
     GdaQueryCondition* cond;
     GdaQueryField* key_value;
     GValue value;
+	const GUID* guid;
+	KvpFrame* pFrame;
 
 	g_return_if_fail( be != NULL );
-	g_return_if_fail( guid != NULL );
-	g_return_if_fail( pFrame != NULL );
+	g_return_if_fail( inst != NULL );
 
+	guid = qof_instance_get_guid( inst );
+	pFrame = qof_instance_get_slots( inst );
     guid_to_string_buff( guid, guid_buf );
 
     /* First time, create the query */
@@ -460,12 +463,11 @@
     g_value_set_string( &value, guid_buf );
     gda_query_field_value_set_value( GDA_QUERY_FIELD_VALUE(key_value), &value );
 
-    ret = gnc_gda_execute_query( be, query );
+	ret = gnc_gda_execute_query( be, query );
     if( GDA_IS_DATA_MODEL( ret ) ) {
         GdaDataModel* pModel = GDA_DATA_MODEL(ret);
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
-        KvpValue* pValue;
 
         for( r = 0; r < numRows; r++ ) {
             load_slot( be, pModel, r, pFrame );
@@ -473,6 +475,95 @@
     }
 }
 
+static const GUID*
+load_obj_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row )
+{
+    static GUID guid;
+
+	g_return_val_if_fail( be != NULL, NULL );
+	g_return_val_if_fail( pModel != NULL, NULL );
+	g_return_val_if_fail( row >= 0, NULL );
+
+    gnc_gda_load_object( be, pModel, row, NULL, &guid, obj_guid_col_table );
+
+    return &guid;
+}
+
+static void
+load_slot_for_list_item( GncGdaBackend* be, GdaDataModel* pModel, gint row, QofCollection* coll )
+{
+    slot_info_t slot_info;
+	const GUID* guid;
+	QofInstance* inst;
+
+	g_return_if_fail( be != NULL );
+	g_return_if_fail( pModel != NULL );
+	g_return_if_fail( row >= 0 );
+	g_return_if_fail( coll != NULL );
+
+	guid = load_obj_guid( be, pModel, row );
+	inst = qof_collection_lookup_entity( coll, guid );
+
+    slot_info.be = be;
+    slot_info.pKvpFrame = qof_instance_get_slots( inst );
+    slot_info.path = NULL;
+
+    gnc_gda_load_object( be, pModel, row, TABLE_NAME, &slot_info, col_table );
+
+    if( slot_info.path != NULL ) {
+        g_string_free( slot_info.path, TRUE );
+    }
+}
+
+void
+gnc_gda_slots_load_for_list( GncGdaBackend* be, GList* list )
+{
+	QofCollection* coll;
+	GdaQuery* query;
+	GString* sql;
+    gchar guid_buf[GUID_ENCODING_LENGTH+1];
+	gboolean first_guid = TRUE;
+	GdaObject* ret;
+
+	g_return_if_fail( be != NULL );
+
+	// Ignore empty list
+	if( list == NULL ) return;
+
+	// Create the query for all slots for all items on the list
+	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 (", TABLE_NAME, obj_guid_col_table[0].col_name );
+	for( ; list != NULL; list = list->next ) {
+		QofInstance* inst = QOF_INSTANCE(list->data);
+		coll = qof_instance_get_collection( inst );
+    	guid_to_string_buff( qof_instance_get_guid( inst ), guid_buf );
+
+		if( !first_guid ) {
+			g_string_append( sql, "," );
+		}
+		g_string_append( sql, "'" );
+		g_string_append( sql, guid_buf );
+		g_string_append( sql, "'" );
+		first_guid = FALSE;
+    }
+	g_string_append( sql, ")" );
+
+	// Execute the query and load the slots
+	query = gnc_gda_create_query_from_sql( be, sql->str );
+	g_string_free( sql, TRUE );
+	ret = gnc_gda_execute_query( be, query );
+    if( GDA_IS_DATA_MODEL( ret ) ) {
+        GdaDataModel* pModel = GDA_DATA_MODEL(ret);
+        int numRows = gda_data_model_get_n_rows( pModel );
+        int r;
+
+        for( r = 0; r < numRows; r++ ) {
+            load_slot_for_list_item( be, pModel, r, coll );
+        }
+    }
+	g_object_unref( ret );
+}
+
 /* ================================================================= */
 static void
 create_slots_tables( GncGdaBackend* be )

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.h
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.h	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-slots-gda.h	2008-02-03 18:53:03 UTC (rev 16922)
@@ -34,7 +34,8 @@
 
 void gnc_gda_slots_save( GncGdaBackend* be, const GUID* guid, KvpFrame* pFrame );
 void gnc_gda_slots_delete( GncGdaBackend* be, const GUID* guid );
-void gnc_gda_slots_load( GncGdaBackend* be, const GUID* guid, KvpFrame* pFrame );
+void gnc_gda_slots_load( GncGdaBackend* be, QofInstance* inst );
+void gnc_gda_slots_load_for_list( GncGdaBackend* be, GList* list );
 
 void gnc_gda_init_slots_handler( void );
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -283,7 +283,7 @@
 }
 
 static void
-load_single_split( GncGdaBackend* be, GdaDataModel* pModel, int row )
+load_single_split( GncGdaBackend* be, GdaDataModel* pModel, int row, GList** pList )
 {
     const GUID* guid;
     GUID split_guid;
@@ -304,15 +304,15 @@
     /* If the split is dirty, don't overwrite it */
     if( !qof_instance_is_dirty( QOF_INSTANCE(pSplit) ) ) {
     	gnc_gda_load_object( be, pModel, row, GNC_ID_SPLIT, pSplit, split_col_table );
-    	gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(pSplit) ),
-                            qof_instance_get_slots( QOF_INSTANCE(pSplit) ) );
+		*pList = g_list_append( *pList, pSplit );
+//    	gnc_gda_slots_load( be, QOF_INSTANCE(pSplit) );
 	}
 
     g_assert( pSplit == xaccSplitLookup( &split_guid, be->primary_book ) );
 }
 
 static void
-load_all_splits( GncGdaBackend* be, const GUID* tx_guid )
+load_all_splits_for_tx( GncGdaBackend* be, const GUID* tx_guid )
 {
     GdaObject* ret;
     gchar guid_buf[GUID_ENCODING_LENGTH+1];
@@ -338,16 +338,33 @@
         GdaDataModel* pModel = GDA_DATA_MODEL(ret);
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
+		GList* list = NULL;
 
         for( r = 0; r < numRows; r++ ) {
-            load_single_split( be, pModel, r );
+            load_single_split( be, pModel, r, &list );
         }
+
+		if( list != NULL ) {
+			gnc_gda_slots_load_for_list( be, list );
+		}
     }
 }
 
 static void
-load_single_tx( GncGdaBackend* be, GdaDataModel* pModel, int row )
+load_splits_for_tx_list( GncGdaBackend* be, GList* list )
 {
+	g_return_if_fail( be != NULL );
+
+	if( list == NULL ) return;
+
+	for( ; list != NULL; list = list->next ) {
+		load_all_splits_for_tx( be, qof_instance_get_guid( QOF_INSTANCE(list->data) ) );
+	}
+}
+
+static void
+load_single_tx( GncGdaBackend* be, GdaDataModel* pModel, int row, GList** pList )
+{
     const GUID* guid;
     GUID tx_guid;
 	Transaction* pTx;
@@ -365,9 +382,9 @@
     }
     xaccTransBeginEdit( pTx );
     gnc_gda_load_object( be, pModel, row, GNC_ID_TRANS, pTx, tx_col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ),
-                            qof_instance_get_slots( QOF_INSTANCE(pTx) ) );
-    load_all_splits( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pTx) );
+	*pList = g_list_append( *pList, pTx );
+//    load_all_splits( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pTx) );
     xaccTransCommitEdit( pTx );
@@ -388,10 +405,15 @@
         GdaDataModel* pModel = GDA_DATA_MODEL(ret);
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
+		GList* tx_list = NULL;
 
         for( r = 0; r < numRows; r++ ) {
-            load_single_tx( be, pModel, r );
+            load_single_tx( be, pModel, r, &tx_list );
         }
+
+		if( tx_list != NULL ) {
+			load_splits_for_tx_list( be, tx_list );
+		}
     }
 }
 
@@ -599,12 +621,12 @@
 static gpointer
 compile_split_query( GncGdaBackend* be, QofQuery* pQuery )
 {
-    gchar* buf;
+	GString* sql;
     const GUID* acct_guid;
     gchar guid_buf[GUID_ENCODING_LENGTH+1];
-	gchar* s;
 	GdaQuery* query;
 	GdaObject* results;
+	gchar* buf;
 
 	g_return_val_if_fail( be != NULL, NULL );
 	g_return_val_if_fail( pQuery != NULL, NULL );
@@ -612,18 +634,20 @@
 #if 1
     acct_guid = get_guid_from_query( pQuery );
     guid_to_string_buff( acct_guid, guid_buf );
-	buf = g_strdup_printf( "SELECT DISTINCT tx_guid FROM %s WHERE account_guid='%s'", SPLIT_TABLE, guid_buf );
-	results = gnc_gda_execute_sql( be, buf );
-	g_free( buf );
+	sql = g_string_new( "" );
+	g_string_printf( sql, "SELECT DISTINCT tx_guid FROM %s WHERE account_guid='%s'", SPLIT_TABLE, guid_buf );
+	results = gnc_gda_execute_sql( be, sql->str );
     if( GDA_IS_DATA_MODEL( results ) ) {
         GdaDataModel* pModel = GDA_DATA_MODEL(results);
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
 
+		sql = g_string_sized_new( 40+(GUID_ENCODING_LENGTH+3)*numRows );
+
 		if( numRows != 1 ) {
-			buf = g_strdup_printf( "SELECT * FROM %s WHERE guid IN (", TRANSACTION_TABLE );
+			g_string_printf( sql, "SELECT * FROM %s WHERE guid IN (", TRANSACTION_TABLE );
 		} else {
-			buf = g_strdup_printf( "SELECT * FROM %s WHERE guid =", TRANSACTION_TABLE );
+			g_string_printf( sql, "SELECT * FROM %s WHERE guid =", TRANSACTION_TABLE );
 		}
 
         for( r = 0; r < numRows; r++ ) {
@@ -631,22 +655,21 @@
 
 			guid = gnc_gda_load_tx_guid( be, pModel, r );
     		guid_to_string_buff( guid, guid_buf );
-			if( r == 0 ) {
-				s = g_strconcat( buf, "'", guid_buf, "'", NULL );
-			} else {
-				s = g_strconcat( buf, ",'", guid_buf, "'", NULL );
+			if( r != 0 ) {
+				g_string_append( sql, "," );
 			}
-			g_free( buf );
-			buf = s;
+			g_string_append( sql, "'" );
+			g_string_append( sql, guid_buf );
+			g_string_append( sql, "'" );
         }
 
 		if( numRows != 1 ) {
-			s = g_strconcat( buf, ")", NULL );
-			g_free( buf );
-			buf = s;
+			g_string_append( sql, ")" );
 		}
     }
 
+	buf = sql->str;
+	g_string_free( sql, FALSE );
 	return buf;
 #else
 #if 1

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-bill-term-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-bill-term-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-bill-term-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -101,8 +101,7 @@
         pBillTerm = gncBillTermCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_BILLTERM, pBillTerm, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pBillTerm )),
-                        qof_instance_get_slots( QOF_INSTANCE(pBillTerm) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE( pBillTerm ) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pBillTerm) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-customer-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-customer-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-customer-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -90,8 +90,7 @@
         pCustomer = gncCustomerCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_CUSTOMER, pCustomer, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pCustomer )),
-                        qof_instance_get_slots( QOF_INSTANCE(pCustomer) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pCustomer) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pCustomer) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-employee-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-employee-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-employee-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -89,8 +89,7 @@
         pEmployee = gncEmployeeCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_EMPLOYEE, pEmployee, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pEmployee )),
-                        qof_instance_get_slots( QOF_INSTANCE(pEmployee) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pEmployee) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pEmployee) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-entry-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-entry-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-entry-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -103,8 +103,7 @@
         pEntry = gncEntryCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_ENTRY, pEntry, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pEntry )),
-                        qof_instance_get_slots( QOF_INSTANCE(pEntry) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pEntry) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pEntry) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-invoice-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-invoice-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-invoice-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -93,8 +93,7 @@
         pInvoice = gncInvoiceCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_INVOICE, pInvoice, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pInvoice )),
-                        qof_instance_get_slots( QOF_INSTANCE(pInvoice) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pInvoice) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pInvoice) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-job-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-job-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-job-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -77,8 +77,7 @@
         pJob = gncJobCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_JOB, pJob, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pJob )),
-                        qof_instance_get_slots( QOF_INSTANCE(pJob) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pJob) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pJob) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-order-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-order-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-order-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -78,8 +78,7 @@
         pOrder = gncOrderCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_ORDER, pOrder, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pOrder )),
-                        qof_instance_get_slots( QOF_INSTANCE(pOrder) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pOrder) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pOrder) );
 }

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-tax-table-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-tax-table-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-tax-table-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -219,8 +219,7 @@
         tt = gncTaxTableCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_TAXTABLE, tt, tt_col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE(tt)),
-                        qof_instance_get_slots( QOF_INSTANCE(tt) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(tt) );
 	load_taxtable_entries( be, tt );
 
     qof_instance_mark_clean( QOF_INSTANCE(tt) );

Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-vendor-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-vendor-gda.c	2008-02-03 02:17:43 UTC (rev 16921)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-vendor-gda.c	2008-02-03 18:53:03 UTC (rev 16922)
@@ -93,8 +93,7 @@
         pVendor = gncVendorCreate( be->primary_book );
     }
     gnc_gda_load_object( be, pModel, row, GNC_ID_VENDOR, pVendor, col_table );
-    gnc_gda_slots_load( be, qof_instance_get_guid( QOF_INSTANCE( pVendor )),
-                        qof_instance_get_slots( QOF_INSTANCE(pVendor) ) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pVendor) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pVendor) );
 }



More information about the gnucash-changes mailing list