[Gnucash-changes] Neil Williams' QOF sync patch.
Derek Atkins
warlord at cvs.gnucash.org
Sun Jan 30 16:06:23 EST 2005
Log Message:
-----------
Neil Williams' QOF sync patch.
* This patch updates the QOF merge code to current QOF to bring
the HEAD branch into sync. This update also makes
qof_book_merge_param_as_string output strings that are
compatible with QSF: using false instead of FALSE in string
output and using the QSF_XSD_TIME for the datestrings.
Modified Files:
--------------
gnucash:
ChangeLog
gnucash/src/backend/file:
Makefile.am
gnucash/src/backend/file/test:
Makefile.am
gnucash/src/engine:
Account.c
Account.h
AccountP.h
Group.h
Transaction.c
gnc-filepath-utils.c
gnc-lot.c
gnc-lot.h
qof_book_merge.c
qofclass.h
qofquery-deserial.c
qofquery-serialize.c
qofsession-p.h
qofsession.c
qofsession.h
qofsql.c
gnucash/src/engine/test:
Makefile.am
test-book-merge.c
gnucash/src/gnome:
druid-merge.c
Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1884
retrieving revision 1.1885
diff -LChangeLog -LChangeLog -u -r1.1884 -r1.1885
--- ChangeLog
+++ ChangeLog
@@ -1,3 +1,18 @@
+2005-01-30 Derek Atkins <derek at ihtfp.com>
+
+ * src/engine/Account.c:
+ This patch fixes: (QofAccessFunc)xaccAccountSetNonStdSCU in
+ src/engine/Account.c - that's a Set routine allocated as a
+ QofAccessFunc - the patch changes it to the appropriate Get
+ routine - the QofSetterFunc is OK.
+
+ Neil Williams' QOF sync patch:
+ * This patch updates the QOF merge code to current QOF to bring
+ the HEAD branch into sync. This update also makes
+ qof_book_merge_param_as_string output strings that are
+ compatible with QSF: using false instead of FALSE in string
+ output and using the QSF_XSD_TIME for the datestrings.
+
2005-01-29 Derek Atkins <derek at ihtfp.com>
David Montenegro's patch for bugs #95551, #124367.
Index: Makefile.am
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/Makefile.am,v
retrieving revision 1.18
retrieving revision 1.19
diff -Lsrc/backend/file/Makefile.am -Lsrc/backend/file/Makefile.am -u -r1.18 -r1.19
--- src/backend/file/Makefile.am
+++ src/backend/file/Makefile.am
@@ -9,9 +9,10 @@
-I${top_srcdir}/src/gnc-module \
-I${top_srcdir}/src/core-utils\
-I${top_srcdir}/lib/libc\
- $(GNOME_XML_CFLAGS) \
+ ${GNOME_XML_CFLAGS} \
${GLIB_CFLAGS}
+
libgncmod_backend_file_la_SOURCES = \
gncmod-backend-file.c \
gnc-account-xml-v2.c \
Index: Makefile.am
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/test/Makefile.am,v
retrieving revision 1.30
retrieving revision 1.31
diff -Lsrc/backend/file/test/Makefile.am -Lsrc/backend/file/test/Makefile.am -u -r1.30 -r1.31
--- src/backend/file/test/Makefile.am
+++ src/backend/file/test/Makefile.am
@@ -67,7 +67,6 @@
-I${top_srcdir}/src/engine \
-I${top_srcdir}/src/engine/test-core \
-I${top_srcdir}/src/backend/file \
- $(GNOME_XML_CFLAGS) \
${GLIB_CFLAGS} \
${GUILE_INCS}
Index: qofsql.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsql.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -Lsrc/engine/qofsql.c -Lsrc/engine/qofsql.c -u -r1.6 -r1.7
--- src/engine/qofsql.c
+++ src/engine/qofsql.c
@@ -129,12 +129,13 @@
static inline char *
dequote_string (char *str)
{
+ size_t len;
/* strip out quotation marks ... */
if (('\'' == str[0]) ||
('\"' == str[0]))
{
str ++;
- size_t len = strlen(str);
+ len = strlen(str);
str[len-1] = 0;
}
return str;
@@ -145,7 +146,20 @@
{
char tmpbuff[128];
GSList *param_list;
+ GList *guid_list;
QofQueryPredData *pred_data = NULL;
+ sql_field_item *sparam, *svalue;
+ char * qparam_name, *qvalue_name, *table_name, *param_name;
+ char *sep, *path,*str,*p;
+ QofQuery *qq;
+ KvpValue *kv, *kval;
+ KvpValueType kvt;
+ QofQueryCompare qop;
+ time_t exact;
+ int rc, len;
+ Timespec ts;
+ QofType param_type;
+ QofGuidMatch gm;
if (NULL == cond)
{
@@ -161,14 +175,14 @@
PWARN("missing left paramter");
return NULL;
}
- sql_field_item * sparam = cond->d.pair.left->item;
+ sparam = cond->d.pair.left->item;
if (SQL_name != sparam->type)
{
PWARN("we support only paramter names at this time (parsed %d)",
sparam->type);
return NULL;
}
- char * qparam_name = sparam->d.name->data;
+ qparam_name = sparam->d.name->data;
if (NULL == qparam_name)
{
PWARN ("missing paramter name");
@@ -183,13 +197,13 @@
PWARN ("missing right paramter");
return NULL;
}
- sql_field_item * svalue = cond->d.pair.right->item;
+ svalue = cond->d.pair.right->item;
if (SQL_name != svalue->type)
{
PWARN("we support only simple values (parsed as %d)", svalue->type);
return NULL;
}
- char * qvalue_name = svalue->d.name->data;
+ qvalue_name = svalue->d.name->data;
if (NULL == qvalue_name)
{
PWARN("missing value");
@@ -207,11 +221,11 @@
PWARN ("missing kvp frame");
return NULL;
}
- KvpValue *kv = kvp_frame_get_value (query->kvp_join, qvalue_name+5);
+ kv = kvp_frame_get_value (query->kvp_join, qvalue_name+5);
/* If there's no value, its not an error;
* we just don't do this predicate */
if (!kv) return NULL;
- KvpValueType kvt = kvp_value_get_type (kv);
+ kvt = kvp_value_get_type (kv);
tmpbuff[0] = 0x0;
qvalue_name = tmpbuff;
@@ -251,7 +265,6 @@
param_list = qof_query_build_param_list (qparam_name, NULL);
/* Get the where-term comparison operator */
- QofQueryCompare qop;
switch (cond->op)
{
case SQL_eq: qop = QOF_COMPARE_EQUAL; break;
@@ -270,8 +283,6 @@
/* OK, need to know the type of the thing being matched
* in order to build the correct predicate. Get the type
* from the object parameters. */
- char *table_name;
- char *param_name;
get_table_and_param (qparam_name, &table_name, ¶m_name);
if (NULL == table_name)
{
@@ -290,7 +301,7 @@
return NULL;
}
- QofType param_type = qof_class_get_parameter_type (table_name, param_name);
+ param_type = qof_class_get_parameter_type (table_name, param_name);
if (!param_type)
{
PWARN ("The parameter \'%s\' on object \'%s\' is not known",
@@ -339,14 +350,12 @@
/* work around highly bogus locale setting */
qof_date_format_set(QOF_DATE_FORMAT_US);
- time_t exact;
- int rc = qof_scan_date_secs (qvalue_name, &exact);
+ rc= qof_scan_date_secs (qvalue_name, &exact);
if (0 == rc)
{
PWARN ("unable to parse date: %s", qvalue_name);
return NULL;
}
- Timespec ts;
ts.tv_sec = exact;
ts.tv_nsec = 0;
pred_data = qof_query_date_predicate (qop, QOF_DATE_MATCH_DAY, ts);
@@ -377,9 +386,9 @@
// XXX less, than greater than don't make sense,
// should check for those bad conditions
- QofGuidMatch gm = QOF_GUID_MATCH_ANY;
+ gm = QOF_GUID_MATCH_ANY;
if (QOF_COMPARE_NEQ == qop) gm = QOF_GUID_MATCH_NONE;
- GList *guid_list = g_list_append (NULL, &guid);
+ guid_list = g_list_append (NULL, &guid);
pred_data = qof_query_guid_predicate (gm, guid_list);
g_list_free (guid_list);
@@ -389,12 +398,11 @@
/* We are expecting an encoded value that looks like
* /some/path/string:value
*/
- char *sep = strchr (qvalue_name, ':');
+ sep = strchr (qvalue_name, ':');
if (!sep) return NULL;
*sep = 0;
- char * path = qvalue_name;
- char * str = sep +1;
- char * p;
+ path = qvalue_name;
+ str = sep +1;
/* If str has only digits, we know its a plain number.
* If its numbers and a decimal point, assume a float
* If its numbers and a slash, assume numeric
@@ -402,8 +410,8 @@
* If it looks like an iso date ...
* else assume its a string.
*/
- KvpValue *kval = NULL;
- int len = strlen (str);
+ kval = NULL;
+ len = strlen (str);
if ((32 == len) && (32 == strspn (str, "0123456789abcdef")))
{
GUID guid;
@@ -455,7 +463,7 @@
return NULL;
}
- QofQuery *qq = qof_query_create();
+ qq = qof_query_create();
qof_query_add_term (qq, param_list, pred_data, QOF_QUERY_FIRST_TERM);
return qq;
}
@@ -465,6 +473,9 @@
static QofQuery *
handle_where (QofSqlQuery *query, sql_where *swear)
{
+ QofQueryOp qop;
+ QofQuery * qq;
+
switch (swear->type)
{
case SQL_pair:
@@ -473,7 +484,6 @@
QofQuery *qright = handle_where (query, swear->d.pair.right);
if (NULL == qleft) return qright;
if (NULL == qright) return qleft;
- QofQueryOp qop;
switch (swear->d.pair.op)
{
case SQL_and: qop = QOF_QUERY_AND; break;
@@ -484,7 +494,7 @@
qof_query_destroy (qright);
return NULL;
}
- QofQuery * qq = qof_query_merge (qleft, qright, qop);
+ qq = qof_query_merge (qleft, qright, qop);
qof_query_destroy (qleft);
qof_query_destroy (qright);
return qq;
@@ -511,11 +521,14 @@
static void
handle_sort_order (QofSqlQuery *query, GList *sorder_list)
{
- if (!sorder_list) return;
-
GSList *qsp[3];
+ GList *n;
gboolean direction[3];
int i;
+ sql_order_field *sorder;
+ char * qparam_name;
+
+ if (!sorder_list) return;
for (i=0; i<3; i++)
{
@@ -524,14 +537,14 @@
if (sorder_list)
{
- sql_order_field *sorder = sorder_list->data;
+ sorder = sorder_list->data;
/* Set the sort direction */
if (SQL_asc == sorder->order_type) direction[i] = TRUE;
/* Find the paramter name */
- char * qparam_name = NULL;
- GList *n = sorder->name;
+ qparam_name = NULL;
+ n = sorder->name;
if (n)
{
qparam_name = n->data;
@@ -559,6 +572,10 @@
void
qof_sql_query_parse (QofSqlQuery *query, const char *str)
{
+ GList *tables;
+ sql_select_statement *sss;
+ sql_where *swear;
+
if (!query) return;
/* Delete old query, if any */
@@ -590,14 +607,14 @@
* user wrote "SELECT * FROM tableA, tableB WHERE ..."
* then we don't have a single unique table-name.
*/
- GList *tables = sql_statement_get_tables (query->parse_result);
+ tables = sql_statement_get_tables (query->parse_result);
if (1 == g_list_length (tables))
{
query->single_global_tablename = tables->data;
}
- sql_select_statement *sss = query->parse_result->statement;
- sql_where * swear = sss->where;
+ sss = query->parse_result->statement;
+ swear = sss->where;
if (swear)
{
/* Walk over the where terms, turn them into QOF predicates */
@@ -625,7 +642,7 @@
GList *
qof_sql_query_run (QofSqlQuery *query, const char *str)
{
- GList *node;
+ GList *node, *results;
if (!query) return NULL;
@@ -635,7 +652,7 @@
qof_query_set_book (query->qof_query, query->book);
// qof_query_print (query->qof_query);
- GList *results = qof_query_run (query->qof_query);
+ results = qof_query_run (query->qof_query);
return results;
}
@@ -643,7 +660,7 @@
GList *
qof_sql_query_rerun (QofSqlQuery *query)
{
- GList *node;
+ GList *node, *results;
if (!query) return NULL;
@@ -652,7 +669,7 @@
qof_query_set_book (query->qof_query, query->book);
// qof_query_print (query->qof_query);
- GList *results = qof_query_run (query->qof_query);
+ results = qof_query_run (query->qof_query);
return results;
}
Index: AccountP.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/AccountP.h,v
retrieving revision 1.63
retrieving revision 1.64
diff -Lsrc/engine/AccountP.h -Lsrc/engine/AccountP.h -u -r1.63 -r1.64
--- src/engine/AccountP.h
+++ src/engine/AccountP.h
@@ -62,6 +62,8 @@
* This is the *private* header for the account structure.
* No one outside of the engine should ever include this file.
*/
+
+/** \struct Account */
struct account_s
{
QofInstance inst;
Index: qofsession-p.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession-p.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/engine/qofsession-p.h -Lsrc/engine/qofsession-p.h -u -r1.4 -r1.5
--- src/engine/qofsession-p.h
+++ src/engine/qofsession-p.h
@@ -32,18 +32,20 @@
#include "qofbook.h"
#include "qofsession.h"
+/** \struct QofSession
+*/
struct _QofSession
{
- /* A book holds pointers to the various types of datasets used
+ /** A book holds pointers to the various types of datasets used
* by GnuCash. A session may have open multiple books. */
GList *books;
- /* The requested book id, in the form or a URI, such as
+ /** The requested book id, in the form or a URI, such as
* file:/some/where, or sql:server.host.com:555
*/
char *book_id;
- /* If any book subroutine failed, this records the failure reason
+ /** If any book subroutine failed, this records the failure reason
* (file not found, etc).
* This is a 'stack' that is one deep. (Should be deeper ??)
* FIXME: Each backend has its own error stack. The session
@@ -54,7 +56,7 @@
char *error_message;
/* ---------------------------------------------------- */
- /* Pointer to the backend that is actually used to move data
+ /** Pointer to the backend that is actually used to move data
* between the persistant store and the local engine. */
QofBackend *backend;
};
@@ -68,4 +70,3 @@
QofBackend* gncBackendInit_file(const char *book_id, void *data);
#endif
-
Index: qofquery-deserial.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofquery-deserial.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lsrc/engine/qofquery-deserial.c -Lsrc/engine/qofquery-deserial.c -u -r1.1 -r1.2
--- src/engine/qofquery-deserial.c
+++ src/engine/qofquery-deserial.c
@@ -182,11 +182,15 @@
static QofQueryPredData * \
SUBRNAME (xmlNodePtr root) \
{ \
- xmlNodePtr xp = root->xmlChildrenNode; \
+ QofQueryPredData *pred; \
+ xmlNodePtr xp; \
xmlNodePtr node; \
+ QofQueryCompare how; \
+ CTYPE val; \
+ xp = root->xmlChildrenNode; \
\
- QofQueryCompare how = QOF_COMPARE_EQUAL; \
- CTYPE val = 0; \
+ how = QOF_COMPARE_EQUAL; \
+ val = 0; \
\
for (node=xp; node; node = node->next) \
{ \
@@ -197,7 +201,6 @@
{} \
} \
\
- QofQueryPredData *pred; \
pred = PRED (how, val); \
return pred; \
}
@@ -245,12 +248,17 @@
static QofQueryPredData *
qof_query_pred_kvp_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ QofQueryCompare how;
+ GSList *path;
+ KvpValue *value;
+ QofQueryPredData *pred;
+ xmlNodePtr xp;
xmlNodePtr node;
- QofQueryCompare how = QOF_COMPARE_EQUAL;
- GSList *path = NULL;
- KvpValue *value = NULL;
+ how = QOF_COMPARE_EQUAL;
+ xp = root->xmlChildrenNode;
+ path = NULL;
+ value = NULL;
for (node=xp; node; node = node->next)
{
@@ -271,7 +279,6 @@
GET_DATE(&value, wrap_new_timespec, "qofquery:date");
}
- QofQueryPredData *pred;
pred = qof_query_kvp_predicate (how, path, value);
g_slist_free (path);
return pred;
@@ -282,12 +289,18 @@
static QofQueryPredData *
qof_query_pred_guid_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ GList *guid_list, *n;
+ const char *str;
+ GUID *guid;
+ gboolean decode;
+ QofQueryPredData *pred;
+ QofGuidMatch sm;
+ xmlNodePtr xp;
xmlNodePtr node;
- GList *guid_list = NULL;
-
- QofGuidMatch sm = QOF_GUID_MATCH_ANY;
+ guid_list = NULL;
+ sm = QOF_GUID_MATCH_ANY;
+ xp = root->xmlChildrenNode;
for (node=xp; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
@@ -298,9 +311,9 @@
if (0 == strcmp ("qofquery:guid", node->name))
{
- const char *str = GET_TEXT (node);
- GUID *guid = guid_malloc ();
- gboolean decode = string_to_guid (str, guid);
+ str = GET_TEXT (node);
+ guid = guid_malloc ();
+ decode = string_to_guid (str, guid);
if (decode)
{
guid_list = g_list_append (guid_list, guid);
@@ -313,11 +326,9 @@
}
}
- QofQueryPredData *pred;
pred = qof_query_guid_predicate (sm, guid_list);
/* The predicate made a copy of everything, so free our stuff */
- GList *n;
for (n=guid_list; n; n=n->next)
{
guid_free (n->data);
@@ -331,11 +342,15 @@
static QofQueryPredData *
qof_query_pred_char_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ QofQueryPredData *pred;
+ QofCharMatch sm;
+ const char * char_list;
+ xmlNodePtr xp;
xmlNodePtr node;
- QofCharMatch sm = QOF_CHAR_MATCH_ANY;
- const char * char_list = NULL;
+ char_list = NULL;
+ xp = root->xmlChildrenNode;
+ sm = QOF_CHAR_MATCH_ANY;
for (node=xp; node; node = node->next)
{
@@ -348,7 +363,6 @@
{}
}
- QofQueryPredData *pred;
pred = qof_query_char_predicate (sm, char_list);
return pred;
}
@@ -358,12 +372,16 @@
static QofQueryPredData *
qof_query_pred_numeric_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ QofQueryPredData *pred;
xmlNodePtr node;
-
- QofQueryCompare how = QOF_COMPARE_EQUAL;
- QofNumericMatch sm = QOF_NUMERIC_MATCH_ANY;
+ QofQueryCompare how;
+ QofNumericMatch sm;
gnc_numeric num;
+ xmlNodePtr xp;
+
+ xp = root->xmlChildrenNode;
+ how = QOF_COMPARE_EQUAL;
+ sm = QOF_NUMERIC_MATCH_ANY;
for (node=xp; node; node = node->next)
{
@@ -376,7 +394,6 @@
{}
}
- QofQueryPredData *pred;
pred = qof_query_numeric_predicate (how, sm, num);
return pred;
}
@@ -386,12 +403,18 @@
static QofQueryPredData *
qof_query_pred_date_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ xmlNodePtr xp;
xmlNodePtr node;
+ QofQueryCompare how;
+ QofDateMatch sm;
+ Timespec date;
+ QofQueryPredData *pred;
+
+ xp = root->xmlChildrenNode;
- QofQueryCompare how = QOF_COMPARE_EQUAL;
- QofDateMatch sm = QOF_DATE_MATCH_ROUNDED;
- Timespec date = {0,0};
+ how = QOF_COMPARE_EQUAL;
+ sm = QOF_DATE_MATCH_ROUNDED;
+ date = (Timespec){0,0};
for (node=xp; node; node = node->next)
{
@@ -404,7 +427,6 @@
{}
}
- QofQueryPredData *pred;
pred = qof_query_date_predicate (how, sm, date);
return pred;
}
@@ -414,13 +436,19 @@
static QofQueryPredData *
qof_query_pred_string_from_xml (xmlNodePtr root)
{
- xmlNodePtr xp = root->xmlChildrenNode;
+ QofQueryPredData *pred;
+ xmlNodePtr xp;
xmlNodePtr node;
-
- QofQueryCompare how = QOF_COMPARE_EQUAL;
- QofStringMatch sm = QOF_STRING_MATCH_CASEINSENSITIVE;
- gboolean is_regex = FALSE;
- const char *pstr = NULL;
+ QofQueryCompare how;
+ QofStringMatch sm;
+ gboolean is_regex;
+ const char *pstr;
+
+ xp = root->xmlChildrenNode;
+ how = QOF_COMPARE_EQUAL;
+ sm = QOF_STRING_MATCH_CASEINSENSITIVE;
+ is_regex = FALSE;
+ pstr = NULL;
for (node=xp; node; node = node->next)
{
@@ -433,8 +461,6 @@
STRING_MATCH, NORMAL, CASEINSENSITIVE);
{}
}
-
- QofQueryPredData *pred;
pred = qof_query_string_predicate (how, pstr, sm , is_regex);
return pred;
}
@@ -444,9 +470,12 @@
static GSList *
qof_query_param_path_from_xml (xmlNodePtr root)
{
- xmlNodePtr pterms = root->xmlChildrenNode;
- GSList *plist = NULL;
+ xmlNodePtr pterms;
+ GSList *plist;
xmlNodePtr node;
+
+ pterms = root->xmlChildrenNode;
+ plist = NULL;
for (node=pterms; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
@@ -466,18 +495,23 @@
qof_query_term_from_xml (QofQuery *q, xmlNodePtr root)
{
xmlNodePtr node;
- xmlNodePtr term = root->xmlChildrenNode;
- QofQueryPredData *pred = NULL;
- GSList *path = NULL;
-
+ xmlNodePtr term;
+ QofQueryPredData *pred;
+ GSList *path;
+ QofQuery *qt;
+ QofQuery *qinv;
+
+ pred = NULL;
+ path = NULL;
+ term = root->xmlChildrenNode;
for (node=term; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
if (0 == strcmp (node->name, "qofquery:invert"))
{
- QofQuery *qt = qof_query_create();
+ qt = qof_query_create();
qof_query_term_from_xml (qt, node);
- QofQuery *qinv = qof_query_invert (qt);
+ qinv = qof_query_invert (qt);
qof_query_merge_in_place (q, qinv, QOF_QUERY_AND);
qof_query_destroy (qinv);
qof_query_destroy (qt);
@@ -553,8 +587,10 @@
static void
qof_query_and_terms_from_xml (QofQuery *q, xmlNodePtr root)
{
- xmlNodePtr andterms = root->xmlChildrenNode;
+ xmlNodePtr andterms;
xmlNodePtr node;
+
+ andterms = root->xmlChildrenNode;
for (node=andterms; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
@@ -571,16 +607,18 @@
static void
qof_query_or_terms_from_xml (QofQuery *q, xmlNodePtr root)
{
- xmlNodePtr andterms = root->xmlChildrenNode;
+ xmlNodePtr andterms;
xmlNodePtr node;
+ QofQuery *qand;
+ andterms = root->xmlChildrenNode;
for (node=andterms; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
if (0 == strcmp (node->name, "qofquery:and-terms"))
{
- QofQuery *qand = qof_query_create ();
+ qand = qof_query_create ();
qof_query_and_terms_from_xml (qand, node);
qof_query_merge_in_place (q, qand, QOF_QUERY_OR);
qof_query_destroy (qand);
@@ -594,10 +632,13 @@
qof_query_from_xml (xmlNodePtr root)
{
QofQuery *q;
+ xmlChar *version;
+ xmlNodePtr qpart;
+ xmlNodePtr node;
if (!root) return NULL;
- xmlChar * version = xmlGetProp(root, "version");
+ version = xmlGetProp(root, "version");
if (!root->name || strcmp ("qof:qofquery", root->name))
{
// XXX something is wrong. warn ...
@@ -606,8 +647,7 @@
q = qof_query_create ();
- xmlNodePtr qpart = root->xmlChildrenNode;
- xmlNodePtr node;
+ qpart = root->xmlChildrenNode;
for (node=qpart; node; node = node->next)
{
if (node->type != XML_ELEMENT_NODE) continue;
@@ -643,6 +683,7 @@
{
QofQuery *q, *qnew;
QofSqlQuery *sq;
+ xmlNodePtr topnode;
guid_init();
qof_query_init();
Index: Account.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Account.c,v
retrieving revision 1.280
retrieving revision 1.281
diff -Lsrc/engine/Account.c -Lsrc/engine/Account.c -u -r1.280 -r1.281
--- src/engine/Account.c
+++ src/engine/Account.c
@@ -1255,7 +1255,8 @@
xaccAccountCommitEdit(acc);
}
-void qofAccountSetParent (Account *acc, QofEntity *parent)
+static void
+qofAccountSetParent (Account *acc, QofEntity *parent)
{
AccountGroup *ag;
if((!acc)||(!parent)) return;
Index: Account.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Account.h,v
retrieving revision 1.138
retrieving revision 1.139
diff -Lsrc/engine/Account.h -Lsrc/engine/Account.h -u -r1.138 -r1.139
--- src/engine/Account.h
+++ src/engine/Account.h
@@ -214,19 +214,6 @@
void xaccAccountSetLastNum (Account *account, const char *num);
/** Set the account's type */
GNCAccountType xaccAccountGetType (Account *account);
-/** \brief Special function only for qof_book_merge
-
-qofAccountSetParent uses a specific QofEntity that is
-set during a qof_book_merge and it refers to the
-corresponding QofEntity in the target book. This is used
-to link new accounts into an existing AccountGroup. The
-parent reference is only changed if no parent exists.
-
-Care is needed before this function can be used in any
-other manner.
-*/
-void qofAccountSetParent (Account *, QofEntity *);
-
/** Get the account's name */
const char * xaccAccountGetName (Account *account);
Index: qofsession.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -Lsrc/engine/qofsession.h -Lsrc/engine/qofsession.h -u -r1.8 -r1.9
--- src/engine/qofsession.h
+++ src/engine/qofsession.h
@@ -92,6 +92,7 @@
/* PROTOTYPES ******************************************************/
+/** QofSession definition */
typedef struct _QofSession QofSession;
QofSession * qof_session_new (void);
Index: Transaction.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Transaction.c,v
retrieving revision 1.317
retrieving revision 1.318
diff -Lsrc/engine/Transaction.c -Lsrc/engine/Transaction.c -u -r1.317 -r1.318
--- src/engine/Transaction.c
+++ src/engine/Transaction.c
@@ -3253,7 +3253,7 @@
{
static const QofParam params[] = {
{ SPLIT_DATE_RECONCILED, QOF_TYPE_DATE,
- (QofAccessFunc)xaccSplitRetDateReconciledTS, NULL },
+ (QofAccessFunc)xaccSplitRetDateReconciledTS, (QofSetterFunc)xaccSplitSetDateReconciledTS },
/* d-* are depricated query params, should not be used in new
* queries, should be removed from old queries. */
Index: Group.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/Group.h,v
retrieving revision 1.74
retrieving revision 1.75
diff -Lsrc/engine/Group.h -Lsrc/engine/Group.h -u -r1.74 -r1.75
--- src/engine/Group.h
+++ src/engine/Group.h
@@ -78,7 +78,13 @@
/** Return the book to which this account belongs */
QofBook * xaccGroupGetBook (AccountGroup *group);
-/** DOCUMENT ME! */
+/** Compare two account groups
+
+warns if one is NULL, if one has no accounts or if the two
+groups have different numbers of accounts.
+
+ at return TRUE if the two account groups are equal, FALSE otherwise.
+*/
gboolean xaccGroupEqual(AccountGroup *a, AccountGroup *b,
gboolean check_guids);
Index: qofsession.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofsession.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -Lsrc/engine/qofsession.c -Lsrc/engine/qofsession.c -u -r1.15 -r1.16
--- src/engine/qofsession.c
+++ src/engine/qofsession.c
@@ -345,6 +345,7 @@
static void
load_backend_library (const char * libso, const char * loadfn)
{
+ void (*initfn) (void);
void *dl_hand = dlopen (libso, RTLD_LAZY);
if (NULL == dl_hand)
{
@@ -352,7 +353,7 @@
PERR("Can't load %s backend, %s\n", libso, err_str);
return;
}
- void (*initfn) (void) = dlsym (dl_hand, loadfn);
+ initfn = dlsym (dl_hand, loadfn);
if (initfn)
{
(*initfn)();
@@ -368,6 +369,7 @@
qof_session_load_backend(QofSession * session, char * access_method)
{
GSList *p;
+ GList *node;
ENTER (" ");
/* If the provider list is null, try to register the 'well-known'
@@ -390,7 +392,6 @@
session->backend = (*(prov->backend_new))();
/* Tell the books about the backend that they'll be using. */
- GList *node;
for (node=session->books; node; node=node->next)
{
QofBook *book = node->data;
Index: gnc-filepath-utils.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-filepath-utils.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lsrc/engine/gnc-filepath-utils.c -Lsrc/engine/gnc-filepath-utils.c -u -r1.1 -r1.2
--- src/engine/gnc-filepath-utils.c
+++ src/engine/gnc-filepath-utils.c
@@ -21,7 +21,7 @@
/*
* @file gnc-filepath-utils.c
- * @breif file path resolutionutilities
+ * @brief file path resolutionutilities
* @author Copyright (c) 1998-2004 Linas Vepstas <linas at linas.org>
* @author Copyright (c) 2000 Dave Peticolas
*
Index: qof_book_merge.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qof_book_merge.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lsrc/engine/qof_book_merge.c -Lsrc/engine/qof_book_merge.c -u -r1.3 -r1.4
--- src/engine/qof_book_merge.c
+++ src/engine/qof_book_merge.c
@@ -1,6 +1,6 @@
/*********************************************************************
* qof_book_merge.c -- api for QoFBook merge with collision handling *
- * Copyright (C) 2004 Neil Williams <linux at codehelp.co.uk> *
+ * Copyright (C) 2004-2005 Neil Williams <linux at codehelp.co.uk> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -42,6 +42,8 @@
*/
#define DEFAULT_MERGE_WEIGHT 1
#define QOF_STRING_WEIGHT 3
+#define QOF_DATE_STRING_LENGTH 31
+#define QOF_UTC_DATE_FORMAT "%Y-%m-%dT%H:%M:%SZ"
/* ================================================================ */
/* API functions. */
@@ -75,11 +77,12 @@
while(check != NULL) {
currentRule = check->data;
if(currentRule->mergeResult == MERGE_INVALID) {
- qof_book_merge_abort(mergeData);
+ mergeData->abort = TRUE;
return(NULL);
}
check = g_list_next(check);
}
+ g_list_free(check);
return mergeData;
}
@@ -117,15 +120,26 @@
qof_param_as_string(QofParam*, QofEntity*);
Useful? Worth transferring to qofclass.c?
Need to fix the KVP->string. How?
+
+ The QOF_TYPE_DATE output format from
+ qof_book_merge_param_as_string has been changed to QSF_XSD_TIME,
+ a UTC formatted timestring: 2005-01-01T10:55:23Z
+ If you change QOF_UTC_DATE_FORMAT, change
+ backend/file/qsf-xml.c : qsf_entity_foreach to
+ reformat to QSF_XSD_TIME or the QSF XML will
+ FAIL the schema validation and QSF exports will become invalid.
+
+ The QOF_TYPE_BOOLEAN is lowercase for the same reason.
*/
char*
qof_book_merge_param_as_string(QofParam *qtparam, QofEntity *qtEnt)
{
- gchar *param_string;
+ gchar *param_string, param_date[QOF_DATE_STRING_LENGTH];
char param_sa[GUID_ENCODING_LENGTH + 1];
KvpFrame *param_kvp;
QofType paramType;
const GUID *param_guid;
+ time_t param_t;
gnc_numeric param_numeric, (*numeric_getter) (QofEntity*, QofParam*);
Timespec param_ts, (*date_getter) (QofEntity*, QofParam*);
double param_double, (*double_getter) (QofEntity*, QofParam*);
@@ -143,7 +157,9 @@
if(safe_strcmp(paramType, QOF_TYPE_DATE) == 0) {
date_getter = (Timespec (*)(QofEntity*, QofParam*))qtparam->param_getfcn;
param_ts = date_getter(qtEnt, qtparam);
- param_string = g_strdup_printf("%llu", param_ts.tv_sec);
+ param_t = timespecToTime_t(param_ts);
+ strftime(param_date, QOF_DATE_STRING_LENGTH, QOF_UTC_DATE_FORMAT, gmtime(¶m_t));
+ param_string = g_strdup(param_date);
return param_string;
}
if((safe_strcmp(paramType, QOF_TYPE_NUMERIC) == 0) ||
@@ -180,8 +196,9 @@
if(safe_strcmp(paramType, QOF_TYPE_BOOLEAN) == 0){
boolean_getter = (gboolean (*)(QofEntity*, QofParam*)) qtparam->param_getfcn;
param_boolean = boolean_getter(qtEnt, qtparam);
- if(param_boolean == TRUE) { param_string = g_strdup("TRUE"); }
- else { param_string = g_strdup("FALSE"); }
+ /* Boolean values need to be lowercase for QSF validation. */
+ if(param_boolean == TRUE) { param_string = g_strdup("true"); }
+ else { param_string = g_strdup("false"); }
return param_string;
}
/* "kvp" */
@@ -300,6 +317,7 @@
g_return_if_fail(mergeResult != MERGE_INVALID);
g_return_if_fail(mergeData->abort == FALSE);
iter.fcn = cb;
+ iter.data = mergeData;
matching_rules = NULL;
iter.ruleList = g_list_copy(mergeData->mergeList);
while(iter.ruleList!=NULL) {
@@ -309,7 +327,6 @@
}
iter.ruleList = g_list_next(iter.ruleList);
}
- iter.data = mergeData;
iter.remainder = g_list_length(matching_rules);
g_list_foreach (matching_rules, qof_book_mergeRuleCB, &iter);
g_list_free(matching_rules);
@@ -579,9 +596,14 @@
rule = orphans->data;
g_return_if_fail(rule != NULL);
difference = g_slist_length(mergeData->mergeObjectParams);
+ if(rule->targetEnt == NULL) {
+ rule->mergeResult = MERGE_NEW;
+ rule->difference = 0;
+ mergeData->mergeList = g_list_prepend(mergeData->mergeList,rule);
+ orphans = g_slist_next(orphans);
+ continue;
+ }
mergeData->currentRule = rule;
- while(targets != NULL) {
- mergeData->currentRule->targetEnt = targets->data;
g_return_if_fail(qof_book_mergeCompare(mergeData) != -1);
if(difference > mergeData->currentRule->difference) {
best_matchEnt = currentRule->targetEnt;
@@ -590,15 +612,6 @@
mergeData->mergeList = g_list_prepend(mergeData->mergeList,rule);
qof_book_merge_orphan_check(difference, rule, mergeData);
}
- targets = g_slist_next(targets);
- }
- if(rule->targetEnt == NULL) {
- rule->mergeResult = MERGE_NEW;
- rule->difference = 0;
- mergeData->mergeList = g_list_prepend(mergeData->mergeList,rule);
- orphans = g_slist_next(orphans);
- continue;
- }
orphans = g_slist_next(orphans);
}
g_slist_free(mergeData->orphan_list);
Index: gnc-lot.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-lot.c,v
retrieving revision 1.40
retrieving revision 1.41
diff -Lsrc/engine/gnc-lot.c -Lsrc/engine/gnc-lot.c -u -r1.40 -r1.41
--- src/engine/gnc-lot.c
+++ src/engine/gnc-lot.c
@@ -361,9 +361,31 @@
/* ============================================================= */
+/* change prototype of gnc_lot_register to return a gboolean
+and set a foreach
+before enabling the object description. */
+/*
+static QofObject gncLotDesc =
+{
+interface_version: QOF_OBJECT_VERSION,
+e_type: GNC_ID_LOT,
+type_label: "Lot",
+create: (gpointer)gnc_lot_new,
+book_begin: NULL,
+book_end: NULL,
+is_dirty: NULL,
+mark_clean: NULL,
+foreach: NULL,
+printable: NULL,
+version_cmp: NULL,
+};
+*/
+
void gnc_lot_register (void)
{
static const QofParam params[] = {
+ { LOT_TITLE, QOF_TYPE_STRING, (QofAccessFunc)gnc_lot_get_title, (QofSetterFunc)gnc_lot_set_title },
+ { LOT_NOTES, QOF_TYPE_STRING, (QofAccessFunc)gnc_lot_get_notes, (QofSetterFunc)gnc_lot_set_notes },
{ QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL },
{ QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)gnc_lot_get_book, NULL },
{ LOT_IS_CLOSED, QOF_TYPE_BOOLEAN, (QofAccessFunc)gnc_lot_is_closed, NULL },
@@ -372,6 +394,9 @@
};
qof_class_register (GNC_ID_LOT, NULL, params);
+
+// return qof_object_register(&gncLotDesc);
+
}
/* ========================== END OF FILE ========================= */
Index: gnc-lot.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/gnc-lot.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -Lsrc/engine/gnc-lot.h -Lsrc/engine/gnc-lot.h -u -r1.22 -r1.23
--- src/engine/gnc-lot.h
+++ src/engine/gnc-lot.h
@@ -63,6 +63,7 @@
#include "gnc-numeric.h"
#include "qofbook.h"
#include "qofid.h"
+#include "qofobject.h"
GNCLot * gnc_lot_new (QofBook *);
void gnc_lot_destroy (GNCLot *);
@@ -135,7 +136,8 @@
#define LOT_IS_CLOSED "is-closed?"
#define LOT_BALANCE "balance"
-
+#define LOT_TITLE "lot-title"
+#define LOT_NOTES "notes"
#endif /* GNC_LOT_H */
/** @} */
/** @} */
Index: qofquery-serialize.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofquery-serialize.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -Lsrc/engine/qofquery-serialize.c -Lsrc/engine/qofquery-serialize.c -u -r1.1 -r1.2
--- src/engine/qofquery-serialize.c
+++ src/engine/qofquery-serialize.c
@@ -208,18 +208,30 @@
static xmlNodePtr
qof_query_pred_data_to_xml (QofQueryPredData *pd)
{
+ GList *n;
+ GSList *ns;
+ xmlNodePtr topnode;
+ query_guid_t pdata_g;
+ query_string_t pdata_s;
+ query_numeric_t pdata_n;
+ query_kvp_t pdata_k;
+ query_date_t pdata_d;
+ query_int64_t pdata_i64;
+ query_int32_t pdata_i32;
+ query_double_t pdata_db;
+ query_boolean_t pdata_bool;
+ query_char_t pdata_c;
if (!safe_strcmp (pd->type_name, QOF_TYPE_GUID))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-guid");
+ topnode = xmlNewNode (NULL, "qofquery:pred-guid");
/* GUID Predicate doesn't do a PUT_HOW */
- GList *n;
- query_guid_t pdata = (query_guid_t) pd;
- PUT_MATCH5("qofquery:guid-match", pdata->options,
+ pdata_g = (query_guid_t) pd;
+ PUT_MATCH5("qofquery:guid-match", pdata_g->options,
GUID_MATCH, ANY, ALL, NONE, NULL, LIST_ANY);
- for (n = pdata->guids; n; n = n->next)
+ for (n = pdata_g->guids; n; n = n->next)
{
PUT_GUID ("qofquery:guid", n->data);
}
@@ -227,105 +239,103 @@
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_STRING))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-string");
+ topnode = xmlNewNode (NULL, "qofquery:pred-string");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_string_t pdata = (query_string_t) pd;
- PUT_MATCH2("qofquery:string-match", pdata->options,
+ pdata_s = (query_string_t) pd;
+ PUT_MATCH2("qofquery:string-match", pdata_s->options,
STRING_MATCH, NORMAL, CASEINSENSITIVE);
- PUT_BOOL ("qofquery:is-regex", pdata->is_regex);
- PUT_STR ("qofquery:string", pdata->matchstring);
+ PUT_BOOL ("qofquery:is-regex", pdata_s->is_regex);
+ PUT_STR ("qofquery:string", pdata_s->matchstring);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_NUMERIC))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-numeric");
+ topnode = xmlNewNode (NULL, "qofquery:pred-numeric");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_numeric_t pdata = (query_numeric_t) pd;
- PUT_MATCH3("qofquery:numeric-match", pdata->options,
+ pdata_n = (query_numeric_t) pd;
+ PUT_MATCH3("qofquery:numeric-match", pdata_n->options,
NUMERIC_MATCH, DEBIT, CREDIT, ANY);
- PUT_NUMERIC ("qofquery:numeric", pdata->amount);
+ PUT_NUMERIC ("qofquery:numeric", pdata_n->amount);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_KVP))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-kvp");
+ topnode = xmlNewNode (NULL, "qofquery:pred-kvp");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_kvp_t pdata = (query_kvp_t) pd;
-
- GSList *n;
- for (n=pdata->path; n; n=n->next)
+ pdata_k = (query_kvp_t) pd;
+ for (ns=pdata_k->path; ns; ns=ns->next)
{
- PUT_STR ("qofquery:kvp-path", n->data);
+ PUT_STR ("qofquery:kvp-path", ns->data);
}
- qof_kvp_value_to_xml (pdata->value, topnode);
+ qof_kvp_value_to_xml (pdata_k->value, topnode);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_DATE))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-date");
+ topnode = xmlNewNode (NULL, "qofquery:pred-date");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_date_t pdata = (query_date_t) pd;
+ pdata_d = (query_date_t) pd;
- PUT_MATCH2("qofquery:date-match", pdata->options,
+ PUT_MATCH2("qofquery:date-match", pdata_d->options,
DATE_MATCH, NORMAL, ROUNDED);
- PUT_DATE ("qofquery:date", pdata->date);
+ PUT_DATE ("qofquery:date", pdata_d->date);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_INT64))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-int64");
+ topnode = xmlNewNode (NULL, "qofquery:pred-int64");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_int64_t pdata = (query_int64_t) pd;
- PUT_INT64 ("qofquery:int64", pdata->val);
+ pdata_i64 = (query_int64_t) pd;
+ PUT_INT64 ("qofquery:int64", pdata_i64->val);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_INT32))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-int32");
+ topnode = xmlNewNode (NULL, "qofquery:pred-int32");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_int32_t pdata = (query_int32_t) pd;
+ pdata_i32 = (query_int32_t) pd;
- PUT_INT32 ("qofquery:int32", pdata->val);
+ PUT_INT32 ("qofquery:int32", pdata_i32->val);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_DOUBLE))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-double");
+ topnode = xmlNewNode (NULL, "qofquery:pred-double");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_double_t pdata = (query_double_t) pd;
+ pdata_db = (query_double_t) pd;
- PUT_DBL ("qofquery:double", pdata->val);
+ PUT_DBL ("qofquery:double", pdata_db->val);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_BOOLEAN))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-boolean");
+ topnode = xmlNewNode (NULL, "qofquery:pred-boolean");
PUT_HOW ("qofquery:compare", pd->how, LT, LTE, EQUAL, GT, GTE, NEQ);
- query_boolean_t pdata = (query_boolean_t) pd;
+ pdata_bool = (query_boolean_t) pd;
- PUT_BOOL ("qofquery:boolean", pdata->val);
+ PUT_BOOL ("qofquery:boolean", pdata_bool->val);
return topnode;
}
if (!safe_strcmp (pd->type_name, QOF_TYPE_CHAR))
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:pred-char");
+ topnode = xmlNewNode (NULL, "qofquery:pred-char");
/* There is no PUT_HOW for char-match */
- query_char_t pdata = (query_char_t) pd;
+ pdata_c = (query_char_t) pd;
- PUT_MATCH2("qofquery:char-match", pdata->options,
+ PUT_MATCH2("qofquery:char-match", pdata_c->options,
CHAR_MATCH, ANY, NONE);
- PUT_STR ("qofquery:char-list", pdata->char_list);
+ PUT_STR ("qofquery:char-list", pdata_c->char_list);
return topnode;
}
return NULL;
@@ -336,11 +346,15 @@
static xmlNodePtr
qof_query_param_path_to_xml (GSList *param_path)
{
- xmlNodePtr topnode = xmlNewNode (NULL, "qofquery:param-path");
- GSList *n = param_path;
+ xmlNodePtr topnode;
+ GSList *n;
+ QofIdTypeConst path;
+
+ n = param_path;
+ topnode = xmlNewNode (NULL, "qofquery:param-path");
for ( ; n; n=n->next)
{
- QofIdTypeConst path = n->data;
+ path = n->data;
if (!path) continue;
PUT_STR ("qofquery:param", path);
}
@@ -353,13 +367,17 @@
qof_query_one_term_to_xml (QofQueryTerm *qt)
{
xmlNodePtr node;
- xmlNodePtr term = xmlNewNode (NULL, "qofquery:term");
-
- gboolean invert = qof_query_term_is_inverted (qt);
- GSList *path = qof_query_term_get_param_path (qt);
- QofQueryPredData *pd = qof_query_term_get_pred_data (qt);
-
- xmlNodePtr topnode = term;
+ xmlNodePtr term;
+ xmlNodePtr topnode;
+ gboolean invert;
+ GSList *path;
+ QofQueryPredData *pd;
+
+ invert = qof_query_term_is_inverted (qt);
+ term = xmlNewNode (NULL, "qofquery:term");
+ topnode = term;
+ path = qof_query_term_get_param_path (qt);
+ pd = qof_query_term_get_pred_data (qt);
if (invert)
{
/* inverter becomes new top mode */
@@ -381,14 +399,19 @@
static xmlNodePtr
qof_query_and_terms_to_xml (GList *and_terms)
{
- xmlNodePtr terms = xmlNewNode (NULL, "qofquery:and-terms");
- GList *n = and_terms;
+ xmlNodePtr terms;
+ GList *n;
+ QofQueryTerm *qt;
+ xmlNodePtr t;
+
+ terms = xmlNewNode (NULL, "qofquery:and-terms");
+ n = and_terms;
for ( ; n; n=n->next)
{
- QofQueryTerm *qt = n->data;
+ qt = n->data;
if (!qt) continue;
- xmlNodePtr t = qof_query_one_term_to_xml (n->data);
+ t = qof_query_one_term_to_xml (n->data);
if (t) xmlAddChild (terms, t);
}
return terms;
@@ -399,15 +422,18 @@
static xmlNodePtr
qof_query_terms_to_xml (QofQuery *q)
{
- xmlNodePtr terms = NULL;
- GList *n = qof_query_get_terms (q);
+ xmlNodePtr terms;
+ GList *n;
+ xmlNodePtr andt;
+ terms = NULL;
+ n = qof_query_get_terms (q);
if (!n) return NULL;
terms = xmlNewNode (NULL, "qofquery:or-terms");
for ( ; n; n=n->next)
{
- xmlNodePtr andt = qof_query_and_terms_to_xml (n->data);
+ andt = qof_query_and_terms_to_xml (n->data);
if (andt) xmlAddChild (terms, andt);
}
return terms;
@@ -419,31 +445,39 @@
qof_query_sorts_to_xml (QofQuery *q)
{
QofQuerySort *s[3];
+ xmlNodePtr sortlist;
+ GSList *plist;
+ xmlNodePtr sort;
+ xmlNodePtr topnode;
+ gboolean increasing;
+ gint opt;
+ xmlNodePtr pl;
+ int i;
+
qof_query_get_sorts (q, &s[0], &s[1], &s[2]);
if (NULL == s[0]) return NULL;
- xmlNodePtr sortlist = xmlNewNode (NULL, "qofquery:sort-list");
- int i;
+ sortlist = xmlNewNode (NULL, "qofquery:sort-list");
for (i=0; i<3; i++)
{
if (NULL == s[i]) continue;
- GSList *plist = qof_query_sort_get_param_path (s[i]);
+ plist = qof_query_sort_get_param_path (s[i]);
if (!plist) continue;
- xmlNodePtr sort = xmlNewNode (NULL, "qofquery:sort");
+ sort = xmlNewNode (NULL, "qofquery:sort");
xmlAddChild (sortlist, sort);
- xmlNodePtr topnode = sort;
+ topnode = sort;
- gboolean increasing = qof_query_sort_get_increasing (s[i]);
+ increasing = qof_query_sort_get_increasing (s[i]);
PUT_STR ("qofquery:order", increasing ? "DESCENDING" : "ASCENDING");
- gint opt = qof_query_sort_get_sort_options (s[i]);
+ opt = qof_query_sort_get_sort_options (s[i]);
PUT_INT32 ("qofquery:options", opt);
- xmlNodePtr pl = qof_query_param_path_to_xml (plist);
+ pl = qof_query_param_path_to_xml (plist);
if (pl) xmlAddChild (sort, pl);
}
@@ -455,16 +489,21 @@
static void
do_qof_query_to_xml (QofQuery *q, xmlNodePtr topnode)
{
- QofIdType search_for = qof_query_get_search_for (q);
+ QofIdType search_for;
+ xmlNodePtr terms;
+ xmlNodePtr sorts;
+ gint max_results;
+
+ search_for = qof_query_get_search_for (q);
PUT_STR ("qofquery:search-for", search_for);
- xmlNodePtr terms = qof_query_terms_to_xml(q);
+ terms = qof_query_terms_to_xml(q);
if (terms) xmlAddChild (topnode, terms);
- xmlNodePtr sorts = qof_query_sorts_to_xml (q);
+ sorts = qof_query_sorts_to_xml (q);
if (sorts) xmlAddChild (topnode, sorts);
- gint max_results = qof_query_get_max_results (q);
+ max_results = qof_query_get_max_results (q);
PUT_INT32 ("qofquery:max-results", max_results);
}
@@ -499,6 +538,11 @@
{
QofQuery *q;
QofSqlQuery *sq;
+ xmlDocPtr doc;
+ xmlNodePtr topnode;
+ xmlChar *xbuf;
+ int bufsz;
+ xmlOutputBufferPtr xbuf;
qof_query_init();
qof_object_initialize ();
@@ -523,12 +567,10 @@
qof_query_print (q);
- xmlDocPtr doc = doc = xmlNewDoc("1.0");
- xmlNodePtr topnode = qof_query_to_xml (q);
+ doc = doc = xmlNewDoc("1.0");
+ topnode = qof_query_to_xml (q);
xmlDocSetRootElement(doc,topnode);
- xmlChar *xbuf;
- int bufsz;
xmlDocDumpFormatMemory (doc, &xbuf, &bufsz, 1);
printf ("%s\n", xbuf);
@@ -538,7 +580,7 @@
#if 0
printf ("duude\n");
// xmlOutputBufferPtr xbuf = xmlAllocOutputBuffer (enc);
- xmlOutputBufferPtr xbuf = xmlOutputBufferCreateFile (stdout, NULL);
+ xbuf = xmlOutputBufferCreateFile (stdout, NULL);
printf ("duude\n");
xbuf = xmlOutputBufferCreateFd (1, NULL);
Index: qofclass.h
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/qofclass.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -Lsrc/engine/qofclass.h -Lsrc/engine/qofclass.h -u -r1.10 -r1.11
--- src/engine/qofclass.h
+++ src/engine/qofclass.h
@@ -82,7 +82,7 @@
/** Type of Paramters (String, Date, Numeric, GUID, etc.) */
typedef const char * QofType;
-
+/** Type of QofParam */
typedef struct _QofParam QofParam;
/** The QofAccessFunc defines an arbitrary function pointer
Index: test-book-merge.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test/test-book-merge.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -Lsrc/engine/test/test-book-merge.c -Lsrc/engine/test/test-book-merge.c -u -r1.4 -r1.5
--- src/engine/test/test-book-merge.c
+++ src/engine/test/test-book-merge.c
@@ -1,6 +1,6 @@
/*********************************************************************
* test-book-merge.c -- test implementation api for QoFBook merge *
- * Copyright (C) 2004 Neil Williams <linux at codehelp.co.uk> *
+ * Copyright (C) 2004-2005 Neil Williams <linux at codehelp.co.uk> *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
@@ -213,7 +213,7 @@
gnc_numeric
obj_getAmount(myobj *g)
{
- if(!g) return double_to_gnc_numeric(0,0,GNC_HOW_DENOM_EXACT);
+ if(!g) return gnc_numeric_zero();
return g->Amount;
}
@@ -413,6 +413,7 @@
importstring = NULL;
targetstring = NULL;
skip_target = FALSE;
+ mergeData->currentRule = rule;
do_test ((rule != NULL), "loop:#1 Rule is NULL");
do_test (remainder > 0, "loop:#2 remainder error.");
do_test ((safe_strcmp(NULL, rule->mergeLabel) != 0), "loop:#3 object label\n");
@@ -449,11 +450,11 @@
/* do NOT use as_string for calculations or set_fcn */
importstring = qof_book_merge_param_as_string(eachParam, rule->importEnt);
do_test ((importstring != NULL), "loop:#16 import param_as_string is null");
-// printf("importstring %s\t%s Type\n", importstring, eachParam->param_type);
+/* printf("importstring %s\t%s Type\n", importstring, eachParam->param_type);*/
if(!skip_target) {
targetstring = qof_book_merge_param_as_string(eachParam, rule->targetEnt);
do_test ((targetstring != NULL), "loop:#17 target param_as_string is null");
-// printf("targetstring %s\t%s Type\n", targetstring, eachParam->param_type);
+/* printf("targetstring %s\t%s Type\n", targetstring, eachParam->param_type);*/
}
/* add your own code for user involvement here. */
/* either store the importstring and targetstring values and display separately,
Index: Makefile.am
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test/Makefile.am,v
retrieving revision 1.38
retrieving revision 1.39
diff -Lsrc/engine/test/Makefile.am -Lsrc/engine/test/Makefile.am -u -r1.38 -r1.39
--- src/engine/test/Makefile.am
+++ src/engine/test/Makefile.am
@@ -19,8 +19,7 @@
../libgw-kvp.la \
../test-core/libgncmod-test-engine.la \
${GLIB_LIBS} \
- -lltdl \
- -lglib
+ -lltdl
# these tests are ordered kind more or less in the order
# that they should be executed, with more basic tests coming first.
Index: druid-merge.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/druid-merge.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -Lsrc/gnome/druid-merge.c -Lsrc/gnome/druid-merge.c -u -r1.3 -r1.4
--- src/gnome/druid-merge.c
+++ src/gnome/druid-merge.c
@@ -53,7 +53,6 @@
gchar *buffer = "";
void collision_rule_loop ( qof_book_mergeData*, qof_book_mergeRule*, guint );
-void progress_rule_loop ( qof_book_mergeData*, qof_book_mergeRule*, guint );
static GtkWidget*
merge_get_widget (const char *name)
@@ -226,11 +225,6 @@
g_return_if_fail(targetBook != NULL);
mergeData = qof_book_mergeInit(mergeBook, targetBook);
g_return_if_fail(mergeData != NULL);
- qof_book_mergeRuleForeach(mergeData, progress_rule_loop, MERGE_NEW);
- qof_book_mergeRuleForeach(mergeData, progress_rule_loop, MERGE_ABSOLUTE);
- qof_book_mergeRuleForeach(mergeData, progress_rule_loop, MERGE_DUPLICATE);
- qof_book_mergeRuleForeach(mergeData, progress_rule_loop, MERGE_UPDATE);
- gtk_label_set_text(progress, buffer);
qof_book_mergeRuleForeach(mergeData, collision_rule_loop, MERGE_REPORT);
gnc_resume_gui_refresh ();
}
@@ -279,76 +273,6 @@
return dialog;
}
-void progress_rule_loop(qof_book_mergeData *mergeData, qof_book_mergeRule *rule, guint remainder)
-{
- GtkLabel *progress;
-
- g_return_if_fail(mergeData != NULL);
- progress = GTK_LABEL(merge_get_widget("ResultsBox"));
- buffer = "";
- g_return_if_fail(rule != NULL);
- if(rule->mergeResult == MERGE_NEW) {
- if (remainder == 1) {
- buffer = g_strconcat(buffer,
- g_strdup_printf("%i %s tagged as NEW.\n", remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- else {
- buffer = g_strconcat(buffer,
- g_strdup_printf("%i entities of type %s are tagged as NEW.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- gtk_widget_show(GTK_WIDGET(progress));
- return;
- }
- if(rule->mergeResult == MERGE_ABSOLUTE) {
- if (remainder == 1) {
- buffer = g_strconcat(buffer,
- g_strdup_printf("%i %s tagged as an absolute GUID match.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- else {
- buffer = g_strconcat(buffer,
- g_strdup_printf("%i entities of type %s tagged as an absolute GUID match.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- gtk_widget_show(GTK_WIDGET(progress));
- return;
- }
- if(rule->mergeResult == MERGE_DUPLICATE) {
- if (remainder == 1) {
- buffer = g_strconcat(buffer, g_strdup_printf("%i %s tagged as a duplicate.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- else {
- buffer = g_strconcat(buffer, g_strdup_printf("%i entities of type %s tagged as a duplicate.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- gtk_widget_show(GTK_WIDGET(progress));
- return;
- }
- if(rule->mergeResult == MERGE_UPDATE) {
- if (remainder == 1) {
- buffer = g_strconcat(buffer, g_strdup_printf("%i %s tagged as to be updated.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- else {
- buffer = g_strconcat(buffer, g_strdup_printf("%i entities of type %s tagged as to be updated.\n",
- remainder, rule->mergeLabel), NULL);
- gtk_label_set_text (progress, buffer);
- }
- gtk_widget_show(GTK_WIDGET(progress));
- return;
- }
- g_free(buffer);
-}
-
void collision_rule_loop(qof_book_mergeData *mergeData, qof_book_mergeRule *rule, guint remainder)
{
GSList *user_reports;
More information about the gnucash-changes
mailing list