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, ×pec_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