mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Fix bug 589418: commodities were not being stored properly. The old code used an INSERT if a
completely new db was being saved or if the object was a new object. This didn't handle the case where a currency (all of which are created at startup time) is used for the first time in an existing file. In this case, the commodity would *not* be stored. This was an attempt to avoid testing each time to see whether the commodity needed to be stored or not. For now, the test every time is re-instated. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18239 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
dc998a7408
commit
6356b0dcbf
@ -173,6 +173,37 @@ create_commodities_tables( GncSqlBackend* be )
|
||||
}
|
||||
|
||||
/* ================================================================= */
|
||||
static gboolean
|
||||
do_commit_commodity( GncSqlBackend* be, QofInstance* inst, gboolean force_insert )
|
||||
{
|
||||
const GUID* guid;
|
||||
gboolean is_infant;
|
||||
gint op;
|
||||
gboolean is_ok;
|
||||
|
||||
is_infant = qof_instance_get_infant( inst );
|
||||
if( qof_instance_get_destroying( inst ) ) {
|
||||
op = OP_DB_DELETE;
|
||||
} else if( be->is_pristine_db || is_infant || force_insert ) {
|
||||
op = OP_DB_INSERT;
|
||||
} else {
|
||||
op = OP_DB_UPDATE;
|
||||
}
|
||||
is_ok = gnc_sql_do_db_operation( be, op, COMMODITIES_TABLE, GNC_ID_COMMODITY, inst, col_table );
|
||||
|
||||
if( is_ok ) {
|
||||
// Now, commit any slots
|
||||
guid = qof_instance_get_guid( inst );
|
||||
if( !qof_instance_get_destroying(inst) ) {
|
||||
is_ok = gnc_sql_slots_save( be, guid, is_infant, qof_instance_get_slots( inst ) );
|
||||
} else {
|
||||
is_ok = gnc_sql_slots_delete( be, guid );
|
||||
}
|
||||
}
|
||||
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
commit_commodity( GncSqlBackend* be, QofInstance* inst )
|
||||
{
|
||||
@ -180,7 +211,7 @@ commit_commodity( GncSqlBackend* be, QofInstance* inst )
|
||||
g_return_val_if_fail( inst != NULL, FALSE );
|
||||
g_return_val_if_fail( GNC_IS_COMMODITY(inst), FALSE );
|
||||
|
||||
return gnc_sql_commit_standard_item( be, inst, COMMODITIES_TABLE, GNC_ID_COMMODITY, col_table );
|
||||
return do_commit_commodity( be, inst, FALSE );
|
||||
}
|
||||
|
||||
static gboolean
|
||||
@ -202,7 +233,7 @@ gnc_sql_save_commodity( GncSqlBackend* be, gnc_commodity* pCommodity )
|
||||
g_return_val_if_fail( pCommodity != NULL, FALSE );
|
||||
|
||||
if( !is_commodity_in_db( be, pCommodity ) ) {
|
||||
is_ok = commit_commodity( be, QOF_INSTANCE(pCommodity) );
|
||||
is_ok = do_commit_commodity( be, QOF_INSTANCE(pCommodity), TRUE );
|
||||
}
|
||||
|
||||
return is_ok;
|
||||
|
Loading…
Reference in New Issue
Block a user