From ce63311484acadee85ac5188dd9d05ab3b90af56 Mon Sep 17 00:00:00 2001 From: Linas Vepstas Date: Sun, 23 May 2004 17:31:40 +0000 Subject: [PATCH] -- Rename QOF_QUERY_PARAM_XX to QOF_PARAM_XX -- Add 'new' callback to QofObject. This allows QofObject to act as an 'object factory', creating a new instance of something, given only the type name. Plan to use this in the new SQL backend, when restoring objects from SQL tables. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@9965 57a11ea4-9604-0410-9ed3-97b8803252fd --- src/backend/postgres/putil.h | 4 +- src/business/business-core/gncBillTerm.c | 5 +- src/business/business-core/gncCustomer.c | 7 +-- src/business/business-core/gncEmployee.c | 7 +-- src/business/business-core/gncEntry.c | 5 +- src/business/business-core/gncInvoice.c | 7 +-- src/business/business-core/gncJob.c | 7 +-- src/business/business-core/gncOrder.c | 7 +-- src/business/business-core/gncOwner.c | 2 +- src/business/business-core/gncTaxTable.c | 5 +- src/business/business-core/gncVendor.c | 7 +-- src/engine/Account.c | 5 +- src/engine/Group.c | 1 + src/engine/Query.c | 8 +-- src/engine/QueryNew.h | 6 +-- src/engine/SX-book.c | 1 + src/engine/Transaction.c | 10 ++-- src/engine/gnc-commodity.c | 1 + src/engine/gnc-lot.c | 4 +- src/engine/gnc-pricedb.c | 1 + src/engine/qofbook.c | 4 +- src/engine/qofgobj.c | 1 + src/engine/qofid.c | 2 + src/engine/qofid.h | 12 +++-- src/engine/qofobject.c | 18 +++++++ src/engine/qofobject.h | 65 +++++++++++++----------- src/engine/qofquery.c | 7 +-- src/engine/qofquery.h | 6 +-- src/engine/qofsql.c | 2 +- src/engine/test/test-object.c | 19 +++---- src/engine/xlate.pl | 6 +-- 31 files changed, 146 insertions(+), 96 deletions(-) diff --git a/src/backend/postgres/putil.h b/src/backend/postgres/putil.h index 7dda3f0180..283d7cbecc 100644 --- a/src/backend/postgres/putil.h +++ b/src/backend/postgres/putil.h @@ -146,13 +146,13 @@ int finishQuery(PGBackend *be); result = PQgetResult (conn); \ if (!result) break; \ status = PQresultStatus(result); \ - msg = PQresultErrorMessage(result); \ if ((PGRES_COMMAND_OK != status) && \ (PGRES_TUPLES_OK != status)) \ { \ + msg = PQresultErrorMessage(result); \ PERR("failed to get result to query:\n\t%s", msg); \ PQclear (result); \ - qof_backend_set_message (&be->be, msg); \ + qof_backend_set_message (&be->be, msg); \ qof_backend_set_error (&be->be, ERR_BACKEND_SERVER_ERR);\ break; \ } \ diff --git a/src/business/business-core/gncBillTerm.c b/src/business/business-core/gncBillTerm.c index 30ec24acc9..f66eaf13d0 100644 --- a/src/business/business-core/gncBillTerm.c +++ b/src/business/business-core/gncBillTerm.c @@ -678,6 +678,7 @@ static QofObject gncBillTermDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Billing Term", + new: NULL, book_begin: _gncBillTermCreate, book_end: _gncBillTermDestroy, is_dirty: qof_collection_is_dirty, @@ -689,8 +690,8 @@ static QofObject gncBillTermDesc = gboolean gncBillTermRegister (void) { static QofParam params[] = { - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncCustomer.c b/src/business/business-core/gncCustomer.c index fe782f8762..19e22a2e8c 100644 --- a/src/business/business-core/gncCustomer.c +++ b/src/business/business-core/gncCustomer.c @@ -536,6 +536,7 @@ static QofObject gncCustomerDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Customer", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -551,9 +552,9 @@ gboolean gncCustomerRegister (void) { CUSTOMER_NAME, QOF_TYPE_STRING, (QofAccessFunc)gncCustomerGetName, NULL }, { CUSTOMER_ADDR, GNC_ADDRESS_MODULE_NAME, (QofAccessFunc)gncCustomerGetAddr, NULL }, { CUSTOMER_SHIPADDR, GNC_ADDRESS_MODULE_NAME, (QofAccessFunc)gncCustomerGetShipAddr, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncCustomerGetActive, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncCustomerGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncEmployee.c b/src/business/business-core/gncEmployee.c index 95e1e36f92..282ca4cae6 100644 --- a/src/business/business-core/gncEmployee.c +++ b/src/business/business-core/gncEmployee.c @@ -403,6 +403,7 @@ static QofObject gncEmployeeDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Employee", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -417,9 +418,9 @@ gboolean gncEmployeeRegister (void) { EMPLOYEE_ID, QOF_TYPE_STRING, (QofAccessFunc)gncEmployeeGetID, NULL }, { EMPLOYEE_USERNAME, QOF_TYPE_STRING, (QofAccessFunc)gncEmployeeGetUsername, NULL }, { EMPLOYEE_ADDR, GNC_ADDRESS_MODULE_NAME, (QofAccessFunc)gncEmployeeGetAddr, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncEmployeeGetActive, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncEmployeeGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncEntry.c b/src/business/business-core/gncEntry.c index 273860e882..84f11905a2 100644 --- a/src/business/business-core/gncEntry.c +++ b/src/business/business-core/gncEntry.c @@ -1169,6 +1169,7 @@ static QofObject gncEntryDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Order/Invoice/Bill Entry", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -1193,8 +1194,8 @@ gboolean gncEntryRegister (void) { ENTRY_BILLABLE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncEntryGetBillable, NULL }, { ENTRY_BILLTO, GNC_ID_OWNER, (QofAccessFunc)gncEntryGetBillTo, NULL }, { ENTRY_ORDER, GNC_ID_ORDER, (QofAccessFunc)gncEntryGetOrder, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncInvoice.c b/src/business/business-core/gncInvoice.c index 7f07b4a7d4..4b7176c4b6 100644 --- a/src/business/business-core/gncInvoice.c +++ b/src/business/business-core/gncInvoice.c @@ -1363,6 +1363,7 @@ static QofObject gncInvoiceDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Invoice", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -1413,9 +1414,9 @@ gboolean gncInvoiceRegister (void) { INVOICE_TYPE, QOF_TYPE_STRING, (QofAccessFunc)gncInvoiceGetType, NULL }, { INVOICE_TERMS, GNC_ID_BILLTERM, (QofAccessFunc)gncInvoiceGetTerms, NULL }, { INVOICE_BILLTO, GNC_ID_OWNER, (QofAccessFunc)gncInvoiceGetBillTo, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceGetActive, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncInvoiceGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncJob.c b/src/business/business-core/gncJob.c index 1981acaca6..547af507ca 100644 --- a/src/business/business-core/gncJob.c +++ b/src/business/business-core/gncJob.c @@ -353,6 +353,7 @@ static QofObject gncJobDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Job", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -369,9 +370,9 @@ gboolean gncJobRegister (void) { JOB_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncJobGetActive, NULL }, { JOB_REFERENCE, QOF_TYPE_STRING, (QofAccessFunc)gncJobGetReference, NULL }, { JOB_OWNER, GNC_ID_OWNER, (QofAccessFunc)gncJobGetOwner, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncJobGetActive, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncJobGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncOrder.c b/src/business/business-core/gncOrder.c index eb1b0e7542..b3295f64a7 100644 --- a/src/business/business-core/gncOrder.c +++ b/src/business/business-core/gncOrder.c @@ -425,6 +425,7 @@ static QofObject gncOrderDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Order", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -443,9 +444,9 @@ gboolean gncOrderRegister (void) { ORDER_IS_CLOSED, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncOrderIsClosed, NULL }, { ORDER_CLOSED, QOF_TYPE_DATE, (QofAccessFunc)gncOrderGetDateClosed, NULL }, { ORDER_NOTES, QOF_TYPE_STRING, (QofAccessFunc)gncOrderGetNotes, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncOrderGetActive, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncOrderGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncOwner.c b/src/business/business-core/gncOwner.c index 1a09f91437..3227e54a69 100644 --- a/src/business/business-core/gncOwner.c +++ b/src/business/business-core/gncOwner.c @@ -406,7 +406,7 @@ gboolean gncOwnerRegister (void) { OWNER_PARENT, GNC_ID_OWNER, (QofAccessFunc)gncOwnerGetEndOwner, NULL }, { OWNER_PARENTG, QOF_TYPE_GUID, (QofAccessFunc)gncOwnerGetEndGUID, NULL }, { OWNER_NAME, QOF_TYPE_STRING, (QofAccessFunc)gncOwnerGetName, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)gncOwnerGetGUID, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)gncOwnerGetGUID, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncTaxTable.c b/src/business/business-core/gncTaxTable.c index 4854314908..b4484efeb2 100644 --- a/src/business/business-core/gncTaxTable.c +++ b/src/business/business-core/gncTaxTable.c @@ -799,6 +799,7 @@ static QofObject gncTaxTableDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Tax Table", + new: NULL, book_begin: _gncTaxTableCreate, book_end: _gncTaxTableDestroy, is_dirty: qof_collection_is_dirty, @@ -810,8 +811,8 @@ static QofObject gncTaxTableDesc = gboolean gncTaxTableRegister (void) { static QofParam params[] = { - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { NULL }, }; diff --git a/src/business/business-core/gncVendor.c b/src/business/business-core/gncVendor.c index 82cb07f7ad..092110ebf4 100644 --- a/src/business/business-core/gncVendor.c +++ b/src/business/business-core/gncVendor.c @@ -486,6 +486,7 @@ static QofObject gncVendorDesc = interface_version: QOF_OBJECT_VERSION, e_type: _GNC_MOD_NAME, type_label: "Vendor", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: qof_collection_is_dirty, @@ -500,9 +501,9 @@ gboolean gncVendorRegister (void) { VENDOR_ID, QOF_TYPE_STRING, (QofAccessFunc)gncVendorGetID, NULL }, { VENDOR_NAME, QOF_TYPE_STRING, (QofAccessFunc)gncVendorGetName, NULL }, { VENDOR_ADDR, GNC_ADDRESS_MODULE_NAME, (QofAccessFunc)gncVendorGetAddr, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, - { QOF_QUERY_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncVendorGetActive, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_ACTIVE, QOF_TYPE_BOOLEAN, (QofAccessFunc)gncVendorGetActive, NULL }, { NULL }, }; diff --git a/src/engine/Account.c b/src/engine/Account.c index ad2d33d2e1..b6ca4001a8 100644 --- a/src/engine/Account.c +++ b/src/engine/Account.c @@ -2836,6 +2836,7 @@ static QofObject account_object_def = { interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_ACCOUNT, type_label: "Account", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: NULL, @@ -2857,8 +2858,8 @@ gboolean xaccAccountRegister (void) { ACCOUNT_RECONCILED_, QOF_TYPE_NUMERIC, (QofAccessFunc)xaccAccountGetReconciledBalance, NULL }, { ACCOUNT_FUTURE_MINIMUM_, QOF_TYPE_NUMERIC, (QofAccessFunc)xaccAccountGetProjectedMinimumBalance, NULL }, { ACCOUNT_TAX_RELATED, QOF_TYPE_BOOLEAN, (QofAccessFunc)xaccAccountGetTaxRelated, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_instance_get_guid, NULL }, { ACCOUNT_KVP, QOF_TYPE_KVP, (QofAccessFunc)qof_instance_get_slots, NULL }, { NULL }, }; diff --git a/src/engine/Group.c b/src/engine/Group.c index c29252d607..1148a9c6bb 100644 --- a/src/engine/Group.c +++ b/src/engine/Group.c @@ -1263,6 +1263,7 @@ static QofObject group_object_def = interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_GROUP, type_label: "AccountGroup", + new: NULL, book_begin: group_book_begin, book_end: group_book_end, is_dirty: group_is_dirty, diff --git a/src/engine/Query.c b/src/engine/Query.c index bce946a39d..204b4d5b18 100644 --- a/src/engine/Query.c +++ b/src/engine/Query.c @@ -266,7 +266,7 @@ xaccQueryAddAccountGUIDMatch(Query *q, AccountGUIDList *guid_list, switch (how) { case QOF_GUID_MATCH_ANY: case QOF_GUID_MATCH_NONE: - param_list = qof_query_build_param_list (SPLIT_ACCOUNT, QOF_QUERY_PARAM_GUID, NULL); + param_list = qof_query_build_param_list (SPLIT_ACCOUNT, QOF_PARAM_GUID, NULL); break; case QOF_GUID_MATCH_ALL: param_list = qof_query_build_param_list (SPLIT_TRANS, TRANS_SPLITLIST, @@ -484,11 +484,11 @@ xaccQueryAddGUIDMatch(Query * q, const GUID *guid, return; if (!safe_strcmp (id_type, GNC_ID_SPLIT)) - param_list = qof_query_build_param_list (QOF_QUERY_PARAM_GUID, NULL); + param_list = qof_query_build_param_list (QOF_PARAM_GUID, NULL); else if (!safe_strcmp (id_type, GNC_ID_TRANS)) - param_list = qof_query_build_param_list (SPLIT_TRANS, QOF_QUERY_PARAM_GUID, NULL); + param_list = qof_query_build_param_list (SPLIT_TRANS, QOF_PARAM_GUID, NULL); else if (!safe_strcmp (id_type, GNC_ID_ACCOUNT)) - param_list = qof_query_build_param_list (SPLIT_ACCOUNT, QOF_QUERY_PARAM_GUID, NULL); + param_list = qof_query_build_param_list (SPLIT_ACCOUNT, QOF_PARAM_GUID, NULL); else PERR ("Invalid match type: %s", id_type); diff --git a/src/engine/QueryNew.h b/src/engine/QueryNew.h index 81259825b8..7d3a51de54 100644 --- a/src/engine/QueryNew.h +++ b/src/engine/QueryNew.h @@ -6,9 +6,9 @@ #define QUERY_NAND QOF_QUERY_NAND #define QUERY_NOR QOF_QUERY_NOR #define QUERY_XOR QOF_QUERY_XOR - #define QUERY_PARAM_BOOK QOF_QUERY_PARAM_BOOK - #define QUERY_PARAM_GUID QOF_QUERY_PARAM_GUID - #define QUERY_PARAM_ACTIVE QOF_QUERY_PARAM_ACTIVE + #define QUERY_PARAM_BOOK QOF_PARAM_BOOK + #define QUERY_PARAM_GUID QOF_PARAM_GUID + #define QUERY_PARAM_ACTIVE QOF_PARAM_ACTIVE #define querynew_s _QofQuery #define QueryNew QofQuery diff --git a/src/engine/SX-book.c b/src/engine/SX-book.c index 3b58a0a957..9c25114dbd 100644 --- a/src/engine/SX-book.c +++ b/src/engine/SX-book.c @@ -269,6 +269,7 @@ static QofObject sxtt_object_def = interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_SXTT, type_label: "Scheduled Transaction Templates", + new: NULL, book_begin: sxtt_book_begin, book_end: sxtt_book_end, is_dirty: book_sxlist_notsaved, diff --git a/src/engine/Transaction.c b/src/engine/Transaction.c index c647f8d778..ed988a954d 100644 --- a/src/engine/Transaction.c +++ b/src/engine/Transaction.c @@ -3187,6 +3187,7 @@ static QofObject split_object_def = { interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_SPLIT, type_label: "Split", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: NULL, @@ -3258,8 +3259,8 @@ gboolean xaccSplitRegister (void) { SPLIT_CORR_ACCT_NAME, SPLIT_CORR_ACCT_NAME, no_op, NULL }, { SPLIT_CORR_ACCT_CODE, SPLIT_CORR_ACCT_CODE, no_op, NULL }, { SPLIT_KVP, QOF_TYPE_KVP, (QofAccessFunc)xaccSplitGetSlots, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)xaccSplitGetBook, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)xaccSplitGetBook, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL }, { NULL }, }; @@ -3281,6 +3282,7 @@ static QofObject trans_object_def = { interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_TRANS, type_label: "Transaction", + new: NULL, book_begin: NULL, book_end: NULL, is_dirty: NULL, @@ -3314,8 +3316,8 @@ gboolean xaccTransRegister (void) { TRANS_VOID_TIME, QOF_TYPE_DATE, (QofAccessFunc)xaccTransGetVoidTime,NULL }, { TRANS_SPLITLIST, GNC_ID_SPLIT, (QofAccessFunc)xaccTransGetSplitList,NULL }, { TRANS_KVP, QOF_TYPE_KVP, (QofAccessFunc)qof_instance_get_slots,NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book,NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid,NULL }, + { QOF_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)qof_instance_get_book,NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid,NULL }, { NULL }, }; diff --git a/src/engine/gnc-commodity.c b/src/engine/gnc-commodity.c index 102002786c..2454e1a302 100644 --- a/src/engine/gnc-commodity.c +++ b/src/engine/gnc-commodity.c @@ -1598,6 +1598,7 @@ static QofObject commodity_table_object_def = interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_COMMODITY_TABLE, type_label: "CommodityTable", + new: NULL, book_begin: commodity_table_book_begin, book_end: commodity_table_book_end, is_dirty: NULL, diff --git a/src/engine/gnc-lot.c b/src/engine/gnc-lot.c index ee9ffaae6a..1c5de01596 100644 --- a/src/engine/gnc-lot.c +++ b/src/engine/gnc-lot.c @@ -361,8 +361,8 @@ gnc_lot_get_latest_split (GNCLot *lot) void gnc_lot_register (void) { static const QofParam params[] = { - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL }, - { QOF_QUERY_PARAM_BOOK, QOF_ID_BOOK, (QofAccessFunc)gnc_lot_get_book, NULL }, + { 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 }, { LOT_BALANCE, QOF_TYPE_NUMERIC, (QofAccessFunc)gnc_lot_get_balance, NULL }, { NULL }, diff --git a/src/engine/gnc-pricedb.c b/src/engine/gnc-pricedb.c index 86c24d13e0..c9064a2798 100644 --- a/src/engine/gnc-pricedb.c +++ b/src/engine/gnc-pricedb.c @@ -2057,6 +2057,7 @@ static QofObject pricedb_object_def = interface_version: QOF_OBJECT_VERSION, e_type: GNC_ID_PRICE, type_label: "Price", + new: NULL, book_begin: pricedb_book_begin, book_end: pricedb_book_end, is_dirty: pricedb_is_dirty, diff --git a/src/engine/qofbook.c b/src/engine/qofbook.c index 901fb7e8ba..5876afb42f 100644 --- a/src/engine/qofbook.c +++ b/src/engine/qofbook.c @@ -221,6 +221,8 @@ qof_book_get_collection (QofBook *book, QofIdType entity_type) { QofCollection *col; + if (!book || !entity_type) return NULL; + col = g_hash_table_lookup (book->hash_of_collections, entity_type); if (col) return col; @@ -324,7 +326,7 @@ gboolean qof_book_register (void) { static QofParam params[] = { { QOF_BOOK_KVP, QOF_TYPE_KVP, (QofAccessFunc)qof_book_get_slots, NULL }, - { QOF_QUERY_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL }, + { QOF_PARAM_GUID, QOF_TYPE_GUID, (QofAccessFunc)qof_entity_get_guid, NULL }, { NULL }, }; diff --git a/src/engine/qofgobj.c b/src/engine/qofgobj.c index be2312e388..d2adb7ccf6 100644 --- a/src/engine/qofgobj.c +++ b/src/engine/qofgobj.c @@ -296,6 +296,7 @@ qof_gobject_register (QofType e_type, GObjectClass *obclass) /* We could let the user specify a "nick" here, but * the actual class name seems reasonable, e.g. for debugging. */ class_def->type_label = G_OBJECT_CLASS_NAME (obclass); + class_def->new = NULL; class_def->book_begin = NULL; class_def->book_end = NULL; class_def->is_dirty = NULL; diff --git a/src/engine/qofid.c b/src/engine/qofid.c index 5f90625b39..7315f62421 100644 --- a/src/engine/qofid.c +++ b/src/engine/qofid.c @@ -182,6 +182,7 @@ qof_collection_get_type (QofCollection *col) static void qof_collection_remove_entity (QofEntity *ent) { + if (!ent) return; QofCollection *col = ent->collection; if (!col) return; g_hash_table_remove (col->hash_of_entities, &ent->guid); @@ -191,6 +192,7 @@ qof_collection_remove_entity (QofEntity *ent) void qof_collection_insert_entity (QofCollection *col, QofEntity *ent) { + if (!col || !ent) return; if (guid_equal(&ent->guid, guid_null())) return; g_return_if_fail (col->e_type == ent->e_type); qof_collection_remove_entity (ent); diff --git a/src/engine/qofid.h b/src/engine/qofid.h index 035a9685dd..df4a54562d 100644 --- a/src/engine/qofid.h +++ b/src/engine/qofid.h @@ -73,14 +73,16 @@ typedef const char * QofIdType; typedef const char * QofIdTypeConst; #define QOF_ID_NONE NULL -#define QOF_ID_BOOK "Book" #define QOF_ID_NULL "null" + +#define QOF_ID_BOOK "Book" +#define QOF_ID_FREQSPEC "FreqSpec" #define QOF_ID_SESSION "Session" -/* simple,cheesy cast but holds water for now */ +/** simple,cheesy cast but holds water for now */ #define QOF_ENTITY(object) ((QofEntity *)(object)) -/* Inline string comparision; compiler will optimize away most of this */ +/** Inline string comparision; compiler will optimize away most of this */ #define QSTRCMP(da,db) ({ \ int val = 0; \ if ((da) && (db)) { \ @@ -131,7 +133,7 @@ void qof_entity_init (QofEntity *, QofIdType, QofCollection *); void qof_entity_release (QofEntity *); /* @} */ -/* Return the GUID of this entity */ +/** Return the GUID of this entity */ const GUID * qof_entity_get_guid (QofEntity *); /** @name Collections of Entities @@ -161,7 +163,7 @@ void qof_collection_foreach (QofCollection *, gpointer qof_collection_get_data (QofCollection *col); void qof_collection_set_data (QofCollection *col, gpointer user_data); -/* Return value of 'dirty' flag on collection */ +/** Return value of 'dirty' flag on collection */ gboolean qof_collection_is_dirty (QofCollection *col); /** @} */ diff --git a/src/engine/qofobject.c b/src/engine/qofobject.c index 7286de99ee..cfac9c342d 100644 --- a/src/engine/qofobject.c +++ b/src/engine/qofobject.c @@ -41,6 +41,22 @@ static GList *object_modules = NULL; static GList *book_list = NULL; static GHashTable *backend_data = NULL; +gpointer +qof_object_new_instance (QofIdTypeConst type_name, QofBook *book) +{ + const QofObject *obj; + + if (!type_name) return NULL; + + obj = qof_object_lookup (type_name); + if (!obj) return NULL; + + if (obj->new) + return (obj->new (book)); + + return NULL; +} + void qof_object_book_begin (QofBook *book) { GList *l; @@ -333,3 +349,5 @@ void qof_object_foreach_backend (const char *backend_name, g_hash_table_foreach (ht, foreach_backend, &cb_data); } + +/* ========================= END OF FILE =================== */ diff --git a/src/engine/qofobject.h b/src/engine/qofobject.h index 2af8b7ba4f..2be54688eb 100644 --- a/src/engine/qofobject.h +++ b/src/engine/qofobject.h @@ -36,8 +36,8 @@ @{ */ /** @file qofobject.h - * @brief the Core Object Registration/Lookup Interface - * @author Copyright (c) 2001,2002, Derek Atkins + * @brief the Core Object Registration/Lookup Interface + * @author Copyright (c) 2001,2002 Derek Atkins */ #ifndef QOF_OBJECT_H_ @@ -61,8 +61,6 @@ typedef void (*QofForeachBackendTypeCB) (QofIdTypeConst type, gpointer user_data); /** This is the QofObject Class descriptor - * - * XXX Hmm, should we add an object factory to this? */ struct _QofObject { @@ -70,28 +68,33 @@ struct _QofObject QofIdType e_type; /* the Object's QOF_ID */ const char * type_label; /* "Printable" type-label string */ - /* book_begin is called from within the Book routines to create + /** Create a new instance of this object type. */ + gpointer (*new)(QofBook *); + + /** book_begin is called from within the Book routines to create * module-specific hooks in a book whenever a book is created. - * book_end is called when the book is being closed, to clean - * up (and free memory). */ void (*book_begin)(QofBook *); + + /** book_end is called when the book is being closed, to clean + * up (and free memory). + */ void (*book_end)(QofBook *); - /* Determine if there are any dirty items in this book */ + /** Determine if there are any dirty items in this book */ gboolean (*is_dirty)(QofCollection *); - /* Mark this object's book clean (for after a load) */ + /** Mark this object's book clean (for after a load) */ void (*mark_clean)(QofCollection *); - /* foreach() is used to execute a callback over each object + /** foreach() is used to execute a callback over each object * stored in the particular book */ void (*foreach)(QofCollection *, QofEntityForeachCB, gpointer); - /* Given a particular object, return a printable string */ - /* Argument should really be QofInstance not gpointer.. */ - const char * (*printable)(gpointer obj); + /** Given a particular instance of this type, return a printable string. + * Argument should really be QofInstance not gpointer.. */ + const char * (*printable)(gpointer instance); }; @@ -103,6 +106,26 @@ void qof_object_initialize (void); void qof_object_shutdown (void); /** @} */ +/** Register new types of object objects */ +gboolean qof_object_register (const QofObject *object); + +/** Lookup an object definition */ +const QofObject * qof_object_lookup (QofIdTypeConst type_name); + +/** Create an instance of the indicated type, returning a pointer to that + * instance. This routine just calls the (*new) callback on the object + * definition. + */ +gpointer qof_object_new_instance (QofIdTypeConst type_name, QofBook *book); + +/** Get the printable label for a type. This label is *not* + * translated; you must use _() on it if you want a translated version. + */ +const char * qof_object_get_type_label (QofIdTypeConst type_name); + +/** @return a Human-readable string name for an instance */ +const char * qof_object_printable (QofIdTypeConst type_name, gpointer instance); + /** Invoke the callback 'cb' on every object class definition. * The user_data pointer is passed back to the callback. */ @@ -116,22 +139,6 @@ void qof_object_foreach_type (QofForeachTypeCB cb, gpointer user_data); void qof_object_foreach (QofIdTypeConst type_name, QofBook *book, QofEntityForeachCB cb, gpointer user_data); -/** @return a Human-readable string name for on object */ -const char * qof_object_printable (QofIdTypeConst type_name, gpointer obj); - - -/** Register new types of object objects */ -gboolean qof_object_register (const QofObject *object); - -/** Get the printable label for a type. This label is *not* - * translated; you must use _() on it if you want a translated version. - */ -const char * qof_object_get_type_label (QofIdTypeConst type_name); - -/** Lookup a object definition */ -const QofObject * qof_object_lookup (QofIdTypeConst type_name); - - /** Register and lookup backend-specific data for this particular object */ gboolean qof_object_register_backend (QofIdTypeConst type_name, const char *backend_name, diff --git a/src/engine/qofquery.c b/src/engine/qofquery.c index 418a5fe978..5581b025fe 100644 --- a/src/engine/qofquery.c +++ b/src/engine/qofquery.c @@ -1222,9 +1222,10 @@ void qof_query_set_book (QofQuery *q, QofBook *book) if (g_list_index (q->books, book) == -1) q->books = g_list_prepend (q->books, book); - qof_query_add_guid_match (q, g_slist_prepend (g_slist_prepend (NULL, - QOF_QUERY_PARAM_GUID), - QOF_QUERY_PARAM_BOOK), + GSList *slist = NULL; + g_slist_prepend (slist, QOF_PARAM_GUID); + g_slist_prepend (slist, QOF_PARAM_BOOK); + qof_query_add_guid_match (q, slist, qof_book_get_guid(book), QOF_QUERY_AND); } diff --git a/src/engine/qofquery.h b/src/engine/qofquery.h index 4620c0fc2f..1b4a33f446 100644 --- a/src/engine/qofquery.h +++ b/src/engine/qofquery.h @@ -105,11 +105,11 @@ typedef enum { #define QUERY_DEFAULT_SORT "QofQueryDefaultSort" /** "Known" Object Parameters -- all objects must support these */ -#define QOF_QUERY_PARAM_BOOK "book" -#define QOF_QUERY_PARAM_GUID "guid" +#define QOF_PARAM_BOOK "book" +#define QOF_PARAM_GUID "guid" /** "Known" Object Parameters -- some objects might support these */ -#define QOF_QUERY_PARAM_ACTIVE "active" +#define QOF_PARAM_ACTIVE "active" /* --------------------------------------------------------- */ /** @name Query Subsystem Initialization and Shudown */ diff --git a/src/engine/qofsql.c b/src/engine/qofsql.c index 8632a9a8d5..99d15dceac 100644 --- a/src/engine/qofsql.c +++ b/src/engine/qofsql.c @@ -22,7 +22,7 @@ /** @file qofsql.c - @breif QOF client-side SQL parser. + @brief QOF client-side SQL parser. @author Copyright (C) 2004 Linas Vepstas */ diff --git a/src/engine/test/test-object.c b/src/engine/test/test-object.c index 6e25465a1a..1e6f847de2 100644 --- a/src/engine/test/test-object.c +++ b/src/engine/test/test-object.c @@ -22,15 +22,16 @@ static void test_printable (const char *name, gpointer obj); static void test_foreach (QofBook *, const char *); static QofObject bus_obj = { - QOF_OBJECT_VERSION, - TEST_MODULE_NAME, - TEST_MODULE_DESC, - NULL, /* create */ - NULL, /* destroy */ - NULL, /* is dirty */ - NULL, /* mark_clean */ - obj_foreach, - printable, + interface_version: QOF_OBJECT_VERSION, + e_type: TEST_MODULE_NAME, + type_label: TEST_MODULE_DESC, + new: NULL, + book_begin: NULL, + book_end: NULL, + is_dirty: NULL, + mark_clean: NULL, + foreach: obj_foreach, + printable: printable, }; static void diff --git a/src/engine/xlate.pl b/src/engine/xlate.pl index e7d4d6bf32..3810954011 100755 --- a/src/engine/xlate.pl +++ b/src/engine/xlate.pl @@ -110,9 +110,9 @@ foreach (@files) s/QUERY_NAND/QOF_QUERY_NAND/g; s/QUERY_NOR/QOF_QUERY_NOR/g; s/QUERY_XOR/QOF_QUERY_XOR/g; - s/QUERY_PARAM_BOOK/QOF_QUERY_PARAM_BOOK/g; - s/QUERY_PARAM_GUID/QOF_QUERY_PARAM_GUID/g; - s/QUERY_PARAM_ACTIVE/QOF_QUERY_PARAM_ACTIVE/g; + s/QUERY_PARAM_BOOK/QOF_PARAM_BOOK/g; + s/QUERY_PARAM_GUID/QOF_PARAM_GUID/g; + s/QUERY_PARAM_ACTIVE/QOF_PARAM_ACTIVE/g; s/QUERYCORE_INT64/QOF_QUERYCORE_INT64/g; s/QUERYCORE_STRING/QOF_QUERYCORE_STRING/g;