CTBase::SetKeepLock
Set the current keep lock mode when a transaction is committed or aborted.
Syntax
void CTBase::SetKeepLock(CTKEEP_MODE mode);
Description
When a transaction is terminated by calling either the CTBase::Commit() or CTBase::Abort() function, all locks are automatically freed, including the locks acquired outside the transaction. An application might want to control which locks are kept when the transaction ends. To support this ability, FairCom DB API introduced a function to control how locks are handled when a transaction terminates.
By default, the FairCom DB API begin transaction function, ctdbBegin(), will begin a transaction by invoking c-tree’s TRANBEG function with the ctTRNLOG and ctENABLE_BLK modes set. If the TRANBEG function succeeds, FairCom DB API’s ctdbBegin() function automatically calls LKISAM() to suspend locks enabled by TRANBEG, allowing users to enable any locks they wish: read locks, write locks, blocking or non-blocking. In this case, the FairCom DB API commit or abort transaction functions, ctdbCommit() and ctdbAbort(), call the appropriate c-tree ISAM functions to terminate the transaction and free all locks.
CTBase::SetKeepLock() set the extended keep lock mode applied when an active transaction is committed or aborted.
The keep lock mode is one of the following pre-defined constants:
Value |
Symbolic Constant |
Explanation |
---|---|---|
0 |
CTKEEP_FREE |
Release all locks. Clear LKISAM state, turning off session-wide record locking. This is the default mode. |
1 |
CTKEEP_LOCK |
Keep all locks acquired before and during transaction, leaving session-wide record locking as it was. The LKISAM state is not cleared. |
2 |
CTKEEP_OUT |
Release only locks obtained within transaction and/or locks on records updated within transaction. The LKISAM state is not cleared, leaving session-wide record locking as it was. |
3 |
CTKEEP_OUTALL |
Unconditionally keep all locks acquired before transaction began. Free locks obtained within the transaction. The LKISAM state is not cleared, leaving session-wide record locking as it was. |
Once the keep lock mode is set, it remains active until another keep mode is set or the keep mode is cleared by calling SetKeepLock() with mode CTKEEP_FREE.
Return
void
Example
// set the keep lock
hSession.SetKeepLock(CTKEEP_LOCK);
// begin a new transaction
hSession.Begin();
// do some operations and commit transaction
hSession.Commit();
// do some more operations and free all locks
hSession.Unlock();
See Also
CTBase::Abort(), CTBase::Begin(), CTBase::Commit(), CTBase::GetKeepLock()