static GncOrder* load_single_order (GncSqlBackend* be, GncSqlRow& row) { const GncGUID* guid; GncOrder* pOrder; g_return_val_if_fail (be != NULL, NULL); guid = gnc_sql_load_guid (be, row); pOrder = gncOrderLookup (be->book(), guid); if (pOrder == NULL) { pOrder = gncOrderCreate (be->book()); } gnc_sql_load_object (be, row, GNC_ID_ORDER, pOrder, col_table); qof_instance_mark_clean (QOF_INSTANCE (pOrder)); return pOrder; }
static GncOrder* dom_tree_to_order (xmlNodePtr node, QofBook *book) { struct order_pdata order_pdata; gboolean successful; order_pdata.order = gncOrderCreate(book); order_pdata.book = book; gncOrderBeginEdit (order_pdata.order); successful = dom_tree_generic_parse (node, order_handlers_v2, &order_pdata); if (successful) gncOrderCommitEdit (order_pdata.order); else { PERR ("failed to parse order tree"); gncOrderDestroy (order_pdata.order); order_pdata.order = NULL; } return order_pdata.order; }
static gboolean entry_order_handler (xmlNodePtr node, gpointer entry_pdata) { struct entry_pdata *pdata = entry_pdata; GncGUID *guid; GncOrder *order; guid = dom_tree_to_guid (node); g_return_val_if_fail (guid, FALSE); order = gncOrderLookup (pdata->book, guid); if (!order) { order = gncOrderCreate (pdata->book); gncOrderBeginEdit (order); gncOrderSetGUID (order, guid); gncOrderCommitEdit (order); } gncOrderBeginEdit (order); gncOrderAddEntry (order, pdata->entry); gncOrderCommitEdit (order); g_free(guid); return TRUE; }