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