r15108 - gnucash/branches/gda-dev - Save/restore slots associated with accounts. Note that nested slot
Phil Longstaff
plongstaff at cvs.gnucash.org
Sat Nov 11 16:15:11 EST 2006
Author: plongstaff
Date: 2006-11-11 16:15:09 -0500 (Sat, 11 Nov 2006)
New Revision: 15108
Trac: http://svn.gnucash.org/trac/changeset/15108
Modified:
gnucash/branches/gda-dev/GDA_STATUS
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-commodity-gda.c
gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c
Log:
Save/restore slots associated with accounts. Note that nested slot
path names are not stored correctly so that on load, the structure will
be flattened.
Modified: gnucash/branches/gda-dev/GDA_STATUS
===================================================================
--- gnucash/branches/gda-dev/GDA_STATUS 2006-11-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/GDA_STATUS 2006-11-11 21:15:09 UTC (rev 15108)
@@ -40,7 +40,7 @@
- Better representation for gnc_numeric - doesn't compare well
- queries
- SQLite if just a "file"
-- slots
+- handle construction of path name for nested slots
- lots
- transactions/splits
- sched transactions
Modified: gnucash/branches/gda-dev/src/backend/gda/Makefile.am
===================================================================
--- gnucash/branches/gda-dev/src/backend/gda/Makefile.am 2006-11-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/Makefile.am 2006-11-11 21:15:09 UTC (rev 15108)
@@ -21,6 +21,7 @@
gnc-budget-gda.c \
gnc-commodity-gda.c \
gnc-price-gda.c \
+ gnc-slots-gda.c \
gnc-transaction-gda.c
#noinst_HEADERS = \
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-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-account-gda.c 2006-11-11 21:15:09 UTC (rev 15108)
@@ -38,6 +38,7 @@
#include "gnc-backend-gda.h"
#include "gnc-account-gda.h"
+#include "gnc-slots-gda.h"
static QofLogModule log_module = GNC_MOD_BACKEND;
@@ -50,21 +51,18 @@
static col_cvt_t col_table[] =
{
- { "guid", CT_GUID, 0, COL_NNUL|COL_PKEY,
+ { "guid", CT_GUID, 0, COL_NNUL|COL_PKEY, NULL,
(GNC_GDA_FN_GETTER)qof_entity_get_guid,
(GNC_GDA_FN_SETTER)xaccAccountSetGUID },
- { "name", CT_STRING, 50, COL_NNUL,
- NULL, NULL, ACCOUNT_NAME_ },
- { "account_type", CT_INT, 0, COL_NNUL,
+ { "name", CT_STRING, 50, COL_NNUL, ACCOUNT_NAME_ },
+ { "account_type", CT_INT, 0, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)xaccAccountGetType,
(GNC_GDA_FN_SETTER)xaccAccountSetType },
- { "commodity_guid", CT_GUID, 0, COL_NNUL,
+ { "commodity_guid", CT_GUID, 0, COL_NNUL, NULL,
get_commodity, set_commodity },
- { "parent_guid", CT_GUID, 0, 0, get_parent, set_parent },
- { "code", CT_STRING, 100, 0,
- NULL, NULL, ACCOUNT_CODE_ },
- { "description", CT_STRING, 500, 0,
- NULL, NULL, ACCOUNT_DESCRIPTION_ },
+ { "parent_guid", CT_GUID, 0, 0, NULL, get_parent, set_parent },
+ { "code", CT_STRING, 100, 0, ACCOUNT_CODE_ },
+ { "description", CT_STRING, 500, 0, ACCOUNT_DESCRIPTION_ },
{ NULL }
};
@@ -129,6 +127,8 @@
pAccount = xaccMallocAccount( be->primary_book );
gnc_gda_load_object( pModel, row, GNC_ID_ACCOUNT, pAccount, col_table );
+ gnc_gda_slots_load( be, xaccAccountGetGUID( pAccount ),
+ qof_instance_get_slots( (QofInstance*)pAccount ) );
return pAccount;
}
@@ -144,7 +144,7 @@
gnc_commodity_table* pTable = gnc_commodity_table_get_table( pBook );
buf = g_strdup_printf( "SELECT * FROM %s", TABLE_NAME );
- query = gda_query_new_from_sql( be->pDict, "SELECT * FROM accounts", &error );
+ query = gda_query_new_from_sql( be->pDict, buf, &error );
g_free( buf );
if( query == NULL ) {
printf( "SQL error: %s\n", error->message );
@@ -181,15 +181,7 @@
static void
create_account_tables( GncGdaBackend* be )
{
- GdaDictTable* table;
- GError* error = NULL;
- GdaDictDatabase* db;
-
- db = gda_dict_get_database( be->pDict );
- table = gda_dict_database_get_table_by_name( db, TABLE_NAME );
- if( !GDA_IS_DICT_TABLE(table) ) {
- gnc_gda_create_table( be->pConnection, TABLE_NAME, col_table, &error );
- }
+ gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
/* ================================================================= */
@@ -203,6 +195,10 @@
TABLE_NAME,
GNC_ID_ACCOUNT, pAcc,
col_table );
+
+ // Now, commit any slots
+ gnc_gda_slots_save( be, qof_instance_get_guid( inst ),
+ qof_instance_get_slots( inst ) );
}
/* ================================================================= */
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-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.c 2006-11-11 21:15:09 UTC (rev 15108)
@@ -59,6 +59,7 @@
#include "gnc-budget-gda.h"
#include "gnc-commodity-gda.h"
#include "gnc-price-gda.h"
+#include "gnc-slots-gda.h"
#include "gnc-transaction-gda.h"
#ifndef HAVE_STRPTIME
@@ -178,7 +179,11 @@
gint int_value;
val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
- int_value = g_value_get_int( val );
+ if( gda_value_is_null( val ) ) {
+ int_value = 0;
+ } else {
+ int_value = g_value_get_int( val );
+ }
(*setter)( pObject, (gpointer)int_value );
}
@@ -218,6 +223,122 @@
/* ----------------------------------------------------------------- */
static void
+load_int64( GdaDataModel* pModel, gint row,
+ QofSetterFunc setter, gpointer pObject,
+ const col_cvt_t* table )
+{
+ const GValue* val;
+ gint64 i64_value;
+
+ val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ if( gda_value_is_null( val ) ) {
+ (*setter)( pObject, NULL );
+ } else {
+ i64_value = g_value_get_int64( val );
+ (*setter)( pObject, (gpointer)&i64_value );
+ }
+}
+
+static gchar*
+render_int64( QofIdTypeConst obj_name, gpointer pObject,
+ const col_cvt_t* table_row, gboolean include_name )
+{
+ gchar* buf;
+ const gchar* col_name = "";
+ const gchar* equals = "";
+ gint64* pInt64;
+ gint64 i64_value;
+
+ if( include_name ) {
+ col_name = table_row->col_name;
+ equals = "=";
+ }
+ pInt64 = (*table_row->getter)( pObject );
+ if( pInt64 != NULL ) {
+ i64_value = *pInt64;
+ buf = g_strdup_printf( "%s%s%lld", col_name, equals, i64_value );
+ } else {
+ buf = g_strdup_printf( "%s%sNULL", col_name, equals );
+ }
+
+ return buf;
+}
+
+static void
+create_int64_col( GdaServerProvider* server, GdaConnection* cnn,
+ xmlNodePtr array_data, const col_cvt_t* table_row )
+{
+ const gchar* dbms_type;
+
+ dbms_type = gda_server_provider_get_default_dbms_type( server,
+ cnn, G_TYPE_INT64 );
+ add_table_column( server, cnn, array_data, table_row->col_name,
+ dbms_type, table_row->size, table_row->flags );
+}
+
+static col_type_handler_t int64_handler =
+ { load_int64, render_int64, create_int64_col };
+/* ----------------------------------------------------------------- */
+
+static void
+load_double( GdaDataModel* pModel, gint row,
+ QofSetterFunc setter, gpointer pObject,
+ const col_cvt_t* table )
+{
+ const GValue* val;
+ gdouble d_value;
+
+ val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
+ if( gda_value_is_null( val ) ) {
+ (*setter)( pObject, (gpointer)NULL );
+ } else {
+ d_value = g_value_get_double( val );
+ (*setter)( pObject, (gpointer)&d_value );
+ }
+}
+
+static gchar*
+render_double( QofIdTypeConst obj_name, gpointer pObject,
+ const col_cvt_t* table_row, gboolean include_name )
+{
+ gchar* buf;
+ const gchar* col_name = "";
+ const gchar* equals = "";
+ gdouble* pDouble;
+ gdouble d_value;
+
+ if( include_name ) {
+ col_name = table_row->col_name;
+ equals = "=";
+ }
+ pDouble = (*table_row->getter)( pObject );
+ if( pDouble != NULL ) {
+ d_value = *pDouble;
+ buf = g_strdup_printf( "%s%s%g", col_name, equals, d_value );
+ } else {
+ buf = g_strdup_printf( "%s%sNULL", col_name, equals );
+ }
+
+ return buf;
+}
+
+static void
+create_double_col( GdaServerProvider* server, GdaConnection* cnn,
+ xmlNodePtr array_data, const col_cvt_t* table_row )
+{
+ const gchar* dbms_type;
+
+ dbms_type = gda_server_provider_get_default_dbms_type( server,
+ cnn, G_TYPE_INT64 );
+ add_table_column( server, cnn, array_data, table_row->col_name,
+ dbms_type, table_row->size, table_row->flags );
+}
+
+static col_type_handler_t double_handler =
+ { load_double, render_double, create_double_col };
+/* ----------------------------------------------------------------- */
+
+static void
load_guid( GdaDataModel* pModel, gint row,
QofSetterFunc setter, gpointer pObject,
const col_cvt_t* table )
@@ -287,11 +408,15 @@
Timespec ts;
val = gda_data_model_get_value_at_col_name( pModel, table->col_name, row );
- date = (GDate*)g_value_get_boxed( val );
- ts = gnc_dmy2timespec( g_date_get_day( date ),
- g_date_get_month( date ),
- g_date_get_year( date ) );
- (*setter)( pObject, &ts );
+ if( gda_value_is_null( val ) ) {
+ (*setter)( pObject, NULL );
+ } else {
+ date = (GDate*)g_value_get_boxed( val );
+ ts = gnc_dmy2timespec( g_date_get_day( date ),
+ g_date_get_month( date ),
+ g_date_get_year( date ) );
+ (*setter)( pObject, &ts );
+ }
}
static gchar*
@@ -303,16 +428,20 @@
const gchar* equals = "";
gchar iso8601_buf[33];
gchar date_buf[33];
+ Timespec* pTimespec;
if( include_name ) {
col_name = table_row->col_name;
equals = "=";
}
- (void)gnc_timespec_to_iso8601_buff(
- *(Timespec*)(*table_row->getter)( pObject ),
- iso8601_buf );
- strncpy( date_buf, iso8601_buf, 4+1+2+1+2 );
- buf = g_strdup_printf( "%s%s'%s'", col_name, equals, date_buf );
+ pTimespec = (Timespec*)(*table_row->getter)( pObject );
+ if( pTimespec != NULL ) {
+ (void)gnc_timespec_to_iso8601_buff( *pTimespec, iso8601_buf );
+ strncpy( date_buf, iso8601_buf, 4+1+2+1+2 );
+ buf = g_strdup_printf( "%s%s'%s'", col_name, equals, date_buf );
+ } else {
+ buf = g_strdup_printf( "%s%sNULL", col_name, equals );
+ }
return buf;
}
@@ -341,17 +470,30 @@
gchar* buf;
gint64 num, denom;
gnc_numeric n;
+ gboolean isNull = FALSE;
buf = g_strdup_printf( "%s_num", table->col_name );
val = gda_data_model_get_value_at_col_name( pModel, buf, row );
g_free( buf );
- num = g_value_get_int64( val );
+ if( gda_value_is_null( val ) ) {
+ isNull = TRUE;
+ } else {
+ num = g_value_get_int64( val );
+ }
buf = g_strdup_printf( "%s_denom", table->col_name );
val = gda_data_model_get_value_at_col_name( pModel, buf, row );
g_free( buf );
- denom = g_value_get_int64( val );
+ if( gda_value_is_null( val ) ) {
+ isNull = TRUE;
+ } else {
+ denom = g_value_get_int64( val );
+ }
n = gnc_numeric_create( num, denom );
- (*setter)( pObject, &n );
+ if( isNull ) {
+ (*setter)( pObject, NULL );
+ } else {
+ (*setter)( pObject, &n );
+ }
}
static gchar*
@@ -359,16 +501,27 @@
const col_cvt_t* table_row, gboolean include_name )
{
gchar* buf;
+ gnc_numeric* pNumeric;
gnc_numeric v;
- v = *(gnc_numeric*)(*table_row->getter) (pObject );
- if( !include_name ) {
- buf = g_strdup_printf( "%lld, %lld",
+ pNumeric = (gnc_numeric*)(*table_row->getter) (pObject );
+ if( pNumeric != NULL ) {
+ v = *pNumeric;
+ 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 ) );
+ } else {
+ buf = g_strdup_printf( "%lld, %lld",
gnc_numeric_num( v ), gnc_numeric_denom( v ) );
+ }
} else {
- 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 ) );
+ if( include_name ) {
+ buf = g_strdup_printf( "%s_num=NULL, %s_denom=NULL",
+ table_row->col_name, table_row->col_name );
+ } else {
+ buf = g_strdup( "NULL" );
+ }
}
return buf;
@@ -411,11 +564,19 @@
pHandler = &int_handler;
break;
+ case CT_INT64:
+ pHandler = &int64_handler;
+ break;
+
+ case CT_DOUBLE:
+ pHandler = &double_handler;
+ break;
+
case CT_GUID:
pHandler = &guid_handler;
break;
- case CT_DATE:
+ case CT_TIMESPEC:
pHandler = &date_handler;
break;
@@ -557,6 +718,8 @@
}
} else if( op == OP_DB_DELETE ) {
pQuery = gnc_gda_build_delete_query( be, table_name, obj_name, pObject, table );
+ } else if( op == OP_DB_ADD ) {
+ pQuery = gnc_gda_build_insert_query( be, table_name, obj_name, pObject, table );
} else {
g_assert( FALSE );
}
@@ -570,30 +733,34 @@
}
}
+#define INITIAL_SQL_BUF_LEN 500
+
GdaQuery*
gnc_gda_build_insert_query( GncGdaBackend* be,
const gchar* table_name,
QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table )
{
- char sql[1000];
+ GString* sql;
GError* error = NULL;
GdaQuery* query;
int col;
gchar* col_value;
- sprintf( sql, "INSERT INTO %s VALUES(", table_name );
+ sql = g_string_sized_new( INITIAL_SQL_BUF_LEN );
+ g_string_printf( sql, "INSERT INTO %s VALUES(", table_name );
for( col = 0; table[col].col_name != NULL; col++ ) {
- if( col != 0 ) strcat( sql, "," );
+ if( col != 0 ) g_string_append( sql, "," );
col_value = render_col_value( obj_name, pObject, &table[col], FALSE );
- strcat( sql, col_value );
+ g_string_append( sql, col_value );
g_free( col_value );
}
- strcat( sql, ");" );
+ g_string_append( sql, ");" );
- query = gda_query_new_from_sql( be->pDict, sql, &error );
+ query = gda_query_new_from_sql( be->pDict, sql->str, &error );
+ g_string_free( sql, TRUE );
if( query == NULL ) {
printf( "SQL error: %s\n", error->message );
}
@@ -606,30 +773,32 @@
QofIdTypeConst obj_name, gpointer pObject,
const col_cvt_t* table )
{
- char sql[1000];
+ GString* sql;
GError* error = NULL;
GdaQuery* query;
int col;
gchar* col_value;
- sprintf( sql, "UPDATE %s SET ", table_name );
+ sql = g_string_sized_new( INITIAL_SQL_BUF_LEN );
+ g_string_printf( sql, "UPDATE %s SET ", table_name );
for( col = 1; table[col].col_name != NULL; col++ ) {
- if( col != 1 ) strcat( sql, "," );
+ if( col != 1 ) g_string_append( sql, "," );
col_value = render_col_value( obj_name, pObject, &table[col], TRUE );
- strcat( sql, col_value );
+ g_string_append( sql, col_value );
g_free( col_value );
}
- strcat( sql, " WHERE " );
+ g_string_append( sql, " WHERE " );
col_value = render_col_value( obj_name, pObject, &table[0], TRUE );
- strcat( sql, col_value );
+ g_string_append( sql, col_value );
g_free( col_value );
- strcat( sql, ";" );
+ g_string_append( sql, ";" );
- query = gda_query_new_from_sql( be->pDict, sql, &error );
+ query = gda_query_new_from_sql( be->pDict, sql->str, &error );
+ g_string_free( sql, TRUE );
if( query == NULL ) {
printf( "SQL error: %s\n", error->message );
}
@@ -783,6 +952,22 @@
return TRUE;
}
+void gnc_gda_create_table_if_needed( GncGdaBackend* be,
+ const gchar* table_name, col_cvt_t* col_table )
+{
+ GdaDictTable* table;
+ GError* error = NULL;
+ GdaDictDatabase* db;
+
+ db = gda_dict_get_database( be->pDict );
+ table = gda_dict_database_get_table_by_name( db, table_name );
+ if( !GDA_IS_DICT_TABLE(table) ) {
+ gnc_gda_create_table( be->pConnection, table_name, col_table, &error );
+ if( error != NULL ) {
+ printf( "Error creating table: %s\n", error->message );
+ }
+ }
+}
/* ================================================================= */
static void
@@ -1172,6 +1357,7 @@
gnc_gda_init_budget_handler();
gnc_gda_init_price_handler();
gnc_gda_init_transaction_handler();
+ gnc_gda_init_slots_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-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-backend-gda.h 2006-11-11 21:15:09 UTC (rev 15108)
@@ -73,21 +73,35 @@
typedef gpointer (*GNC_GDA_FN_GETTER)( gpointer pObject );
typedef void (*GNC_GDA_FN_SETTER)( gpointer pObject, gpointer pValue );
+typedef enum {
+ CT_STRING,
+ CT_GUID,
+ CT_INT,
+ CT_INT64,
+ CT_TIMESPEC,
+ CT_NUMERIC,
+ CT_DOUBLE
+} E_COL_TYPE;
+
typedef struct {
const gchar* col_name;
- enum { CT_STRING, CT_GUID, CT_INT, CT_DATE, CT_NUMERIC } col_type;
+ E_COL_TYPE col_type;
gint size;
#define COL_PKEY 0x01
#define COL_NNUL 0x02
#define COL_UNIQUE 0x04
#define COL_AUTOINC 0x08
gint flags;
+ const char* param_name; // If non null, use qof getter/setter
GNC_GDA_FN_GETTER getter;
GNC_GDA_FN_SETTER setter;
- const char* param_name;
} col_cvt_t;
-typedef enum { OP_DB_ADD_OR_UPDATE, OP_DB_DELETE } E_DB_OPERATION;
+typedef enum {
+ OP_DB_ADD,
+ OP_DB_ADD_OR_UPDATE,
+ OP_DB_DELETE
+} E_DB_OPERATION;
gboolean gnc_gda_do_db_operation( GncGdaBackend* pBackend,
E_DB_OPERATION op,
@@ -119,6 +133,8 @@
gboolean gnc_gda_create_table( GdaConnection* pConnection,
const gchar* table_name, col_cvt_t* col_table,
GError** error );
+void gnc_gda_create_table_if_needed( GncGdaBackend* be,
+ const gchar* table_name, col_cvt_t* col_table );
G_MODULE_EXPORT const gchar *
g_module_check_init(GModule *module);
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-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-commodity-gda.c 2006-11-11 21:15:09 UTC (rev 15108)
@@ -49,30 +49,30 @@
#define TABLE_NAME "commodities"
static col_cvt_t col_table[] = {
- { "guid", CT_GUID, 0, COL_NNUL|COL_PKEY,
+ { "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 },
- { "namespace", CT_STRING, 40, COL_NNUL,
+ { "namespace", CT_STRING, 40, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_namespace,
(GNC_GDA_FN_SETTER)gnc_commodity_set_namespace },
- { "mnemonic", CT_STRING, 40, COL_NNUL,
+ { "mnemonic", CT_STRING, 40, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_mnemonic,
(GNC_GDA_FN_SETTER)gnc_commodity_set_mnemonic },
- { "fullname", CT_STRING, 100, COL_NNUL,
+ { "fullname", CT_STRING, 100, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_fullname,
(GNC_GDA_FN_SETTER)gnc_commodity_set_fullname },
- { "cusip", CT_STRING, 50, COL_NNUL,
+ { "cusip", CT_STRING, 50, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_cusip,
(GNC_GDA_FN_SETTER)gnc_commodity_set_cusip },
- { "fraction", CT_INT, 0, COL_NNUL,
+ { "fraction", CT_INT, 0, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_fraction,
(GNC_GDA_FN_SETTER)gnc_commodity_set_fraction },
- { "quote_flag", CT_INT, 0, COL_NNUL,
+ { "quote_flag", CT_INT, 0, COL_NNUL, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_quote_flag,
(GNC_GDA_FN_SETTER)gnc_commodity_set_quote_flag },
- { "quote_source", CT_STRING, 50, 0,
+ { "quote_source", CT_STRING, 50, 0, NULL,
get_quote_source_name, set_quote_source_name },
- { "quote_tz", CT_STRING, 50, 0,
+ { "quote_tz", CT_STRING, 50, 0, NULL,
(GNC_GDA_FN_GETTER)gnc_commodity_get_quote_tz,
(GNC_GDA_FN_SETTER)gnc_commodity_set_quote_tz },
{ NULL }
@@ -163,15 +163,7 @@
static void
create_commodities_tables( GncGdaBackend* be )
{
- GdaDictTable* table;
- GError* error = NULL;
- GdaDictDatabase* db;
-
- db = gda_dict_get_database( be->pDict );
- table = gda_dict_database_get_table_by_name( db, TABLE_NAME );
- if( !GDA_IS_DICT_TABLE(table) ) {
- gnc_gda_create_table( be->pConnection, TABLE_NAME, col_table, &error );
- }
+ gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
/* ================================================================= */
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-10 22:16:57 UTC (rev 15107)
+++ gnucash/branches/gda-dev/src/backend/gda/gnc-price-gda.c 2006-11-11 21:15:09 UTC (rev 15108)
@@ -53,17 +53,18 @@
static col_cvt_t col_table[] =
{
- { "guid", CT_GUID, 0, COL_NNUL|COL_PKEY,
+ { "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 },
- { "commodity_guid", CT_GUID, 0, COL_NNUL, get_commodity, set_commodity },
- { "currency_guid", CT_GUID, 0, COL_NNUL, get_currency, set_currency },
- { "date", CT_DATE, 0, COL_NNUL, get_date, set_date },
- { "source", CT_STRING, 50, 0,
- NULL, NULL, PRICE_SOURCE },
- { "type", CT_STRING, 50, 0,
- NULL, NULL, PRICE_TYPE },
- { "value", CT_NUMERIC, COL_NNUL, 0, get_value, set_value },
+ { "commodity_guid", CT_GUID, 0, COL_NNUL, NULL,
+ get_commodity, set_commodity },
+ { "currency_guid", CT_GUID, 0, COL_NNUL, NULL,
+ get_currency, set_currency },
+ { "date", CT_TIMESPEC, 0, COL_NNUL, NULL,
+ get_date, set_date },
+ { "source", CT_STRING, 50, 0, PRICE_SOURCE },
+ { "type", CT_STRING, 50, 0, PRICE_TYPE },
+ { "value", CT_NUMERIC, COL_NNUL, 0, NULL, get_value, set_value },
{ NULL }
};
@@ -204,34 +205,11 @@
static void
create_prices_tables( GncGdaBackend* be )
{
- GdaDictTable* table;
- GError* error = NULL;
- GdaDictDatabase* db;
-
- db = gda_dict_get_database( be->pDict );
- table = gda_dict_database_get_table_by_name( db, TABLE_NAME );
- if( !GDA_IS_DICT_TABLE(table) ) {
- gnc_gda_create_table( be->pConnection, TABLE_NAME, col_table, &error );
- }
+ gnc_gda_create_table_if_needed( be, TABLE_NAME, col_table );
}
/* ================================================================= */
-static gboolean
-price_exists_in_db( GncGdaBackend* be, const gchar* guid )
-{
- gchar* cmdbuf;
- int count;
- cmdbuf = g_strdup_printf( "SELECT * FROM prices WHERE guid='%s';", guid );
- count = gnc_gda_execute_select_get_count( be, cmdbuf );
- g_free( cmdbuf );
- if( count == 0 ) {
- return FALSE;
- } else {
- return TRUE;
- }
-}
-
static void
commit_price( GncGdaBackend* be, QofInstance* inst )
{
More information about the gnucash-changes
mailing list