r16748 - gnucash/branches/gda-dev2/src/backend/gda - Split object reference column handlers out to individual object backend

Phil Longstaff plongstaff at cvs.gnucash.org
Thu Dec 27 14:19:22 EST 2007


Author: plongstaff
Date: 2007-12-27 14:19:21 -0500 (Thu, 27 Dec 2007)
New Revision: 16748
Trac: http://svn.gnucash.org/trac/changeset/16748

Modified:
   gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
   gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-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-transaction-gda.c
Log:
Split object reference column handlers out to individual object backend
files.



Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2007-12-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -297,6 +297,37 @@
 }
 
 /* ================================================================= */
+static void
+load_account_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+	Account* account = NULL;
+
+    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+    if( gda_value_is_null( val ) ) {
+        pGuid = NULL;
+    } else {
+        string_to_guid( g_value_get_string( val ), &guid );
+        pGuid = &guid;
+    }
+	if( pGuid != NULL ) {
+		account = xaccAccountLookup( pGuid, be->primary_book );
+	}
+    if( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, account, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)account );
+    }
+}
+
+static col_type_handler_t account_guid_handler =
+        { load_account_guid, gnc_gda_create_objectref_guid_col,
+            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
+/* ================================================================= */
 void
 gnc_gda_init_account_handler( void )
 {
@@ -310,5 +341,7 @@
     };
 
     qof_object_register_backend( GNC_ID_ACCOUNT, GNC_GDA_BACKEND, &be_data );
+
+	gnc_gda_register_col_type_handler( CT_ACCOUNTREF, &account_guid_handler );
 }
 /* ========================== END OF FILE ===================== */

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-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -305,17 +305,23 @@
 
 /* ================================================================= */
 
+static const gchar* fixed_load_order[] =
+{ GNC_ID_BOOK, GNC_ID_COMMODITY, GNC_ID_ACCOUNT, NULL };
+
 static void
 initial_load_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
 {
     GncGdaDataType_t* pData = data_p;
     gda_backend* be_data = be_data_p;
+	int i;
 
     g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
     g_return_if_fail( pData->version == GNC_GDA_BACKEND_VERSION );
 
-	// Don't need to load anything for the books table
-    if( g_ascii_strcasecmp( type, GNC_ID_BOOK ) == 0 ) return;
+	// Don't need to load anything if it has already been loaded with the fixed order
+	for( i = 0; fixed_load_order[i] != NULL; i++ ) {
+    	if( g_ascii_strcasecmp( type, fixed_load_order[i] ) == 0 ) return;
+	}
 
     if( pData->initial_load != NULL ) {
         (pData->initial_load)( be_data->be );
@@ -328,6 +334,7 @@
     GncGdaBackend *be = (GncGdaBackend*)be_start;
     gda_backend be_data;
     GncGdaDataType_t* pData;
+	int i;
 
     ENTER( "be=%p, book=%p", be, book );
 
@@ -338,9 +345,11 @@
     be->loading = TRUE;
     
     /* Some of this needs to happen in a certain order */
-    pData = qof_object_lookup_backend( GNC_ID_BOOK, GNC_GDA_BACKEND );
-    if( pData->initial_load != NULL ) {
-        (pData->initial_load)( be );
+	for( i = 0; fixed_load_order[i] != NULL; i++ ) {
+    	pData = qof_object_lookup_backend( fixed_load_order[i], GNC_GDA_BACKEND );
+    	if( pData->initial_load != NULL ) {
+        	(pData->initial_load)( be );
+		}
     }
 
     be_data.ok = FALSE;

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	2007-12-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -38,9 +38,6 @@
 #include "TransLog.h"
 #include "gnc-engine.h"
 
-#include "gnc-commodity.h"
-#include "gnc-lot.h"
-
 #include "gnc-backend-util-gda.h"
 #include "gnc-gconf-utils.h"
 
@@ -59,28 +56,6 @@
     gnc_gda_query_info* pQueryInfo;
 } gda_backend;
 
-#if 0
-typedef void (*GNC_GDA_LOAD_FN)( GncGdaBackend* be, GdaDataModel* pModel, gint row,
-                                QofSetterFunc setter, gpointer pObject,
-                                const col_cvt_t* table );
-typedef void (*GNC_GDA_CREATE_COL_FN)( GdaServerProvider* server,
-                        GdaConnection* cnn, xmlNodePtr array_data,
-                        const col_cvt_t* table_row, gboolean pkey );
-typedef void (*GNC_GDA_GET_GVALUE_QUERY_FN)( GncGdaBackend* be,
-                QofIdTypeConst obj_name, gpointer pObject,
-                const col_cvt_t* table_row, GdaQuery* query );
-typedef GdaQueryCondition* (*GNC_GDA_GET_GVALUE_COND_FN)( GncGdaBackend* be,
-                QofIdTypeConst obj_name, gpointer pObject,
-                const col_cvt_t* table_row, GdaQuery* query );
-
-typedef struct {
-    GNC_GDA_LOAD_FN             load_fn;
-    GNC_GDA_CREATE_COL_FN       create_col_fn;
-    GNC_GDA_GET_GVALUE_QUERY_FN get_gvalue_query_fn;
-    GNC_GDA_GET_GVALUE_COND_FN  get_gvalue_cond_fn;
-} col_type_handler_t;
-#endif
-
 /* ================================================================= */
 void
 gnc_gda_add_field_to_query( GdaQuery* query, const gchar* col_name, const GValue* value )
@@ -663,133 +638,8 @@
                     "char", GUID_ENCODING_LENGTH, table_row->flags | pkey ? COL_PKEY : 0 );
 }
 
-static void
-load_account_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
-            QofSetterFunc setter, gpointer pObject,
-            const col_cvt_t* table )
-{
-    const GValue* val;
-    GUID guid;
-    const GUID* pGuid;
-	Account* account = NULL;
-
-    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
-    if( gda_value_is_null( val ) ) {
-        pGuid = NULL;
-    } else {
-        string_to_guid( g_value_get_string( val ), &guid );
-        pGuid = &guid;
-    }
-	if( pGuid != NULL ) {
-		account = xaccAccountLookup( pGuid, be->primary_book );
-	}
-    if( table->gobj_param_name != NULL ) {
-		g_object_set( pObject, table->gobj_param_name, account, NULL );
-    } else {
-		(*setter)( pObject, (const gpointer)account );
-    }
-}
-
-static col_type_handler_t account_guid_handler =
-        { load_account_guid, gnc_gda_create_objectref_guid_col,
-            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
 /* ----------------------------------------------------------------- */
-
 static void
-load_commodity_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
-            QofSetterFunc setter, gpointer pObject,
-            const col_cvt_t* table )
-{
-    const GValue* val;
-    GUID guid;
-    const GUID* pGuid;
-	gnc_commodity* commodity = NULL;
-
-    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
-    if( gda_value_is_null( val ) ) {
-        pGuid = NULL;
-    } else {
-        string_to_guid( g_value_get_string( val ), &guid );
-        pGuid = &guid;
-    }
-	if( pGuid != NULL ) {
-		commodity = gnc_commodity_find_commodity_by_guid( pGuid, be->primary_book );
-	}
-    if( table->gobj_param_name != NULL ) {
-		g_object_set( pObject, table->gobj_param_name, commodity, NULL );
-    } else {
-		(*setter)( pObject, (const gpointer)commodity );
-    }
-}
-
-static col_type_handler_t commodity_guid_handler =
-        { load_commodity_guid, gnc_gda_create_objectref_guid_col,
-            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
-/* ----------------------------------------------------------------- */
-static void
-load_lot_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
-            QofSetterFunc setter, gpointer pObject,
-            const col_cvt_t* table )
-{
-    const GValue* val;
-    GUID guid;
-    const GUID* pGuid;
-	GNCLot* lot = NULL;
-
-    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
-    if( gda_value_is_null( val ) ) {
-        pGuid = NULL;
-    } else {
-        string_to_guid( g_value_get_string( val ), &guid );
-        pGuid = &guid;
-    }
-	if( pGuid != NULL ) {
-		lot = gnc_lot_lookup( pGuid, be->primary_book );
-	}
-    if( table->gobj_param_name != NULL ) {
-		g_object_set( pObject, table->gobj_param_name, lot, NULL );
-    } else {
-		(*setter)( pObject, (const gpointer)lot );
-    }
-}
-
-static col_type_handler_t lot_guid_handler =
-        { load_lot_guid, gnc_gda_create_objectref_guid_col,
-            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
-/* ----------------------------------------------------------------- */
-
-static void
-load_tx_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
-            QofSetterFunc setter, gpointer pObject,
-            const col_cvt_t* table )
-{
-    const GValue* val;
-    GUID guid;
-    const GUID* pGuid;
-	Transaction* tx = NULL;
-
-    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
-    if( gda_value_is_null( val ) ) {
-        pGuid = NULL;
-    } else {
-        string_to_guid( g_value_get_string( val ), &guid );
-        pGuid = &guid;
-    }
-	if( pGuid != NULL ) {
-		tx = xaccTransLookup( pGuid, be->primary_book );
-	}
-    if( table->gobj_param_name != NULL ) {
-		g_object_set( pObject, table->gobj_param_name, tx, NULL );
-    } else {
-		(*setter)( pObject, (const gpointer)tx );
-    }
-}
-
-static col_type_handler_t tx_guid_handler =
-        { load_tx_guid, gnc_gda_create_objectref_guid_col,
-            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
-/* ----------------------------------------------------------------- */
-static void
 load_timespec( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
@@ -1173,11 +1023,6 @@
     gnc_gda_register_col_type_handler( CT_TIMESPEC, &timespec_handler );
     gnc_gda_register_col_type_handler( CT_GDATE, &date_handler );
     gnc_gda_register_col_type_handler( CT_NUMERIC, &numeric_handler );
-
-	gnc_gda_register_col_type_handler( CT_ACCOUNTREF, &account_guid_handler );
-	gnc_gda_register_col_type_handler( CT_COMMODITYREF, &commodity_guid_handler );
-	gnc_gda_register_col_type_handler( CT_LOTREF, &lot_guid_handler );
-	gnc_gda_register_col_type_handler( CT_TXREF, &tx_guid_handler );
 }
 
 static void retrieve_guid( gpointer pObject, gpointer pValue );

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c	2007-12-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-commodity-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -202,6 +202,38 @@
     }
 }
 
+/* ----------------------------------------------------------------- */
+
+static void
+load_commodity_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+	gnc_commodity* commodity = NULL;
+
+    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+    if( gda_value_is_null( val ) ) {
+        pGuid = NULL;
+    } else {
+        string_to_guid( g_value_get_string( val ), &guid );
+        pGuid = &guid;
+    }
+	if( pGuid != NULL ) {
+		commodity = gnc_commodity_find_commodity_by_guid( pGuid, be->primary_book );
+	}
+    if( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, commodity, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)commodity );
+    }
+}
+
+static col_type_handler_t commodity_guid_handler =
+        { load_commodity_guid, gnc_gda_create_objectref_guid_col,
+            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
 /* ================================================================= */
 void
 gnc_gda_init_commodity_handler( void )
@@ -216,5 +248,7 @@
     };
 
     qof_object_register_backend( GNC_ID_COMMODITY, GNC_GDA_BACKEND, &be_data );
+
+	gnc_gda_register_col_type_handler( CT_COMMODITYREF, &commodity_guid_handler );
 }
 /* ========================== END OF FILE ===================== */

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c	2007-12-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-lots-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -159,6 +159,37 @@
                         qof_instance_get_slots( inst ) );
 }
 
+/* ----------------------------------------------------------------- */
+static void
+load_lot_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+	GNCLot* lot = NULL;
+
+    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+    if( gda_value_is_null( val ) ) {
+        pGuid = NULL;
+    } else {
+        string_to_guid( g_value_get_string( val ), &guid );
+        pGuid = &guid;
+    }
+	if( pGuid != NULL ) {
+		lot = gnc_lot_lookup( pGuid, be->primary_book );
+	}
+    if( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, lot, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)lot );
+    }
+}
+
+static col_type_handler_t lot_guid_handler =
+        { load_lot_guid, gnc_gda_create_objectref_guid_col,
+            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
 /* ================================================================= */
 void
 gnc_gda_init_lot_handler( void )
@@ -173,6 +204,8 @@
     };
 
     qof_object_register_backend( GNC_ID_LOT, GNC_GDA_BACKEND, &be_data );
+
+	gnc_gda_register_col_type_handler( CT_LOTREF, &lot_guid_handler );
 }
 
 /* ========================== END OF FILE ===================== */

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2007-12-27 15:12:12 UTC (rev 16747)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2007-12-27 19:19:21 UTC (rev 16748)
@@ -414,6 +414,19 @@
     }
 }
 
+static void
+load_tx_by_guid( GncGdaBackend* be, GUID* tx_guid )
+{
+    GdaQuery* query;
+	gchar* sql;
+    gchar guid_buf[GUID_ENCODING_LENGTH+1];
+
+    guid_to_string_buff( tx_guid, guid_buf );
+	sql = g_strdup_printf( "SELECT * FROM %s WHERE guid = %s", TRANSACTION_TABLE, guid_buf );
+	query = gnc_gda_create_query_from_sql( be, sql );
+	query_transactions( be, query );
+}
+
 /* ================================================================= */
 static void
 create_transaction_tables( GncGdaBackend* be )
@@ -710,6 +723,37 @@
 #endif
 }
 
+/* ----------------------------------------------------------------- */
+static void
+load_tx_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+	Transaction* tx = NULL;
+
+    val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+    if( gda_value_is_null( val ) ) {
+        pGuid = NULL;
+    } else {
+        string_to_guid( g_value_get_string( val ), &guid );
+        pGuid = &guid;
+    }
+	if( pGuid != NULL ) {
+		tx = xaccTransLookup( pGuid, be->primary_book );
+	}
+    if( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, tx, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)tx );
+    }
+}
+
+static col_type_handler_t tx_guid_handler =
+        { load_tx_guid, gnc_gda_create_objectref_guid_col,
+            gnc_gda_get_gvalue_objectref_guid_for_query, gnc_gda_get_gvalue_objectref_guid_cond };
 /* ================================================================= */
 void
 gnc_gda_init_transaction_handler( void )
@@ -736,6 +780,8 @@
 
     qof_object_register_backend( GNC_ID_TRANS, GNC_GDA_BACKEND, &be_data_tx );
     qof_object_register_backend( GNC_ID_SPLIT, GNC_GDA_BACKEND, &be_data_split );
+
+	gnc_gda_register_col_type_handler( CT_TXREF, &tx_guid_handler );
 }
 
 /* ========================== END OF FILE ===================== */



More information about the gnucash-changes mailing list