src/engine/Transaction.c has the following functions: static void qofTransSetNum (Transaction *trans, const char *xnum) { if (!qof_begin_edit(&trans->inst)) return; xaccTransSetNum(trans, xnum); qof_commit_edit(&trans->inst); } void xaccTransSetNum (Transaction *trans, const char *xnum) { if (!trans || !xnum) return; xaccTransBeginEdit(trans); CACHE_REPLACE(trans->num, xnum); qof_instance_set_dirty(QOF_INSTANCE(trans)); mark_trans(trans); /* Dirty balance of every account in trans */ xaccTransCommitEdit(trans); }
qofTransSetNum() is the function which is registered with qof, and if there is a function registered with qof, the gda backend tries to use it. The problem is that if the editlevel is not 0 (which it is, because the gda backend calls xaccTransBeginEdit() before the tx is loaded from the db and xaccTransCommitEdit() after it is loaded), qof_begin_edit() will return FALSE so that the routine does nothing, but does leave the editlevel incremented. Is this correct behaviour? If so, it is not useful to me. Note that there are a number of these pairs of routine in Transaction.c and there may be more in other files. Phil _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel