Iterate over all modifications made by a transaction.
MCO_RET mco_trans_iterate( /*IN*/ mco_trans_h t,
/*IN*/ mco_trans_iterator_callback_t callback,
/*IN*/ void* user_ctx);
|
t |
The |
|
callback |
A callback function that inspects each object, and determines whether it is subject to an external transaction, etc. |
|
ctx |
Application-specific context (anything that you want to pass into the callback) |
This function provides the ability to iterate over all modifications made by a transaction, read the modified objects, and determine what kind of modifications were applied (new, update, delete). As one of the parameters, the API takes an application-defined callback function that inspects each object, and determines whether it is subject to an external transaction, etc. The callback receives a handle to the modified object, the class code of the object, the type of the modification operation and some application-specific context (anything that you want to pass into the callback). The application then has a choice of either continuing to commit the transaction, or discarding all modifications (rollback). This API can be used in concert with the two-phase commit API.
| MCO_S_OK | The transaction was committed successfully |
|
MCO_S_NOTFOUND |
Index not found when trying to remove object’s entries from index |
| MCO_E_NOMEM | Out of memory, possibly during an attempt to create an index |
|
MCO_S_DUPLICATE |
Duplicate value in a unique index (or duplicate OID) |
|
MCO_E_TRANSACT |
The transaction was in an error state |
Application snippet:
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 );
...
}
}
...
}