r17066 - gnucash/branches/gda-dev2 - 1) Fix bug in gnc-date where end of string was not detected correctly

Phil Longstaff plongstaff at cvs.gnucash.org
Sat Apr 5 20:37:42 EDT 2008


Author: plongstaff
Date: 2008-04-05 20:37:42 -0400 (Sat, 05 Apr 2008)
New Revision: 17066
Trac: http://svn.gnucash.org/trac/changeset/17066

Modified:
   gnucash/branches/gda-dev2/lib/libqof/qof/gnc-date.c
   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-transaction-gda.c
Log:
1) Fix bug in gnc-date where end of string was not detected correctly
2) Fix date loading with gda backend
3) Don't query for transactions/splits.  Instead, load all splits when
starting.



Modified: gnucash/branches/gda-dev2/lib/libqof/qof/gnc-date.c
===================================================================
--- gnucash/branches/gda-dev2/lib/libqof/qof/gnc-date.c	2008-04-05 09:46:00 UTC (rev 17065)
+++ gnucash/branches/gda-dev2/lib/libqof/qof/gnc-date.c	2008-04-06 00:37:42 UTC (rev 17066)
@@ -1042,7 +1042,7 @@
 
   /* Timezone format can be +hh or +hhmm or +hh.mm (or -) (or not present) */
   str += strcspn (str, "+-");
-  if (str)
+  if (*str)
   {
     buf[0] = str[0];
     buf[1] = str[1];

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2008-04-05 09:46:00 UTC (rev 17065)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-account-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
@@ -194,11 +194,13 @@
     if( pAccount == NULL ) {
         pAccount = xaccMallocAccount( be->primary_book );
     }
+	xaccAccountBeginEdit( pAccount );
     gnc_gda_load_object( be, pModel, row, GNC_ID_ACCOUNT, pAccount, col_table );
 	*pList = g_list_append( *pList, pAccount );
 //    gnc_gda_slots_load( be, QOF_INSTANCE(pAccount) );
 //    load_balances( be, pAccount );
 
+	xaccAccountCommitEdit( pAccount );
     qof_instance_mark_clean( QOF_INSTANCE(pAccount) );
 
 	/* If we don't have a parent, it might be because the parent account hasn't
@@ -243,7 +245,7 @@
         }
 
 		if( list != NULL ) {
-			load_account_balances_for_list( be, list );
+//			load_account_balances_for_list( be, list );
 			gnc_gda_slots_load_for_list( be, list );
 		}
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-04-05 09:46:00 UTC (rev 17065)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
@@ -38,6 +38,7 @@
 #include "qof.h"
 #include "qofquery-p.h"
 #include "qofquerycore-p.h"
+#include "Account.h"
 #include "TransLog.h"
 #include "gnc-engine.h"
 #include "SX-book.h"
@@ -386,6 +387,7 @@
     GncGdaBackend *be = (GncGdaBackend*)be_start;
     GncGdaDataType_t* pData;
 	int i;
+	Account* root;
 
 	g_return_if_fail( be_start != NULL );
 	g_return_if_fail( book != NULL );
@@ -406,8 +408,13 @@
 		}
     }
 
+	root = gnc_book_get_root_account( book );
+	gnc_account_foreach_descendant( root, (AccountCb)xaccAccountBeginEdit, NULL );
+
     qof_object_foreach_backend( GNC_GDA_BACKEND, initial_load_cb, be );
 
+	gnc_account_foreach_descendant( root, (AccountCb)xaccAccountCommitEdit, NULL );
+
     be->loading = FALSE;
 
 	// Mark the book as clean
@@ -1106,9 +1113,11 @@
     be->rollback = gnc_gda_rollback_edit;
 
     /* The gda backend uses queries to load data ... */
+#if 0
     be->compile_query = gnc_gda_compile_query;
     be->free_query = gnc_gda_free_query;
     be->run_query = gnc_gda_run_query;
+#endif
 
     be->counter = NULL;
 

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-04-05 09:46:00 UTC (rev 17065)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-backend-util-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
@@ -850,6 +850,7 @@
 
 /* ----------------------------------------------------------------- */
 typedef Timespec (*TimespecAccessFunc)( const gpointer );
+typedef void (*TimespecSetterFunc)( const gpointer, Timespec );
 
 static void
 load_timespec( const GncGdaBackend* be, GdaDataModel* pModel, gint row,
@@ -858,7 +859,8 @@
 {
     const GValue* val;
     GDate* date;
-    Timespec ts;
+    Timespec ts = {0, 0};
+	TimespecSetterFunc ts_setter;
 
 	g_return_if_fail( be != NULL );
 	g_return_if_fail( pModel != NULL );
@@ -866,9 +868,10 @@
 	g_return_if_fail( pObject != NULL );
 	g_return_if_fail( table_row != NULL );
 
+	ts_setter = (TimespecSetterFunc)setter;
     val = gda_data_model_get_value_at_col_name( pModel, table_row->col_name, row );
     if( gda_value_is_null( val ) ) {
-        (*setter)( pObject, NULL );
+        (*ts_setter)( pObject, ts );
     } else {
 		if( G_VALUE_HOLDS_STRING( val ) ) {
 			const gchar* s = g_value_get_string( val );
@@ -878,7 +881,7 @@
 									s[0], s[1],
 									s[3], s[4] );
 		    ts = gnc_iso8601_to_timespec_gmt( buf );
-			(*setter)( pObject, &ts );
+			(*ts_setter)( pObject, ts );
 			g_free( buf );
 
 		} else if( G_VALUE_HOLDS_BOXED( val ) ) {
@@ -887,7 +890,7 @@
             	ts = gnc_dmy2timespec( g_date_get_day( date ),
                                 g_date_get_month( date ),
                                 g_date_get_year( date ) );
-            	(*setter)( pObject, &ts );
+            	(*ts_setter)( pObject, ts );
 			}
 		} else {
 			PWARN( "Unknown timespec type: %s", G_VALUE_TYPE_NAME( val ) );
@@ -1487,6 +1490,7 @@
 
 	cmd = gda_command_new( sql, GDA_COMMAND_TYPE_SQL, 0 );
     model = gda_connection_execute_select_command( be->pConnection, cmd, NULL, &error );
+	gda_command_free( cmd );
     if( error != NULL ) {
         PERR( "SQL error: %s\n", error->message );
     }

Modified: gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-04-05 09:46:00 UTC (rev 17065)
+++ gnucash/branches/gda-dev2/src/backend/gda/gnc-transaction-gda.c	2008-04-06 00:37:42 UTC (rev 17066)
@@ -65,7 +65,9 @@
     { "guid",          CT_GUID,           0,                      COL_NNUL|COL_PKEY, "guid" },
     { "currency_guid", CT_COMMODITYREF,   0,                      COL_NNUL,          NULL, NULL,
 			(QofAccessFunc)xaccTransGetCurrency, (QofSetterFunc)xaccTransSetCurrency },
-    { "num",           CT_STRING,         TX_MAX_NUM_LEN,         COL_NNUL,          NULL, TRANS_NUM },
+//    { "num",           CT_STRING,         TX_MAX_NUM_LEN,         COL_NNUL,          NULL, TRANS_NUM },
+    { "num",           CT_STRING,         TX_MAX_NUM_LEN,         COL_NNUL,          NULL, NULL,
+			(QofAccessFunc)xaccTransGetNum, (QofSetterFunc)xaccTransSetNum },
     { "post_date",     CT_TIMESPEC,       0,                      COL_NNUL,          NULL, NULL,
 			(QofAccessFunc)xaccTransRetDatePostedTS, (QofSetterFunc)gnc_transaction_set_date_posted },
     { "enter_date",    CT_TIMESPEC,       0,                      COL_NNUL,          NULL, NULL,
@@ -569,9 +571,9 @@
     }
     xaccTransBeginEdit( pTx );
     gnc_gda_load_object( be, pModel, row, GNC_ID_TRANS, pTx, tx_col_table );
-//    gnc_gda_slots_load( be, QOF_INSTANCE(pTx) );
+    gnc_gda_slots_load( be, QOF_INSTANCE(pTx) );
 	*pList = g_list_append( *pList, pTx );
-//    load_all_splits( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
+    load_all_splits_for_tx( be, qof_instance_get_guid( QOF_INSTANCE(pTx) ) );
 
     qof_instance_mark_clean( QOF_INSTANCE(pTx) );
     xaccTransCommitEdit( pTx );
@@ -598,10 +600,10 @@
             load_single_tx( be, pModel, r, &tx_list );
         }
 
-		if( tx_list != NULL ) {
-			gnc_gda_slots_load_for_list( be, tx_list );
-			load_splits_for_tx_list( be, tx_list );
-		}
+//		if( tx_list != NULL ) {
+//			gnc_gda_slots_load_for_list( be, tx_list );
+//			load_splits_for_tx_list( be, tx_list );
+//		}
     }
 }
 
@@ -623,6 +625,21 @@
 
 /* ================================================================= */
 static void
+load_all_tx( GncGdaBackend* be )
+{
+	gchar* sql;
+	GdaQuery* query;
+
+	g_return_if_fail( be != NULL );
+
+	sql = g_strdup_printf( "SELECT * FROM %s", TRANSACTION_TABLE );
+	query = gnc_gda_create_query_from_sql( be, sql );
+	g_free( sql );
+	query_transactions( be, query );
+}
+
+/* ================================================================= */
+static void
 create_transaction_tables( GncGdaBackend* be )
 {
 	g_return_if_fail( be != NULL );
@@ -1013,8 +1030,8 @@
     {
         GNC_GDA_BACKEND_VERSION,
         GNC_ID_TRANS,
-        gnc_gda_save_transaction,            /* commit */
-        NULL,                        /* initial_load */
+        gnc_gda_save_transaction,    /* commit */
+        load_all_tx,                 /* initial_load */
         create_transaction_tables    /* create tables */
     };
     static GncGdaDataType_t be_data_split =



More information about the gnucash-changes mailing list