mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug fixes in the Query code and transaction traversal code.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2269 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
2000-05-06 Dave Peticolas <peticola@cs.ucdavis.edu>
|
||||
|
||||
* src/engine/Query.c: g_list_sort *returns* the new first node.
|
||||
|
||||
* src/engine/Group.c
|
||||
(xaccAccountsBeginStagedTransactionTraversals): bug fix -- used wrong
|
||||
pointer type.
|
||||
(xaccSplitsBeginStagedTransactionTraversals): bug fix -- used wrong
|
||||
pointer type.
|
||||
|
||||
* src/gnome/reconcile-list.c (gnc_reconcile_list_fill): print the
|
||||
amount using the account's currency.
|
||||
|
||||
|
||||
@@ -930,7 +930,7 @@ xaccGroupGetDepth (AccountGroup *grp)
|
||||
int i, depth=0, maxdepth=0;
|
||||
if (!grp) return 0;
|
||||
|
||||
for (i=0; i<grp->numAcc; i++) {
|
||||
for (i=0; i < grp->numAcc; i++) {
|
||||
depth = xaccGroupGetDepth (grp->account[i]->children);
|
||||
if (depth > maxdepth) maxdepth = depth;
|
||||
}
|
||||
@@ -946,12 +946,12 @@ void
|
||||
xaccSplitsBeginStagedTransactionTraversals (Split **splits)
|
||||
{
|
||||
Transaction *trans;
|
||||
Split *split;
|
||||
Split **sptr;
|
||||
|
||||
if (splits == NULL) return;
|
||||
|
||||
for (split = *splits; split != NULL; split++) {
|
||||
trans = split->parent;
|
||||
for (sptr = splits; *sptr != NULL; sptr++) {
|
||||
trans = (*sptr)->parent;
|
||||
if (trans != NULL)
|
||||
trans->marker = 0;
|
||||
}
|
||||
@@ -968,12 +968,12 @@ xaccAccountBeginStagedTransactionTraversals (Account *account)
|
||||
void
|
||||
xaccAccountsBeginStagedTransactionTraversals (Account **accounts)
|
||||
{
|
||||
Account *account;
|
||||
Account **aptr;
|
||||
|
||||
if (accounts == NULL) return;
|
||||
|
||||
for (account = *accounts; account != NULL; account++)
|
||||
xaccAccountBeginStagedTransactionTraversals(account);
|
||||
for (aptr = accounts; *aptr != NULL; aptr++)
|
||||
xaccAccountBeginStagedTransactionTraversals(*aptr);
|
||||
}
|
||||
|
||||
gncBoolean
|
||||
@@ -1011,6 +1011,7 @@ xaccGroupBeginStagedTransactionTraversals (AccountGroup *grp)
|
||||
unsigned int n = 0;
|
||||
Account *acc;
|
||||
Split *s = NULL;
|
||||
|
||||
acc = xaccGroupGetAccount(grp, i);
|
||||
|
||||
if (!acc) return;
|
||||
@@ -1045,6 +1046,7 @@ xaccAccountStagedTransactionTraversal (Account *acc,
|
||||
int retval;
|
||||
while (s) {
|
||||
Transaction *trans = s->parent;
|
||||
|
||||
if (trans && (trans->marker < stage)) {
|
||||
trans->marker = stage;
|
||||
retval = callback(trans, cb_data);
|
||||
@@ -1056,6 +1058,7 @@ xaccAccountStagedTransactionTraversal (Account *acc,
|
||||
} else {
|
||||
while (s) {
|
||||
Transaction *trans = s->parent;
|
||||
|
||||
if (trans && (trans->marker < stage)) {
|
||||
trans->marker = stage;
|
||||
}
|
||||
|
||||
@@ -424,16 +424,16 @@ split_cmp_func(sort_type_t how, gconstpointer ga, gconstpointer gb) {
|
||||
char *da, *db;
|
||||
double fa, fb;
|
||||
|
||||
if(sa && !sb) return -1;
|
||||
if(!sa && sb) return 1;
|
||||
if(!sa && !sb) return 0;
|
||||
if (sa && !sb) return -1;
|
||||
if (!sa && sb) return 1;
|
||||
if (!sa && !sb) return 0;
|
||||
|
||||
ta = sa->parent;
|
||||
tb = sb->parent;
|
||||
|
||||
if (ta->orig) ta = ta->orig;
|
||||
if (tb->orig) tb = tb->orig;
|
||||
|
||||
|
||||
if ( (ta) && !(tb) ) return -1;
|
||||
if ( !(ta) && (tb) ) return +1;
|
||||
if ( !(ta) && !(tb) ) return 0;
|
||||
@@ -521,7 +521,7 @@ split_cmp_func(sort_type_t how, gconstpointer ga, gconstpointer gb) {
|
||||
return 0;
|
||||
}
|
||||
return strcmp (da, db);
|
||||
|
||||
|
||||
break;
|
||||
|
||||
case BY_MEMO:
|
||||
@@ -562,7 +562,7 @@ split_cmp_func(sort_type_t how, gconstpointer ga, gconstpointer gb) {
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case BY_AMOUNT:
|
||||
fa = (sa->damount) * (sa->share_price);
|
||||
fb = (sb->damount) * (sb->share_price);
|
||||
@@ -590,7 +590,7 @@ split_sort_func(gconstpointer a, gconstpointer b) {
|
||||
int retval;
|
||||
|
||||
assert(split_sort_query);
|
||||
|
||||
|
||||
retval = split_cmp_func(split_sort_query->primary_sort, a, b);
|
||||
if((retval == 0) &&
|
||||
(split_sort_query->secondary_sort != BY_NONE)) {
|
||||
@@ -653,14 +653,14 @@ xaccQueryGetSplits(Query * q) {
|
||||
Split ** splits;
|
||||
Split ** sptr;
|
||||
QueryTerm * qt;
|
||||
|
||||
|
||||
int total_splits_checked = 0;
|
||||
int split_count = 0;
|
||||
int acct_ok;
|
||||
int posn;
|
||||
|
||||
struct timeval start, end;
|
||||
|
||||
|
||||
gettimeofday(&start, NULL);
|
||||
|
||||
/* tmp hack alert */
|
||||
@@ -729,7 +729,7 @@ xaccQueryGetSplits(Query * q) {
|
||||
* split_sort_query is an unforgivable use of static global data...
|
||||
* I just can't figure out how else to do this sanely. */
|
||||
split_sort_query = q;
|
||||
g_list_sort(matching_splits, split_sort_func);
|
||||
matching_splits = g_list_sort(matching_splits, split_sort_func);
|
||||
|
||||
/* crop the list to limit the number of splits */
|
||||
if((split_count > q->max_splits) && (q->max_splits > -1)) {
|
||||
@@ -740,7 +740,7 @@ xaccQueryGetSplits(Query * q) {
|
||||
}
|
||||
split_count = q->max_splits;
|
||||
}
|
||||
|
||||
|
||||
/* convert the g_list into a split array. */
|
||||
splits = g_new0(Split *, split_count+1);
|
||||
posn = 0;
|
||||
|
||||
Reference in New Issue
Block a user