static void qof_instance_coll_copy(QofInstance *original, gpointer user_data) { QofInstanceCopyData *qecd; QofBook *book; QofInstance *inst; const GncGUID *g; g_return_if_fail(original != NULL); g_return_if_fail(user_data != NULL); qecd = (QofInstanceCopyData*)user_data; book = qof_session_get_book(qecd->new_session); if (!qof_object_compliance(original->e_type, TRUE)) { return; } inst = (QofInstance*)qof_object_new_instance(original->e_type, book); qecd->to = inst; qecd->from = original; g = qof_instance_get_guid(original); qof_instance_set_guid(qecd->to, g); qof_begin_edit(inst); g_slist_foreach(qecd->param_list, qof_instance_foreach_copy, qecd); qof_commit_edit(inst); }
static gboolean budget_id_handler (xmlNodePtr node, gpointer bgt) { GncGUID* guid; guid = dom_tree_to_guid (node); g_return_val_if_fail (guid, FALSE); qof_instance_set_guid (QOF_INSTANCE (bgt), guid); g_free (guid); return TRUE; }
static gboolean book_id_handler(xmlNodePtr node, gpointer book_pdata) { QofBook *book = book_pdata; GncGUID *guid; guid = dom_tree_to_guid(node); qof_instance_set_guid(QOF_INSTANCE(book), guid); g_free(guid); return TRUE; }
static void qof_instance_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { QofInstance *inst; QofInstancePrivate *priv; Timespec *ts; g_return_if_fail(QOF_IS_INSTANCE(object)); inst = QOF_INSTANCE(object); priv = GET_PRIVATE(inst); switch (prop_id) { case PROP_GUID: qof_instance_set_guid(inst, g_value_get_boxed(value)); break; case PROP_COLLECTION: qof_instance_set_collection(inst, g_value_get_pointer(value)); break; case PROP_BOOK: qof_instance_set_book(inst, g_value_get_object(value)); break; case PROP_KVP_DATA: qof_instance_set_slots(inst, g_value_get_pointer(value)); break; case PROP_LAST_UPDATE: ts = g_value_get_pointer(value); qof_instance_set_last_update(inst, *ts); break; case PROP_DESTROYING: qof_instance_set_destroying(inst, g_value_get_boolean(value)); break; case PROP_DIRTY: qof_instance_set_dirty(inst); break; case PROP_VERSION: qof_instance_set_version(inst, g_value_get_int(value)); break; case PROP_VERSION_CHECK: qof_instance_set_version_check(inst, g_value_get_uint(value)); break; case PROP_IDATA: qof_instance_set_idata(inst, g_value_get_uint(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } }
static void set_root_account_guid( gpointer pObject, /*@ null @*/ gpointer pValue ) { QofBook* book = QOF_BOOK(pObject); const Account* root; GncGUID* guid = (GncGUID*)pValue; g_return_if_fail( pObject != NULL ); g_return_if_fail( QOF_IS_BOOK(pObject) ); g_return_if_fail( pValue != NULL ); root = gnc_book_get_root_account( book ); qof_instance_set_guid( QOF_INSTANCE(root), guid ); }
/** * Commits a split to the database * * @param be SQL backend * @param inst Split * @return TRUE if successful, FALSE if error */ static gboolean commit_split( GncSqlBackend* be, QofInstance* inst ) { gint op; gboolean is_infant; gboolean is_ok; GncGUID *guid = (GncGUID*)qof_instance_get_guid(inst); g_return_val_if_fail( inst != NULL, FALSE ); g_return_val_if_fail( be != NULL, FALSE ); is_infant = qof_instance_get_infant( inst ); if ( qof_instance_get_destroying( inst ) ) { op = OP_DB_DELETE; } else if ( be->is_pristine_db || is_infant ) { op = OP_DB_INSERT; } else { op = OP_DB_UPDATE; } if (guid_equal (guid, guid_null ())) { *guid = guid_new_return (); qof_instance_set_guid (inst, guid); } is_ok = gnc_sql_do_db_operation( be, op, SPLIT_TABLE, GNC_ID_SPLIT, inst, split_col_table ); if ( is_ok && !qof_instance_get_destroying (inst)) { is_ok = gnc_sql_slots_save( be, guid, is_infant, qof_instance_get_slots( inst ) ); } return is_ok; }
static void qof_instance_list_foreach(gpointer data, gpointer user_data) { QofInstanceCopyData *qecd; QofInstance *original; QofInstance *inst; QofBook *book; const GncGUID *g; g_return_if_fail(data != NULL); original = QOF_INSTANCE(data); g_return_if_fail(user_data != NULL); qecd = (QofInstanceCopyData*)user_data; if (qof_instance_guid_match(qecd->new_session, original)) { return; } qecd->from = original; if (!qof_object_compliance(original->e_type, FALSE)) { qecd->error = TRUE; return; } book = qof_session_get_book(qecd->new_session); inst = (QofInstance*)qof_object_new_instance(original->e_type, book); if (!inst) { PERR (" failed to create new entity type=%s.", original->e_type); qecd->error = TRUE; return; } qecd->to = inst; g = qof_instance_get_guid(original); qof_instance_set_guid(qecd->to, g); if (qecd->param_list != NULL) { g_slist_free(qecd->param_list); qecd->param_list = NULL; } qof_class_param_foreach(original->e_type, qof_instance_param_cb, qecd); qof_begin_edit(inst); g_slist_foreach(qecd->param_list, qof_instance_foreach_copy, qecd); qof_commit_edit(inst); }
gboolean qof_instance_copy_to_session(QofSession* new_session, QofInstance* original) { QofInstanceCopyData qecd; QofInstance *inst; QofBook *book; if (!new_session || !original) { return FALSE; } if (qof_instance_guid_match(new_session, original)) { return FALSE; } if (!qof_object_compliance(original->e_type, TRUE)) { return FALSE; } qof_event_suspend(); qecd.param_list = NULL; book = qof_session_get_book(new_session); qecd.new_session = new_session; qof_book_set_partial(book); inst = (QofInstance*)qof_object_new_instance(original->e_type, book); qecd.to = inst; qecd.from = original; qof_instance_set_guid(qecd.to, qof_instance_get_guid(original)); qof_begin_edit(inst); qof_class_param_foreach(original->e_type, qof_instance_param_cb, &qecd); qof_commit_edit(inst); if (g_slist_length(qecd.param_list) == 0) { return FALSE; } g_slist_foreach(qecd.param_list, qof_instance_foreach_copy, &qecd); g_slist_free(qecd.param_list); qof_event_resume(); return TRUE; }
static void load_all_commodities( GncSqlBackend* be ) { GncSqlStatement* stmt; GncSqlResult* result; gnc_commodity_table* pTable; pTable = gnc_commodity_table_get_table( be->book ); stmt = gnc_sql_create_select_statement( be, COMMODITIES_TABLE ); if ( stmt == NULL ) return; result = gnc_sql_execute_select_statement( be, stmt ); gnc_sql_statement_dispose( stmt ); if ( result != NULL ) { gnc_commodity* pCommodity; GncSqlRow* row = gnc_sql_result_get_first_row( result ); gchar* sql; while ( row != NULL ) { pCommodity = load_single_commodity( be, row ); if ( pCommodity != NULL ) { GncGUID guid; guid = *qof_instance_get_guid( QOF_INSTANCE(pCommodity) ); pCommodity = gnc_commodity_table_insert( pTable, pCommodity ); qof_instance_set_guid( QOF_INSTANCE(pCommodity), &guid ); } row = gnc_sql_result_get_next_row( result ); } gnc_sql_result_dispose( result ); sql = g_strdup_printf( "SELECT DISTINCT guid FROM %s", COMMODITIES_TABLE ); gnc_sql_slots_load_for_sql_subquery( be, sql, (BookLookupFn)gnc_commodity_find_commodity_by_guid ); g_free( sql ); } }
static void set_root_template_guid( gpointer pObject, /*@ null @*/ gpointer pValue ) { QofBook* book = QOF_BOOK(pObject); GncGUID* guid = (GncGUID*)pValue; Account* root; g_return_if_fail( pObject != NULL ); g_return_if_fail( QOF_IS_BOOK(pObject) ); g_return_if_fail( pValue != NULL ); root = gnc_book_get_template_root( book ); if ( root == NULL ) { root = xaccMallocAccount( book ); xaccAccountBeginEdit( root ); xaccAccountSetType( root, ACCT_TYPE_ROOT ); xaccAccountCommitEdit( root ); gnc_book_set_template_root( book, root ); } qof_instance_set_guid( QOF_INSTANCE(root), guid ); }