* src/engine/QueryNew.c -- g_list_append() can take a LONG time

and on big queries the merge can appear to take a long time.
	  So, let's use g_list_prepend() and g_list_reverse() to speed
	  up the process significantly.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7860 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Derek Atkins 2003-01-20 19:17:13 +00:00
parent 6b85475af0
commit 193fd8ef83
2 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2003-01-20 Derek Atkins <derek@ihtfp.com>
* src/engine/QueryNew.c -- g_list_append() can take a LONG time
and on big queries the merge can appear to take a long time.
So, let's use g_list_prepend() and g_list_reverse() to speed
up the process significantly.
2003-01-19 John Pierce <john@killterm.org>
* doc/Makefile.am

View File

@ -891,7 +891,13 @@ QueryNew * gncQueryInvert (QueryNew *q)
qt = copy_query_term(cur->data);
qt->invert = !(qt->invert);
new_oterm = g_list_append(NULL, qt);
retval->terms = g_list_append(retval->terms, new_oterm);
/* g_list_append() can take forever, so let's do this for speed
* in "large" queries
*/
retval->terms = g_list_reverse(retval->terms);
retval->terms = g_list_prepend(retval->terms, new_oterm);
retval->terms = g_list_reverse(retval->terms);
}
break;
@ -963,17 +969,22 @@ QueryNew * gncQueryMerge(QueryNew *q1, QueryNew *q2, QueryOp op)
retval->max_results = q1->max_results;
retval->changed = 1;
/* g_list_append() can take forever, so let's build the list in
* reverse and then reverse it at the end, to deal better with
* "large" queries.
*/
for(i=q1->terms; i; i=i->next)
{
for(j=q2->terms; j; j=j->next)
{
retval->terms =
g_list_append(retval->terms,
g_list_prepend(retval->terms,
g_list_concat
(copy_and_terms(i->data),
copy_and_terms(j->data)));
}
}
retval->terms = g_list_reverse(retval->terms);
break;
case QUERY_NAND: