Using isc_commit_retaining()
Go Up to Ending Transactions
To write transaction changes to the database without establishing a new transaction context—the names, system resources, and current state of cursors used in a transaction—use isc_commit_retaining() instead of isc_commit_transaction(). However, isc_commit_retaining() inhibits garbage collection, which is a necessary database activity. The function prototype for isc_commit_retaining() is:
ISC_STATUS isc_commit_retaining(ISC_STATUS *status_vector, isc_tr_handle *trans_handle);
isc_commit_retaining() writes all pending changes to the database, ends the current transaction without closing its record stream and cursors and without freeing its system resources, then starts a new transaction and assigns the existing record streams and system resources to the new transaction.
For example, the following call commits a specified transaction, preserving the current cursor status and system resources:
isc_commit_retaining(status_vector, &trans);
where status_vector is a pointer to a previously declared error status vector, and trans is a pointer to a previously declared and initialized transaction handle.
A call to isc_rollback_transaction() issued after isc_commit_retaining() only rolls back updates and writes occurring after the call to isc_commit_retaining().