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