merge changes from the backend-work-1 branch.

These changes conisted of:
-- change the backend begin()/commit() signatures to take qofinstance
   instead of gpointer
-- clean up non-standard use of books by the pricedb
-- rename the gnc-be-utils.h file so that its now a part of QOF


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@10056 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Linas Vepstas
2004-06-13 16:48:32 +00:00
parent eb3eb2a27b
commit 4a1e07e594
34 changed files with 222 additions and 350 deletions

View File

@@ -236,12 +236,15 @@ build_period_filepath (FileBackend *fbe, QofBook *book)
}
static void
file_begin_edit (QofBackend *be, QofIdTypeConst typ, gpointer gp)
file_begin_edit (QofBackend *be, QofInstance *inst)
{
if (0) build_period_filepath(0, 0);
#if BORKEN_FOR_NOW
FileBackend *fbe = (FileBackend *) be;
QofBook *book = gp;
const char * filepath;
QofIdTypeConst typ = QOF_ENTITY(inst)->e_type;
if (strcmp (GNC_ID_PERIOD, typ)) return;
filepath = build_period_filepath(fbe, book);
PINFO (" ====================== book=%p filepath=%s\n", book, filepath);
@@ -257,20 +260,24 @@ file_begin_edit (QofBackend *be, QofIdTypeConst typ, gpointer gp)
* modify books that are closed (They should be treated as
* 'read-only').
*/
#endif
}
static void
file_rollback_edit (QofBackend *be, QofIdTypeConst typ, gpointer gp)
file_rollback_edit (QofBackend *be, QofInstance *inst)
{
#if BORKEN_FOR_NOW
QofBook *book = gp;
if (strcmp (GNC_ID_PERIOD, typ)) return;
PINFO ("book=%p", book);
#endif
}
static void
file_commit_edit (QofBackend *be, QofIdTypeConst typ, gpointer gp)
file_commit_edit (QofBackend *be, QofInstance *inst)
{
#if BORKEN_FOR_NOW
FileBackend *fbe = (FileBackend *) be;
QofBook *book = gp;
const char * filepath;
@@ -285,6 +292,7 @@ file_commit_edit (QofBackend *be, QofIdTypeConst typ, gpointer gp)
* there'll be the same transactions in the closed book,
* and also in the current book. */
gnc_file_be_write_to_file (fbe, fbe->primary_book, fbe->fullpath, TRUE);
#endif
}
/* ================================================================= */

View File

@@ -509,10 +509,8 @@ gnc_load_financials_from_fd(QofBook *book, int fd)
{
GNCPriceDB *tmpdb;
if(cvt_potential_prices_to_pricedb_and_cleanup(&tmpdb, book))
if(!cvt_potential_prices_to_pricedb_and_cleanup(&tmpdb, book))
{
gnc_pricedb_set_db(book, tmpdb);
} else {
PWARN("pricedb import failed.");
error_code = ERR_BACKEND_MISC;
gnc_pricedb_destroy(tmpdb);

View File

@@ -389,11 +389,6 @@ qof_session_load_from_xml_file(QofBook *book, const char *filename)
xaccSetAccountGroup(book, global_parse_status.account_group);
if(global_parse_status.pricedb)
{
gnc_pricedb_set_db(book, global_parse_status.pricedb);
}
/* Fix account and transaction commodities */
xaccGroupScrubCommodities (gnc_book_get_group(book));

View File

@@ -305,13 +305,7 @@ add_template_transaction_local( sixtp_gdv2 *data,
static gboolean
add_pricedb_local(sixtp_gdv2 *data, GNCPriceDB *db)
{
QofBook *book;
book = data->book;
/* gnc_pricedb_print_contents(db, stdout); */
gnc_pricedb_set_db(book, db);
return TRUE;
}

View File

@@ -1643,20 +1643,21 @@ pgendDoSync (QofBackend *bend, QofBook *book)
}
static void
pgend_do_begin (QofBackend *bend, QofIdTypeConst type, gpointer object)
pgend_do_begin (QofBackend *bend, QofInstance *inst)
{
PGBackend *be = (PGBackend*)bend;
QofIdTypeConst type = inst->entity.e_type;
ENTER ("be=%p, type=%s", bend, type);
if (!safe_strcmp (type, GNC_ID_PERIOD))
return pgend_book_transfer_begin (bend, object);
// if (!safe_strcmp (type, GNC_ID_PERIOD))
// return pgend_book_transfer_begin (bend, object);
switch (be->session_mode) {
case MODE_EVENT:
case MODE_POLL:
case MODE_SINGLE_UPDATE:
if (!safe_strcmp (type, GNC_ID_PRICE))
return pgend_price_begin_edit (bend, object);
return pgend_price_begin_edit (bend, (GNCPrice *) inst);
case MODE_SINGLE_FILE:
case MODE_NONE:
@@ -1668,13 +1669,14 @@ pgend_do_begin (QofBackend *bend, QofIdTypeConst type, gpointer object)
}
static void
pgend_do_commit (QofBackend *bend, QofIdTypeConst type, gpointer object)
pgend_do_commit (QofBackend *bend, QofInstance *inst)
{
PGBackend *be = (PGBackend*)bend;
QofIdTypeConst type = inst->entity.e_type;
ENTER ("be=%p, type=%s", bend, type);
if (!safe_strcmp (type, GNC_ID_PERIOD))
return pgend_book_transfer_commit (bend, object);
// if (!safe_strcmp (type, GNC_ID_PERIOD))
// return pgend_book_transfer_commit (bend, object);
switch (be->session_mode) {
case MODE_EVENT:
@@ -1682,15 +1684,15 @@ pgend_do_commit (QofBackend *bend, QofIdTypeConst type, gpointer object)
case MODE_SINGLE_UPDATE:
if (!safe_strcmp (type, GNC_ID_TRANS)) {
Transaction *txn = (Transaction*) object;
Transaction *txn = (Transaction*) inst;
return pgend_trans_commit_edit (bend, txn, txn->orig);
}
if (!safe_strcmp (type, GNC_ID_PRICE))
return pgend_price_commit_edit (bend, object);
return pgend_price_commit_edit (bend, (GNCPrice *) inst);
if (!safe_strcmp (type, GNC_ID_ACCOUNT))
return pgend_account_commit_edit (bend, object);
return pgend_account_commit_edit (bend, (Account *) inst);
case MODE_SINGLE_FILE:
case MODE_NONE:
@@ -1703,9 +1705,10 @@ pgend_do_commit (QofBackend *bend, QofIdTypeConst type, gpointer object)
}
static void
pgend_do_rollback (QofBackend *bend, QofIdTypeConst type, gpointer object)
pgend_do_rollback (QofBackend *bend, QofInstance *inst)
{
PGBackend *be = (PGBackend*)bend;
QofIdTypeConst type = inst->entity.e_type;
ENTER ("be=%p, type=%s", bend, type);
switch (be->session_mode) {
@@ -1713,7 +1716,7 @@ pgend_do_rollback (QofBackend *bend, QofIdTypeConst type, gpointer object)
case MODE_POLL:
if (!safe_strcmp (type, GNC_ID_TRANS))
return pgend_trans_rollback_edit (bend, object);
return pgend_trans_rollback_edit (bend, (Transaction *)inst);
case MODE_SINGLE_UPDATE:
case MODE_SINGLE_FILE:

View File

@@ -97,7 +97,7 @@ pgendStoreBookNoLock (PGBackend *be, QofBook *book,
if (book->idata)
{
pgendKVPDelete (be, book->idata);
pgendKVPStore (be, book->idata, book->kvp_data);
pgendKVPStore (be, book->idata, book->inst.kvp_data);
}
LEAVE(" ");
}
@@ -172,7 +172,7 @@ pgendBookRestore (PGBackend *be, QofBook *book)
if (0 != book->idata)
{
book->kvp_data = pgendKVPFetch (be, book->idata, book->kvp_data);
book->inst.kvp_data = pgendKVPFetch (be, book->idata, book->inst.kvp_data);
}
LEAVE (" ");
@@ -200,7 +200,7 @@ get_book_cb (PGBackend *be, PGresult *result, int j, gpointer data)
for (node=blist; node; node=node->next)
{
book = node->data;
if (guid_equal (&book->entity.guid, &guid)) break;
if (guid_equal (&book->inst.entity.guid, &guid)) break;
book = NULL;
}
@@ -237,7 +237,7 @@ pgendGetAllBooks (PGBackend *be, QofBookList *blist)
QofBook *book = node->data;
if (0 != book->idata)
{
book->kvp_data = pgendKVPFetch (be, book->idata, book->kvp_data);
book->inst.kvp_data = pgendKVPFetch (be, book->idata, book->inst.kvp_data);
}
}

View File

@@ -314,7 +314,7 @@ sql_sort_need_entry(QofQuery * q)
}
/* =========================================================== */
/* Macro for QOF_QUERYCORE_STRING query types
/* Macro for QOF_TYPE_STRING query types
* Note that postgres supports both case-sensitive and
* case-insensitve string searches, and it also supports
* regex! yahooo!
@@ -346,7 +346,7 @@ sql_sort_need_entry(QofQuery * q)
}
/* =========================================================== */
/* Macro for QOF_QUERYCORE_NUMERIC type terms. The logic used here in the
/* Macro for QOF_TYPE_NUMERIC type terms. The logic used here in the
* SQL exactly matches that used in the qofquery.c code. If
* that code is incorrect or has changed, then the code below is
* broken as well.
@@ -756,7 +756,7 @@ sqlQuery_build(sqlQuery * sq, Query * q)
need_entry = TRUE;
need_trans_commodity = TRUE;
} else if (!safe_strcmp(pd->type_name, QOF_TYPE_GUID)) {
if (!safe_strcmp(path->data, QOF_QUERY_PARAM_GUID))
if (!safe_strcmp(path->data, QOF_PARAM_GUID))
need_entry = TRUE;
else if (!safe_strcmp(path->data, SPLIT_ACCOUNT)) {
need_account = TRUE;
@@ -862,17 +862,17 @@ sqlQuery_build(sqlQuery * sq, Query * q)
PINFO("term is QOF_TYPE_GUID");
if (!safe_strcmp(path->data, QOF_QUERY_PARAM_GUID)) {
if (!safe_strcmp(path->data, QOF_PARAM_GUID)) {
field = "gncSplit.splitGuid";
g_assert(pdata->options != QOF_GUID_MATCH_ALL);
} else if (!safe_strcmp(path->data, SPLIT_TRANS) &&
!safe_strcmp(path->next->data, QOF_QUERY_PARAM_GUID)) {
!safe_strcmp(path->next->data, QOF_PARAM_GUID)) {
field = "gncSplit.transGUID";
g_assert(pdata->options != QOF_GUID_MATCH_ALL);
} else if (!safe_strcmp(path->data, SPLIT_ACCOUNT) &&
!safe_strcmp(path->next->data, QOF_QUERY_PARAM_GUID)) {
!safe_strcmp(path->next->data, QOF_PARAM_GUID)) {
field = "gncSplit.accountGUID";
g_assert(pdata->options != QOF_GUID_MATCH_ALL);
@@ -883,8 +883,8 @@ sqlQuery_build(sqlQuery * sq, Query * q)
field = "gncSplit.accountGUID";
g_assert(pdata->options == QOF_GUID_MATCH_ALL);
} else if (!safe_strcmp(path->data, QOF_QUERY_PARAM_BOOK) &&
!safe_strcmp(path->next->data, QOF_QUERY_PARAM_GUID)) {
} else if (!safe_strcmp(path->data, QOF_PARAM_BOOK) &&
!safe_strcmp(path->next->data, QOF_PARAM_GUID)) {
/* XXX: Need to support the Book GUID? (gncAccount.bookGUID) */
field = "gncAccount.bookGUID";
g_assert(pdata->options != QOF_GUID_MATCH_ALL);

View File

@@ -462,7 +462,7 @@ pgendPriceFind (QofBackend *bend, gpointer olook)
void
pgend_price_begin_edit (QofBackend * bend, GNCPrice *pr)
{
if (pr && pr->db && pr->db->dirty)
if (pr && pr->db && pr->db->inst.dirty)
{
PERR ("price db is unexpectedly dirty");
}
@@ -527,7 +527,7 @@ pgend_price_commit_edit (QofBackend * bend, GNCPrice *pr)
SEND_QUERY (be,bufp,);
FINISH_QUERY(be->connection);
if (pr->db) pr->db->dirty = FALSE;
if (pr->db) pr->db->inst.dirty = FALSE;
LEAVE ("commited");
return;

View File

@@ -362,7 +362,7 @@ int finishQuery(PGBackend *be);
for (node=be->blist; node; node=node->next) \
{ \
book = node->data; \
if (guid_equal (&book->entity.guid, &book_guid)) break; \
if (guid_equal (&book->inst.entity.guid, &book_guid)) break; \
book = NULL; \
} \
if (!book) return data; \

View File

@@ -36,9 +36,9 @@
#include "gnc-engine-util.h"
#include "qofquerycore.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "kvp_frame.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -404,7 +404,7 @@ void gncBillTermChanged (GncBillTerm *term)
void gncBillTermBeginEdit (GncBillTerm *term)
{
GNC_BEGIN_EDIT (&term->inst);
QOF_BEGIN_EDIT (&term->inst);
}
static void gncBillTermOnError (QofInstance *inst, QofBackendError errcode)
@@ -422,8 +422,8 @@ static inline void on_done (QofInstance *inst) {}
void gncBillTermCommitEdit (GncBillTerm *term)
{
GNC_COMMIT_EDIT_PART1 (&term->inst);
GNC_COMMIT_EDIT_PART2 (&term->inst, gncBillTermOnError,
QOF_COMMIT_EDIT_PART1 (&term->inst);
QOF_COMMIT_EDIT_PART2 (&term->inst, gncBillTermOnError,
on_done, bill_free);
}

View File

@@ -36,8 +36,8 @@
#include "gnc-commodity.h"
#include "gnc-numeric.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid-p.h"
@@ -377,7 +377,7 @@ void gncCustomerRemoveJob (GncCustomer *cust, GncJob *job)
void gncCustomerBeginEdit (GncCustomer *cust)
{
GNC_BEGIN_EDIT (&cust->inst);
QOF_BEGIN_EDIT (&cust->inst);
}
static inline void gncCustomerOnError (QofInstance *inst, QofBackendError errcode)
@@ -400,8 +400,8 @@ static inline void cust_free (QofInstance *inst)
void gncCustomerCommitEdit (GncCustomer *cust)
{
GNC_COMMIT_EDIT_PART1 (&cust->inst);
GNC_COMMIT_EDIT_PART2 (&cust->inst, gncCustomerOnError,
QOF_COMMIT_EDIT_PART1 (&cust->inst);
QOF_COMMIT_EDIT_PART2 (&cust->inst, gncCustomerOnError,
gncCustomerOnDone, cust_free);
}

View File

@@ -32,6 +32,7 @@
#include <string.h>
#include "guid.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -47,7 +48,6 @@
#include "gnc-commodity.h"
#include "gnc-engine-util.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "gncAddressP.h"
#include "gncBusiness.h"
@@ -349,7 +349,7 @@ gboolean gncEmployeeIsDirty (GncEmployee *employee)
void gncEmployeeBeginEdit (GncEmployee *employee)
{
GNC_BEGIN_EDIT (&employee->inst);
QOF_BEGIN_EDIT (&employee->inst);
}
static inline void gncEmployeeOnError (QofInstance *employee, QofBackendError errcode)
@@ -372,8 +372,8 @@ static inline void emp_free (QofInstance *inst)
void gncEmployeeCommitEdit (GncEmployee *employee)
{
GNC_COMMIT_EDIT_PART1 (&employee->inst);
GNC_COMMIT_EDIT_PART2 (&employee->inst, gncEmployeeOnError,
QOF_COMMIT_EDIT_PART1 (&employee->inst);
QOF_COMMIT_EDIT_PART2 (&employee->inst, gncEmployeeOnError,
gncEmployeeOnDone, emp_free);
}

View File

@@ -34,8 +34,8 @@
#include "gnc-engine-util.h"
#include "gnc-event-p.h"
#include "gnc-numeric.h"
#include "gnc-be-utils.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -1115,7 +1115,7 @@ gboolean gncEntryIsOpen (GncEntry *entry)
void gncEntryBeginEdit (GncEntry *entry)
{
GNC_BEGIN_EDIT (&entry->inst);
QOF_BEGIN_EDIT (&entry->inst);
}
static inline void gncEntryOnError (QofInstance *entry, QofBackendError errcode)
@@ -1133,8 +1133,8 @@ static inline void entry_free (QofInstance *inst)
void gncEntryCommitEdit (GncEntry *entry)
{
GNC_COMMIT_EDIT_PART1 (&entry->inst);
GNC_COMMIT_EDIT_PART2 (&entry->inst, gncEntryOnError,
QOF_COMMIT_EDIT_PART1 (&entry->inst);
QOF_COMMIT_EDIT_PART2 (&entry->inst, gncEntryOnError,
gncEntryOnDone, entry_free);
}

View File

@@ -30,6 +30,7 @@
#include <glib.h>
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -49,7 +50,6 @@
#include "gnc-event-p.h"
#include "gnc-lot.h"
#include "gnc-be-utils.h"
#include "gncBusiness.h"
#include "gncBillTermP.h"
@@ -1295,7 +1295,7 @@ gboolean gncInvoiceIsPaid (GncInvoice *invoice)
void gncInvoiceBeginEdit (GncInvoice *invoice)
{
GNC_BEGIN_EDIT (&invoice->inst);
QOF_BEGIN_EDIT (&invoice->inst);
}
static inline void gncInvoiceOnError (QofInstance *inst, QofBackendError errcode)
@@ -1313,8 +1313,8 @@ static inline void invoice_free (QofInstance *inst)
void gncInvoiceCommitEdit (GncInvoice *invoice)
{
GNC_COMMIT_EDIT_PART1 (&invoice->inst);
GNC_COMMIT_EDIT_PART2 (&invoice->inst, gncInvoiceOnError,
QOF_COMMIT_EDIT_PART1 (&invoice->inst);
QOF_COMMIT_EDIT_PART2 (&invoice->inst, gncInvoiceOnError,
gncInvoiceOnDone, invoice_free);
}

View File

@@ -36,8 +36,8 @@
#include "gnc-engine-util.h"
#include "gnc-numeric.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofinstance.h"
@@ -271,7 +271,7 @@ void gncJobSetActive (GncJob *job, gboolean active)
void gncJobBeginEdit (GncJob *job)
{
GNC_BEGIN_EDIT (&job->inst);
QOF_BEGIN_EDIT (&job->inst);
}
static void gncJobOnError (QofInstance *inst, QofBackendError errcode)
@@ -289,8 +289,8 @@ static inline void gncJobOnDone (QofInstance *qof) { }
void gncJobCommitEdit (GncJob *job)
{
GNC_COMMIT_EDIT_PART1 (&job->inst);
GNC_COMMIT_EDIT_PART2 (&job->inst, gncJobOnError,
QOF_COMMIT_EDIT_PART1 (&job->inst);
QOF_COMMIT_EDIT_PART2 (&job->inst, gncJobOnError,
gncJobOnDone, job_free);
}

View File

@@ -34,6 +34,7 @@
#include "kvp_frame.h"
#include "gnc-engine-util.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -45,7 +46,6 @@
#include "qofquerycore.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "gncBusiness.h"
#include "gncEntry.h"
@@ -356,7 +356,7 @@ gboolean gncOrderIsClosed (GncOrder *order)
void gncOrderBeginEdit (GncOrder *order)
{
GNC_BEGIN_EDIT (&order->inst);
QOF_BEGIN_EDIT (&order->inst);
}
static inline void gncOrderOnError (QofInstance *order, QofBackendError errcode)
@@ -374,8 +374,8 @@ static inline void order_free (QofInstance *inst)
void gncOrderCommitEdit (GncOrder *order)
{
GNC_COMMIT_EDIT_PART1 (&order->inst);
GNC_COMMIT_EDIT_PART2 (&order->inst, gncOrderOnError,
QOF_COMMIT_EDIT_PART1 (&order->inst);
QOF_COMMIT_EDIT_PART2 (&order->inst, gncOrderOnError,
gncOrderOnDone, order_free);
}

View File

@@ -34,8 +34,8 @@
#include "gnc-numeric.h"
#include "gnc-engine-util.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -527,7 +527,7 @@ void gncTaxTableChanged (GncTaxTable *table)
void gncTaxTableBeginEdit (GncTaxTable *table)
{
GNC_BEGIN_EDIT (&table->inst);
QOF_BEGIN_EDIT (&table->inst);
}
static inline void gncTaxTableOnError (QofInstance *inst, QofBackendError errcode)
@@ -545,8 +545,8 @@ static inline void table_free (QofInstance *inst)
void gncTaxTableCommitEdit (GncTaxTable *table)
{
GNC_COMMIT_EDIT_PART1 (&table->inst);
GNC_COMMIT_EDIT_PART2 (&table->inst, gncTaxTableOnError,
QOF_COMMIT_EDIT_PART1 (&table->inst);
QOF_COMMIT_EDIT_PART2 (&table->inst, gncTaxTableOnError,
gncTaxTableOnDone, table_free);
}

View File

@@ -32,6 +32,7 @@
#include <string.h>
#include "guid.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofclass.h"
#include "qofid.h"
@@ -46,7 +47,6 @@
#include "gnc-commodity.h"
#include "gnc-engine-util.h"
#include "gnc-event-p.h"
#include "gnc-be-utils.h"
#include "gncAddressP.h"
#include "gncBillTermP.h"
@@ -409,7 +409,7 @@ void gncVendorRemoveJob (GncVendor *vendor, GncJob *job)
void gncVendorBeginEdit (GncVendor *vendor)
{
GNC_BEGIN_EDIT (&vendor->inst);
QOF_BEGIN_EDIT (&vendor->inst);
}
static inline void gncVendorOnError (QofInstance *vendor, QofBackendError errcode)
@@ -431,8 +431,8 @@ static inline void vendor_free (QofInstance *inst)
void gncVendorCommitEdit (GncVendor *vendor)
{
GNC_COMMIT_EDIT_PART1 (&vendor->inst);
GNC_COMMIT_EDIT_PART2 (&vendor->inst, gncVendorOnError,
QOF_COMMIT_EDIT_PART1 (&vendor->inst);
QOF_COMMIT_EDIT_PART2 (&vendor->inst, gncVendorOnError,
gncVendorOnDone, vendor_free);
}

View File

@@ -32,7 +32,6 @@
#include "Group.h"
#include "GroupP.h"
#include "TransactionP.h"
#include "gnc-be-utils.h"
#include "gnc-date.h"
#include "gnc-engine.h"
#include "gnc-engine-util.h"
@@ -48,6 +47,7 @@
#include "qofbackend.h"
#include "qofbackend-p.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofbook-p.h"
#include "qofclass.h"
@@ -318,7 +318,7 @@ xaccFreeAccount (Account *acc)
void
xaccAccountBeginEdit (Account *acc)
{
GNC_BEGIN_EDIT (&acc->inst);
QOF_BEGIN_EDIT (&acc->inst);
}
static inline void noop(QofInstance *inst) {}
@@ -338,7 +338,7 @@ static inline void acc_free (QofInstance *inst)
void
xaccAccountCommitEdit (Account *acc)
{
GNC_COMMIT_EDIT_PART1 (&acc->inst);
QOF_COMMIT_EDIT_PART1 (&acc->inst);
/* If marked for deletion, get rid of subaccounts first,
* and then the splits ... */
@@ -385,7 +385,7 @@ xaccAccountCommitEdit (Account *acc)
xaccGroupInsertAccount(acc->parent, acc);
}
GNC_COMMIT_EDIT_PART2 (&acc->inst, on_err, noop, acc_free);
QOF_COMMIT_EDIT_PART2 (&acc->inst, on_err, noop, acc_free);
gnc_engine_gen_event (&acc->inst.entity, GNC_EVENT_MODIFY);
}

View File

@@ -59,7 +59,10 @@ AccountGroup *xaccMallocAccountGroup (QofBook *book);
*/
AccountGroup * xaccGetAccountGroup (QofBook *book);
/** huh ?? */
/**
* The xaccCollAccountGroup() routine will return the top-most
* account group associated with the indicated collection.
*/
AccountGroup * xaccCollGetAccountGroup (QofCollection *col);
/** The xaccAccountDestroy() routine will destroy and free all

View File

@@ -77,7 +77,6 @@ gncinclude_HEADERS = \
engine-helpers.h \
glib-helpers.h \
gnc-associate-account.h \
gnc-be-utils.h \
gnc-book.h \
gnc-commodity.h \
gnc-date.h \
@@ -98,6 +97,7 @@ gncinclude_HEADERS = \
policy.h \
qof.h \
qofbackend.h \
qof-be-utils.h \
qofbook.h \
qofclass.h \
qofid.h \

View File

@@ -546,8 +546,8 @@ gnc_book_partition_txn (QofBook *dest_book, QofBook *src_book, QofQuery *query)
/* hack alert -- FIXME -- this should really be a merge, not a
* clobber copy, but I am too lazy to write a kvp merge routine,
* and it is not needed for the current usage. */
kvp_frame_delete (dest_book->kvp_data);
dest_book->kvp_data = kvp_frame_copy (src_book->kvp_data);
kvp_frame_delete (dest_book->inst.kvp_data);
dest_book->inst.kvp_data = kvp_frame_copy (src_book->inst.kvp_data);
/* Next, copy the commodity tables */
src_tbl = gnc_commodity_table_get_table (src_book);
@@ -598,11 +598,11 @@ gnc_book_partition_txn (QofBook *dest_book, QofBook *src_book, QofQuery *query)
/* Make note of the sibling books */
now = time(0);
gnc_kvp_bag_add (src_book->kvp_data, "gemini", now,
"book_guid", &dest_book->entity.guid,
gnc_kvp_bag_add (src_book->inst.kvp_data, "gemini", now,
"book_guid", &dest_book->inst.entity.guid,
NULL);
gnc_kvp_bag_add (dest_book->kvp_data, "gemini", now,
"book_guid", &src_book->entity.guid,
gnc_kvp_bag_add (dest_book->inst.kvp_data, "gemini", now,
"book_guid", &src_book->inst.entity.guid,
NULL);
LEAVE (" ");
}
@@ -693,7 +693,7 @@ add_closing_balances (AccountGroup *closed_grp,
xaccAccountBeginEdit (twin);
cwd = xaccAccountGetSlots (twin);
kvp_frame_set_guid (cwd, "/book/prev-acct", xaccAccountGetGUID (candidate));
kvp_frame_set_guid (cwd, "/book/prev-book", &closed_book->entity.guid);
kvp_frame_set_guid (cwd, "/book/prev-book", &closed_book->inst.entity.guid);
xaccAccountSetSlots_nc (twin, twin->inst.kvp_data);
@@ -702,7 +702,7 @@ add_closing_balances (AccountGroup *closed_grp,
* the next book is. */
xaccAccountBeginEdit (candidate);
cwd = xaccAccountGetSlots (candidate);
kvp_frame_set_guid (cwd, "/book/next-book", &open_book->entity.guid);
kvp_frame_set_guid (cwd, "/book/next-book", &open_book->inst.entity.guid);
kvp_frame_set_guid (cwd, "/book/next-acct", xaccAccountGetGUID (twin));
xaccAccountSetSlots_nc (candidate, candidate->inst.kvp_data);
@@ -760,7 +760,7 @@ add_closing_balances (AccountGroup *closed_grp,
/* Add KVP data showing where the balancing
* transaction came from */
cwd = xaccTransGetSlots (trans);
kvp_frame_set_guid (cwd, "/book/closed-book", &closed_book->entity.guid);
kvp_frame_set_guid (cwd, "/book/closed-book", &closed_book->inst.entity.guid);
kvp_frame_set_guid (cwd, "/book/closed-acct", xaccAccountGetGUID(candidate));
xaccTransCommitEdit (trans);
@@ -805,7 +805,7 @@ period_begin_edit (QofBook *src_book, QofBook *dest_book)
be = src_book->backend;
if (be && be->begin)
{
(*be->begin)(be, GNC_ID_PERIOD, dest_book);
// (*be->begin)(be, GNC_ID_PERIOD, dest_book);
}
}
@@ -816,7 +816,7 @@ period_commit_edit (QofBook *src_book, QofBook *dest_book)
be = src_book->backend;
if (be && be->commit)
{
(*be->commit)(be, GNC_ID_PERIOD, dest_book);
// (*be->commit)(be, GNC_ID_PERIOD, dest_book);
}
}
@@ -870,8 +870,8 @@ gnc_book_close_period (QofBook *existing_book, Timespec calve_date,
/* Now add the various identifying kvp's */
/* cwd == 'current working directory' */
exist_cwd = existing_book->kvp_data;
partn_cwd = closing_book->kvp_data;
exist_cwd = existing_book->inst.kvp_data;
partn_cwd = closing_book->inst.kvp_data;
/* Mark the boundary date between the books */
kvp_frame_set_timespec (exist_cwd, "/book/open-date", calve_date);
@@ -883,8 +883,8 @@ gnc_book_close_period (QofBook *existing_book, Timespec calve_date,
kvp_frame_set_timespec (partn_cwd, "/book/log-date", ts);
/* Set up pointers to each book from the other. */
kvp_frame_set_guid (partn_cwd, "/book/next-book", &existing_book->entity.guid);
kvp_frame_set_guid (exist_cwd, "/book/prev-book", &closing_book->entity.guid);
kvp_frame_set_guid (partn_cwd, "/book/next-book", &existing_book->inst.entity.guid);
kvp_frame_set_guid (exist_cwd, "/book/prev-book", &closing_book->inst.entity.guid);
/* add in transactions to equity accounts that will
* hold the colsing balances */

View File

@@ -38,7 +38,6 @@
#include "TransactionP.h"
#include "TransLog.h"
#include "cap-gains.h"
#include "gnc-be-utils.h"
#include "gnc-commodity.h"
#include "gnc-date.h"
#include "gnc-engine-util.h"
@@ -50,6 +49,7 @@
#include "messages.h"
#include "qofbackend-p.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofbook-p.h"
#include "qofclass.h"
@@ -1461,7 +1461,7 @@ xaccTransSetCurrency (Transaction *trans, gnc_commodity *curr)
void
xaccTransBeginEdit (Transaction *trans)
{
GNC_BEGIN_EDIT(&trans->inst)
QOF_BEGIN_EDIT(&trans->inst)
if (qof_book_shutting_down(trans->inst.book))
return;
@@ -1560,7 +1560,7 @@ void
xaccTransCommitEdit (Transaction *trans)
{
QofBackend *be;
GNC_COMMIT_EDIT_PART1 (&trans->inst);
QOF_COMMIT_EDIT_PART1 (&trans->inst);
/* We increment this for the duration of the call
* so other functions don't result in a recursive
@@ -1600,7 +1600,7 @@ xaccTransCommitEdit (Transaction *trans)
if (!trans->splits) trans->inst.do_free = TRUE;
/* XXX the code below is almost identical to
* GNC_COMMIT_EDIT_PART1 (&trans->inst);
* QOF_COMMIT_EDIT_PART1 (&trans->inst);
* except for the rollback bits */
/* See if there's a backend. If there is, invoke it. */
be = qof_book_get_backend (trans->inst.book);
@@ -1613,7 +1613,7 @@ xaccTransCommitEdit (Transaction *trans)
errcode = qof_backend_get_error (be);
} while (ERR_BACKEND_NO_ERR != errcode);
(be->commit) (be, GNC_ID_TRANS, trans);
(be->commit) (be, &(trans->inst));
errcode = qof_backend_get_error (be);
if (ERR_BACKEND_NO_ERR != errcode)
@@ -1682,7 +1682,7 @@ xaccTransRollbackEdit (Transaction *trans)
int i;
ENTER ("trans addr=%p\n", trans);
GNC_COMMIT_EDIT_PART1(&trans->inst);
QOF_COMMIT_EDIT_PART1(&trans->inst);
/* We increment this for the duration of the call
* so other functions don't result in a recursive
@@ -1852,7 +1852,7 @@ xaccTransRollbackEdit (Transaction *trans)
errcode = qof_backend_get_error (be);
} while (ERR_BACKEND_NO_ERR != errcode);
(be->rollback) (be, GNC_ID_TRANS, trans);
(be->rollback) (be, &(trans->inst));
errcode = qof_backend_get_error (be);
if (ERR_BACKEND_MOD_DESTROY == errcode)

View File

@@ -59,12 +59,8 @@ struct gnc_price_s
struct gnc_price_db_s
{
QofInstance inst; /* globally unique object identifier */
GHashTable *commodity_hash;
QofBook *book; /* book holding this database and all its prices */
/* 'private' object management fields */
gint32 editlevel; /* nesting level of begin/end edit calls */
gboolean dirty;
};
/* These structs define the kind of price lookup being done
@@ -98,12 +94,7 @@ typedef struct gnc_price_lookup_helper_s
} GNCPriceLookupHelper;
#define gnc_price_set_guid(P,G) qof_entity_set_guid(QOF_ENTITY(P),(G))
void gnc_pricedb_set_db(QofBook *book, GNCPriceDB *db);
void gnc_collection_set_pricedb(QofCollection *col, GNCPriceDB *db);
void gnc_pricedb_mark_clean(GNCPriceDB *db);
#define gnc_pricedb_mark_clean(db) qof_instance_mark_clean(QOF_INSTANCE(db))
void gnc_pricedb_substitute_commodity(GNCPriceDB *db,
gnc_commodity *old_c,
gnc_commodity *new_c);

View File

@@ -27,7 +27,6 @@
#include <glib.h>
#include <string.h>
#include "gnc-be-utils.h"
#include "gnc-engine.h"
#include "gnc-engine-util.h"
#include "gnc-event-p.h"
@@ -37,6 +36,7 @@
#include "kvp-util.h"
#include "qofbackend-p.h"
#include "qof-be-utils.h"
#include "qofbook.h"
#include "qofbook-p.h"
#include "qofclass.h"
@@ -154,7 +154,7 @@ gnc_price_clone (GNCPrice* p, QofBook *book)
void
gnc_price_begin_edit (GNCPrice *p)
{
GNC_BEGIN_EDIT (&p->inst);
QOF_BEGIN_EDIT (&p->inst);
}
static inline void commit_err (QofInstance *inst, QofBackendError errcode)
@@ -167,8 +167,8 @@ static inline void noop (QofInstance *inst) {}
void
gnc_price_commit_edit (GNCPrice *p)
{
GNC_COMMIT_EDIT_PART1 (&p->inst);
GNC_COMMIT_EDIT_PART2 (&p->inst, commit_err, noop, noop);
QOF_COMMIT_EDIT_PART1 (&p->inst);
QOF_COMMIT_EDIT_PART2 (&p->inst, commit_err, noop, noop);
}
/* ==================================================================== */
@@ -176,81 +176,14 @@ gnc_price_commit_edit (GNCPrice *p)
void
gnc_pricedb_begin_edit (GNCPriceDB *pdb)
{
QofBackend *be;
if (!pdb) return;
pdb->editlevel++;
if (1 < pdb->editlevel) return;
ENTER ("pdb=%p\n", pdb);
if (0 >= pdb->editlevel)
{
PERR ("unbalanced call - resetting (was %d)", pdb->editlevel);
pdb->editlevel = 1;
}
/* See if there's a backend. If there is, invoke it. */
be = xaccPriceDBGetBackend (pdb);
if (be && be->begin)
{
(be->begin) (be, GNC_ID_PRICEDB, pdb);
}
LEAVE ("pdb=%p\n", pdb);
QOF_BEGIN_EDIT (&pdb->inst);
}
void
gnc_pricedb_commit_edit (GNCPriceDB *pdb)
{
QofBackend *be;
if (!pdb) return;
pdb->editlevel--;
if (0 < pdb->editlevel) return;
ENTER ("pdb=%p\n", pdb);
if (0 > pdb->editlevel)
{
PERR ("unbalanced call - resetting (was %d)", pdb->editlevel);
pdb->editlevel = 0;
}
/* See if there's a backend. If there is, invoke it. */
/* We may not be able to find the backend, so make not of that .. */
be = xaccPriceDBGetBackend (pdb);
if (be && be->commit)
{
QofBackendError errcode;
/* clear errors */
do {
errcode = qof_backend_get_error (be);
} while (ERR_BACKEND_NO_ERR != errcode);
/* if we haven't been able to call begin edit before, call it now */
if (TRUE == pdb->dirty)
{
if (be->begin)
{
(be->begin) (be, GNC_ID_PRICEDB, pdb);
}
}
(be->commit) (be, GNC_ID_PRICEDB, pdb);
errcode = qof_backend_get_error (be);
if (ERR_BACKEND_NO_ERR != errcode)
{
/* XXX hack alert FIXME implement price rollback */
PERR (" backend asked engine to rollback, but this isn't"
" handled yet. Return code=%d", errcode);
/* push error back onto the stack */
qof_backend_set_error (be, errcode);
}
}
pdb->dirty = FALSE;
LEAVE ("pdb=%p\n", pdb);
QOF_COMMIT_EDIT_PART1 (&pdb->inst);
QOF_COMMIT_EDIT_PART2 (&pdb->inst, commit_err, noop, noop);
}
/* ==================================================================== */
@@ -270,7 +203,7 @@ gnc_price_set_commodity(GNCPrice *p, gnc_commodity *c)
remove_price (p->db, p, TRUE);
gnc_price_begin_edit (p);
p->commodity = c;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
add_price (p->db, p);
gnc_price_unref (p);
@@ -292,7 +225,7 @@ gnc_price_set_currency(GNCPrice *p, gnc_commodity *c)
remove_price (p->db, p, TRUE);
gnc_price_begin_edit (p);
p->currency = c;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
add_price (p->db, p);
gnc_price_unref (p);
@@ -312,7 +245,7 @@ gnc_price_set_time(GNCPrice *p, Timespec t)
remove_price (p->db, p, FALSE);
gnc_price_begin_edit (p);
p->tmspec = t;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
add_price (p->db, p);
gnc_price_unref (p);
@@ -333,7 +266,7 @@ gnc_price_set_source(GNCPrice *p, const char *s)
tmp = g_cache_insert(cache, (gpointer) s);
if(p->source) g_cache_remove(cache, p->source);
p->source = tmp;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
}
}
@@ -352,7 +285,7 @@ gnc_price_set_type(GNCPrice *p, const char* type)
tmp = g_cache_insert(cache, (gpointer) type);
if(p->type) g_cache_remove(cache, p->type);
p->type = tmp;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
}
}
@@ -365,7 +298,7 @@ gnc_price_set_value(GNCPrice *p, gnc_numeric value)
{
gnc_price_begin_edit (p);
p->value = value;
if(p->db) p->db->dirty = TRUE;
if(p->db) p->db->inst.dirty = TRUE;
gnc_price_commit_edit (p);
}
}
@@ -623,10 +556,22 @@ gnc_pricedb_create(QofBook * book)
g_return_val_if_fail (book, NULL);
/* There can only be one pricedb per book. So if one exits already,
* then use that. Warn user, they shouldn't be creating two ...
*/
QofCollection *col = qof_book_get_collection (book, GNC_ID_PRICEDB);
result = qof_collection_get_data (col);
if (result)
{
PWARN ("A price database already exists for this book!");
return result;
}
result = g_new0(GNCPriceDB, 1);
result->book = book;
result->editlevel = 0;
result->dirty = FALSE;
qof_instance_init (&result->inst, GNC_ID_PRICEDB, book);
qof_collection_set_data (col, result);
result->commodity_hash = g_hash_table_new(commodity_hash, commodity_equal);
g_return_val_if_fail (result->commodity_hash, NULL);
return result;
@@ -672,11 +617,16 @@ gnc_pricedb_destroy(GNCPriceDB *db)
NULL);
g_hash_table_destroy (db->commodity_hash);
db->commodity_hash = NULL;
db->book = NULL;
qof_instance_release (&db->inst);
g_free(db);
}
/* ==================================================================== */
/* This is kind of weird, the way its done. Each collection of prices
* for a given commodity should get its own guid, be its own entity, etc.
* We really shouldn't be using the collection data. But, hey I guess its OK,
* yeah?
*/
GNCPriceDB *
gnc_collection_get_pricedb(QofCollection *col)
@@ -689,50 +639,10 @@ gnc_pricedb_get_db(QofBook *book)
{
QofCollection *col;
if (!book) return NULL;
col = qof_book_get_collection (book, GNC_ID_PRICE);
col = qof_book_get_collection (book, GNC_ID_PRICEDB);
return gnc_collection_get_pricedb (col);
}
void
gnc_collection_set_pricedb(QofCollection *col, GNCPriceDB *db)
{
GNCPriceDB *old_db;
if(!col) return;
old_db = qof_collection_get_data (col);
if (db == old_db) return;
qof_collection_set_data (col, db);
gnc_pricedb_destroy (old_db);
}
void
gnc_pricedb_set_db(QofBook *book, GNCPriceDB *db)
{
QofCollection *col;
if(!book) return;
col = qof_book_get_collection (book, GNC_ID_PRICE);
gnc_collection_set_pricedb (col, db);
if (db) db->book = book;
}
/* ==================================================================== */
gboolean
gnc_pricedb_dirty(GNCPriceDB *p)
{
if(!p) return FALSE;
return p->dirty;
}
void
gnc_pricedb_mark_clean(GNCPriceDB *p)
{
if(!p) return;
p->dirty = FALSE;
}
/* ==================================================================== */
static gboolean
@@ -841,9 +751,7 @@ add_price(GNCPriceDB *db, GNCPrice *p)
ENTER ("db=%p, pr=%p dirty=%d do-free=%d",
db, p, p->inst.dirty, p->inst.do_free);
/* initialize the book pointer for the first time, if needed */
if (NULL == db->book) db->book = p->inst.book;
if (db->book != p->inst.book)
if (db->inst.book != p->inst.book)
{
PERR ("attempted to mix up prices across different books");
return FALSE;
@@ -897,7 +805,7 @@ gnc_pricedb_add_price(GNCPriceDB *db, GNCPrice *p)
if (TRUE == p->inst.dirty)
{
gnc_price_begin_edit(p);
db->dirty = TRUE;
db->inst.dirty = TRUE;
gnc_price_commit_edit(p);
}
@@ -976,7 +884,7 @@ gnc_pricedb_remove_price(GNCPriceDB *db, GNCPrice *p)
/* invoke the backend to delete this price */
gnc_price_begin_edit (p);
db->dirty = TRUE;
db->inst.dirty = TRUE;
p->inst.do_free = TRUE;
gnc_price_commit_edit (p);
@@ -1001,14 +909,14 @@ gnc_pricedb_lookup_latest(GNCPriceDB *db,
ENTER ("db=%p commodity=%p currency=%p", db, commodity, currency);
if(!db || !commodity || !currency) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_LATEST;
pl.prdb = db;
pl.commodity = commodity;
pl.currency = currency;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, commodity);
@@ -1052,14 +960,14 @@ gnc_pricedb_lookup_latest_any_currency(GNCPriceDB *db,
ENTER ("db=%p commodity=%p", db, commodity);
if(!db || !commodity) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_LATEST;
pl.prdb = db;
pl.commodity = commodity;
pl.currency = NULL; /* can the backend handle this??? */
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, commodity);
@@ -1096,14 +1004,14 @@ gnc_pricedb_get_prices(GNCPriceDB *db,
ENTER ("db=%p commodity=%p currency=%p", db, commodity, currency);
if(!db || !commodity) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_ALL;
pl.prdb = db;
pl.commodity = commodity;
pl.currency = currency;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, commodity);
@@ -1142,7 +1050,7 @@ gnc_pricedb_lookup_day(GNCPriceDB *db,
/* Convert to noon local time. */
t = timespecCanonicalDayTime(t);
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_AT_TIME;
@@ -1150,7 +1058,7 @@ gnc_pricedb_lookup_day(GNCPriceDB *db,
pl.commodity = c;
pl.currency = currency;
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1210,7 +1118,7 @@ gnc_pricedb_lookup_day_any_currency(GNCPriceDB *db,
/* Convert to noon local time. */
t = timespecCanonicalDayTime(t);
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_AT_TIME;
@@ -1218,7 +1126,7 @@ gnc_pricedb_lookup_day_any_currency(GNCPriceDB *db,
pl.commodity = c;
pl.currency = NULL; /* can the backend handle this??? */
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1251,7 +1159,7 @@ gnc_pricedb_lookup_at_time(GNCPriceDB *db,
ENTER ("db=%p commodity=%p currency=%p", db, c, currency);
if(!db || !c || !currency) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_AT_TIME;
@@ -1259,7 +1167,7 @@ gnc_pricedb_lookup_at_time(GNCPriceDB *db,
pl.commodity = c;
pl.currency = currency;
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1315,7 +1223,7 @@ gnc_pricedb_lookup_at_time_any_currency(GNCPriceDB *db,
ENTER ("db=%p commodity=%p", db, c);
if(!db || !c) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_AT_TIME;
@@ -1323,7 +1231,7 @@ gnc_pricedb_lookup_at_time_any_currency(GNCPriceDB *db,
pl.commodity = c;
pl.currency = NULL; /* can the backend handle this??? */
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1358,7 +1266,7 @@ gnc_pricedb_lookup_nearest_in_time(GNCPriceDB *db,
ENTER ("db=%p commodity=%p currency=%p", db, c, currency);
if(!db || !c || !currency) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_NEAREST_IN_TIME;
@@ -1366,7 +1274,7 @@ gnc_pricedb_lookup_nearest_in_time(GNCPriceDB *db,
pl.commodity = c;
pl.currency = currency;
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1482,7 +1390,7 @@ gnc_pricedb_lookup_nearest_in_time_any_currency(GNCPriceDB *db,
ENTER ("db=%p commodity=%p", db, c);
if(!db || !c) return NULL;
if (db->book && db->book->backend && db->book->backend->price_lookup)
if (db->inst.book->backend && db->inst.book->backend->price_lookup)
{
GNCPriceLookup pl;
pl.type = LOOKUP_NEAREST_IN_TIME;
@@ -1490,7 +1398,7 @@ gnc_pricedb_lookup_nearest_in_time_any_currency(GNCPriceDB *db,
pl.commodity = c;
pl.currency = NULL; /* can the backend handle this??? */
pl.date = t;
(db->book->backend->price_lookup) (db->book->backend, &pl);
(db->inst.book->backend->price_lookup) (db->inst.book->backend, &pl);
}
currency_hash = g_hash_table_lookup(db->commodity_hash, c);
@@ -1930,29 +1838,19 @@ gnc_pricedb_print_contents(GNCPriceDB *db, FILE *f)
fprintf(f, "</gnc:pricedb>\n");
}
/* ==================================================================== */
QofBackend *
xaccPriceDBGetBackend (GNCPriceDB *prdb)
{
if (!prdb || !prdb->book) return NULL;
return prdb->book->backend;
}
/* ==================================================================== */
/* gncObject function implementation and registration */
static void
pricedb_book_begin (QofBook *book)
{
gnc_pricedb_set_db (book, gnc_pricedb_create(book));
gnc_pricedb_create(book);
}
static void
pricedb_book_end (QofBook *book)
{
/* unhook the prices */
gnc_pricedb_set_db (book, NULL);
/* ????? */
}
static gboolean

View File

@@ -374,7 +374,7 @@ gboolean gnc_pricedb_foreach_price(GNCPriceDB *db,
/** gnc_pricedb_dirty - return FALSE if the database has not been
modified. */
gboolean gnc_pricedb_dirty(GNCPriceDB *db);
#define gnc_pricedb_dirty(db) qof_instance_is_dirty(QOF_INSTANCE(db))
/** gnc_pricedb_get_num_prices - return the number of prices
in the database. */

View File

@@ -1,5 +1,5 @@
/********************************************************************\
* gnc-be-utils.h: api for data storage backend *
* qof-be-utils.h: api for data storage backend *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License as *
* published by the Free Software Foundation; either version 2 of *
@@ -18,23 +18,26 @@
* Boston, MA 02111-1307, USA gnu@gnu.org *
* *
\********************************************************************/
/*
* gnc-be-utils.h -- QOF Backend Utilities
* common code used by objects to define begin_edit() and
* commit_edit() functions.
*
* Written by: Derek Atkins <derek@ihtfp.com>
/** @addtogroup Object
@{ */
/** @addtogroup Backend
* @{
* @file qof-be-utils.h
* @brief QOF Backend Utilities
* @author Derek Atkins <derek@ihtfp.com>
* Common code used by objects to define begin_edit() and
* commit_edit() functions.
*
*/
#ifndef GNC_BE_UTILS_H
#define GNC_BE_UTILS_H
#ifndef QOF_BE_UTILS_H
#define QOF_BE_UTILS_H
#include "gnc-engine-util.h"
#include "qofbackend-p.h"
#include "qofbook.h"
/* begin_edit helper
/** begin_edit helper
*
* @args:
* inst: an instance of QofInstance
@@ -42,7 +45,7 @@
* The caller should use this macro first and then perform any other operations.
*/
#define GNC_BEGIN_EDIT(inst) \
#define QOF_BEGIN_EDIT(inst) \
QofBackend * be; \
if (!(inst)) return; \
\
@@ -59,14 +62,14 @@
/* See if there's a backend. If there is, invoke it. */ \
be = qof_book_get_backend ((inst)->book); \
if (be && be->begin) { \
(be->begin) (be, (inst)->entity.e_type, (inst)); \
(be->begin) (be, (inst)); \
} else { \
/* We tried and failed to start transaction! */ \
(inst)->dirty = TRUE; \
}
/*
/**
* commit_edit helpers
*
* The caller should call PART1 as the first thing, then
@@ -74,14 +77,14 @@
* Then call PART2.
*/
/*
/**
* part1 -- deal with the editlevel
*
* @args:
* inst: an instance of QofInstance
*/
#define GNC_COMMIT_EDIT_PART1(inst) { \
#define QOF_COMMIT_EDIT_PART1(inst) { \
if (!(inst)) return; \
\
(inst)->editlevel--; \
@@ -95,7 +98,7 @@
QofBackend * be; \
be = qof_book_get_backend ((inst)->book); \
if (be && be->begin) { \
(be->begin) (be, (inst)->entity.e_type, (inst)); \
(be->begin) (be, (inst)); \
} \
(inst)->editlevel = 0; \
} \
@@ -108,7 +111,7 @@
(inst), (inst)->dirty, (inst)->do_free); \
}
/*
/**
* part2 -- deal with the backend
*
* @args:
@@ -122,7 +125,7 @@
* on_free: a function called if inst->do_free is TRUE.
* void (*on_free)(inst)
*/
#define GNC_COMMIT_EDIT_PART2(inst,on_error,on_done,on_free) { \
#define QOF_COMMIT_EDIT_PART2(inst,on_error,on_done,on_free) { \
QofBackend * be; \
\
/* See if there's a backend. If there is, invoke it. */ \
@@ -136,7 +139,7 @@
errcode = qof_backend_get_error (be); \
} while (ERR_BACKEND_NO_ERR != errcode); \
\
(be->commit) (be, (inst)->entity.e_type, (inst)); \
(be->commit) (be, (inst)); \
errcode = qof_backend_get_error (be); \
if (ERR_BACKEND_NO_ERR != errcode) \
{ \
@@ -160,5 +163,6 @@
} \
}
#endif /* GNC_BE_UTILS_H */
#endif /* QOF_BE_UTILS_H */
/** @} */
/** @} */

View File

@@ -43,6 +43,7 @@
#include "qofbackend.h"
#include "qofbook.h"
#include "qofinstance.h"
#include "qofquery.h"
#include "qofsession.h"
@@ -108,11 +109,11 @@
* to ERR_BACKEND_MOD_DESTROY from this routine, so that the
* engine can properly clean up.
*
* The compile_query() method compiles a Gnucash query object into
* The compile_query() method compiles a QOF query object into
* a backend-specific data structure and returns the compiled
* query. For an SQL backend, the contents of the query object
* need to be turned into a corresponding SQL query statement, and
* sent to the database for evaluation.
* are typically turned into a corresponding SQL query statement,
* and sent to the database for evaluation.
*
* The free_query() method frees the data structure returned from
* compile_query()
@@ -234,9 +235,9 @@ struct _QofBackend
void (*load) (QofBackend *, QofBook *);
void (*begin) (QofBackend *, QofIdTypeConst, gpointer);
void (*commit) (QofBackend *, QofIdTypeConst, gpointer);
void (*rollback) (QofBackend *, QofIdTypeConst, gpointer);
void (*begin) (QofBackend *, QofInstance *);
void (*commit) (QofBackend *, QofInstance *);
void (*rollback) (QofBackend *, QofInstance *);
gpointer (*compile_query) (QofBackend *, QofQuery *);
void (*free_query) (QofBackend *, gpointer);

View File

@@ -41,16 +41,13 @@
#include "qofbook.h"
#include "qofid.h"
#include "qofid-p.h"
#include "qofinstance-p.h"
/** Book structure */
struct _QofBook
{
QofEntity entity; /**< Unique guid for this book. */
QofInstance inst; /**< Unique guid for this book. */
/** The KvpFrame provides a place for top-level data associated
* with this book. */
KvpFrame *kvp_data;
/** The entity table associates the GUIDs of all the objects
* belonging to this book, with their pointers to the respective
* objects. This allows a lookup of objects based on thier guid.
@@ -67,17 +64,14 @@ struct _QofBook
/** state flag: 'y' means 'open for editing',
* 'n' means 'book is closed'
* xxxxx shouldn't this be replaced by the instance editlevel ???
*/
char book_open;
/** dirty/clean flag. If dirty, then this book has been modified,
* but has not yet been written out to storage (file/database)
*/
gboolean dirty;
/** a flag denoting whether the book is closing down, used to
* help the QOF objects shut down cleanly without maintaining
* internal consistency.
* XXX shouldn't this be replaced by instance->do_free ???
*/
gboolean shutting_down;

View File

@@ -58,16 +58,12 @@ static short module = MOD_ENGINE;
static void
qof_book_init (QofBook *book)
{
QofCollection *col;
if (!book) return;
book->hash_of_collections = g_hash_table_new (g_str_hash, g_str_equal);
col = qof_book_get_collection (book, QOF_ID_BOOK);
qof_entity_init (&book->entity, QOF_ID_BOOK, col);
qof_instance_init (&book->inst, QOF_ID_BOOK, book);
book->kvp_data = kvp_frame_new ();
book->data_tables = g_hash_table_new (g_str_hash, g_str_equal);
book->data_table_finalizers = g_hash_table_new (g_str_hash, g_str_equal);
@@ -86,7 +82,7 @@ qof_book_new (void)
qof_book_init(book);
qof_object_book_begin (book);
gnc_engine_gen_event (&book->entity, GNC_EVENT_CREATE);
gnc_engine_gen_event (&book->inst.entity, GNC_EVENT_CREATE);
LEAVE ("book=%p", book);
return book;
}
@@ -116,7 +112,7 @@ qof_book_destroy (QofBook *book)
ENTER ("book=%p", book);
book->shutting_down = TRUE;
gnc_engine_force_event (&book->entity, GNC_EVENT_DESTROY);
gnc_engine_force_event (&book->inst.entity, GNC_EVENT_DESTROY);
/* Call the list of finalizers, let them do thier thing.
* Do this before tearing into the rest of the book.
@@ -125,12 +121,10 @@ qof_book_destroy (QofBook *book)
qof_object_book_end (book);
kvp_frame_delete (book->kvp_data);
g_hash_table_destroy (book->data_table_finalizers);
g_hash_table_destroy (book->data_tables);
qof_entity_release (&book->entity);
qof_instance_release (&book->inst);
g_hash_table_foreach_remove (book->hash_of_collections,
coll_destroy, NULL);
@@ -159,7 +153,7 @@ qof_book_not_saved(QofBook *book)
{
if (!book) return FALSE;
return(book->dirty || qof_object_is_dirty (book));
return(book->inst.dirty || qof_object_is_dirty (book));
}
void
@@ -167,20 +161,13 @@ qof_book_mark_saved(QofBook *book)
{
if (!book) return;
book->dirty = FALSE;
book->inst.dirty = FALSE;
qof_object_mark_clean (book);
}
/* ====================================================================== */
/* getters */
KvpFrame *
qof_book_get_slots (QofBook *book)
{
if (!book) return NULL;
return book->kvp_data;
}
QofBackend *
qof_book_get_backend (QofBook *book)
{
@@ -209,7 +196,7 @@ qof_book_set_backend (QofBook *book, QofBackend *be)
void qof_book_kvp_changed (QofBook *book)
{
if (!book) return;
book->dirty = TRUE;
book->inst.dirty = TRUE;
}
/* ====================================================================== */
@@ -352,8 +339,8 @@ qof_book_get_counter (QofBook *book, const char *counter_name)
gboolean qof_book_register (void)
{
static QofParam params[] = {
{ QOF_BOOK_KVP, QOF_TYPE_KVP, (QofAccessFunc)qof_book_get_slots, NULL },
{ QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL },
{ QOF_PARAM_KVP, QOF_TYPE_KVP, (QofAccessFunc)qof_instance_get_slots, NULL },
{ NULL },
};

View File

@@ -99,7 +99,7 @@ void qof_book_foreach_collection (QofBook *, QofCollectionForeachCB, gpointer);
* between multiple users). To store application runtime data, use
* qof_book_set_data() isntead.
*/
KvpFrame * qof_book_get_slots (QofBook *book);
#define qof_book_get_slots(book) qof_instance_get_slots(QOF_INSTANCE(book))
/** The qof_book_set_data() allows arbitrary pointers to structs
* to be stored in QofBook. This is the "prefered" method for
@@ -154,13 +154,6 @@ gboolean qof_book_equal (QofBook *book_1, QofBook *book_2);
*/
gint64 qof_book_get_counter (QofBook *book, const char *counter_name);
/** Book parameter names */
/**@{*/
#define QOF_BOOK_KVP "qof-kvp"
/**@}*/
/** deprecated */
#define qof_book_get_guid(X) qof_entity_get_guid (QOF_ENTITY(X))

View File

@@ -73,7 +73,9 @@ struct QofInstance_s
/** In process of being destroyed */
gboolean do_free;
/** This instance has not been saved yet */
/** dirty/clean flag. If dirty, then this instance has been modified,
* but has not yet been written out to storage (file/database)
*/
gboolean dirty;
};

View File

@@ -165,11 +165,11 @@ qof_instance_gemini (QofInstance *to, QofInstance *from)
/* Make a note of where the copy came from */
gnc_kvp_bag_add (to->kvp_data, "gemini", now,
"inst_guid", &from->entity.guid,
"book_guid", &from->book->entity.guid,
"book_guid", &from->book->inst.entity.guid,
NULL);
gnc_kvp_bag_add (from->kvp_data, "gemini", now,
"inst_guid", &to->entity.guid,
"book_guid", &to->book->entity.guid,
"book_guid", &to->book->inst.entity.guid,
NULL);
to->dirty = TRUE;
@@ -187,7 +187,7 @@ qof_instance_lookup_twin (QofInstance *src, QofBook *target_book)
ENTER (" ");
fr = gnc_kvp_bag_find_by_guid (src->kvp_data, "gemini",
"book_guid", &target_book->entity.guid);
"book_guid", &target_book->inst.entity.guid);
twin_guid = kvp_frame_get_guid (fr, "inst_guid");

View File

@@ -109,6 +109,7 @@ typedef enum {
#define QOF_PARAM_GUID "guid"
/** "Known" Object Parameters -- some objects might support these */
#define QOF_PARAM_KVP "kvp"
#define QOF_PARAM_ACTIVE "active"
/* --------------------------------------------------------- */