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_EYEDBSM_H
00026 #define _EYEDBSM_EYEDBSM_H
00027
00028 #include <stdio.h>
00029 #include <stdarg.h>
00030 #include <sys/stat.h>
00031
00032 namespace eyedbsm {
00033
00039 static const unsigned int MAX_ROOT_KEY = 16;
00040 static const unsigned int MAX_ROOT_DATA = 64;
00041 static const unsigned int MAX_DATAFILES = 512;
00042 static const unsigned int MAX_DATASPACES = 512;
00043 static const unsigned int MAX_DAT_PER_DSP = 32;
00044
00045 static const unsigned int Oid_DBID = 10;
00046 static const unsigned int Oid_UNIQUE = 22;
00047
00048 static const unsigned int L_NAME = 31;
00049
00050 static const unsigned int L_FILENAME = 256;
00051
00052 static const unsigned int MIN_SIZE_SLOT = 8;
00053 static const unsigned int MAX_SIZE_SLOT = 4096;
00054
00055 static const unsigned int VOLREAD = 0x100;
00056 static const unsigned int VOLRW = 0x200;
00057 static const unsigned int LOCAL = 0x004;
00058 static const unsigned int NO_SHM_ACCESS = 0x008;
00059 static const unsigned int MAX_DBID = ((1 << (Oid_DBID))-1);
00060 static const unsigned int PROT_NAME = 32;
00061
00062 static const unsigned long INVALID_UID = ~0UL;
00063
00064 static const short DefaultDspid = (short)0x7fff;
00065
00066 typedef unsigned int NS;
00067
00068 class Oid {
00069
00070 public:
00071 typedef unsigned int NX;
00072 typedef unsigned int DbID;
00073 typedef unsigned int Unique;
00074
00075 static const size_t SIZE;
00076 static const Oid::NX INVALID_NX;
00077 static const Oid nullOid;
00078
00079 void setNX(Oid::NX _nx) {nx = _nx;}
00080 Oid::NX getNX() const {return nx;}
00081
00082 void setDbID(Oid::DbID _dbid) {dbid = _dbid;}
00083 Oid::DbID getDbID() const {return dbid;}
00084
00085 void setUnique(Oid::Unique _unique) {unique = _unique;}
00086 Oid::Unique getUnique() const {return unique;}
00087
00088 private:
00089 Oid::NX nx;
00090 unsigned int dbid:Oid_DBID, unique:Oid_UNIQUE;
00091
00092 public:
00093 static Oid makeNullOid();
00094 };
00095
00096 enum Boolean {
00097 False = 0,
00098 True = 1
00099 };
00100
00101 enum MapHints {
00102 WholeMap = 0x111,
00103 SegmentMap = 0x222
00104 };
00105
00106 struct OpenHints {
00107 eyedbsm::MapHints maph;
00108 unsigned int mapwide;
00109 };
00110
00111 struct ObjectLocation {
00112 short datid;
00113 short dspid;
00114 eyedbsm::Boolean is_valid;
00115 unsigned int size;
00116 NS slot_start_num;
00117 NS slot_end_num;
00118 unsigned int dat_start_pagenum;
00119 unsigned int dat_end_pagenum;
00120 unsigned int omp_start_pagenum;
00121 unsigned int omp_end_pagenum;
00122 unsigned int dmp_start_pagenum;
00123 unsigned int dmp_end_pagenum;
00124 };
00125
00126 enum MapType {
00127 BitmapType,
00128 LinkmapType,
00129 DefaultMapType = eyedbsm::BitmapType
00130 };
00131
00132 enum DatType {
00133 LogicalOidType = 0x100,
00134 PhysicalOidType
00135 };
00136
00137 struct Datafile {
00138 char file[L_FILENAME];
00139 char name[L_NAME+1];
00140 unsigned long long maxsize;
00141 short mtype;
00142 unsigned int sizeslot;
00143 short dspid;
00144 int extflags;
00145 short dtype;
00146 };
00147
00148 struct DatafileInfo {
00149 unsigned short datid;
00150 eyedbsm::Datafile datafile;
00151 Oid::NX objcnt;
00152 NS slotcnt;
00153 NS busyslotcnt;
00154 unsigned long long totalsize;
00155 unsigned int avgsize;
00156 NS lastbusyslot;
00157 NS lastslot;
00158 unsigned long long busyslotsize;
00159 unsigned long long datfilesize;
00160 unsigned long long datfileblksize;
00161 unsigned long long dmpfilesize;
00162 unsigned long long dmpfileblksize;
00163 NS curslot;
00164 unsigned long long defragmentablesize;
00165 NS slotfragcnt;
00166 double used;
00167 };
00168
00169 struct Dataspace {
00170 char name[L_NAME+1];
00171 unsigned int ndat;
00172 short datid[MAX_DAT_PER_DSP];
00173 };
00174
00175 struct DbCreateDescription {
00176 Oid::NX nbobjs;
00177 unsigned int dbid;
00178 unsigned int ndat;
00179 eyedbsm::Datafile dat[MAX_DATAFILES];
00180 unsigned int ndsp;
00181 eyedbsm::Dataspace dsp[MAX_DATASPACES];
00182 unsigned long long dbsfilesize;
00183 unsigned long long dbsfileblksize;
00184 unsigned long long ompfilesize;
00185 unsigned long long ompfileblksize;
00186 unsigned long long shmfilesize;
00187 unsigned long long shmfileblksize;
00188 };
00189
00190 typedef DbCreateDescription DbInfoDescription;
00191
00192 struct DbRelocateDescription {
00193 unsigned int ndat;
00194 char file[MAX_DATAFILES][L_FILENAME];
00195 };
00196
00197 struct DbMoveDescription {
00198 char dbfile[L_FILENAME];
00199 eyedbsm::DbCreateDescription dcr;
00200 };
00201
00202 typedef DbMoveDescription DbCopyDescription;
00203
00204 struct Protection {
00205 unsigned short r, w;
00206 };
00207
00208 struct ProtectionAtom {
00209 unsigned int uid;
00210 eyedbsm::Protection prot;
00211 };
00212
00213 struct ProtectionDescription {
00214 char name[PROT_NAME];
00215 unsigned int nprot;
00216 eyedbsm::ProtectionAtom desc[1];
00217 };
00218
00219 struct DbProtectionDescription {
00220 unsigned int uid;
00221 Protection prot;
00222 };
00223
00224 struct DbHandle;
00225 struct IndexId;
00226 struct Cursor;
00227 struct DbLock;
00228
00229 enum LockMode {
00230 DefaultLock,
00231 LockN,
00232 LockX,
00233 LockSX,
00234 LockS,
00235 LockP,
00236 LockE
00237 };
00238
00239 enum TransactionMode {
00240 TransactionOff = 1,
00241 TransactionOn = 2
00242 };
00243
00244
00245 enum ObjectLockMode {
00246 ReadSWriteS = 1,
00247 ReadSWriteSX,
00248 ReadSWriteX,
00249 ReadSXWriteSX,
00250 ReadSXWriteX,
00251 ReadXWriteX,
00252 ReadNWriteS,
00253 ReadNWriteSX,
00254 ReadNWriteX,
00255 ReadNWriteN,
00256 DatabaseW,
00257 DatabaseRW,
00258 DatabaseWtrans
00259 };
00260
00261 enum RecoveryMode {
00262 RecoveryOff = 3,
00263 RecoveryPartial,
00264 RecoveryFull
00265 };
00266
00267 struct TransactionParams {
00268 TransactionMode trsmode;
00269 ObjectLockMode lockmode;
00270 RecoveryMode recovmode;
00271 unsigned int magorder;
00272 unsigned int ratioalrt;
00273
00274 unsigned int wait_timeout;
00275 };
00276
00277 static const TransactionParams DEFAULT_TRANSACTION_PARAMS = {
00278 eyedbsm::TransactionOn,
00279 eyedbsm::ReadNWriteSX,
00280 eyedbsm::RecoveryFull,
00281 0,
00282 0,
00283 30
00284 };
00285
00286 enum Error {
00287 SUCCESS = 0,
00288 ERROR,
00289 SYS_ERROR,
00290 CONNECTION_FAILURE,
00291 SERVER_FAILURE,
00292 CANNOT_LOCK_SHMFILE,
00293 DB_ALREADY_LOCK_BY_A_SERVER,
00294 INVALID_DBID,
00295 INVALID_SIZESLOT,
00296 INVALID_NBSLOTS,
00297 INVALID_NBOBJS,
00298 INVALID_MAXSIZE,
00299 INVALID_MAPTYPE,
00300 DATABASE_CREATION_ERROR,
00301 DATABASE_ACCESS_DENIED,
00302 DATABASE_OPEN_FAILED,
00303 INVALID_DATAFILE_CNT,
00304 INVALID_DATASPACE_CNT,
00305 INVALID_DATAFILE_CNT_IN_DATASPACE,
00306 INVALID_DATASPACE,
00307 INVALID_DBFILE,
00308 INVALID_DBFILE_ACCESS,
00309 INVALID_SHMFILE,
00310 INVALID_SHMFILE_ACCESS,
00311 INVALID_OBJMAP_ACCESS,
00312 INVALID_DATAFILE,
00313 INVALID_DMPFILE,
00314 INVALID_DATAFILEMAXSIZE,
00315 INVALID_FILES_COPY,
00316 INVALID_DBFILES_COPY,
00317 INVALID_DATAFILES_COPY,
00318 INVALID_SHMFILES_COPY,
00319 INVALID_OBJMAPFILES_COPY,
00320 DBFILES_IDENTICAL,
00321 DATAFILES_IDENTICAL,
00322 DBFILE_ALREADY_EXISTS,
00323 SHMFILE_ALREADY_EXISTS,
00324 OBJMAPFILE_ALREADY_EXISTS,
00325 DATAFILE_ALREADY_EXISTS,
00326 SIZE_TOO_LARGE,
00327 WRITE_FORBIDDEN,
00328 CONN_RESET_BY_PEER,
00329 LOCK_TIMEOUT,
00330 FATAL_MUTEX_LOCK_TIMEOUT,
00331 BACKEND_INTERRUPTED,
00332 INVALID_TRANSACTION_MODE,
00333 RW_TRANSACTION_NEEDED,
00334 TRANSACTION_NEEDED,
00335 TRANSACTION_LOCKING_FAILED,
00336 TRANSACTION_UNLOCKING_FAILED,
00337 TOO_MANY_TRANSACTIONS,
00338 TRANSACTION_TOO_MANY_NESTED,
00339 DEADLOCK_DETECTED,
00340 INVALID_FLAG,
00341 INVALID_DB_HANDLE,
00342 MAP_ERROR,
00343 TOO_MANY_OBJECTS,
00344 INVALID_OBJECT_SIZE,
00345 NO_DATAFILESPACE_LEFT,
00346 NO_SHMSPACE_LEFT,
00347 INVALID_SIZE,
00348 INVALID_OFFSET,
00349 INVALID_OID,
00350 INVALID_ROOT_ENTRY_SIZE,
00351 INVALID_ROOT_ENTRY_KEY,
00352 INVALID_READ_ACCESS,
00353 INVALID_WRITE_ACCESS,
00354 OBJECT_PROTECTED,
00355 PROTECTION_INVALID_UID,
00356 PROTECTION_DUPLICATE_UID,
00357 PROTECTION_DUPLICATE_NAME,
00358 PROTECTION_NOT_FOUND,
00359 ROOT_ENTRY_EXISTS,
00360 TOO_MANY_ROOT_ENTRIES,
00361 ROOT_ENTRY_NOT_FOUND,
00362 PROT_NAME_TOO_LONG,
00363 NOTIMPLEMENTED,
00364 NO_SETUID_PRIVILEGE,
00365 NOT_YET_IMPLEMENTED,
00366 COMPATIBILITY_ERROR,
00367 INTERNAL_ERROR,
00368 FATAL_ERROR,
00369 N_ERROR
00370 };
00371
00372 struct StatusRec {
00373 Error err;
00374 char *err_msg;
00375 };
00376
00377 enum OP {
00378 CreateOP = 0x1,
00379 ReadOP = 0x2,
00380 WriteOP = 0x4,
00381 SizeModOP = 0x8,
00382 DeleteOP = 0x10,
00383 SizeGetOP = 0x20,
00384 LockNOP = 0x40,
00385 LockSOP = 0x80,
00386 LockXOP = 0x100,
00387 LockSXOP = 0x200,
00388 LockPOP = 0x400,
00389 AllOP = ~0
00390 };
00391
00392 struct RegisterEntry {
00393 Oid oid;
00394 OP op;
00395 int create_size;
00396 int start_rw, length_rw;
00397 int sizemod_size;
00398 };
00399
00400 struct Register {
00401 unsigned int oid_cnt;
00402 RegisterEntry *entries;
00403 };
00404
00405 typedef const StatusRec *Status;
00406
00407
00408
00409 extern Status
00410 init(),
00411 release(),
00412
00413
00414 dbCreate(const char *dbfile, unsigned int version,
00415 const DbCreateDescription *dbc, mode_t file_mask, const char *file_group),
00416 dbDelete(const char *dbfile),
00417 dbMove(const char *dbfile, const DbMoveDescription *dmv),
00418 dbCopy(const char *dbfile, const DbCopyDescription *dcp),
00419
00420 dbOpen(const char *dbfile, int flags,
00421 const OpenHints *hints, int uid, unsigned int *pversion,
00422 DbHandle **dbh),
00423 dbClose(const DbHandle *dbh),
00424
00425 dbInfo(const char *dbfile, DbInfoDescription *info),
00426
00427 transactionBegin(DbHandle *dbh,
00428 const TransactionParams *params),
00429 transactionCommit(DbHandle *dbh),
00430 transactionAbort(DbHandle *dbh),
00431
00432 transactionParamsSet(DbHandle const *dbh,
00433 const TransactionParams *params),
00434
00435 transactionParamsGet(DbHandle const *dbh,
00436 TransactionParams *params),
00437
00438 dbRelocate(const char *dbfile, const DbRelocateDescription *rel),
00439
00440 rootEntrySet(DbHandle const *dbh, char const *const key,
00441 void const *const data, unsigned int size, Boolean create),
00442 rootEntryGet(DbHandle const *dbh, char const *const key,
00443 void *data, unsigned int maxsize),
00444 rootEntryDelete(DbHandle const *dbh, char const *const key),
00445
00446 objectCreate(DbHandle const *dbh, void const *const object,
00447 unsigned int size, short dspid, Oid *oid),
00448 objectDelete(DbHandle const *dbh, Oid const *const oid),
00449 objectWrite(DbHandle const *dbh, int start, int length,
00450 void const *const object, Oid const *const oid),
00451 objectWriteCache(DbHandle const *dbh, int start,
00452 void const *const object, Oid const *const oid),
00453 objectRead(DbHandle const *dbh, int start, int length, void *object,
00454 LockMode lockmode, short *pdatid, unsigned int *psize,
00455 Oid const *const oid),
00456 objectReadNoCopy(DbHandle const *dbh, int start, int length,
00457 void *object,
00458 LockMode lockmode, short *pdatid, unsigned int *psize,
00459 Oid const *const oid),
00460 objectReadCache(DbHandle const *dbh, int start, void **object,
00461 LockMode lockmode, Oid const *const oid),
00462 objectSizeGet(DbHandle const *dbh, unsigned int *size,
00463 LockMode lockmode, Oid const *const oid),
00464
00465 objectCheckAccess(DbHandle const *dbh, Boolean write,
00466 Oid const *const oid, Boolean *access),
00467
00468 objectLocationGet(DbHandle const *dbh, const Oid *oid,
00469 ObjectLocation *objloc),
00470
00471 objectsLocationGet(DbHandle const *dbh, const Oid *oid,
00472 ObjectLocation *objloc, unsigned int oid_cnt),
00473
00474 objectMoveDat(DbHandle const *dbh, Oid const *const oid,
00475 short datid),
00476
00477 objectsMoveDat(DbHandle const *dbh, Oid const *const oid,
00478 unsigned int oid_cnt, short datid),
00479
00480 objectMoveDsp(DbHandle const *dbh, Oid const *const oid,
00481 short dspid),
00482
00483 objectsMoveDsp(DbHandle const *dbh, Oid const *const oid,
00484 unsigned int oid_cnt, short dspid),
00485
00486 objectSizeModify(DbHandle const *dbh, unsigned int size, Boolean copy,
00487 Oid const *const oid),
00488
00489 objectLock(DbHandle const *dbh, Oid const *const oid,
00490 LockMode mode, LockMode *rmode),
00491
00492 objectGetLock(DbHandle const *dbh, Oid const *const oid,
00493 LockMode *rmode),
00494
00495 objectDownLock(DbHandle const *dbh, Oid const *const oid),
00496
00497 registerStart(DbHandle const *dbh, unsigned reg_mask),
00498 registerClear(DbHandle const *dbh),
00499 registerEnd(DbHandle const *dbh),
00500 registerGet(DbHandle const *dbh, Register **),
00501
00502 firstOidDatGet(DbHandle const *dbh, short datid, Oid *oid,
00503 Boolean *found),
00504 nextOidDatGet(DbHandle const *dbh, short datid,
00505 Oid const *const baseoid, Oid *nextoid,
00506 Boolean *found),
00507
00508 privilegeInit(void),
00509 privilegeAcquire(void),
00510 privilegeRelease(void),
00511 suserUnset(DbHandle *dbh),
00512
00513 statusPrint(Status status, const char *fmt, ...),
00514
00515 statusMake(Error, const char *, ...),
00516 statusMake_s(Error),
00517
00518 datCreate(DbHandle const *dbh, const char *file, const char *name,
00519 unsigned long long maxsize, MapType mtype, unsigned int sizeslot,
00520 DatType type, mode_t file_mask, const char *file_group),
00521
00522 datMove(DbHandle const *dbh, const char *datfile,
00523 const char *newdatfile),
00524
00525 datDelete(DbHandle const *dbh, const char *datfile),
00526
00527 datResize(DbHandle const *dbh, const char *datfile,
00528 unsigned long long newmaxsize),
00529
00530 datMoveObjects(DbHandle const *dbh, const char *dat_src,
00531 const char *dat_dest),
00532
00533 datCheck(DbHandle const *dbh, const char *datfile,
00534 short *datid, short *dspid),
00535
00536 datResetCurSlot(DbHandle const *dbh, const char *datfile),
00537
00538 datDefragment(DbHandle const *dbh, const char *datfile, mode_t file_mask, const char *file_group),
00539
00540 datRename(DbHandle const *dbh, const char *datfile, const char *name),
00541
00542 datGetInfo(DbHandle const *dbh, const char *datfile, DatafileInfo *info),
00543
00544 datGetDspid(DbHandle const *dbh, short datid, short *dspid),
00545
00546 dspSetDefault(DbHandle const *dbh, const char *dataspace),
00547
00548 dspGetDefault(DbHandle const *dbh, short *dspid),
00549
00550 dspCreate(DbHandle const *dbh, const char *dataspace,
00551 const char **datfiles, unsigned int datfile_cnt),
00552
00553 dspUpdate(DbHandle const *dbh, const char *dataspace,
00554 const char **datfiles, unsigned int datfile_cnt,
00555 short flags, short orphan_dspid),
00556
00557 dspDelete(DbHandle const *dbh, const char *dataspace),
00558 dspRename(DbHandle const *dbh, const char *dataspace,
00559 const char *dataspace_new),
00560
00561 dspCheck(DbHandle const *dbh, const char *dataspace, short *dspid,
00562 short datid[], unsigned int *ndat),
00563
00564 dspSetCurDat(DbHandle const *dbh, const char *dataspace,
00565 const char *datfile),
00566 dspGetCurDat(DbHandle const *dbh, const char *dataspace, short *datid),
00567
00568 objectNumberGet(DbHandle const *dbh, Oid::NX *maxobjs),
00569 objectNumberSet(DbHandle const *dbh, Oid::NX maxobjs),
00570
00571 shmSizeGet(DbHandle const *dbh, int *shmsize),
00572 shmSizeSet(DbHandle const *dbh, int shmsize),
00573
00574 protectionCreate(DbHandle const *dbh,
00575 ProtectionDescription const *desc,
00576 Oid *oid),
00577
00578 protectionDelete(DbHandle const *dbh, Oid const *const oid),
00579
00580 protectionModify(DbHandle const *dbh,
00581 ProtectionDescription const *desc,
00582 Oid const *oid),
00583
00584 protectionGetByName(DbHandle const *dbh,
00585 char const *name,
00586 ProtectionDescription **desc,
00587 Oid *oid),
00588
00589 protectionGetByOid(DbHandle const *dbh,
00590 Oid const *oid,
00591 ProtectionDescription **desc),
00592
00593 protectionListGet(DbHandle const *dbh,
00594 Oid **oid, ProtectionDescription ***desc,
00595 unsigned int *nprot),
00596
00597 dbProtectionAdd(DbHandle const *dbh,
00598 DbProtectionDescription const *desc, int nprot),
00599
00600 dbProtectionGet(DbHandle const *dbh,
00601 DbProtectionDescription **desc, unsigned int *nprot),
00602
00603 objectProtectionSet(DbHandle const *dbh, Oid const *const oid,
00604 Oid const *const protoid),
00605 objectProtectionGet(DbHandle const *dbh, Oid const *const oid,
00606 Oid *protoid);
00607
00608 extern int
00609 getOpenFlags(DbHandle const *dbh);
00610
00611 extern Boolean
00612 isPhysicalOid(DbHandle const *dbh, const Oid *oid);
00613
00614 extern Status
00615 transactionLockSet(DbHandle const *dbh, ObjectLockMode lockmode,
00616 ObjectLockMode *olockmode);
00617
00618 extern const char *
00619 getOPString(OP op);
00620
00621 extern void
00622 registerEntryTrace(FILE *, const RegisterEntry *);
00623
00624 extern void
00625 registerTrace(FILE *, const Register *);
00626
00627 extern Status
00628 backendInterrupt(),
00629 backendInterruptReset();
00630
00631 extern const char *
00632 statusGet(Status status);
00633
00634 extern const char *
00635 statusGet_err(int err);
00636
00637 extern const char *
00638 getOidString(const Oid *);
00639
00640 enum {
00641 ReadNone = 0,
00642 WriteNone = 0,
00643 ReadAll = (unsigned short)0xffff,
00644 WriteAll = (unsigned short)0xffff
00645 };
00646
00647 extern const void *ObjectZero, *ObjectNone;
00648 extern int dbidGet(const Oid *oid);
00649 extern void dbidSet(Oid *oid, int dbid);
00650
00651 static const Status Success = (Status)0;
00652
00653 static inline int protectionDescriptionSize(int n) {
00654 return sizeof(eyedbsm::ProtectionDescription) +
00655 ((n - 1) * sizeof(eyedbsm::ProtectionAtom));
00656 }
00657
00658
00659
00663 class Database {
00664
00665 public :
00675 static Status dbCreate(const char *dbfile, unsigned int version,
00676 const DbCreateDescription &dbc,
00677 mode_t file_mask, const char *file_group);
00678
00684 static Status dbDelete(const char *dbfile);
00685
00692 static Status dbMove(const char *dbfile, const DbMoveDescription &dmv);
00693
00700 static Status dbCopy(const char *dbfile, const DbCopyDescription &dcp);
00701
00708 static Status dbInfo(const char *dbfile, DbInfoDescription &info);
00709
00716 static Status dbRelocate(const char *dbfile, const DbRelocateDescription &rel);
00717
00718 Database();
00719
00728 Status open(const char *dbfile, int flags,
00729 const OpenHints &hints, int uid);
00730
00735 int getOpenFlags() const;
00736
00741 unsigned int getVersion() const;
00742
00747 const char *getDBFile() const;
00748
00753 const OpenHints &getOpenHints() const;
00754
00759 Status close();
00760
00761
00767 Status transactionBegin(const TransactionParams ¶ms);
00768
00773 Status transactionCommit();
00774
00779 Status transactionAbort();
00780
00786 Status transactionParamsSet(const TransactionParams ¶ms);
00787
00793 Status transactionParamsGet(TransactionParams ¶ms);
00794
00801 Status transactionLockSet(ObjectLockMode lockmode,
00802 ObjectLockMode &olockmode);
00803
00804
00813 Status objectCreate(const void *object,
00814 unsigned int size, short dspid, Oid &oid);
00815
00821 Status objectDelete(const Oid &oid);
00822
00831 Status objectWrite(int start, int length,
00832 const void *object, const Oid &oid);
00833
00841 Status objectWriteCache(int start,
00842 const void *object, const Oid & oid);
00843
00855 Status objectRead(int start, int length, void *object,
00856 LockMode lockmode, short &pdatid, unsigned int &psize,
00857 const Oid & oid);
00858
00870 Status objectReadNoCopy(int start, int length,
00871 void *object, LockMode lockmode,
00872 short &pdatid, unsigned int &psize,
00873 const Oid & oid);
00874
00883 Status objectReadCache(int start, void **object,
00884 LockMode lockmode, const Oid & oid);
00885
00893 Status objectSizeGet(unsigned int &size, LockMode lockmode, const Oid & oid);
00894
00902 Status objectCheckAccess(Boolean write,
00903 const Oid & oid, Boolean &access);
00904
00911 Status objectLocationGet(const Oid &oid, ObjectLocation &objloc);
00912
00920 Status objectsLocationGet(const Oid * oid, ObjectLocation *objloc,
00921 unsigned int oid_cnt);
00922
00929 Status objectMoveDat(const Oid & oid, short datid);
00930
00938 Status objectsMoveDat(const Oid * oid,
00939 unsigned int oid_cnt, short datid);
00940
00947 Status objectMoveDsp(const Oid & oid, short dspid);
00948
00956 Status objectsMoveDsp(const Oid * oid,
00957 unsigned int oid_cnt, short dspid);
00958
00966 Status objectSizeModify(unsigned int size, Boolean copy,
00967 const Oid & oid);
00968
00976 Status objectLock(const Oid & oid, LockMode mode, LockMode &rmode);
00977
00984 Status objectGetLock(const Oid & oid, LockMode &rmode);
00985
00991 Status objectDownLock(const Oid & oid);
00992
01000 Status firstOidDatGet(short datid, Oid &oid, Boolean &found);
01001
01010 Status nextOidDatGet(short datid, const Oid & baseoid, Oid &nextoid,
01011 Boolean &found);
01012
01021 Status rootEntrySet(const char *key,
01022 const void *data, unsigned int size, Boolean create);
01023
01031 Status rootEntryGet(const char *key,
01032 void *data, unsigned int maxsize);
01033
01039 Status rootEntryDelete(const char * key);
01040
01045 Status suserUnset();
01046
01047
01060 Status datCreate(const char *file, const char *name,
01061 unsigned long long maxsize, MapType mtype,
01062 unsigned int sizeslot,
01063 DatType type,
01064 mode_t file_mask, const char *file_group);
01065
01072 Status datMove(const char *datfile, const char *newdatfile);
01073
01079 Status datDelete(const char *datfile);
01080
01087 Status datResize(const char *datfile,
01088 unsigned long long newmaxsize);
01089
01096 Status datMoveObjects(const char *dat_src, const char *dat_dest);
01097
01105 Status datCheck(const char *datfile, short &datid, short &dspid);
01106
01114 Status datDefragment(const char *datfile,
01115 mode_t file_mask, const char *file_group);
01116
01123 Status datRename(const char *datfile, const char *name);
01124
01131 Status datGetInfo(const char *datfile, DatafileInfo &info);
01132
01139 Status datGetDspid(short datid, short &dspid);
01140
01141
01147 Status dspSetDefault(const char *dataspace);
01148
01154 Status dspGetDefault(short &dspid);
01155
01163 Status dspCreate(const char *dataspace,
01164 const char **datfiles, unsigned int datfile_cnt);
01165
01173 Status dspUpdate(const char *dataspace,
01174 const char **datfiles, unsigned int datfile_cnt);
01175
01181 Status dspDelete(const char *dataspace);
01182
01189 Status dspRename(const char *dataspace,
01190 const char *dataspace_new);
01191
01200 Status dspCheck(const char *dataspace, short &dspid,
01201 short datid[], unsigned int &ndat);
01202
01209 Status dspSetCurDat(const char *dataspace,
01210 const char *datfile);
01211
01218 Status dspGetCurDat(const char *dataspace, short &datid);
01219
01225 Status objectNumberSet(Oid::NX maxobjs);
01226
01227
01234 Status protectionCreate(const ProtectionDescription &desc, Oid &oid);
01235
01241 Status protectionDelete(const Oid & oid);
01242
01249 Status protectionModify(const ProtectionDescription &desc, const Oid &oid);
01250
01258 Status protectionGetByName(const char *name,
01259 ProtectionDescription **desc,
01260 Oid &oid);
01261
01268 Status protectionGetByOid(const Oid &oid,
01269 ProtectionDescription **desc);
01270
01278 Status protectionListGet(Oid **oid, ProtectionDescription ***desc,
01279 unsigned int &nprot);
01280
01287 Status dbProtectionAdd(const DbProtectionDescription &desc,
01288 unsigned int nprot);
01289
01296 Status dbProtectionGet(DbProtectionDescription **desc,
01297 unsigned int &nprot);
01298
01305 Status objectProtectionSet(const Oid & oid,
01306 const Oid & protoid);
01307
01314 Status objectProtectionGet(const Oid & oid,
01315 Oid *protoid);
01316
01322 Boolean isPhysicalOid(const Oid &oid);
01323
01329 Status registerStart(unsigned reg_mask);
01330
01335 Status registerClear();
01336
01341 Status registerEnd();
01342
01348 Status registerGet(Register **preg);
01349
01350 ~Database();
01351
01352 private:
01353 char *dbfile;
01354 unsigned int version;
01355 OpenHints hints;
01356 DbHandle *dbh;
01357 };
01358
01362 }
01363
01364 #include <eyedbsm/BIdx.h>
01365 #include <eyedbsm/HIdx.h>
01366
01367 #endif