mco_trans_iterate
接口适用于实时数据库 RT 。
遍历事务所做的一切修改。
此功能提供了一种遍历事务中所有修改的能力,能够读取被修改的对象并确定具体的修改类型(新增、更新或删除)。
作为参数之一,该 API 接受一个由应用程序定义的回调函数,用于检查每个对象,并判断其是否受到外部事务的影响。
回调函数接收被修改对象的句柄、对象的类代码、修改操作的类型以及应用程序特定的上下文信息(即开发人员希望传递给回调函数的任何数据)。应用程序可以根据回调函数的结果选择继续提交事务或回滚所有修改。
此外,此 API 可与两阶段提交协议协同使用。
MCO_RET mco_trans_iterate(
/*IN*/ mco_trans_h t,
/*IN*/ mco_trans_iterator_callback_t callback,
/*IN*/ void* user_ctx
);
参数
t
mco_trans_h
由 mco_trans_start()
函数返回的 mco_trans_h
事务句柄。
callback
mco_trans_iterator_callback_t
一个回调函数,用于检查每个对象,并确定其是否受外部事务等的影响。
user_ctx
void*
特定于应用程序的上下文(想要传递到回调函数中的任何内容)。
返回
MCO_S_OK
事务已成功提交。
MCO_S_NOTFOUND
在尝试从索引中移除对象的条目时未找到索引。
MCO_E_NOMEM
内存不足,可能是在尝试创建索引期间发生的。
MCO_S_DUPLICATE
唯一索引中存在重复值(或重复的对象标识符)。
MCO_E_TRANSACT
事务处于错误状态。
示例
/* 应用程序代码片段 */
const char * dbname = "SimpleDb";
mco_trans_iterator_callback_t* my_iterator_callback( mco_trans_h trans,
MCO_Hf* obj,
MCO_CLASS_ID cid,
int operation_mask,
void* ctx)
{
printf(“\nProcess transaction contents…\n” );
}
int main(int argc, char* argv[])
{
mco_db_h db;
MCO_RET rc;
mco_device_t dev;
mco_db_params_t db_params;
mco_trans_h t;
...
rc = mco_db_open_dev( dbname, simple_get_dictionary(), &dev, 1, &db_params );
if ( MCO_S_OK != rc )
{
rc = mco_db_connect( dbname, &db );
...
rc = mco_trans_start(db, MCO_READ_ONLY, MCO_TRANS_FOREGROUND, &t);
if ( MCO_S_OK == rc )
{
...
if ( MCO_S_OK == mco_trans_commit_phase1( t ) )
{
rc = mco_trans_iterate(t, my_iterator_callback, (void*)0 );
if (rc == MCO_S_OK)
{
...
if ( MCO_S_OK == rc = mco_trans_commit_phase2( t ) )
{
...
}
else
{
mco_trans_rollback( t );
}
...
}
}
else
{
mco_trans_rollback( t );
}
...
rc = mco_trans_commit( t );
...
}
}
...
}
文件
头文件:
mco.h
源文件:
mursiw.c
库:
libmcotexcl.a
头文件:
mco.h
源文件:
mursiw.c
库:
libmcotmursiw.a
头文件:
mco.h
源文件:
mvcc.c
库:
libmcotmvcc.a