r15163 - gnucash/branches/gda-dev/src/backend/gda - 1) Initial framework for handling sched transactions
Phil Longstaff
plongstaff at cvs.gnucash.org
Wed Nov 29 17:12:11 EST 2006
Author: plongstaff
Date: 2006-11-29 17:12:09 -0500 (Wed, 29 Nov 2006)
New Revision: 15163
Trac: http://svn.gnucash.org/trac/changeset/15163
Added:
gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.h
Modified:
gnucash/branches/gda-dev/src/backend/gda/Makefile.am
gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h
gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
Log:
1) Initial framework for handling sched transactions
2) Use GdaQuery for initial load
3) Use GdaDataHandlers for rendering objects. Good for everything
except dates which are rendered as 'DD-MM-YYYY' instead of 'YYYY-MM-DD'.
Modified: gnucash/branches/gda-dev/src/backend/gda/Makefile.am
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/Makefile.am 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/Makefile.am 2006-11-29 22:12:09 UTC (rev 15163)
@@ -22,6 +22,7 @@
gnc-commodity-gda.c \
gnc-lots-gda.c \
gnc-price-gda.c \
+ gnc-schedxaction-gda.c \
gnc-slots-gda.c \
gnc-transaction-gda.c
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -49,7 +49,6 @@
static void set_commodity( gpointer pObject, const gpointer pValue );
static gpointer get_parent( gpointer pObject );
static void set_parent( gpointer pObject, const gpointer pValue );
-static void retrieve_guid( gpointer pObject, const gpointer pValue );
#define ACCOUNT_MAX_NAME_LEN 50
#define ACCOUNT_MAX_TYPE_LEN 50
@@ -71,24 +70,7 @@
{ NULL }
};
-// Table to retrieve just the guid
-static col_cvt_t guid_table[] =
-{
- { "guid", CT_GUID, 0, 0, NULL, NULL, retrieve_guid },
- { NULL }
-};
-
-
/* ================================================================= */
-static void
-retrieve_guid( gpointer pObject, const gpointer pValue )
-{
- GUID** ppGuid = (GUID**)pObject;
- GUID* guid = (GUID*)pValue;
-
- *ppGuid = guid;
-}
-
static gpointer
get_commodity( gpointer pObject )
{
@@ -149,7 +131,7 @@
const GUID* guid;
GUID acc_guid;
- gnc_gda_load_object( pModel, row, GNC_ID_ACCOUNT, &guid, guid_table );
+ guid = gnc_gda_load_guid( pModel, row );
acc_guid = *guid;
if( pAccount == NULL ) {
@@ -170,14 +152,17 @@
static void
load_accounts( GncGdaBackend* be )
{
- gchar* buf;
+ static GdaQuery* query = NULL;
GdaObject* ret;
QofBook* pBook = be->primary_book;
gnc_commodity_table* pTable = gnc_commodity_table_get_table( pBook );
- buf = g_strdup_printf( "SELECT * FROM %s", TABLE_NAME );
- ret = gnc_gda_execute_sql( be, buf );
- g_free( buf );
+ /* First time, create the query */
+ if( query == NULL ) {
+ query = gnc_gda_create_select_query( be, TABLE_NAME );
+ }
+
+ ret = gnc_gda_execute_query( be, query );
if( GDA_IS_DATA_MODEL( ret ) ) {
GdaDataModel* pModel = (GdaDataModel*)ret;
int numRows = gda_data_model_get_n_rows( pModel );
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -60,6 +60,7 @@
#include "gnc-commodity-gda.h"
#include "gnc-lots-gda.h"
#include "gnc-price-gda.h"
+#include "gnc-schedxaction-gda.h"
#include "gnc-slots-gda.h"
#include "gnc-transaction-gda.h"
@@ -93,7 +94,7 @@
typedef void (*GNC_GDA_LOAD_FN)( GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
const col_cvt_t* table );
-typedef gchar* (*GNC_GDA_RENDER_FN)( QofIdTypeConst obj_name, gpointer pObject,
+typedef gchar* (*GNC_GDA_RENDER_FN)( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name );
typedef void (*GNC_GDA_CREATE_COL_FN)( GdaServerProvider* server,
GdaConnection* cnn, xmlNodePtr array_data,
@@ -126,7 +127,7 @@
}
static gchar*
-render_string( QofIdTypeConst obj_name, gpointer pObject,
+render_string( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -134,7 +135,6 @@
const gchar* equals = "";
QofAccessFunc getter;
gchar* s;
- GdaDataHandler* pHandler = gda_handler_string_new();
GValue value;
memset( &value, 0, sizeof( value ) );
@@ -153,7 +153,7 @@
if( s ) {
g_value_init( &value, G_TYPE_STRING );
g_value_set_string( &value, s );
- s = gda_data_handler_get_sql_from_value( pHandler, &value );
+ s = gda_data_handler_get_sql_from_value( be->pStrHandler, &value );
buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
g_free( s );
} else {
@@ -197,7 +197,7 @@
}
static gchar*
-render_int( QofIdTypeConst obj_name, gpointer pObject,
+render_int( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -205,6 +205,8 @@
const gchar* equals = "";
gint int_value;
QofAccessFunc getter;
+ GValue value;
+ gchar* s;
if( include_name ) {
col_name = table_row->col_name;
@@ -217,7 +219,12 @@
} else {
int_value = (gint)(*table_row->getter)( pObject );
}
- buf = g_strdup_printf( "%s%s%d", col_name, equals, int_value );
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_INT );
+ g_value_set_int( &value, int_value );
+ s = gda_data_handler_get_sql_from_value( be->pNumHandler, &value );
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
return buf;
}
@@ -256,7 +263,7 @@
}
static gchar*
-render_int64( QofIdTypeConst obj_name, gpointer pObject,
+render_int64( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -264,6 +271,7 @@
const gchar* equals = "";
gint64* pInt64;
gint64 i64_value;
+ GValue value;
if( include_name ) {
col_name = table_row->col_name;
@@ -271,8 +279,15 @@
}
pInt64 = (*table_row->getter)( pObject );
if( pInt64 != NULL ) {
+ gchar* s;
+
i64_value = *pInt64;
- buf = g_strdup_printf( "%s%s%lld", col_name, equals, i64_value );
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_INT64 );
+ g_value_set_int64( &value, i64_value );
+ s = gda_data_handler_get_sql_from_value( be->pNumHandler, &value );
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
} else {
buf = g_strdup_printf( "%s%sNULL", col_name, equals );
}
@@ -314,7 +329,7 @@
}
static gchar*
-render_double( QofIdTypeConst obj_name, gpointer pObject,
+render_double( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -322,6 +337,7 @@
const gchar* equals = "";
gdouble* pDouble;
gdouble d_value;
+ GValue value;
if( include_name ) {
col_name = table_row->col_name;
@@ -329,8 +345,15 @@
}
pDouble = (*table_row->getter)( pObject );
if( pDouble != NULL ) {
+ gchar* s;
+
d_value = *pDouble;
- buf = g_strdup_printf( "%s%s%g", col_name, equals, d_value );
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_DOUBLE );
+ g_value_set_double( &value, d_value );
+ s = gda_data_handler_get_sql_from_value( be->pNumHandler, &value );
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
} else {
buf = g_strdup_printf( "%s%sNULL", col_name, equals );
}
@@ -374,7 +397,7 @@
}
static gchar*
-render_guid( QofIdTypeConst obj_name, gpointer pObject,
+render_guid( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -382,7 +405,8 @@
const gchar* equals = "";
const GUID* guid;
gchar guid_buf[GUID_ENCODING_LENGTH+1];
- const gchar* s;
+ gchar* s;
+ GValue value;
if( include_name ) {
col_name = table_row->col_name;
@@ -395,7 +419,12 @@
}
if( guid != NULL ) {
(void)guid_to_string_buff( guid, guid_buf );
- buf = g_strdup_printf( "%s%s'%s'", col_name, equals, guid_buf );
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_STRING );
+ g_value_set_string( &value, guid_buf );
+ s = gda_data_handler_get_sql_from_value( be->pStrHandler, &value );
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
} else {
buf = g_strdup_printf( "%s%sNULL", col_name, equals );
}
@@ -436,14 +465,13 @@
}
static gchar*
-render_timespec( QofIdTypeConst obj_name, gpointer pObject,
+render_timespec( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
const gchar* col_name = "";
const gchar* equals = "";
gchar iso8601_buf[33];
- gchar date_buf[33];
Timespec* pTimespec;
if( include_name ) {
@@ -452,10 +480,30 @@
}
pTimespec = (Timespec*)(*table_row->getter)( pObject );
if( pTimespec != NULL ) {
+ GDate* date;
+ gchar* s;
+ gint y, m, d;
+ GValue value;
+
+ date = g_date_new();
(void)gnc_timespec_to_iso8601_buff( *pTimespec, iso8601_buf );
- strncpy( date_buf, iso8601_buf, 4+1+2+1+2 );
- date_buf[4+1+2+1+2] = '\0';
- buf = g_strdup_printf( "%s%s'%s'", col_name, equals, date_buf );
+ sscanf( iso8601_buf, "%d-%d-%d", &y, &m, &d );
+ g_date_set_dmy( date, d, m, y );
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_DATE );
+ g_value_set_boxed( &value, date );
+
+#if 0
+ s = gda_data_handler_get_sql_from_value( be->pDateHandler, &value );
+#else
+ s = g_strdup_printf( "'%d-%d-%d'",
+ g_date_get_year( date ),
+ g_date_get_month( date ),
+ g_date_get_day( date ) );
+#endif
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
+ g_date_free( date );
} else {
buf = g_strdup_printf( "%s%sNULL", col_name, equals );
}
@@ -496,7 +544,7 @@
}
static gchar*
-render_date( QofIdTypeConst obj_name, gpointer pObject,
+render_date( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -510,10 +558,22 @@
}
date = (GDate*)(*table_row->getter)( pObject );
if( date != NULL ) {
- buf = g_strdup_printf( "%s%s'%d-%d-%d'", col_name, equals,
- g_date_get_year( date ),
- g_date_get_month( date ),
- g_date_get_day( date ) );
+ gchar* s;
+ GValue value;
+
+ memset( &value, 0, sizeof( value ) );
+ g_value_init( &value, G_TYPE_DATE );
+ g_value_set_boxed( &value, date );
+#if 0
+ s = gda_data_handler_get_sql_from_value( be->pDateHandler, &value );
+#else
+ s = g_strdup_printf( "'%d-%d-%d'",
+ g_date_get_year( date ),
+ g_date_get_month( date ),
+ g_date_get_day( date ) );
+#endif
+ buf = g_strdup_printf( "%s%s%s", col_name, equals, s );
+ g_free( s );
} else {
buf = g_strdup_printf( "%s%sNULL", col_name, equals );
}
@@ -560,7 +620,7 @@
}
static gchar*
-render_numeric( QofIdTypeConst obj_name, gpointer pObject,
+render_numeric( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
@@ -569,15 +629,29 @@
pNumeric = (gnc_numeric*)(*table_row->getter) (pObject );
if( pNumeric != NULL ) {
+ gchar* s_num;
+ gchar* s_denom;
+ GValue value_num;
+ GValue value_denom;
+
v = *pNumeric;
+ memset( &value_num, 0, sizeof( value_num ) );
+ g_value_init( &value_num, G_TYPE_INT64 );
+ g_value_set_int64( &value_num, gnc_numeric_num( v ) );
+ memset( &value_denom, 0, sizeof( value_denom ) );
+ g_value_init( &value_denom, G_TYPE_INT64 );
+ g_value_set_int64( &value_denom, gnc_numeric_denom( v ) );
+ s_num = gda_data_handler_get_sql_from_value( be->pNumHandler, &value_num );
+ s_denom = gda_data_handler_get_sql_from_value( be->pNumHandler, &value_denom );
if( include_name ) {
- buf = g_strdup_printf( "%s_num=%lld, %s_denom=%lld",
- table_row->col_name, gnc_numeric_num( v ),
- table_row->col_name, gnc_numeric_denom( v ) );
+ buf = g_strdup_printf( "%s_num=%s, %s_denom=%s",
+ table_row->col_name, s_num,
+ table_row->col_name, s_denom );
} else {
- buf = g_strdup_printf( "%lld, %lld",
- gnc_numeric_num( v ), gnc_numeric_denom( v ) );
+ buf = g_strdup_printf( "%s, %s", s_num, s_denom );
}
+ g_free( s_num );
+ g_free( s_denom );
} else {
if( include_name ) {
buf = g_strdup_printf( "%s_num=NULL, %s_denom=NULL",
@@ -658,6 +732,35 @@
return pHandler;
}
+static void retrieve_guid( gpointer pObject, const gpointer pValue );
+
+static void
+retrieve_guid( gpointer pObject, const gpointer pValue )
+{
+ GUID** ppGuid = (GUID**)pObject;
+ GUID* guid = (GUID*)pValue;
+
+ *ppGuid = guid;
+}
+
+
+// Table to retrieve just the guid
+static col_cvt_t guid_table[] =
+{
+ { "guid", CT_GUID, 0, 0, NULL, NULL, retrieve_guid },
+ { NULL }
+};
+
+const GUID*
+gnc_gda_load_guid( GdaDataModel* pModel, gint row )
+{
+ const GUID* guid;
+
+ gnc_gda_load_object( pModel, row, NULL, &guid, guid_table );
+
+ return guid;
+}
+
void
gnc_gda_load_object( GdaDataModel* pModel, gint row,
QofIdTypeConst obj_name, gpointer pObject,
@@ -680,6 +783,33 @@
}
/* ================================================================= */
+GdaQuery*
+gnc_gda_create_select_query( const GncGdaBackend* be, const gchar* table_name )
+{
+ GdaQuery* query;
+ GdaQueryTarget* target;
+ GdaQueryField* allFields;
+ GdaQueryField* key;
+
+ /* SELECT */
+ query = gda_query_new( be->pDict );
+ gda_query_set_query_type( query, GDA_QUERY_TYPE_SELECT );
+
+ /* FROM */
+ target = gda_query_target_new( query, table_name );
+ gda_query_add_target( query, target, NULL );
+ g_object_unref( G_OBJECT(target) );
+
+ /* all fields */
+ allFields = gda_query_field_all_new( query, table_name );
+ gda_query_field_set_visible( allFields, TRUE );
+ gda_entity_add_field( GDA_ENTITY(query), GDA_ENTITY_FIELD(allFields) );
+ g_object_unref( G_OBJECT(allFields) );
+
+ return query;
+}
+
+/* ================================================================= */
GdaObject*
gnc_gda_execute_query( GncGdaBackend* be, GdaQuery* query )
{
@@ -733,14 +863,14 @@
}
/* ================================================================= */
static gchar*
-render_col_value( QofIdTypeConst obj_name, gpointer pObject,
+render_col_value( GncGdaBackend* be, QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
col_type_handler_t* pHandler;
pHandler = get_handler( table_row->col_type );
- buf = pHandler->render_fn( obj_name, pObject, table_row, include_name );
+ buf = pHandler->render_fn( be, obj_name, pObject, table_row, include_name );
return buf;
}
@@ -753,7 +883,7 @@
int count;
gchar* key_value;
- key_value = render_col_value( obj_name, pObject, table, TRUE );
+ key_value = render_col_value( be, obj_name, pObject, table, TRUE );
sql = g_strdup_printf( "SELECT * FROM %s WHERE %s;",
table_name, key_value );
@@ -819,7 +949,7 @@
for( col = 0; table[col].col_name != NULL; col++ ) {
if( col != 0 ) g_string_append( sql, "," );
- col_value = render_col_value( obj_name, pObject, &table[col], FALSE );
+ col_value = render_col_value( be, obj_name, pObject, &table[col], FALSE );
g_string_append( sql, col_value );
g_free( col_value );
}
@@ -852,14 +982,14 @@
for( col = 1; table[col].col_name != NULL; col++ ) {
if( col != 1 ) g_string_append( sql, "," );
- col_value = render_col_value( obj_name, pObject, &table[col], TRUE );
+ col_value = render_col_value( be, obj_name, pObject, &table[col], TRUE );
g_string_append( sql, col_value );
g_free( col_value );
}
g_string_append( sql, " WHERE " );
- col_value = render_col_value( obj_name, pObject, &table[0], TRUE );
+ col_value = render_col_value( be, obj_name, pObject, &table[0], TRUE );
g_string_append( sql, col_value );
g_free( col_value );
g_string_append( sql, ";" );
@@ -883,7 +1013,7 @@
GdaQuery* query;
gchar* col_value;
- col_value = render_col_value( obj_name, pObject, &table[0], TRUE );
+ col_value = render_col_value( be, obj_name, pObject, &table[0], TRUE );
sql = g_strdup_printf( "DELETE FROM %s WHERE %s;", table_name, col_value );
g_free( col_value );
@@ -1119,6 +1249,10 @@
printf( "gda_dict_update_dbms_meta_data() error: %s\n", error->message );
}
+ be->pStrHandler = gda_handler_string_new();
+ be->pNumHandler = gda_handler_numerical_new();
+ be->pDateHandler = gda_handler_time_new_no_locale();
+
LEAVE (" ");
}
@@ -1142,6 +1276,15 @@
g_object_unref( G_OBJECT(be->pClient ) );
be->pClient = NULL;
}
+ if( be->pStrHandler != NULL ) {
+ g_object_unref( G_OBJECT(be->pStrHandler) );
+ }
+ if( be->pNumHandler != NULL ) {
+ g_object_unref( G_OBJECT(be->pNumHandler) );
+ }
+ if( be->pDateHandler != NULL ) {
+ g_object_unref( G_OBJECT(be->pDateHandler) );
+ }
LEAVE (" ");
}
@@ -1532,6 +1675,7 @@
gnc_gda_init_price_handler();
gnc_gda_init_transaction_handler();
gnc_gda_init_slots_handler();
+ gnc_gda_init_schedxaction_handler();
gnc_gda_init_lot_handler();
}
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h 2006-11-29 22:12:09 UTC (rev 15163)
@@ -41,6 +41,10 @@
GdaConnection* pConnection;
GdaDict* pDict;
+ GdaDataHandler* pStrHandler;
+ GdaDataHandler* pNumHandler;
+ GdaDataHandler* pDateHandler;
+
QofBook *primary_book; /* The primary, main open book */
gboolean loading; /* We are performing an initial load */
};
@@ -144,6 +148,8 @@
GError** error );
void gnc_gda_create_table_if_needed( GncGdaBackend* be,
const gchar* table_name, col_cvt_t* col_table );
+const GUID* gnc_gda_load_guid( GdaDataModel* pModel, int row );
+GdaQuery* gnc_gda_create_select_query( const GncGdaBackend* be, const gchar* table_name );
G_MODULE_EXPORT const gchar *
g_module_check_init(GModule *module);
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-budget-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -32,7 +32,6 @@
#include <libgda/libgda.h>
#include "qof.h"
-#include "gnc-budget.h"
#include "gnc-backend-gda.h"
@@ -46,7 +45,6 @@
static QofLogModule log_module = GNC_MOD_BACKEND;
-static void retrieve_guid( gpointer pObject, const gpointer pValue );
static gpointer get_recurrence_mult( gpointer pObject );
static void set_recurrence_mult( gpointer pObject, const gpointer pValue );
static gpointer get_recurrence_period_type( gpointer pObject );
@@ -75,24 +73,7 @@
{ NULL }
};
-// Table to retrieve just the guid
-static col_cvt_t guid_table[] =
-{
- { "guid", CT_GUID, 0, 0, NULL, NULL, retrieve_guid },
- { NULL }
-};
-
-
/* ================================================================= */
-static void
-retrieve_guid( gpointer pObject, const gpointer pValue )
-{
- GUID** ppGuid = (GUID**)pObject;
- GUID* guid = (GUID*)pValue;
-
- *ppGuid = guid;
-}
-
static gpointer
get_recurrence_mult( gpointer pObject )
{
@@ -161,7 +142,7 @@
const GUID* guid;
GUID budget_guid;
- gnc_gda_load_object( pModel, row, GNC_ID_BUDGET, &guid, guid_table );
+ guid = gnc_gda_load_guid( pModel, row );
budget_guid = *guid;
if( pBudget == NULL ) {
@@ -183,13 +164,14 @@
static void
load_budgets( GncGdaBackend* be )
{
- gchar* buf;
+ static GdaQuery* query;
GdaObject* ret;
QofBook* pBook = be->primary_book;
- buf = g_strdup_printf( "SELECT * FROM %s", BUDGET_TABLE );
- ret = gnc_gda_execute_sql( be, buf );
- g_free( buf );
+ if( query == NULL ) {
+ query = gnc_gda_create_select_query( be, BUDGET_TABLE );
+ }
+ ret = gnc_gda_execute_query( be, query );
if( GDA_IS_DATA_MODEL( ret ) ) {
GdaDataModel* pModel = (GdaDataModel*)ret;
int numRows = gda_data_model_get_n_rows( pModel );
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -129,13 +129,14 @@
static void
load_commodities( GncGdaBackend* be )
{
- gchar* buf;
+ static GdaQuery* query;
GdaObject* ret;
gnc_commodity_table* pTable = gnc_commodity_table_get_table( be->primary_book );
- buf = g_strdup_printf( "SELECT * FROM %s", COMMODITIES_TABLE );
- ret = gnc_gda_execute_sql( be, buf );
- g_free( buf );
+ if( query == NULL ) {
+ query = gnc_gda_create_select_query( be, COMMODITIES_TABLE );
+ }
+ ret = gnc_gda_execute_query( be, query );
if( GDA_IS_DATA_MODEL( ret ) ) {
GdaDataModel* pModel = (GdaDataModel*)ret;
int numRows = gda_data_model_get_n_rows( pModel );
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -170,14 +170,15 @@
static void
load_prices( GncGdaBackend* be )
{
- gchar* buf;
+ static GdaQuery* query;
GdaObject* ret;
QofBook* pBook = be->primary_book;
GNCPriceDB* pPriceDB = gnc_book_get_pricedb( pBook );
- buf = g_strdup_printf( "SELECT * FROM %s", TABLE_NAME );
- ret = gnc_gda_execute_sql( be, buf );
- g_free( buf );
+ if( query == NULL ) {
+ query = gnc_gda_create_select_query( be, TABLE_NAME );
+ }
+ ret = gnc_gda_execute_query( be, query );
if( GDA_IS_DATA_MODEL( ret ) ) {
GdaDataModel* pModel = (GdaDataModel*)ret;
int numRows = gda_data_model_get_n_rows( pModel );
Added: gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -0,0 +1,161 @@
+/********************************************************************
+ * gnc-schedxaction-gda.c: load and save data to SQL via libgda *
+ * *
+ * 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 *
+ * the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License*
+ * along with this program; if not, contact: *
+ * *
+ * Free Software Foundation Voice: +1-617-542-5942 *
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
+ * Boston, MA 02110-1301, USA gnu at gnu.org *
+\********************************************************************/
+/** @file gnc-schedxaction-gda.c
+ * @brief load and save data to SQL
+ * @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
+ */
+
+#include "config.h"
+
+#include <glib.h>
+#include <libgda/libgda.h>
+
+#include "qof.h"
+
+#include "gnc-backend-gda.h"
+
+#include "gnc-schedxaction-gda.h"
+#include "gnc-slots-gda.h"
+
+#include "SchedXaction.h"
+
+#define SCHEDXACTION_TABLE "schedxactions"
+
+static QofLogModule log_module = GNC_MOD_BACKEND;
+
+static col_cvt_t col_table[] =
+{
+ { "guid", CT_GUID, 0, COL_NNUL|COL_PKEY, NULL,
+ (GNC_GDA_FN_GETTER)qof_entity_get_guid,
+ (GNC_GDA_FN_SETTER)qof_entity_set_guid },
+ { NULL }
+};
+
+/* ================================================================= */
+
+/* ================================================================= */
+static SchedXaction*
+load_sx( GncGdaBackend* be, GdaDataModel* pModel, int row,
+ SchedXaction* pSx )
+{
+#if 0
+ const GUID* guid;
+ GUID budget_guid;
+
+ gnc_gda_load_object( pModel, row, GNC_ID_BUDGET, &guid, guid_table );
+ budget_guid = *guid;
+
+ if( pBudget == NULL ) {
+ pBudget = gnc_budget_lookup( &budget_guid, be->primary_book );
+ if( pBudget == NULL ) {
+ pBudget = gnc_budget_new( be->primary_book );
+ }
+ }
+
+ gnc_gda_load_object( pModel, row, GNC_ID_BUDGET, pBudget, col_table );
+ gnc_gda_slots_load( be, gnc_budget_get_guid( pBudget ),
+ qof_instance_get_slots( (QofInstance*)pBudget ) );
+
+ qof_instance_mark_clean( (QofInstance*)pBudget );
+
+#endif
+ return pSx;
+}
+
+static void
+load_sxes( GncGdaBackend* be )
+{
+#if 0
+ gchar* buf;
+ GdaObject* ret;
+ QofBook* pBook = be->primary_book;
+
+ buf = g_strdup_printf( "SELECT * FROM %s", BUDGET_TABLE );
+ ret = gnc_gda_execute_sql( be, buf );
+ g_free( buf );
+ if( GDA_IS_DATA_MODEL( ret ) ) {
+ GdaDataModel* pModel = (GdaDataModel*)ret;
+ int numRows = gda_data_model_get_n_rows( pModel );
+ int r;
+
+ for( r = 0; r < numRows; r++ ) {
+ (void)load_budget( be, pModel, r, NULL );
+ }
+ }
+#endif
+}
+
+/* ================================================================= */
+static void
+create_sx_tables( GncGdaBackend* be )
+{
+#if 0
+ gnc_gda_create_table_if_needed( be, BUDGET_TABLE, col_table );
+#endif
+}
+
+/* ================================================================= */
+static void
+commit_sx( GncGdaBackend* be, QofInstance* inst )
+{
+#if 0
+ GncBudget* pBudget = (GncBudget*)inst;
+ const GUID* guid;
+
+ (void)gnc_gda_do_db_operation( be,
+ (inst->do_free ? OP_DB_DELETE : OP_DB_ADD_OR_UPDATE ),
+ BUDGET_TABLE,
+ GNC_ID_BUDGET, pBudget,
+ col_table );
+
+ // Delete old slot info
+ guid = qof_instance_get_guid( inst );
+
+ gnc_gda_slots_delete( be, guid );
+
+ // Now, commit any slots
+ if( !inst->do_free ) {
+ gnc_gda_slots_save( be, guid, qof_instance_get_slots( inst ) );
+ }
+#endif
+}
+
+/* ================================================================= */
+void
+gnc_gda_init_schedxaction_handler( void )
+{
+#if 0
+ static GncGdaDataType_t be_data =
+ {
+ GNC_GDA_BACKEND_VERSION,
+ GNC_ID_BUDGET,
+ commit_budget, /* commit */
+ load_budgets, /* initial_load */
+ create_budget_tables /* create_tables */
+ };
+
+ qof_object_register_backend( GNC_ID_BUDGET, GNC_GDA_BACKEND, &be_data );
+#endif
+}
+/* ========================== END OF FILE ===================== */
Added: gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.h
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.h 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-schedxaction-gda.h 2006-11-29 22:12:09 UTC (rev 15163)
@@ -0,0 +1,37 @@
+/********************************************************************
+ * gnc-schedxaction-gda.h: load and save data to SQL via libgda *
+ * *
+ * 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 *
+ * the License, or (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License*
+ * along with this program; if not, contact: *
+ * *
+ * Free Software Foundation Voice: +1-617-542-5942 *
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
+ * Boston, MA 02110-1301, USA gnu at gnu.org *
+\********************************************************************/
+/** @file gnc-backend-gda.h
+ * @brief load and save data to SQL via libgda
+ * @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 database via libgda
+ */
+
+#ifndef GNC_SCHEDXACTION_GDA_H_
+#define GNC_SCHEDXACTION_GDA_H_
+
+#include "qof.h"
+#include <gmodule.h>
+
+void gnc_gda_init_schedxaction_handler( void );
+
+#endif /* GNC_SCHEDXACTION_GDA_H_ */
Modified: gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c 2006-11-29 19:46:34 UTC (rev 15162)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-transaction-gda.c 2006-11-29 22:12:09 UTC (rev 15163)
@@ -58,7 +58,6 @@
static gpointer get_guid( gpointer pObject );
static void set_guid( gpointer pObject, const gpointer pValue );
-static void retrieve_guid( gpointer pObject, const gpointer pValue );
static gpointer get_tx_currency( gpointer pObject );
static void set_tx_currency( gpointer pObject, const gpointer pValue );
static gpointer get_tx_num( gpointer pObject );
@@ -89,13 +88,6 @@
{ NULL }
};
-// Table to retrieve just the guid
-static col_cvt_t guid_table[] =
-{
- { "guid", CT_GUID, 0, 0, NULL, NULL, retrieve_guid },
- { NULL }
-};
-
static gpointer get_split_tx_guid( gpointer pObject );
static void set_split_tx_guid( gpointer pObject, const gpointer pValue );
static gpointer get_split_reconcile_state( gpointer pObject );
@@ -155,15 +147,6 @@
qof_entity_set_guid( pEntity, guid );
}
-static void
-retrieve_guid( gpointer pObject, const gpointer pValue )
-{
- GUID** ppGuid = (GUID**)pObject;
- GUID* guid = (GUID*)pValue;
-
- *ppGuid = guid;
-}
-
static gpointer
get_tx_currency( gpointer pObject )
{
@@ -365,7 +348,7 @@
const GUID* guid;
GUID split_guid;
- gnc_gda_load_object( pModel, row, GNC_ID_SPLIT, &guid, guid_table );
+ guid = gnc_gda_load_guid( pModel, row );
split_guid = *guid;
if( pSplit == NULL ) {
@@ -413,7 +396,7 @@
const GUID* guid;
GUID tx_guid;
- gnc_gda_load_object( pModel, row, GNC_ID_TRANS, &guid, guid_table );
+ guid = gnc_gda_load_guid( pModel, row );
tx_guid = *guid;
if( pTx == NULL ) {
More information about the gnucash-changes
mailing list