r16688 - gnucash/branches/gda-dev/src/backend/gda - Merge some common code - commodity guid handling

Phil Longstaff plongstaff at cvs.gnucash.org
Wed Dec 19 21:55:13 EST 2007


Author: plongstaff
Date: 2007-12-19 21:55:12 -0500 (Wed, 19 Dec 2007)
New Revision: 16688
Trac: http://svn.gnucash.org/trac/changeset/16688

Modified:
   gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.h
   gnucash/branches/gda-dev/src/backend/gda/gnc-book-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-lots-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-recurrence-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c
   gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
Log:
Merge some common code - commodity guid handling


Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -63,8 +63,9 @@
     { "guid",           CT_GUID,   0,                           COL_NNUL, "guid" },
     { "name",           CT_STRING, ACCOUNT_MAX_NAME_LEN,        COL_NNUL, "name" },
     { "account_type",   CT_STRING, ACCOUNT_MAX_TYPE_LEN,        COL_NNUL, NULL, ACCOUNT_TYPE_ },
-    { "commodity_guid", CT_GUID,   0,                           COL_NNUL, NULL, NULL, get_commodity, set_commodity },
-    { "parent_guid",    CT_GUID,   0,                           0,        NULL, NULL, get_parent,    set_parent },
+//    { "commodity_guid", CT_GUID_C, 0,                           COL_NNUL, NULL, NULL, get_commodity, set_commodity },
+    { "commodity_guid", CT_GUID_C, 0,                           COL_NNUL, "commodity" },
+    { "parent_guid",    CT_GUID_A, 0,                           0,        NULL, NULL, get_parent,    set_parent },
     { "code",           CT_STRING, ACCOUNT_MAX_CODE_LEN,        0,        "code" },
     { "description",    CT_STRING, ACCOUNT_MAX_DESCRIPTION_LEN, 0,        "description" },
     { NULL }
@@ -167,14 +168,14 @@
     GUID acc_guid;
 	Account* pAccount;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     acc_guid = *guid;
 
     pAccount = xaccAccountLookup( &acc_guid, be->primary_book );
     if( pAccount == NULL ) {
         pAccount = xaccMallocAccount( be->primary_book );
     }
-    gnc_gda_load_object( pModel, row, GNC_ID_ACCOUNT, pAccount, col_table );
+    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) ) );
     load_balances( be, pAccount );
@@ -186,7 +187,7 @@
 	if( gnc_account_get_parent( pAccount ) == NULL ) {
 		account_parent_guid_struct* s = g_slice_new( account_parent_guid_struct );
 		s->pAccount = pAccount;
-		gnc_gda_load_object( pModel, row, GNC_ID_ACCOUNT, s, parent_col_table );
+		gnc_gda_load_object( be, pModel, row, GNC_ID_ACCOUNT, s, parent_col_table );
 		*l_accounts_needing_parents = g_list_prepend( *l_accounts_needing_parents, s );
 	}
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -38,6 +38,8 @@
 #include "TransLog.h"
 #include "gnc-engine.h"
 
+#include "gnc-commodity.h"
+
 #include "gnc-backend-util-gda.h"
 #include "gnc-gconf-utils.h"
 
@@ -60,7 +62,7 @@
     gnc_gda_query_info* pQueryInfo;
 } gda_backend;
 
-typedef void (*GNC_GDA_LOAD_FN)( GdaDataModel* pModel, gint row,
+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,
@@ -145,7 +147,7 @@
 }
 
 static void
-load_string( GdaDataModel* pModel, gint row,
+load_string( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -224,7 +226,7 @@
 /* ----------------------------------------------------------------- */
 
 static void
-load_int( GdaDataModel* pModel, gint row,
+load_int( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -297,7 +299,7 @@
 /* ----------------------------------------------------------------- */
 
 static void
-load_boolean( GdaDataModel* pModel, gint row,
+load_boolean( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -370,7 +372,7 @@
 /* ----------------------------------------------------------------- */
 
 static void
-load_int64( GdaDataModel* pModel, gint row,
+load_int64( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -442,7 +444,7 @@
 /* ----------------------------------------------------------------- */
 
 static void
-load_double( GdaDataModel* pModel, gint row,
+load_double( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -515,7 +517,7 @@
 /* ----------------------------------------------------------------- */
 
 static void
-load_guid( GdaDataModel* pModel, gint row,
+load_guid( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -592,12 +594,257 @@
         { load_guid, create_guid_col,
             get_gvalue_guid_for_query, get_gvalue_guid_cond };
 /* ----------------------------------------------------------------- */
+
 static void
-load_timespec( GdaDataModel* pModel, gint row,
+load_account_guid( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
     const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+
+    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( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, pGuid, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)pGuid );
+    }
+}
+
+static void
+get_gvalue_account_guid( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
+                const col_cvt_t* table_row, GValue* value )
+{
+    QofAccessFunc getter;
+    const GUID* guid;
+    gchar guid_buf[GUID_ENCODING_LENGTH+1];
+
+    memset( value, 0, sizeof( GValue ) );
+
+	if( table_row->gobj_param_name != NULL ) {
+		g_object_get( pObject, table_row->gobj_param_name, &guid, NULL );
+	} else {
+    	getter = get_getter( obj_name, table_row );
+    	guid = (*getter)( pObject, NULL );
+	}
+    if( guid != NULL ) {
+        (void)guid_to_string_buff( guid, guid_buf );
+        g_value_init( value, G_TYPE_STRING );
+        g_value_set_string( value, guid_buf );
+    }
+}
+
+static void
+get_gvalue_account_guid_for_query( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_guid( be, obj_name, pObject, table_row, &value );
+    add_field_to_query( query, table_row->col_name, &value );
+}
+
+static GdaQueryCondition*
+get_gvalue_account_guid_cond( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_account_guid( be, obj_name, pObject, table_row, &value );
+    return gnc_gda_create_condition_from_field( query, table_row->col_name, &value );
+}
+
+static void
+create_account_guid_col( GdaServerProvider* server, GdaConnection* cnn,
+            xmlNodePtr array_data, const col_cvt_t* table_row, gboolean pkey )
+{
+    add_table_column( server, cnn, array_data, table_row->col_name,
+                    "char", GUID_ENCODING_LENGTH, table_row->flags | pkey ? COL_PKEY : 0 );
+}
+
+static col_type_handler_t account_guid_handler =
+        { load_account_guid, create_account_guid_col,
+            get_gvalue_account_guid_for_query, get_gvalue_account_guid_cond };
+/* ----------------------------------------------------------------- */
+
+static void
+load_commodity_guid( 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 void
+get_gvalue_commodity_guid( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
+                const col_cvt_t* table_row, GValue* value )
+{
+    QofAccessFunc getter;
+    const GUID* guid = NULL;
+    gchar guid_buf[GUID_ENCODING_LENGTH+1];
+	gnc_commodity* commodity;
+
+    memset( value, 0, sizeof( GValue ) );
+
+	if( table_row->gobj_param_name != NULL ) {
+		g_object_get( pObject, table_row->gobj_param_name, &commodity, NULL );
+	} else {
+    	getter = get_getter( obj_name, table_row );
+    	commodity = (*getter)( pObject, NULL );
+	}
+	if( commodity != NULL ) {
+		guid = qof_instance_get_guid( QOF_INSTANCE(commodity) );
+	}
+    if( guid != NULL ) {
+        (void)guid_to_string_buff( guid, guid_buf );
+        g_value_init( value, G_TYPE_STRING );
+        g_value_set_string( value, guid_buf );
+    }
+}
+
+static void
+get_gvalue_commodity_guid_for_query( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_commodity_guid( be, obj_name, pObject, table_row, &value );
+    add_field_to_query( query, table_row->col_name, &value );
+}
+
+static GdaQueryCondition*
+get_gvalue_commodity_guid_cond( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_commodity_guid( be, obj_name, pObject, table_row, &value );
+    return gnc_gda_create_condition_from_field( query, table_row->col_name, &value );
+}
+
+static void
+create_commodity_guid_col( GdaServerProvider* server, GdaConnection* cnn,
+            xmlNodePtr array_data, const col_cvt_t* table_row, gboolean pkey )
+{
+    add_table_column( server, cnn, array_data, table_row->col_name,
+                    "char", GUID_ENCODING_LENGTH, table_row->flags | pkey ? COL_PKEY : 0 );
+}
+
+static col_type_handler_t commodity_guid_handler =
+        { load_commodity_guid, create_commodity_guid_col,
+            get_gvalue_commodity_guid_for_query, get_gvalue_commodity_guid_cond };
+/* ----------------------------------------------------------------- */
+
+static void
+load_tx_guid( GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
+    GUID guid;
+    const GUID* pGuid;
+
+    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( table->gobj_param_name != NULL ) {
+		g_object_set( pObject, table->gobj_param_name, pGuid, NULL );
+    } else {
+		(*setter)( pObject, (const gpointer)pGuid );
+    }
+}
+
+static void
+get_gvalue_tx_guid( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
+                const col_cvt_t* table_row, GValue* value )
+{
+    QofAccessFunc getter;
+    const GUID* guid;
+    gchar guid_buf[GUID_ENCODING_LENGTH+1];
+
+    memset( value, 0, sizeof( GValue ) );
+
+	if( table_row->gobj_param_name != NULL ) {
+		g_object_get( pObject, table_row->gobj_param_name, &guid, NULL );
+	} else {
+    	getter = get_getter( obj_name, table_row );
+    	guid = (*getter)( pObject, NULL );
+	}
+    if( guid != NULL ) {
+        (void)guid_to_string_buff( guid, guid_buf );
+        g_value_init( value, G_TYPE_STRING );
+        g_value_set_string( value, guid_buf );
+    }
+}
+
+static void
+get_gvalue_tx_guid_for_query( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_tx_guid( be, obj_name, pObject, table_row, &value );
+    add_field_to_query( query, table_row->col_name, &value );
+}
+
+static GdaQueryCondition*
+get_gvalue_tx_guid_cond( GncGdaBackend* be, QofIdTypeConst obj_name,
+                gpointer pObject, const col_cvt_t* table_row, GdaQuery* query )
+{
+    GValue value;
+
+    get_gvalue_tx_guid( be, obj_name, pObject, table_row, &value );
+    return gnc_gda_create_condition_from_field( query, table_row->col_name, &value );
+}
+
+static void
+create_tx_guid_col( GdaServerProvider* server, GdaConnection* cnn,
+            xmlNodePtr array_data, const col_cvt_t* table_row, gboolean pkey )
+{
+    add_table_column( server, cnn, array_data, table_row->col_name,
+                    "char", GUID_ENCODING_LENGTH, table_row->flags | pkey ? COL_PKEY : 0 );
+}
+
+static col_type_handler_t tx_guid_handler =
+        { load_tx_guid, create_tx_guid_col,
+            get_gvalue_tx_guid_for_query, get_gvalue_tx_guid_cond };
+/* ----------------------------------------------------------------- */
+static void
+load_timespec( GncGdaBackend* be, GdaDataModel* pModel, gint row,
+            QofSetterFunc setter, gpointer pObject,
+            const col_cvt_t* table )
+{
+    const GValue* val;
     GDate* date;
     Timespec ts;
 
@@ -692,7 +939,7 @@
             get_gvalue_timespec_for_query, get_gvalue_timespec_cond };
 /* ----------------------------------------------------------------- */
 static void
-load_date( GdaDataModel* pModel, gint row,
+load_date( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -791,7 +1038,7 @@
 }
 
 static void
-load_numeric( GdaDataModel* pModel, gint row,
+load_numeric( GncGdaBackend* be, GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
             const col_cvt_t* table )
 {
@@ -969,6 +1216,18 @@
             pHandler = &guid_handler;
             break;
                 
+		case CT_GUID_A:
+            pHandler = &account_guid_handler;
+            break;
+                
+		case CT_GUID_C:
+            pHandler = &commodity_guid_handler;
+            break;
+                
+		case CT_GUID_T:
+            pHandler = &tx_guid_handler;
+            break;
+                
         case CT_TIMESPEC:
             pHandler = &timespec_handler;
             break;
@@ -1008,11 +1267,11 @@
 };
 
 const GUID*
-gnc_gda_load_guid( GdaDataModel* pModel, gint row )
+gnc_gda_load_guid( GncGdaBackend* be, GdaDataModel* pModel, gint row )
 {
 	static GUID guid;
 
-    gnc_gda_load_object( pModel, row, NULL, &guid, guid_table );
+    gnc_gda_load_object( be, pModel, row, NULL, &guid, guid_table );
 
     return &guid;
 }
@@ -1025,17 +1284,17 @@
 };
 
 const GUID*
-gnc_gda_load_tx_guid( GdaDataModel* pModel, gint row )
+gnc_gda_load_tx_guid( GncGdaBackend* be, GdaDataModel* pModel, gint row )
 {
     static GUID guid;
 
-    gnc_gda_load_object( pModel, row, NULL, &guid, tx_guid_table );
+    gnc_gda_load_object( be, pModel, row, NULL, &guid, tx_guid_table );
 
     return &guid;
 }
 
 void
-gnc_gda_load_object( GdaDataModel* pModel, gint row,
+gnc_gda_load_object( GncGdaBackend* be, GdaDataModel* pModel, gint row,
                     QofIdTypeConst obj_name, gpointer pObject,
                     const col_cvt_t* table )
 {
@@ -1051,7 +1310,7 @@
             setter = table[col].setter;
         }
         pHandler = get_handler( table[col].col_type );
-        pHandler->load_fn( pModel, row, setter, pObject, &table[col] );
+        pHandler->load_fn( be, pModel, row, setter, pObject, &table[col] );
     }
 }
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.h
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.h	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.h	2007-12-20 02:55:12 UTC (rev 16688)
@@ -77,6 +77,9 @@
 typedef enum {
 	CT_STRING,
 	CT_GUID,
+	CT_GUID_A,
+	CT_GUID_C,
+	CT_GUID_T,
 	CT_INT,
 	CT_INT64,
 	CT_TIMESPEC,
@@ -133,7 +136,7 @@
 GdaQuery* gnc_gda_create_query_from_sql( GncGdaBackend* pBackend, const gchar* sql );
 int gnc_gda_execute_select_get_count( GncGdaBackend* pBackend, const gchar* sql );
 int gnc_gda_execute_query_get_count( GncGdaBackend* pBackend, GdaQuery* query );
-void gnc_gda_load_object( GdaDataModel* pModel, int row,
+void gnc_gda_load_object( GncGdaBackend* be, GdaDataModel* pModel, int row,
 						QofIdTypeConst obj_name, gpointer pObject,
 						const col_cvt_t* table );
 gboolean gnc_gda_object_is_it_in_db( GncGdaBackend* be,
@@ -145,8 +148,8 @@
 						GError** error );
 void gnc_gda_create_table_if_needed( GncGdaBackend* be,
 						const gchar* table_name, col_cvt_t* col_table );
-const GUID* gnc_gda_load_guid( GdaDataModel* pModel, int row );
-const GUID* gnc_gda_load_tx_guid( GdaDataModel* pModel, int row );
+const GUID* gnc_gda_load_guid( GncGdaBackend* be, GdaDataModel* pModel, int row );
+const GUID* gnc_gda_load_tx_guid( GncGdaBackend* be, GdaDataModel* pModel, int row );
 GdaQuery* gnc_gda_create_select_query( const GncGdaBackend* be, const gchar* table_name );
 GdaQueryCondition* gnc_gda_create_condition_from_field( GdaQuery* query,
 														const gchar* col_name,

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-book-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-book-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-book-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -57,8 +57,8 @@
 static col_cvt_t col_table[] =
 {
     { "guid",               CT_GUID, 0, COL_NNUL, "guid" },
-    { "root_account_guid",  CT_GUID, 0, COL_NNUL, NULL, NULL, get_root_account_guid,  set_root_account_guid },
-    { "root_template_guid", CT_GUID, 0, COL_NNUL, NULL, NULL, get_root_template_guid, set_root_template_guid },
+    { "root_account_guid",  CT_GUID_A, 0, COL_NNUL, NULL, NULL, get_root_account_guid,  set_root_account_guid },
+    { "root_template_guid", CT_GUID_A, 0, COL_NNUL, NULL, NULL, get_root_template_guid, set_root_template_guid },
     { NULL }
 };
 
@@ -116,7 +116,7 @@
     GUID book_guid;
 	GNCBook* pBook;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     book_guid = *guid;
 
 	pBook = be->primary_book;
@@ -124,7 +124,7 @@
 	    pBook = gnc_book_new();
 	}
 
-    gnc_gda_load_object( pModel, row, GNC_ID_BOOK, pBook, col_table );
+    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) ) );
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -68,7 +68,7 @@
 	GncBudget* pBudget;
 	Recurrence* r;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     budget_guid = *guid;
 
     pBudget = gnc_budget_lookup( &budget_guid, be->primary_book );
@@ -76,7 +76,7 @@
         pBudget = gnc_budget_new( be->primary_book );
     }
 
-    gnc_gda_load_object( pModel, row, GNC_ID_BUDGET, pBudget, col_table );
+    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 ),

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -116,7 +116,7 @@
 
     pCommodity = gnc_commodity_new( pBook, NULL, NULL, NULL, NULL, 100 );
 
-    gnc_gda_load_object( pModel, row, GNC_ID_COMMODITY, pCommodity, col_table );
+    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) ) );
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-lots-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-lots-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-lots-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -51,7 +51,7 @@
 static col_cvt_t col_table[] =
 {
     { "guid",         CT_GUID,   0, COL_NNUL, "guid" },
-    { "account_guid", CT_GUID,   0, COL_NNUL, NULL, NULL, get_lot_account,   set_lot_account },
+    { "account_guid", CT_GUID_A, 0, COL_NNUL, NULL, NULL, get_lot_account,   set_lot_account },
     { "is_closed",    CT_STRING, 1, COL_NNUL, NULL, NULL, get_lot_is_closed, set_lot_is_closed },
     { NULL }
 };
@@ -103,7 +103,7 @@
 
     lot = gnc_lot_new( be->primary_book );
 
-    gnc_gda_load_object( pModel, row, GNC_ID_LOT, lot, col_table );
+    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) ) );
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -47,10 +47,6 @@
 static void set_value( gpointer pObject, gpointer pValue );
 static gpointer get_date( gpointer pObject, const QofParam* param );
 static void set_date( gpointer pObject, gpointer pValue );
-static gpointer get_currency_guid( gpointer pObject, const QofParam* param );
-static void set_currency_guid( gpointer pObject, gpointer pValue );
-static gpointer get_commodity_guid( gpointer pObject, const QofParam* param );
-static void set_commodity_guid( gpointer pObject, gpointer pValue );
 
 #define PRICE_MAX_SOURCE_LEN 50
 #define PRICE_MAX_TYPE_LEN 50
@@ -58,8 +54,12 @@
 static col_cvt_t col_table[] =
 {
     { "guid",           CT_GUID,     0,                    COL_NNUL, "guid" },
-    { "commodity_guid", CT_GUID,     0,                    COL_NNUL, NULL, NULL,       get_commodity_guid, set_commodity_guid },
-    { "currency_guid",  CT_GUID,     0,                    COL_NNUL, NULL, NULL,       get_currency_guid,  set_currency_guid },
+    { "commodity_guid", CT_GUID_C,   0,                    COL_NNUL, NULL, NULL,
+			(QofAccessFunc)gnc_price_get_commodity,
+			(QofSetterFunc)gnc_price_set_commodity },
+    { "currency_guid",  CT_GUID_C,   0,                    COL_NNUL, NULL, NULL,
+			(QofAccessFunc)gnc_price_get_currency,
+			(QofSetterFunc)gnc_price_set_currency },
     { "date",           CT_TIMESPEC, 0,                    COL_NNUL, NULL, NULL,       get_date,           set_date },
     { "source",         CT_STRING,   PRICE_MAX_SOURCE_LEN, 0,        NULL, PRICE_SOURCE },
     { "type",           CT_STRING,   PRICE_MAX_TYPE_LEN,   0,        NULL, PRICE_TYPE },
@@ -106,48 +106,6 @@
     gnc_price_set_time( pPrice, *pTimespec );
 }
 
-static gpointer
-get_currency_guid( gpointer pObject, const QofParam* param )
-{
-    const GNCPrice* pPrice = GNC_PRICE(pObject);
-
-    return (gpointer)qof_instance_get_guid(
-                            QOF_INSTANCE(gnc_price_get_currency( pPrice )) );
-}
-
-static void 
-set_currency_guid( gpointer pObject, gpointer pValue )
-{
-    GNCPrice* pPrice = GNC_PRICE(pObject);
-    QofBook* pBook = qof_instance_get_book( QOF_INSTANCE(pPrice) );
-    gnc_commodity* pCurrency;
-    GUID* guid = (GUID*)pValue;
-
-    pCurrency = gnc_commodity_find_commodity_by_guid( guid, pBook );
-    gnc_price_set_currency( pPrice, pCurrency );
-}
-
-static gpointer
-get_commodity_guid( gpointer pObject, const QofParam* param )
-{
-    const GNCPrice* pPrice = GNC_PRICE(pObject);
-
-    return (gpointer)qof_instance_get_guid(
-                        QOF_INSTANCE(gnc_price_get_commodity( pPrice )) );
-}
-
-static void 
-set_commodity_guid( gpointer pObject, gpointer pValue )
-{
-    GNCPrice* pPrice = GNC_PRICE(pObject);
-    QofBook* pBook = qof_instance_get_book( QOF_INSTANCE(pPrice) );
-    gnc_commodity* pCommodity;
-    GUID* guid = (GUID*)pValue;
-
-    pCommodity = gnc_commodity_find_commodity_by_guid( guid, pBook );
-    gnc_price_set_commodity( pPrice, pCommodity );
-}
-
 static GNCPrice*
 load_single_price( GncGdaBackend* be, GdaDataModel* pModel, int row )
 {
@@ -155,7 +113,7 @@
 
     pPrice = gnc_price_create( be->primary_book );
 
-    gnc_gda_load_object( pModel, row, GNC_ID_PRICE, pPrice, col_table );
+    gnc_gda_load_object( be, pModel, row, GNC_ID_PRICE, pPrice, col_table );
 
     qof_instance_mark_clean( QOF_INSTANCE(pPrice) );
 

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-recurrence-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-recurrence-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-recurrence-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -222,7 +222,7 @@
     recurrence_info.be = be;
 	recurrence_info.pRecurrence = r;
 
-    gnc_gda_load_object( pModel, row, TABLE_NAME, &recurrence_info, col_table );
+    gnc_gda_load_object( be, pModel, row, TABLE_NAME, &recurrence_info, col_table );
 }
 
 static GdaObject*

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -73,7 +73,7 @@
     { "adv_notify",        CT_INT,     0,               COL_NNUL, NULL, NULL,
             (QofAccessFunc)xaccSchedXactionGetAdvanceReminder,
             (QofSetterFunc)xaccSchedXactionSetAdvanceReminder },
-    { "template_act_guid", CT_GUID,    0,               COL_NNUL, NULL, NULL,        get_template_act_guid, set_template_act_guid },
+    { "template_act_guid", CT_GUID_A,  0,               COL_NNUL, NULL, NULL,        get_template_act_guid, set_template_act_guid },
     { NULL }
 };
 
@@ -154,12 +154,12 @@
 	SchedXaction* pSx;
 	GList* schedule = NULL;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     sx_guid = *guid;
 
     pSx = xaccSchedXactionMalloc( be->primary_book );
 
-    gnc_gda_load_object( pModel, row, /*GNC_ID_SCHEDXACTION*/GNC_SX_ID, pSx, col_table );
+    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) ),

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-slots-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -357,7 +357,7 @@
     slot_info.pKvpFrame = pFrame;
     slot_info.path = NULL;
 
-    gnc_gda_load_object( pModel, row, TABLE_NAME, &slot_info, col_table );
+    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 );

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-12-20 00:59:17 UTC (rev 16687)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-12-20 02:55:12 UTC (rev 16688)
@@ -58,8 +58,6 @@
 
 static gpointer get_guid( gpointer pObject, const QofParam* param );
 static void set_guid( gpointer pObject, gpointer pValue );
-static gpointer get_tx_currency_guid( gpointer pObject, const QofParam* param );
-static void set_tx_currency_guid( gpointer pObject, gpointer pValue );
 static gpointer get_tx_num( gpointer pObject, const QofParam* param );
 static void set_tx_num( gpointer pObject, gpointer pValue );
 static gpointer get_tx_post_date( gpointer pObject, const QofParam* param );
@@ -73,7 +71,9 @@
 static col_cvt_t tx_col_table[] =
 {
     { "guid",          CT_GUID,     0,                      COL_NNUL, "guid" },
-    { "currency_guid", CT_GUID,     0,                      COL_NNUL, NULL, NULL, get_tx_currency_guid, set_tx_currency_guid },
+    { "currency_guid", CT_GUID_C,   0,                      COL_NNUL, NULL, NULL,
+			(QofAccessFunc)xaccTransGetCurrency,
+			(QofSetterFunc)xaccTransSetCurrency },
     { "num",           CT_STRING,   TX_MAX_NUM_LEN,         COL_NNUL, NULL, NULL, get_tx_num,           set_tx_num },
     { "post_date",     CT_TIMESPEC, 0,                      COL_NNUL, NULL, NULL, get_tx_post_date,     set_tx_post_date },
     { "enter_date",    CT_TIMESPEC, 0,                      COL_NNUL, NULL, NULL, get_tx_enter_date,    set_tx_enter_date },
@@ -102,8 +102,8 @@
 static col_cvt_t split_col_table[] =
 {
     { "guid",            CT_GUID,     0,                    COL_NNUL, "guid" },
-    { "tx_guid",         CT_GUID,     0,                    COL_NNUL, NULL, NULL,    get_split_tx_guid,         set_split_tx_guid },
-    { "account_guid",    CT_GUID,     0,                    COL_NNUL, NULL, NULL,    get_split_account_guid,    set_split_account_guid },
+    { "tx_guid",         CT_GUID_T,   0,                    COL_NNUL, NULL, NULL,    get_split_tx_guid,         set_split_tx_guid },
+    { "account_guid",    CT_GUID_A,   0,                    COL_NNUL, NULL, NULL,    get_split_account_guid,    set_split_account_guid },
     { "memo",            CT_STRING,   SPLIT_MAX_MEMO_LEN,   COL_NNUL, NULL, SPLIT_MEMO },
     { "action",          CT_STRING,   SPLIT_MAX_ACTION_LEN, COL_NNUL, NULL, SPLIT_ACTION },
     { "reconcile_state", CT_STRING,   1,                    COL_NNUL, NULL, NULL,    get_split_reconcile_state, set_split_reconcile_state },
@@ -136,27 +136,6 @@
 }
 
 static gpointer
-get_tx_currency_guid( gpointer pObject, const QofParam* param )
-{
-    const Transaction* pTx = GNC_TRANS(pObject);
-
-    return (gpointer)qof_instance_get_guid(
-                        QOF_INSTANCE(xaccTransGetCurrency( pTx )) );
-}
-
-static void 
-set_tx_currency_guid( gpointer pObject, gpointer pValue )
-{
-    Transaction* pTx = GNC_TRANS(pObject);
-    QofBook* pBook = qof_instance_get_book( QOF_INSTANCE(pTx) );
-    gnc_commodity* pCurrency;
-    GUID* guid = (GUID*)pValue;
-
-    pCurrency = gnc_commodity_find_commodity_by_guid( guid, pBook );
-    xaccTransSetCurrency( pTx, pCurrency );
-}
-
-static gpointer
 get_tx_num( gpointer pObject, const QofParam* param )
 {
     const Transaction* pTx = GNC_TRANS(pObject);
@@ -350,11 +329,11 @@
 };
 
 static gnc_numeric
-get_gnc_numeric_from_row( GdaDataModel* model, int row )
+get_gnc_numeric_from_row( GncGdaBackend* be, GdaDataModel* model, int row )
 {
 	gnc_numeric val;
 
-    gnc_gda_load_object( model, row, NULL, &val, quantity_table );
+    gnc_gda_load_object( be, model, row, NULL, &val, quantity_table );
 
     return val;
 }
@@ -381,7 +360,7 @@
         int r;
 
         for( r = 0; r < numRows; r++ ) {
-		    gnc_numeric val = get_gnc_numeric_from_row( pModel, r );
+		    gnc_numeric val = get_gnc_numeric_from_row( be, pModel, r );
 			bal = gnc_numeric_add( bal, val, GNC_DENOM_AUTO, GNC_HOW_DENOM_LCD );
 		}
 	}
@@ -461,7 +440,7 @@
     GUID split_guid;
 	Split* pSplit;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     split_guid = *guid;
 
     pSplit = xaccSplitLookup( &split_guid, be->primary_book );
@@ -474,7 +453,7 @@
         return pSplit;
     }
 
-    gnc_gda_load_object( pModel, row, GNC_ID_SPLIT, pSplit, split_col_table );
+    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) ) );
@@ -524,7 +503,7 @@
     GUID tx_guid;
 	Transaction* pTx;
 
-    guid = gnc_gda_load_guid( pModel, row );
+    guid = gnc_gda_load_guid( be, pModel, row );
     tx_guid = *guid;
 
     pTx = xaccTransLookup( &tx_guid, be->primary_book );
@@ -532,7 +511,7 @@
         pTx = xaccMallocTransaction( be->primary_book );
     }
     xaccTransBeginEdit( pTx );
-    gnc_gda_load_object( pModel, row, GNC_ID_TRANS, pTx, tx_col_table );
+    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) ) );
@@ -737,7 +716,7 @@
         for( r = 0; r < numRows; r++ ) {
 			const GUID* guid;
 
-			guid = gnc_gda_load_tx_guid( pModel, r );
+			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 );



More information about the gnucash-changes mailing list