Exemple #1
0
void test_o_record_id_managment()
{
    struct o_record_id * id = o_record_id_new(10, 20);
    assert_true(o_record_id_cluster_id(id) == 10, "not the same cluster id of inserted");
    assert_true(o_record_id_record_id(id) == 20, "not the same record id of inserted");
    o_record_id_release(id);
}
int o_database_operation_context_save(struct o_operation_context * context, struct o_record * record, char * cluster_name, struct o_record_id ** rid)
{
	struct o_database_operation_context *db = (struct o_database_operation_context *) context;
	o_record_before_save(record);
	struct o_record_id *rec_id = o_record_get_id(record);
	int is_new = o_record_id_is_new(rec_id);
	struct o_raw_buffer * buff = o_raw_buffer_record(record);
	if (is_new)
	{
		if (cluster_name == 0)
			cluster_name = o_record_cluster_name(record);
		int cluster_id = o_operation_context_cluster_name_id(context, cluster_name);

		struct create_result * res = o_storage_create_record(db->storage, cluster_id, buff);
		struct o_record_id * new_rid = o_record_id_new(cluster_id, res->rid);
		o_record_reset_id(record, new_rid);
		o_record_reset_version(record, res->version);
		o_free(res);
		if (rid != 0)
			*rid = new_rid;
	}
	else
	{
		struct o_record_id *id = o_record_get_id(record);
		int new_version = o_storage_update_record(db->storage, id, buff);
		o_record_reset_version(record, new_version);
		if (rid != 0)
			*rid = id;
	}
	o_raw_buffer_free(buff);
	o_record_after_save(record);
	//o_record_cache_put(db->cache, record);
	return 1;
}