Remove acc_guid member from splits.

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6262 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2001-12-06 09:30:25 +00:00
parent 01c9122626
commit 4a67dfe918
16 changed files with 120 additions and 145 deletions

View File

@ -332,7 +332,6 @@ gnc_account_end_handler(gpointer data_for_children,
{
int successful;
Account *acc;
xmlNodePtr achild;
xmlNodePtr tree = (xmlNodePtr)data_for_children;
gxpf_data *gdata = (gxpf_data*)global_data;
GNCBook *book = gdata->bookdata;

View File

@ -151,10 +151,7 @@ xmlNodePtr
gnc_freqSpec_dom_tree_create( FreqSpec *fs )
{
xmlNodePtr ret;
xmlNodePtr dateAnchorTmp;
xmlNodePtr xmlSub;
GString *tmpStr;
int i;
ret = xmlNewNode( NULL, "gnc:freqspec" );
xmlSetProp( ret, "version", freqspec_version_string );
@ -397,7 +394,6 @@ fs_subelement_handler( xmlNodePtr node, gpointer data )
{
fsParseData *fspd = data;
FreqSpec *fs;
gboolean successful;
fs = dom_tree_to_freqSpec( node, fspd->book );
if ( fs == NULL )
return FALSE;
@ -553,7 +549,6 @@ gnc_freqSpec_end_handler(gpointer data_for_children,
{
fsParseData fspd;
gboolean successful = FALSE;
xmlNodePtr aChild;
xmlNodePtr tree = (xmlNodePtr)data_for_children;
sixtp_gdv2 *globaldata = (sixtp_gdv2*)global_data;

View File

@ -138,7 +138,6 @@ gnc_schedXaction_dom_tree_create(SchedXaction *sx)
{
xmlNodePtr ret;
xmlNodePtr fsNode;
Timespec ts;
GDate *date;
const GUID *templ_acc_guid;
@ -355,7 +354,6 @@ sx_freqspec_handler( xmlNodePtr node, gpointer sx_pdata )
{
struct sx_pdata *pdata = sx_pdata;
SchedXaction *sx = pdata->sx;
xmlNodePtr mark;
FreqSpec *fs;
g_return_val_if_fail( node, FALSE );
@ -456,7 +454,6 @@ gnc_schedXaction_end_handler(gpointer data_for_children,
{
SchedXaction *sx;
gboolean successful = FALSE;
xmlNodePtr achild;
xmlNodePtr tree = (xmlNodePtr)data_for_children;
gxpf_data *gdata = (gxpf_data*)global_data;
struct sx_pdata sx_pdata;
@ -625,7 +622,6 @@ gnc_template_transaction_end_handler(gpointer data_for_children,
const gchar *tag)
{
gboolean successful = FALSE;
xmlNodePtr achild;
xmlNodePtr tree = data_for_children;
gxpf_data *gdata = global_data;
GNCBook *book = gdata->bookdata;

View File

@ -41,6 +41,7 @@
#include "io-gncxml-gen.h"
#include "sixtp-dom-parsers.h"
#include "AccountP.h"
#include "Transaction.h"
#include "TransactionP.h"
@ -103,11 +104,14 @@ split_to_dom_tree(const gchar *tag, Split *spl)
add_gnc_num(ret, "split:value", xaccSplitGetValue(spl));
add_gnc_num(ret, "split:quantity", xaccSplitGetAmount(spl));
xmlAddChild(ret, guid_to_dom_tree(
"split:account",
xaccSplitGetAccountGUID(spl)));
{
Account * account = xaccSplitGetAccount (spl);
xmlAddChild (ret, guid_to_dom_tree("split:account",
xaccAccountGetGUID (account)));
}
{
xmlNodePtr kvpnode = kvp_frame_to_dom_tree("split:slots",
xaccSplitGetSlots(spl));
@ -182,6 +186,12 @@ gnc_transaction_dom_tree_create(Transaction *trn)
/***********************************************************************/
struct split_pdata
{
Split *split;
GNCBook *book;
};
static gboolean
set_spl_string(xmlNodePtr node, Split *spl,
void (*func)(Split *spl, const char *txt))
@ -211,87 +221,112 @@ set_spl_gnc_num(xmlNodePtr node, Split* spl,
}
static gboolean
spl_id_handler(xmlNodePtr node, gpointer spl)
spl_id_handler(xmlNodePtr node, gpointer data)
{
struct split_pdata *pdata = data;
GUID *tmp = dom_tree_to_guid(node);
g_return_val_if_fail(tmp, FALSE);
xaccSplitSetGUID((Split*)spl, tmp);
xaccSplitSetGUID(pdata->split, tmp);
g_free(tmp);
return TRUE;
}
static gboolean
spl_memo_handler(xmlNodePtr node, gpointer spl)
spl_memo_handler(xmlNodePtr node, gpointer data)
{
return set_spl_string(node, (Split*)spl, xaccSplitSetMemo);
struct split_pdata *pdata = data;
return set_spl_string(node, pdata->split, xaccSplitSetMemo);
}
static gboolean
spl_action_handler(xmlNodePtr node, gpointer spl)
spl_action_handler(xmlNodePtr node, gpointer data)
{
return set_spl_string(node, (Split*)spl, xaccSplitSetAction);
struct split_pdata *pdata = data;
return set_spl_string(node, pdata->split, xaccSplitSetAction);
}
static gboolean
spl_reconciled_state_handler(xmlNodePtr node, gpointer spl)
spl_reconciled_state_handler(xmlNodePtr node, gpointer data)
{
struct split_pdata *pdata = data;
gchar *tmp = dom_tree_to_text(node);
g_return_val_if_fail(tmp, FALSE);
xaccSplitSetReconcile((Split*)spl, tmp[0]);
xaccSplitSetReconcile(pdata->split, tmp[0]);
g_free(tmp);
return TRUE;
}
static gboolean
spl_reconcile_date_handler(xmlNodePtr node, gpointer spl)
spl_reconcile_date_handler(xmlNodePtr node, gpointer data)
{
struct split_pdata *pdata = data;
Timespec *ts;
ts = dom_tree_to_timespec(node);
g_return_val_if_fail(ts, FALSE);
xaccSplitSetDateReconciledTS((Split*)spl, ts);
xaccSplitSetDateReconciledTS(pdata->split, ts);
g_free(ts);
return TRUE;
}
static gboolean
spl_value_handler(xmlNodePtr node, gpointer spl)
spl_value_handler(xmlNodePtr node, gpointer data)
{
return set_spl_gnc_num(node, (Split*)spl, xaccSplitSetValue);
struct split_pdata *pdata = data;
return set_spl_gnc_num(node, pdata->split, xaccSplitSetValue);
}
static gboolean
spl_quantity_handler(xmlNodePtr node, gpointer spl)
spl_quantity_handler(xmlNodePtr node, gpointer data)
{
return set_spl_gnc_num(node, (Split*)spl, xaccSplitSetAmount);
struct split_pdata *pdata = data;
return set_spl_gnc_num(node, pdata->split, xaccSplitSetAmount);
}
gboolean gnc_transaction_xml_v2_testing = FALSE;
static gboolean
spl_account_handler(xmlNodePtr node, gpointer spl)
spl_account_handler(xmlNodePtr node, gpointer data)
{
struct split_pdata *pdata = data;
GUID *id = dom_tree_to_guid(node);
Account *account;
if (!id) return FALSE;
account = xaccAccountLookup (id, pdata->book);
if (!account && gnc_transaction_xml_v2_testing &&
!guid_equal (id, xaccGUIDNULL ()))
{
account = xaccMallocAccount (pdata->book);
xaccAccountSetGUID (account, id);
xaccAccountSetCommoditySCU (account,
xaccSplitGetAmount (pdata->split).denom);
}
xaccAccountInsertSplit (account, pdata->split);
if(!id) return FALSE;
xaccSplitSetAccountGUID((Split*)spl, *id);
g_free(id);
return TRUE;
}
static gboolean
spl_slots_handler(xmlNodePtr node, gpointer spl)
spl_slots_handler(xmlNodePtr node, gpointer data)
{
struct split_pdata *pdata = data;
gboolean successful;
successful = dom_tree_to_kvp_frame_given(node, xaccSplitGetSlots (spl));
successful = dom_tree_to_kvp_frame_given(node,
xaccSplitGetSlots (pdata->split));
g_return_val_if_fail(successful, FALSE);
return TRUE;
@ -314,6 +349,7 @@ struct dom_tree_handler spl_dom_handlers[] =
Split*
dom_tree_to_split(xmlNodePtr node, GNCBook *book)
{
struct split_pdata pdata;
Split *ret;
g_return_val_if_fail (book, NULL);
@ -321,8 +357,11 @@ dom_tree_to_split(xmlNodePtr node, GNCBook *book)
ret = xaccMallocSplit(book);
g_return_val_if_fail(ret, NULL);
pdata.split = ret;
pdata.book = book;
/* this isn't going to work in a testing setup */
if(dom_tree_generic_parse(node, spl_dom_handlers, ret))
if(dom_tree_generic_parse(node, spl_dom_handlers, &pdata))
{
return ret;
}
@ -511,7 +550,6 @@ gnc_transaction_end_handler(gpointer data_for_children,
{
Transaction *trn = NULL;
gboolean successful = FALSE;
xmlNodePtr achild;
xmlNodePtr tree = (xmlNodePtr)data_for_children;
gxpf_data *gdata = (gxpf_data*)global_data;

View File

@ -227,7 +227,6 @@ test_account(int i, Account *test_act)
xmlNodePtr test_node;
gchar *filename1;
gchar *compare_msg;
FILE *cmp_file;
int fd;
test_node = gnc_account_dom_tree_create(test_act);

View File

@ -147,7 +147,6 @@ test_generation(void)
gnc_commodity *ran_com;
xmlNodePtr test_node;
gchar *filename1;
FILE *cmp_file;
int fd;
gchar *compare_msg;

View File

@ -49,8 +49,6 @@ test_db (int i, GNCPriceDB *db)
{
xmlNodePtr test_node;
gchar *filename1;
gchar *compare_msg;
FILE *cmp_file;
int fd;
test_node = gnc_pricedb_dom_tree_create (db);

View File

@ -26,11 +26,14 @@
#include "test-engine-stuff.h"
#include "test-file-stuff.h"
#include "AccountP.h"
#include "Transaction.h"
#include "GNCIdP.h"
static GNCBook *book;
extern gboolean gnc_transaction_xml_v2_testing;
static xmlNodePtr
find_appropriate_node(xmlNodePtr node, Split *spl)
{
@ -58,8 +61,9 @@ find_appropriate_node(xmlNodePtr node, Split *spl)
else if(safe_strcmp(mark2->name, "split:account") == 0)
{
GUID *accid = dom_tree_to_guid(mark2);
Account *account = xaccSplitGetAccount (spl);
if(guid_equal(accid, xaccSplitGetAccountGUID(spl)))
if(guid_equal(accid, xaccAccountGetGUID(account)))
{
account_guid_good = TRUE;
}
@ -146,8 +150,9 @@ equals_node_val_vs_split_internal(xmlNodePtr node, Split* spl)
else if(safe_strcmp(mark->name, "split:account") == 0)
{
GUID *id = dom_tree_to_guid(mark);
Account *account = xaccSplitGetAccount (spl);
if(!guid_equal(id, xaccSplitGetAccountGUID(spl)))
if(!guid_equal(id, xaccAccountGetGUID(account)))
{
printf("accounts differ\n");
g_free(id);
@ -327,11 +332,24 @@ test_transaction(void)
gnc_commodity *com;
gchar *compare_msg;
gchar *filename1;
FILE *cmp_file;
int fd;
ran_trn = get_random_transaction(book);
{
GList * node = xaccTransGetSplitList (ran_trn);
for ( ; node; node = node->next)
{
Split * s = node->data;
Account * a = xaccMallocAccount(book);
xaccAccountBeginEdit (a);
xaccAccountSetCommoditySCU (a, xaccSplitGetAmount (s).denom);
xaccAccountInsertSplit (a, s);
xaccAccountCommitEdit (a);
}
}
com = xaccTransGetCurrency (ran_trn);
test_node = gnc_transaction_dom_tree_create(ran_trn);
@ -369,6 +387,21 @@ test_transaction(void)
close(fd);
{
GList * node = xaccTransGetSplitList (ran_trn);
for ( ; node; node = node->next)
{
Split * s = node->data;
Account * a1 = xaccSplitGetAccount(s);
Account * a2 = xaccMallocAccount(book);
xaccAccountBeginEdit (a2);
xaccAccountSetCommoditySCU (a2, xaccAccountGetCommoditySCU (a1));
xaccAccountSetGUID (a2, xaccAccountGetGUID (a1));
xaccAccountCommitEdit (a2);
}
}
{
sixtp *parser;
tran_data data;
@ -376,7 +409,7 @@ test_transaction(void)
data.trn = ran_trn;
data.com = com;
data.value = i;
parser = gnc_transaction_sixtp_parser_create();
if(!gnc_xml_parse_file(parser, filename1, test_add_transaction,
@ -420,6 +453,8 @@ guile_main(int argc, char **argv)
xaccLogDisable();
gnc_transaction_xml_v2_testing = TRUE;
book = gnc_book_new ();
if(argc > 1)

View File

@ -98,8 +98,6 @@ gnc_book_partition (GNCBook *dest_book, GNCBook *src_book, Query *query)
Backend *be;
time_t now;
GList *split_list, *snode;
GNCBook *partition_book;
AccountGroup *part_topgrp;
if (!src_book || !dest_book || !query) return;
@ -131,12 +129,10 @@ gnc_book_partition (GNCBook *dest_book, GNCBook *src_book, Query *query)
/* And start moving transactions over */
for (snode = split_list; snode; snode=snode->next)
{
GList *tnode;
Split *s = snode->data;
Transaction *trans = s->parent;
gnc_book_insert_trans (dest_book, trans);
}
xaccAccountGroupCommitEdit (src_book->topgroup);
xaccAccountGroupCommitEdit (dest_book->topgroup);

View File

@ -533,7 +533,7 @@ pack_split_info (TTSplitInfo *s_info, Account *parent_acct,
Transaction *parent_trans, GNCBook *book)
{
Split *split;
kvp_frame *split_frame, *sx_frame;
kvp_frame *split_frame;
kvp_value *tmp_value;
const GUID *acc_guid;

View File

@ -160,7 +160,6 @@ xaccDupeSplit (Split *s)
split->guid = s->guid;
split->book = s->book;
xaccSplitSetAccountGUID(split, s->acc_guid);
split->parent = s->parent;
split->memo = g_cache_insert (gnc_engine_get_string_cache(), s->memo);
@ -395,50 +394,18 @@ xaccSplitSetSlots_nc(Split *s, kvp_frame *frm)
* Account funcs
********************************************************************/
Account*
xaccSplitGetAccount(Split *s)
Account *
xaccSplitGetAccount (Split *s)
{
if(!s) return NULL;
if (!s->acc)
{
s->acc = xaccAccountLookup (&s->acc_guid, s->book);
}
return s->acc;
}
const GUID *
xaccSplitGetAccountGUID(Split *split)
{
if (!split) return NULL;
return (const GUID*) &split->acc_guid;
}
void
xaccSplitSetAccount(Split *s, Account *act)
{
if (!s) return;
if(!act)
{
s->acc_guid = *xaccGUIDNULL();
}
else
{
const GUID *id = xaccAccountGetGUID(act);
s->acc_guid = *id;
}
s->acc = act;
if (!s) return NULL;
return s->acc;
}
void
xaccSplitSetAccountGUID(Split *s, GUID id)
xaccSplitSetAccount (Split *s, Account *act)
{
if (!s) return;
s->acc_guid = id;
s->acc = NULL;
if (!s) return;
s->acc = act;
}
@ -3036,6 +3003,7 @@ xaccSplitVoidFormerValue(Split *split)
kvp_frame *frame;
kvp_value *val;
gnc_numeric amt = gnc_numeric_zero();
g_return_val_if_fail(split, amt);
frame = xaccSplitGetSlots(split);
@ -3055,8 +3023,8 @@ xaccTransGetVoidTime(Transaction *tr)
{
kvp_frame *frame;
kvp_value *val;
char *iso8601_str;
Timespec void_time= {0,0};
Timespec void_time = {0,0};
g_return_val_if_fail(tr, void_time);
frame = xaccTransGetSlots(tr);

View File

@ -389,7 +389,6 @@ gnc_numeric xaccSplitGetSharePrice (Split * split);
gnc_numeric xaccSplitGetValue (Split * split);
Account * xaccSplitGetAccount (Split *split);
const GUID * xaccSplitGetAccountGUID(Split *split);
/* split types: normal stock-split */
const char *xaccSplitGetType(const Split *s);

View File

@ -80,7 +80,6 @@ struct split_s
GNCBook *book; /* The enitity table where this split is stored. */
GUID acc_guid; /* the guid of the associated account */
Account *acc; /* back-pointer to debited/credited account */
Transaction *parent; /* parent of split */
@ -214,10 +213,8 @@ void xaccSplitSetGUID (Split *split, const GUID *guid);
* routines, because they fail to actually remove the split from
* its old parent account, or insert it into its new parent account.
* Using these incorrectly is guarenteed to scramble your data
* or even lead to bizarre crashes and hangs! Achtung!
*/
void xaccSplitSetAccount(Split *s, Account *act);
void xaccSplitSetAccountGUID(Split *s, GUID id);
* or even lead to bizarre crashes and hangs! Achtung! */
void xaccSplitSetAccount(Split *s, Account *act);
/* The xaccFreeSplit() method simply frees all memory associated
* with the split. It does not verify that the split isn't

View File

@ -907,17 +907,6 @@ get_random_split(GNCBook *book, gnc_numeric num)
xaccSplitSetSharePrice(ret, oneVal);
xaccSplitSetSlots_nc(ret, get_random_kvp_frame());
{
GUID *ranguid = get_random_guid();
/* ???????? this is not enough to insert the split into an account!!
* you need to do a 'xaccAccountInsertSplit' to do that !!!
* does ths code actually work ????
*/
xaccSplitSetAccountGUID(ret, *ranguid);
g_free(ranguid);
}
return ret;
}
@ -1028,9 +1017,6 @@ get_random_transaction (GNCBook *book)
void
make_random_changes_to_transaction (GNCBook *book, Transaction *trans)
{
GList *list;
GList *node;
g_return_if_fail (trans && book);
if (xaccTransGetVoidStatus (trans))
@ -1278,7 +1264,6 @@ Query *
get_random_query(void)
{
Query *q;
Query *temp_q;
int num_terms;
num_terms = get_random_int_in_range (1, 4);

View File

@ -15,20 +15,6 @@
#include "guid.h"
static gboolean
is_null_guid(const GUID *id)
{
int i;
for(i = 0; i < 16; i++)
{
if(id->data[i] != '\0')
{
return FALSE;
}
}
return TRUE;
}
static void
run_test (void)
{
@ -72,13 +58,6 @@ run_test (void)
return;
}
if(!guid_equal(xaccAccountGetGUID(act1), xaccSplitGetAccountGUID(spl)))
{
failure("xaccSplitGetAccountGUID "
"after xaccAccountInsertSplit failed");
return;
}
/* this is weird -- we are testing an engine private function.
* is this really what is intended here ??? */
xaccAccountRemoveSplit (act1, spl);
@ -89,13 +68,6 @@ run_test (void)
__FILE__, __LINE__, "account not NULL");
return;
}
if(!is_null_guid(xaccSplitGetAccountGUID(spl)))
{
failure_args("xaccAccountRemoveSplit()",
__FILE__, __LINE__, "account guid not NULL");
return;
}
}
static void

View File

@ -39,8 +39,7 @@ run_test (void)
{
Account *acc1, *acc2;
Transaction *transaction;
gnc_numeric old_amt, new_amt, new_kvp_amt, old_val, new_val, new_kvp_val;
int rval;
gnc_numeric old_amt, new_amt, old_val, new_val;
GNCBook *book;
Timespec ts;
time_t now;