From 193fd8ef8391e0ee468a79d4f0dc845f4a3adbe0 Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Mon, 20 Jan 2003 19:17:13 +0000 Subject: [PATCH] * 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 --- ChangeLog | 7 +++++++ src/engine/QueryNew.c | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index a42fb31eda..35fc89244f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2003-01-20 Derek Atkins + + * 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 * doc/Makefile.am diff --git a/src/engine/QueryNew.c b/src/engine/QueryNew.c index f6c541c4c1..7d57f713b8 100644 --- a/src/engine/QueryNew.c +++ b/src/engine/QueryNew.c @@ -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: