r16778 - gnucash/branches/gda-dev2/src - 1) Add write backend function so that business objects will be saved
Phil Longstaff
plongstaff at cvs.gnucash.org
Tue Jan 1 13:56:14 EST 2008
Author: plongstaff
Date: 2008-01-01 13:56:13 -0500 (Tue, 01 Jan 2008)
New Revision: 16778
Trac: http://svn.gnucash.org/trac/changeset/16778
Modified:
gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h
gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-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-owner-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 write backend function so that business objects will be saved
during a 'save as'
2) Add function parameter checks
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-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -504,6 +504,20 @@
}
static void
+write_cb( const gchar* type, gpointer data_p, gpointer be_data_p )
+{
+ GncGdaDataType_t* pData = data_p;
+ gda_backend* be_data = be_data_p;
+
+ g_return_if_fail( type != NULL && pData != NULL && be_data != NULL );
+ g_return_if_fail( pData->version == GNC_GDA_BACKEND_VERSION );
+
+ if( pData->write != NULL ) {
+ (pData->write)( be_data->be );
+ }
+}
+
+static void
gnc_gda_sync_all( QofBackend* be, QofBook *book )
{
GncGdaBackend *fbe = (GncGdaBackend *) be;
@@ -566,6 +580,7 @@
save_template_transactions( fbe, book );
save_schedXactions( fbe, book );
save_budgets( fbe, book );
+ qof_object_foreach_backend( GNC_GDA_BACKEND, write_cb, &be_data );
LEAVE ("book=%p", book);
}
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.h 2008-01-01 18:56:13 UTC (rev 16778)
@@ -55,6 +55,7 @@
*
* commit() - commit an object to the db
* initial_load() - load stuff when new db opened
+ * create_tables() - create any db tables
*/
#define GNC_GDA_BACKEND "gnc:gda:1"
#define GNC_GDA_BACKEND_VERSION 1
@@ -69,6 +70,7 @@
gpointer (*compile_query)( GncGdaBackend* pBackend, QofQuery* pQuery );
void (*run_query)( GncGdaBackend* pBackend, gpointer pQuery );
void (*free_query)( GncGdaBackend* pBackend, gpointer pQuery );
+ void (*write)( GncGdaBackend* pBackend );
} GncGdaDataType_t;
// Type for conversion of db row to object.
Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-address-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -68,7 +68,7 @@
static void
load_address( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
gchar* buf;
@@ -77,9 +77,15 @@
const col_cvt_t* subtable;
const gchar* s;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
addr = gncAddressCreate( be->primary_book, NULL );
for( subtable = col_table; subtable->col_name != NULL; subtable++ ) {
- buf = g_strdup_printf( "%s_%s", table->col_name, subtable->col_name );
+ buf = g_strdup_printf( "%s_%s", table_row->col_name, subtable->col_name );
val = gda_data_model_get_value_at_col_name( pModel, buf, row );
g_free( buf );
if( gda_value_is_null( val ) ) {
@@ -108,6 +114,12 @@
AddressGetterFunc getter;
GncAddress* addr;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( obj_name != NULL );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+ g_return_if_fail( value != NULL );
+
memset( value, 0, sizeof( GValue ) );
getter = (AddressGetterFunc)gnc_gda_get_getter( obj_name, table_row );
@@ -128,6 +140,12 @@
const col_cvt_t* subtable_row;
gchar* buf;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( obj_name != NULL );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+ g_return_if_fail( query != NULL );
+
memset( &value, 0, sizeof( GValue ) );
get_gvalue_address( be, obj_name, pObject, table_row, &value );
@@ -167,6 +185,12 @@
gchar* s;
QofAccessFunc getter;
+ g_return_val_if_fail( be != NULL, NULL );
+ g_return_val_if_fail( obj_name != NULL, NULL );
+ g_return_val_if_fail( pObject != NULL, NULL );
+ g_return_val_if_fail( table_row != NULL, NULL );
+ g_return_val_if_fail( query != NULL, NULL );
+
memset( &value, 0, sizeof( GValue ) );
get_gvalue_address( be, obj_name, pObject, table_row, &value );
@@ -204,6 +228,11 @@
gchar* buf;
const col_cvt_t* subtable_row;
+ g_return_if_fail( server != NULL );
+ g_return_if_fail( cnn != NULL );
+ g_return_if_fail( array_data != NULL );
+ g_return_if_fail( table_row != NULL );
+
dbms_type = gda_server_provider_get_default_dbms_type( server, cnn,
G_TYPE_STRING );
for( subtable_row = col_table; subtable_row->col_name != NULL; subtable_row++ ) {
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-bill-term-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -75,18 +75,24 @@
GncBillTerm* term = GNC_BILLTERM(data);
gboolean b = GPOINTER_TO_INT(value);
+ g_return_if_fail( term != NULL );
+
if( b ) {
gncBillTermMakeInvisible( term );
}
}
-static GncBillTerm*
+static void
load_single_billterm( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncBillTerm* pBillTerm;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -99,8 +105,6 @@
qof_instance_get_slots( QOF_INSTANCE(pBillTerm) ) );
qof_instance_mark_clean( QOF_INSTANCE(pBillTerm) );
-
- return pBillTerm;
}
static void
@@ -108,8 +112,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -122,15 +130,38 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_billterm( be, pModel, r );
+ load_single_billterm( be, pModel, r );
}
}
}
/* ================================================================= */
static void
+write_single_billterm( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_BILLTERM(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ gnc_gda_save_billterm( be, term_p );
+}
+
+static void
+write_billterms( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_BILLTERM, be->primary_book, write_single_billterm, (gpointer)be );
+}
+
+/* ================================================================= */
+static void
create_billterm_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -138,13 +169,16 @@
void
gnc_gda_save_billterm( GncGdaBackend* be, QofInstance* inst )
{
- GncBillTerm* v = GNC_BILLTERM(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( !GNC_IS_BILLTERM(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_BILLTERM, v,
+ GNC_ID_BILLTERM, inst,
col_table );
// Now, commit or delete any slots
@@ -160,14 +194,20 @@
static void
load_billterm_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
GUID guid;
const GUID* pGuid;
GncBillTerm* term = NULL;
- val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
+ val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
if( gda_value_is_null( val ) ) {
pGuid = NULL;
} else {
@@ -177,8 +217,8 @@
if( pGuid != NULL ) {
term = gncBillTermLookup( be->primary_book, pGuid );
}
- if( table->gobj_param_name != NULL ) {
- g_object_set( pObject, table->gobj_param_name, term, NULL );
+ if( table_row->gobj_param_name != NULL ) {
+ g_object_set( pObject, table_row->gobj_param_name, term, NULL );
} else {
(*setter)( pObject, (const gpointer)term );
}
@@ -197,7 +237,9 @@
GNC_ID_BILLTERM,
gnc_gda_save_billterm, /* commit */
load_all_billterms, /* initial_load */
- create_billterm_tables /* create_tables */
+ create_billterm_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_billterms /* write */
};
qof_object_register_backend( GNC_ID_BILLTERM, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-customer-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -71,13 +71,17 @@
{ NULL }
};
-static GncCustomer*
+static void
load_single_customer( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID customer_guid;
GncCustomer* pCustomer;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
customer_guid = *guid;
@@ -90,8 +94,6 @@
qof_instance_get_slots( QOF_INSTANCE(pCustomer) ) );
qof_instance_mark_clean( QOF_INSTANCE(pCustomer) );
-
- return pCustomer;
}
static void
@@ -99,8 +101,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -113,7 +119,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_customer( be, pModel, r );
+ load_single_customer( be, pModel, r );
}
}
}
@@ -122,6 +128,8 @@
static void
create_customer_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -129,13 +137,16 @@
static void
save_customer( GncGdaBackend* be, QofInstance* inst )
{
- GncCustomer* customer = GNC_CUSTOMER(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_CUSTOMER(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_CUSTOMER, customer,
+ GNC_ID_CUSTOMER, inst,
col_table );
// Now, commit or delete any slots
@@ -148,6 +159,45 @@
}
/* ================================================================= */
+static gboolean
+customer_should_be_saved( GncCustomer *customer )
+{
+ const char *id;
+
+ g_return_val_if_fail( customer != NULL, FALSE );
+
+ /* Make sure this is a valid customer before we save it -- should have an ID */
+ id = gncCustomerGetID( customer );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+write_single_customer( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_CUSTOMER(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( customer_should_be_saved( GNC_CUSTOMER(term_p) ) ) {
+ save_customer( be, term_p );
+ }
+}
+
+static void
+write_customers( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_CUSTOMER, be->primary_book, write_single_customer, (gpointer)be );
+}
+
+/* ================================================================= */
void
gnc_customer_gda_initialize( void )
{
@@ -157,7 +207,9 @@
GNC_ID_CUSTOMER,
save_customer, /* commit */
load_all_customers, /* initial_load */
- create_customer_tables /* create_tables */
+ create_customer_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_customers /* write */
};
qof_object_register_backend( GNC_ID_CUSTOMER, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-employee-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -70,13 +70,17 @@
{ NULL }
};
-static GncEmployee*
+static void
load_single_employee( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID emp_guid;
GncEmployee* pEmployee;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
emp_guid = *guid;
@@ -89,8 +93,6 @@
qof_instance_get_slots( QOF_INSTANCE(pEmployee) ) );
qof_instance_mark_clean( QOF_INSTANCE(pEmployee) );
-
- return pEmployee;
}
static void
@@ -98,9 +100,14 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
- gnc_commodity_table* pTable = gnc_commodity_table_get_table( pBook );
+ QofBook* pBook;
+ gnc_commodity_table* pTable;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+ pTable = gnc_commodity_table_get_table( pBook );
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -113,7 +120,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_employee( be, pModel, r );
+ load_single_employee( be, pModel, r );
}
}
}
@@ -122,6 +129,8 @@
static void
create_employee_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -132,6 +141,10 @@
GncEmployee* emp = GNC_EMPLOYEE(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_EMPLOYEE(inst) );
+
// Ensure the commodity is in the db
gnc_gda_save_commodity( be, gncEmployeeGetCurrency( emp ) );
@@ -151,6 +164,44 @@
}
/* ================================================================= */
+static gboolean
+employee_should_be_saved( GncEmployee *employee )
+{
+ const char *id;
+
+ g_return_val_if_fail( employee != NULL, FALSE );
+
+ /* make sure this is a valid employee before we save it -- should have an ID */
+ id = gncEmployeeGetID( employee );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+static void
+write_single_employee( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_EMPLOYEE(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( employee_should_be_saved( GNC_EMPLOYEE(term_p) ) ) {
+ save_employee( be, term_p );
+ }
+}
+
+static void
+write_employees( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_EMPLOYEE, be->primary_book, write_single_employee, (gpointer)be );
+}
+
+/* ================================================================= */
void
gnc_employee_gda_initialize( void )
{
@@ -160,7 +211,9 @@
GNC_ID_EMPLOYEE,
save_employee, /* commit */
load_all_employees, /* initial_load */
- create_employee_tables /* create_tables */
+ create_employee_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_employees /* write */
};
qof_object_register_backend( GNC_ID_EMPLOYEE, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-entry-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -1,7 +1,7 @@
/********************************************************************\
- * gnc-entry-xml-v2.c -- entry xml i/o implementation *
+ * gnc-entry-gda.c -- entry libgda backend *
* *
- * Copyright (C) 2002 Derek Atkins <warlord at MIT.EDU> *
+ * Copyright (C) 2007-2008 Phil Longstaff (plongstaff at rogers.com) *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -46,11 +46,6 @@
static QofLogModule log_module = GNC_MOD_BACKEND;
-static gpointer get_date( gpointer pObject, const QofParam* param );
-static void set_date( gpointer pObject, gpointer pValue );
-static gpointer get_date_entered( gpointer pObject, const QofParam* param );
-static void set_date_entered( gpointer pObject, gpointer pValue );
-
#define TABLE_NAME "entries"
#define MAX_DESCRIPTION_LEN 50
#define MAX_ACTION_LEN 50
@@ -61,8 +56,8 @@
static col_cvt_t col_table[] =
{
{ "guid", CT_GUID, 0, COL_NNUL, "guid" },
- { "date", CT_TIMESPEC, 0, COL_NNUL, NULL, NULL, get_date, set_date },
- { "entered", CT_TIMESPEC, 0, COL_NNUL, NULL, NULL, get_date_entered, set_date_entered },
+ { "date", CT_TIMESPEC, 0, COL_NNUL, NULL, ENTRY_DATE },
+ { "entered", CT_TIMESPEC, 0, COL_NNUL, NULL, ENTRY_DATE_ENTERED },
{ "description", CT_STRING, MAX_DESCRIPTION_LEN, 0, NULL, ENTRY_DESC },
{ "action", CT_STRING, MAX_ACTION_LEN, 0, NULL, ENTRY_ACTION },
{ "notes", CT_STRING, MAX_NOTES_LEN, 0, NULL, ENTRY_NOTES },
@@ -89,51 +84,17 @@
{ NULL }
};
-static gpointer
-get_date( gpointer pObject, const QofParam* param )
-{
- const GncEntry* pEntry = GNC_ENTRY(pObject);
- static Timespec ts;
-
- ts = gncEntryGetDate( pEntry );
- return (gpointer)&ts;
-}
-
-static void
-set_date( gpointer pObject, gpointer pValue )
-{
- GncEntry* pEntry = GNC_ENTRY(pObject);
- Timespec* pTS = (Timespec*)pValue;
-
- gncEntrySetDate( pEntry, *pTS );
-}
-
-static gpointer
-get_date_entered( gpointer pObject, const QofParam* param )
-{
- const GncEntry* pEntry = GNC_ENTRY(pObject);
- static Timespec ts;
-
- ts = gncEntryGetDateEntered( pEntry );
- return (gpointer)&ts;
-}
-
-static void
-set_date_entered( gpointer pObject, gpointer pValue )
-{
- GncEntry* pEntry = GNC_ENTRY(pObject);
- Timespec* pTS = (Timespec*)pValue;
-
- gncEntrySetDateEntered( pEntry, *pTS );
-}
-
-static GncEntry*
+static void
load_single_entry( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncEntry* pEntry;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -146,8 +107,6 @@
qof_instance_get_slots( QOF_INSTANCE(pEntry) ) );
qof_instance_mark_clean( QOF_INSTANCE(pEntry) );
-
- return pEntry;
}
static void
@@ -155,8 +114,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -169,7 +132,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_entry( be, pModel, r );
+ load_single_entry( be, pModel, r );
}
}
}
@@ -178,6 +141,8 @@
static void
create_entry_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -185,13 +150,16 @@
static void
save_entry( GncGdaBackend* be, QofInstance* inst )
{
- GncEntry* v = GNC_ENTRY(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_ENTRY(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_ENTRY, v,
+ GNC_ID_ENTRY, inst,
col_table );
// Now, commit or delete any slots
@@ -204,6 +172,32 @@
}
/* ================================================================= */
+static void
+write_single_entry( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+ GncEntry* entry = GNC_ENTRY(term_p);
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_ENTRY(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ /* Only save if attached */
+ if( gncEntryGetOrder( entry ) != NULL || gncEntryGetInvoice( entry ) != NULL ||
+ gncEntryGetBill( entry ) != NULL ) {
+ save_entry( be, term_p );
+ }
+}
+
+static void
+write_entries( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_ENTRY, be->primary_book, write_single_entry, (gpointer)be );
+}
+
+/* ================================================================= */
void
gnc_entry_gda_initialize( void )
{
@@ -213,7 +207,9 @@
GNC_ID_ENTRY,
save_entry, /* commit */
load_all_entries, /* initial_load */
- create_entry_tables /* create_tables */
+ create_entry_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_entries /* write */
};
qof_object_register_backend( GNC_ID_ENTRY, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-invoice-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -74,13 +74,17 @@
{ NULL }
};
-static GncInvoice*
+static void
load_single_invoice( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncInvoice* pInvoice;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -93,8 +97,6 @@
qof_instance_get_slots( QOF_INSTANCE(pInvoice) ) );
qof_instance_mark_clean( QOF_INSTANCE(pInvoice) );
-
- return pInvoice;
}
static void
@@ -102,8 +104,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -116,7 +122,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_invoice( be, pModel, r );
+ load_single_invoice( be, pModel, r );
}
}
}
@@ -125,6 +131,8 @@
static void
create_invoice_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -132,16 +140,20 @@
static void
save_invoice( GncGdaBackend* be, QofInstance* inst )
{
- GncInvoice* v = GNC_INVOICE(inst);
const GUID* guid;
+ GncInvoice* invoice = GNC_INVOICE(inst);
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_INVOICE(inst) );
+
// Ensure the commodity is in the db
- gnc_gda_save_commodity( be, gncInvoiceGetCurrency( v ) );
+ gnc_gda_save_commodity( be, gncInvoiceGetCurrency( invoice ) );
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_INVOICE, v,
+ GNC_ID_INVOICE, inst,
col_table );
// Now, commit or delete any slots
@@ -154,17 +166,62 @@
}
/* ================================================================= */
+static gboolean
+invoice_should_be_saved( GncInvoice *invoice )
+{
+ const char *id;
+
+ g_return_val_if_fail( invoice != NULL, FALSE );
+
+ /* make sure this is a valid invoice before we save it -- should have an ID */
+ id = gncInvoiceGetID( invoice );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static void
+write_single_invoice( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_INVOICE(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( invoice_should_be_saved( GNC_INVOICE(term_p) ) ) {
+ save_invoice( be, term_p );
+ }
+}
+
+static void
+write_invoices( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_INVOICE, be->primary_book, write_single_invoice, (gpointer)be );
+}
+
+/* ================================================================= */
+static void
load_invoice_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
GUID guid;
const GUID* pGuid;
GncInvoice* invoice = NULL;
- val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
+ val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
if( gda_value_is_null( val ) ) {
pGuid = NULL;
} else {
@@ -174,8 +231,8 @@
if( pGuid != NULL ) {
invoice = gncInvoiceLookup( be->primary_book, pGuid );
}
- if( table->gobj_param_name != NULL ) {
- g_object_set( pObject, table->gobj_param_name, invoice, NULL );
+ if( table_row->gobj_param_name != NULL ) {
+ g_object_set( pObject, table_row->gobj_param_name, invoice, NULL );
} else {
(*setter)( pObject, (const gpointer)invoice );
}
@@ -194,7 +251,9 @@
GNC_ID_INVOICE,
save_invoice, /* commit */
load_all_invoices, /* initial_load */
- create_invoice_tables /* create_tables */
+ create_invoice_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_invoices /* write */
};
qof_object_register_backend( GNC_ID_INVOICE, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-job-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -1,6 +1,8 @@
/********************************************************************\
* gnc-job-gda.c -- job gda backend *
* *
+ * Copyright (C) 2007-2008 Phil Longstaff (plongstaff at rogers.com) *
+ * *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
@@ -56,13 +58,17 @@
{ NULL }
};
-static GncJob*
+static void
load_single_job( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID job_guid;
GncJob* pJob;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
job_guid = *guid;
@@ -75,8 +81,6 @@
qof_instance_get_slots( QOF_INSTANCE(pJob) ) );
qof_instance_mark_clean( QOF_INSTANCE(pJob) );
-
- return pJob;
}
static void
@@ -84,8 +88,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -98,7 +106,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_job( be, pModel, r );
+ load_single_job( be, pModel, r );
}
}
}
@@ -107,6 +115,8 @@
static void
create_job_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -114,13 +124,16 @@
static void
save_job( GncGdaBackend* be, QofInstance* inst )
{
- GncJob* job = GNC_JOB(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_JOB(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_JOB, job,
+ GNC_ID_JOB, inst,
col_table );
// Now, commit or delete any slots
@@ -133,6 +146,45 @@
}
/* ================================================================= */
+static gboolean
+job_should_be_saved( GncJob *job )
+{
+ const char *id;
+
+ g_return_val_if_fail( job != NULL, FALSE );
+
+ /* make sure this is a valid job before we save it -- should have an ID */
+ id = gncJobGetID( job );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+write_single_job( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_JOB(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( job_should_be_saved( GNC_JOB(term_p) ) ) {
+ save_job( be, term_p );
+ }
+}
+
+static void
+write_jobs( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_JOB, be->primary_book, write_single_job, (gpointer)be );
+}
+
+/* ================================================================= */
void
gnc_job_gda_initialize( void )
{
@@ -142,7 +194,9 @@
GNC_ID_JOB,
save_job, /* commit */
load_all_jobs, /* initial_load */
- create_job_tables /* create_tables */
+ create_job_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_jobs /* write */
};
qof_object_register_backend( GNC_ID_JOB, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-order-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -59,13 +59,17 @@
{ NULL },
};
-static GncOrder*
+static void
load_single_order( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncOrder* pOrder;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -78,8 +82,6 @@
qof_instance_get_slots( QOF_INSTANCE(pOrder) ) );
qof_instance_mark_clean( QOF_INSTANCE(pOrder) );
-
- return pOrder;
}
static void
@@ -87,8 +89,12 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ QofBook* pBook;
+ g_return_if_fail( be != NULL );
+
+ pBook = be->primary_book;
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -101,7 +107,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_order( be, pModel, r );
+ load_single_order( be, pModel, r );
}
}
}
@@ -110,6 +116,8 @@
static void
create_order_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -117,13 +125,16 @@
static void
save_order( GncGdaBackend* be, QofInstance* inst )
{
- GncOrder* v = GNC_ORDER(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_ORDER(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TABLE_NAME,
- GNC_ID_ORDER, v,
+ GNC_ID_ORDER, inst,
col_table );
// Now, commit or delete any slots
@@ -136,17 +147,62 @@
}
/* ================================================================= */
+static gboolean
+order_should_be_saved( GncOrder *order )
+{
+ const char *id;
+
+ g_return_val_if_fail( order != NULL, FALSE );
+
+ /* make sure this is a valid order before we save it -- should have an ID */
+ id = gncOrderGetID( order );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
static void
+write_single_order( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_ORDER(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( order_should_be_saved( GNC_ORDER(term_p) ) ) {
+ save_order( be, term_p );
+ }
+}
+
+static void
+write_orders( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_ORDER, be->primary_book, write_single_order, (gpointer)be );
+}
+
+/* ================================================================= */
+static void
load_order_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
GUID guid;
const GUID* pGuid;
GncOrder* order = NULL;
- val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
+ val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
if( gda_value_is_null( val ) ) {
pGuid = NULL;
} else {
@@ -156,8 +212,8 @@
if( pGuid != NULL ) {
order = gncOrderLookup( be->primary_book, pGuid );
}
- if( table->gobj_param_name != NULL ) {
- g_object_set( pObject, table->gobj_param_name, order, NULL );
+ if( table_row->gobj_param_name != NULL ) {
+ g_object_set( pObject, table_row->gobj_param_name, order, NULL );
} else {
(*setter)( pObject, (const gpointer)order );
}
@@ -176,7 +232,9 @@
GNC_ID_ORDER,
save_order, /* commit */
load_all_orders, /* initial_load */
- create_order_tables /* create_tables */
+ create_order_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_orders /* write */
};
qof_object_register_backend( GNC_ID_ORDER, GNC_GDA_BACKEND, &be_data );
Modified: gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-owner-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -45,24 +45,31 @@
static void
load_owner( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
gchar* buf;
GncOwnerType type;
GUID guid;
- QofBook* book = be->primary_book;
+ QofBook* book;
GncOwner owner;
- buf = g_strdup_printf( "%s_type", table->col_name );
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
+ book = be->primary_book;
+ buf = g_strdup_printf( "%s_type", table_row->col_name );
val = gda_data_model_get_value_at_col_name( pModel, buf, row );
type = (GncOwnerType)g_value_get_int( val );
g_free( buf );
- buf = g_strdup_printf( "%s_guid", table->col_name );
+ buf = g_strdup_printf( "%s_guid", table_row->col_name );
val = gda_data_model_get_value_at_col_name( pModel, buf, row );
g_free( buf );
- val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
if( !gda_value_is_null( val ) ) {
string_to_guid( g_value_get_string( val ), &guid );
}
@@ -116,8 +123,8 @@
PWARN("Invalid owner type: %d\n", type );
}
- if( table->gobj_param_name != NULL ) {
- g_object_set( pObject, table->gobj_param_name, &owner, NULL );
+ if( table_row->gobj_param_name != NULL ) {
+ g_object_set( pObject, table_row->gobj_param_name, &owner, NULL );
} else {
(*setter)( pObject, &owner );
}
@@ -130,6 +137,12 @@
OwnerGetterFunc getter;
GncOwner* owner;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( obj_name != NULL );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+ g_return_if_fail( value != NULL );
+
memset( value, 0, sizeof( GValue ) );
getter = (OwnerGetterFunc)gnc_gda_get_getter( obj_name, table_row );
@@ -151,6 +164,12 @@
GncOwnerType type;
QofInstance* inst = NULL;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( obj_name != NULL );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+ g_return_if_fail( query != NULL );
+
memset( &value, 0, sizeof( GValue ) );
get_gvalue_owner( be, obj_name, pObject, table_row, &value );
@@ -214,6 +233,12 @@
GdaQueryCondition* sub_cond;
GdaQueryCondition* cond;
+ g_return_val_if_fail( be != NULL, NULL );
+ g_return_val_if_fail( obj_name != NULL, NULL );
+ g_return_val_if_fail( pObject != NULL, NULL );
+ g_return_val_if_fail( table_row != NULL, NULL );
+ g_return_val_if_fail( query != NULL, NULL );
+
memset( &value, 0, sizeof( GValue ) );
get_gvalue_owner( be, obj_name, pObject, table_row, &value );
cond = gda_query_condition_new( query, GDA_QUERY_CONDITION_NODE_AND );
@@ -275,6 +300,11 @@
gchar* buf;
const col_cvt_t* subtable_row;
+ g_return_if_fail( server != NULL );
+ g_return_if_fail( cnn != NULL );
+ g_return_if_fail( array_data != NULL );
+ g_return_if_fail( table_row != NULL );
+
dbms_type = gda_server_provider_get_default_dbms_type( server, cnn, G_TYPE_INT );
buf = g_strdup_printf( "%s_type", table_row->col_name );
gnc_gda_add_table_column( server, cnn, array_data, buf, dbms_type, table_row->size, table_row->flags );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-tax-table-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -49,8 +49,6 @@
const GUID* guid;
} guid_info_t;
-static gpointer get_id( gpointer pObject, const QofParam* param );
-static void set_id( gpointer pObject, gpointer pValue );
static gpointer get_obj_guid( gpointer pObject, const QofParam* param );
static void set_obj_guid( gpointer pObject, gpointer pValue );
static gpointer get_child( gpointer pObject, const QofParam* param );
@@ -99,23 +97,12 @@
};
static gpointer
-get_id( gpointer pObject, const QofParam* param )
-{
- // Just need a 0 to force a new id
- return (gpointer)0;
-}
-
-static void
-set_id( gpointer pObject, gpointer pValue )
-{
- // Nowhere to put the ID
-}
-
-static gpointer
get_obj_guid( gpointer pObject, const QofParam* param )
{
guid_info_t* pInfo = (guid_info_t*)pObject;
+ g_return_val_if_fail( pInfo != NULL, NULL );
+
return (gpointer)pInfo->guid;
}
@@ -131,6 +118,9 @@
GncTaxTable* tt = GNC_TAXTABLE(data);
gboolean b = GPOINTER_TO_INT(value);
+ g_return_if_fail( data != NULL );
+ g_return_if_fail( GNC_IS_TAXTABLE(data) );
+
if( b ) {
gncTaxTableMakeInvisible( tt );
}
@@ -140,6 +130,10 @@
get_child( gpointer pObject, const QofParam* param )
{
GncTaxTable* tt = GNC_TAXTABLE(pObject);
+
+ g_return_val_if_fail( pObject != NULL, NULL );
+ g_return_val_if_fail( GNC_IS_TAXTABLE(pObject), NULL );
+
return gncTaxTableGetChild( tt );
}
@@ -149,6 +143,9 @@
GncTaxTable* tt = GNC_TAXTABLE(data);
GncTaxTable* parent;
+ g_return_if_fail( data != NULL );
+ g_return_if_fail( GNC_IS_TAXTABLE(data) );
+
if( value != NULL ) {
parent = GNC_TAXTABLE(value);
gncTaxTableSetParent( tt, parent );
@@ -159,6 +156,12 @@
load_single_ttentry( GncGdaBackend* be, GdaDataModel* pModel, int row, GncTaxTable* tt )
{
GncTaxTableEntry* e = gncTaxTableEntryCreate();
+
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( tt != NULL );
+
gnc_gda_load_object( be, pModel, row, GNC_ID_TAXTABLE, e, ttentries_col_table );
gncTaxTableAddEntry( tt, e );
}
@@ -172,6 +175,9 @@
GdaQueryCondition* cond;
GValue value;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( tt != NULL );
+
guid_to_string_buff( qof_instance_get_guid( QOF_INSTANCE(tt) ), guid_buf );
memset( &value, 0, sizeof( GValue ) );
g_value_init( &value, G_TYPE_STRING );
@@ -194,13 +200,17 @@
}
}
-static GncTaxTable*
+static void
load_single_taxtable( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncTaxTable* tt;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -214,8 +224,6 @@
load_taxtable_entries( be, tt );
qof_instance_mark_clean( QOF_INSTANCE(tt) );
-
- return tt;
}
static void
@@ -223,8 +231,9 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ g_return_if_fail( be != NULL );
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TT_TABLE_NAME );
@@ -237,7 +246,7 @@
int r;
for( r = 0; r < numRows; r++ ) {
- (void)load_single_taxtable( be, pModel, r );
+ load_single_taxtable( be, pModel, r );
}
}
}
@@ -246,6 +255,8 @@
static void
create_taxtable_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TT_TABLE_NAME, tt_col_table );
gnc_gda_create_table_if_needed( be, TTENTRIES_TABLE_NAME, ttentries_col_table );
}
@@ -256,6 +267,9 @@
{
guid_info_t guid_info;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( guid != NULL );
+
guid_info.be = be;
guid_info.guid = guid;
(void)gnc_gda_do_db_operation( be, OP_DB_DELETE, TTENTRIES_TABLE_NAME,
@@ -267,6 +281,9 @@
{
GList* entry;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( guid != NULL );
+
/* First, delete the old slots for this object */
delete_all_tt_entries( be, guid );
@@ -286,6 +303,10 @@
GncTaxTable* tt = GNC_TAXTABLE(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_TAXTABLE(inst) );
+
(void)gnc_gda_do_db_operation( be,
(qof_instance_get_destroying(inst) ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
TT_TABLE_NAME,
@@ -305,16 +326,43 @@
/* ================================================================= */
static void
+write_single_taxtable( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_TAXTABLE(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ save_taxtable( be, term_p );
+}
+
+static void
+write_taxtables( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_TAXTABLE, be->primary_book, write_single_taxtable, (gpointer)be );
+}
+
+/* ================================================================= */
+static void
load_taxtable_guid( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
- const col_cvt_t* table )
+ const col_cvt_t* table_row )
{
const GValue* val;
GUID guid;
const GUID* pGuid;
GncTaxTable* taxtable = NULL;
- val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+ g_return_if_fail( pObject != NULL );
+ g_return_if_fail( table_row != NULL );
+
+ val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
if( gda_value_is_null( val ) ) {
pGuid = NULL;
} else {
@@ -324,8 +372,8 @@
if( pGuid != NULL ) {
taxtable = gncTaxTableLookup( be->primary_book, pGuid );
}
- if( table->gobj_param_name != NULL ) {
- g_object_set( pObject, table->gobj_param_name, taxtable, NULL );
+ if( table_row->gobj_param_name != NULL ) {
+ g_object_set( pObject, table_row->gobj_param_name, taxtable, NULL );
} else {
(*setter)( pObject, (const gpointer)taxtable );
}
@@ -344,7 +392,9 @@
GNC_ID_TAXTABLE,
save_taxtable, /* commit */
load_all_taxtables, /* initial_load */
- create_taxtable_tables /* create_tables */
+ create_taxtable_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_taxtables /* write */
};
qof_object_register_backend( GNC_ID_TAXTABLE, GNC_GDA_BACKEND, &be_data );
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 2007-12-31 18:52:32 UTC (rev 16777)
+++ gnucash/branches/gda-dev2/src/business/business-core/gda/gnc-vendor-gda.c 2008-01-01 18:56:13 UTC (rev 16778)
@@ -74,13 +74,17 @@
{ NULL }
};
-static GncVendor*
+static void
load_single_vendor( GncGdaBackend* be, GdaDataModel* pModel, int row )
{
const GUID* guid;
GUID v_guid;
GncVendor* pVendor;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( pModel != NULL );
+ g_return_if_fail( row >= 0 );
+
guid = gnc_gda_load_guid( be, pModel, row );
v_guid = *guid;
@@ -93,8 +97,6 @@
qof_instance_get_slots( QOF_INSTANCE(pVendor) ) );
qof_instance_mark_clean( QOF_INSTANCE(pVendor) );
-
- return pVendor;
}
static void
@@ -102,8 +104,9 @@
{
static GdaQuery* query = NULL;
GdaObject* ret;
- QofBook* pBook = be->primary_book;
+ g_return_if_fail( be != NULL );
+
/* First time, create the query */
if( query == NULL ) {
query = gnc_gda_create_select_query( be, TABLE_NAME );
@@ -125,6 +128,8 @@
static void
create_vendor_tables( GncGdaBackend* be )
{
+ g_return_if_fail( be != NULL );
+
gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
@@ -135,6 +140,10 @@
GncVendor* v = GNC_VENDOR(inst);
const GUID* guid;
+ g_return_if_fail( be != NULL );
+ g_return_if_fail( inst != NULL );
+ g_return_if_fail( GNC_IS_VENDOR(inst) );
+
// Ensure the commodity is in the db
gnc_gda_save_commodity( be, gncVendorGetCurrency( v ) );
@@ -154,6 +163,45 @@
}
/* ================================================================= */
+static gboolean
+vendor_should_be_saved( GncVendor *vendor )
+{
+ const char *id;
+
+ g_return_val_if_fail( vendor != NULL, FALSE );
+
+ /* make sure this is a valid vendor before we save it -- should have an ID */
+ id = gncVendorGetID( vendor );
+ if( id == NULL || *id == '\0' ) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void
+write_single_vendor( QofInstance *term_p, gpointer be_p )
+{
+ GncGdaBackend* be = (GncGdaBackend*)be_p;
+
+ g_return_if_fail( term_p != NULL );
+ g_return_if_fail( GNC_IS_VENDOR(term_p) );
+ g_return_if_fail( be_p != NULL );
+
+ if( vendor_should_be_saved( GNC_VENDOR(term_p) ) ) {
+ save_vendor( be, term_p );
+ }
+}
+
+static void
+write_vendors( GncGdaBackend* be )
+{
+ g_return_if_fail( be != NULL );
+
+ qof_object_foreach( GNC_ID_VENDOR, be->primary_book, write_single_vendor, (gpointer)be );
+}
+
+/* ================================================================= */
void
gnc_vendor_gda_initialize( void )
{
@@ -163,7 +211,9 @@
GNC_ID_VENDOR,
save_vendor, /* commit */
load_all_vendors, /* initial_load */
- create_vendor_tables /* create_tables */
+ create_vendor_tables, /* create_tables */
+ NULL, NULL, NULL,
+ write_vendors /* write */
};
qof_object_register_backend( GNC_ID_VENDOR, GNC_GDA_BACKEND, &be_data );
More information about the gnucash-changes
mailing list