r16546 - gnucash/branches/gda-dev/src/backend/gda - Ensure account/split balances are set

Phil Longstaff plongstaff at cvs.gnucash.org
Sun Sep 30 15:00:51 EDT 2007


Author: plongstaff
Date: 2007-09-30 15:00:49 -0400 (Sun, 30 Sep 2007)
New Revision: 16546
Trac: http://svn.gnucash.org/trac/changeset/16546

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-transaction-gda.c
Log:
Ensure account/split balances are set


Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-09-27 22:07:35 UTC (rev 16545)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c	2007-09-30 19:00:49 UTC (rev 16546)
@@ -128,14 +128,16 @@
 static void
 load_balances( GncGdaBackend* be, Account* pAccount )
 {
-    gnc_numeric start_balance, cleared_balance, reconciled_balance;
+    gnc_numeric start_balance;
+	gnc_numeric cleared_balance;
+	gnc_numeric reconciled_balance;
 
 	gnc_gda_get_account_balances( be, pAccount, &start_balance, &cleared_balance, &reconciled_balance );
 
     g_object_set( pAccount,
-				"start-balance", &start_balance,
-                "start-cleared-balance", &cleared_balance,
-                "start-reconciled-balance", &reconciled_balance,
+				"end-balance", &start_balance,
+                "end-cleared-balance", &cleared_balance,
+                "end-reconciled-balance", &reconciled_balance,
                 NULL);
 }
 

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-09-27 22:07:35 UTC (rev 16545)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-util-gda.c	2007-09-30 19:00:49 UTC (rev 16546)
@@ -22,8 +22,8 @@
  *  @brief load and save data to SQL - utility functions
  *  @author Copyright (c) 2006 Phil Longstaff <plongstaff at rogers.com>
  *
- * This file implements the top-level QofBackend API for saving/
- * restoring data to/from an SQL db using libgda
+ * This file contains utility routines to support saving/restoring
+ * data to/from an SQL db using libgda
  */
 
 #include "config.h"
@@ -651,6 +651,28 @@
         { load_date, create_timespec_col,
             get_gvalue_date_for_query, get_gvalue_date_cond };
 /* ----------------------------------------------------------------- */
+static gint64
+get_integer_value( const GValue* value )
+{
+	if( G_VALUE_HOLDS_INT(value) ) {
+		return g_value_get_int( value );
+	} else if( G_VALUE_HOLDS_UINT(value) ) {
+		return g_value_get_uint( value );
+	} else if( G_VALUE_HOLDS_LONG(value) ) {
+		return g_value_get_long( value );
+	} else if( G_VALUE_HOLDS_ULONG(value) ) {
+		return g_value_get_ulong( value );
+	} else if( G_VALUE_HOLDS_INT64(value) ) {
+		return g_value_get_int64( value );
+	} else if( G_VALUE_HOLDS_UINT64(value) ) {
+		return g_value_get_uint64( value );
+	} else {
+		g_warning( "Unknown type: %s", G_VALUE_TYPE_NAME( value ) );
+	}
+
+	return 0;
+}
+
 static void
 load_numeric( GdaDataModel* pModel, gint row,
             QofSetterFunc setter, gpointer pObject,
@@ -669,7 +691,7 @@
         isNull = TRUE;
         num = 0;
     } else {
-        num = g_value_get_int64( val );
+        num = get_integer_value( val );
     }
     buf = g_strdup_printf( "%s_denom", table->col_name );
     val = gda_data_model_get_value_at_col_name( pModel, buf, row );
@@ -678,7 +700,7 @@
         isNull = TRUE;
         denom = 1;
     } else {
-        denom = g_value_get_int64( val );
+        denom = get_integer_value( val );
     }
     n = gnc_numeric_create( num, denom );
     if( isNull ) {

Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-09-27 22:07:35 UTC (rev 16545)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c	2007-09-30 19:00:49 UTC (rev 16546)
@@ -72,17 +72,17 @@
 
 static col_cvt_t tx_col_table[] =
 {
-    { "guid",            CT_GUID,    0, COL_NNUL|COL_PKEY, NULL, NULL,
+    { "guid",          CT_GUID,    0, COL_NNUL|COL_PKEY, NULL, NULL,
             get_guid, set_guid },
-    { "currency_guid",    CT_GUID,    0, COL_NNUL,    NULL, NULL,
+    { "currency_guid", CT_GUID,    0, COL_NNUL,    NULL, NULL,
             get_tx_currency_guid, set_tx_currency_guid },
-    { "num",            CT_STRING,    TX_MAX_NUM_LEN, COL_NNUL, NULL, NULL,
+    { "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,
+    { "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,
+    { "enter_date",    CT_TIMESPEC, 0, COL_NNUL, NULL, NULL,
             get_tx_enter_date, set_tx_enter_date },
-    { "description",    CT_STRING,    TX_MAX_DESCRIPTION_LEN, 0,    NULL, NULL,
+    { "description",   CT_STRING,    TX_MAX_DESCRIPTION_LEN, 0,    NULL, NULL,
             (QofAccessFunc)xaccTransGetDescription,
             (QofSetterFunc)xaccTransSetDescription },
     { NULL }
@@ -108,20 +108,20 @@
 {
     { "guid",            CT_GUID,    0, COL_NNUL|COL_PKEY, NULL, NULL,
             get_guid, set_guid },
-    { "tx_guid",        CT_GUID,     0, COL_NNUL,    NULL, NULL,
+    { "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 },
     { "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 },
-    { "reconcile_date", CT_TIMESPEC, 0, COL_NNUL,    NULL, NULL,
+    { "reconcile_date",  CT_TIMESPEC, 0, COL_NNUL,    NULL, NULL,
             get_split_reconcile_date, set_split_reconcile_date },
     { "value",           CT_NUMERIC, 0, COL_NNUL,    NULL, NULL,
             get_split_value, set_split_value },
     { "quantity",        CT_NUMERIC, 0, COL_NNUL,    NULL, NULL,
             get_split_quantity, set_split_quantity },
-    { "account_guid",    CT_GUID,    0, COL_NNUL,    NULL, NULL,
-            get_split_account_guid, set_split_account_guid },
     { NULL }
 };
 
@@ -440,8 +440,8 @@
 	 * This just requires a modification to the query
 	 */
 
-	//sql = g_strdup_printf( "SELECT SUM(QUANTITY_NUM),QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf );
-	sql = g_strdup_printf( "SELECT QUANTITY_NUM,QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf );
+	//sql = g_strdup_printf( "SELECT SUM(QUANTITY_NUM),QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='%c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf, CREC );
+	sql = g_strdup_printf( "SELECT QUANTITY_NUM,QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='%c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf, CREC );
 
 	query = gnc_gda_create_query_from_sql( be, sql );
     *cleared_balance = get_account_balance_from_query( be, query );
@@ -457,8 +457,8 @@
 	 * This just requires a small modification to the cleared balance query
 	 */
 
-	//sql = g_strdup_printf( "SELECT SUM(QUANTITY_NUM),QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='y' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf );
-	sql = g_strdup_printf( "SELECT QUANTITY_NUM,QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='y' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf );
+	//sql = g_strdup_printf( "SELECT SUM(QUANTITY_NUM),QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='%c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf, YREC );
+	sql = g_strdup_printf( "SELECT QUANTITY_NUM,QUANTITY_DENOM FROM %s WHERE ACCOUNT_GUID='%s' AND RECONCILE_STATE='%c' GROUP BY QUANTITY_DENOM", SPLIT_TABLE, guid_buf, YREC );
 
 	query = gnc_gda_create_query_from_sql( be, sql );
 	*reconciled_balance = get_account_balance_from_query( be, query );
@@ -488,18 +488,19 @@
     }
 
     gnc_gda_load_object( 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) ) );
 
     g_assert( pSplit == xaccSplitLookup( &split_guid, be->primary_book ) );
 
-    qof_instance_mark_clean( QOF_INSTANCE(pSplit) );
+    //qof_instance_mark_clean( QOF_INSTANCE(pSplit) );
 
     return pSplit;
 }
 
 static void
-load_all_splits( GncGdaBackend* be, const GUID* guid )
+load_all_splits( GncGdaBackend* be, const GUID* tx_guid )
 {
     GdaObject* ret;
     gchar guid_buf[GUID_ENCODING_LENGTH+1];
@@ -507,7 +508,7 @@
     GdaQueryCondition* cond;
     GValue value;
 
-    guid_to_string_buff( guid, guid_buf );
+    guid_to_string_buff( tx_guid, guid_buf );
     memset( &value, 0, sizeof( GValue ) );
     g_value_init( &value, G_TYPE_STRING );
     g_value_set_string( &value, guid_buf );
@@ -736,12 +737,17 @@
 	buf = g_strdup_printf( "SELECT DISTINCT tx_guid FROM %s WHERE account_guid='%s'", SPLIT_TABLE, guid_buf );
 	results = gnc_gda_execute_sql( be, buf );
 	g_free( buf );
-	buf = g_strdup_printf( "SELECT * FROM %s WHERE guid IN (", TRANSACTION_TABLE );
     if( GDA_IS_DATA_MODEL( results ) ) {
         GdaDataModel* pModel = GDA_DATA_MODEL(results);
         int numRows = gda_data_model_get_n_rows( pModel );
         int r;
 
+		if( numRows != 1 ) {
+			buf = g_strdup_printf( "SELECT * FROM %s WHERE guid IN (", TRANSACTION_TABLE );
+		} else {
+			buf = g_strdup_printf( "SELECT * FROM %s WHERE guid =", TRANSACTION_TABLE );
+		}
+
         for( r = 0; r < numRows; r++ ) {
 			const GUID* guid;
 
@@ -755,10 +761,13 @@
 			g_free( buf );
 			buf = s;
         }
+
+		if( numRows != 1 ) {
+			s = g_strconcat( buf, ")", NULL );
+			g_free( buf );
+			buf = s;
+		}
     }
-	s = g_strconcat( buf, ")", NULL );
-	g_free( buf );
-	buf = s;
 
 	return buf;
 #else



More information about the gnucash-changes mailing list