00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _EYEDBSM_IDXP_H
00026 #define _EYEDBSM_IDXP_H
00027
00028 #include "transaction.h"
00029 #include <assert.h>
00030
00031 namespace eyedbsm {
00032 class IdxLock {
00033
00034 ObjectLockMode olockmode;
00035 DbHandle *dbh;
00036 const Oid &treeOid;
00037 Boolean lockedPerformed;
00038 Boolean locked;
00039
00040 public:
00041 IdxLock(DbHandle *_dbh, const Oid &_treeOid) :
00042 dbh(_dbh), treeOid(_treeOid), lockedPerformed(False), locked(False)
00043 { }
00044
00045 Status lock() {
00046 lockedPerformed = True;
00047
00048 Status s = objectLock(dbh, &treeOid, LockX, 0);
00049 if (s) return s;
00050
00051 transactionLockSet(dbh, ReadSWriteX, &olockmode);
00052 locked = True;
00053 return Success;
00054 }
00055
00056 ~IdxLock() {
00057 assert(lockedPerformed);
00058
00059 if (locked)
00060 transactionLockSet(dbh, olockmode, 0);
00061 }
00062 };
00063
00064 }
00065
00066 #endif