refact
This commit is contained in:
parent
bc36f14e1d
commit
a641e5b544
|
@ -82,176 +82,4 @@ int tdbDbClose(STDb *pDb) {
|
|||
int tdbDbInsert(STDb *pDb, const void *pKey, int keyLen, const void *pVal, int valLen) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
struct STDb {
|
||||
char dbname[TDB_MAX_DBNAME_LEN];
|
||||
SBTree * pBt; // current access method (may extend)
|
||||
SPgFile * pPgFile; // backend page file this DB is using
|
||||
TENV * pEnv; // TENV containing the DB
|
||||
int klen; // key length if know
|
||||
int vlen; // value length if know
|
||||
bool dup; // dup mode
|
||||
TdbKeyCmprFn cFn; // compare function
|
||||
};
|
||||
|
||||
struct STDbCurosr {
|
||||
SBtCursor *pBtCur;
|
||||
};
|
||||
|
||||
static int tdbDefaultKeyCmprFn(int keyLen1, const void *pKey1, int keyLen2, const void *pKey2);
|
||||
|
||||
int tdbCreate(TDB **ppDb) {
|
||||
TDB *pDb;
|
||||
|
||||
// create the handle
|
||||
pDb = (TDB *)calloc(1, sizeof(*pDb));
|
||||
if (pDb == NULL) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
pDb->klen = TDB_VARIANT_LEN;
|
||||
pDb->vlen = TDB_VARIANT_LEN;
|
||||
pDb->dup = false;
|
||||
pDb->cFn = tdbDefaultKeyCmprFn;
|
||||
|
||||
*ppDb = pDb;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbDestroy(TDB *pDb) {
|
||||
if (pDb) {
|
||||
free(pDb);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbOpen(TDB *pDb, const char *fname, const char *dbname, TENV *pEnv) {
|
||||
int ret;
|
||||
uint8_t fileid[TDB_FILE_ID_LEN];
|
||||
SPgFile * pPgFile;
|
||||
SPgCache *pPgCache;
|
||||
SBTree * pBt;
|
||||
bool fileExist;
|
||||
size_t dbNameLen;
|
||||
SPgno dbRootPgno;
|
||||
char dbfname[128]; // TODO: make this as a macro or malloc on the heap
|
||||
|
||||
ASSERT(pDb != NULL);
|
||||
ASSERT(fname != NULL);
|
||||
// TODO: Here we simply put an assert here. In the future, make `pEnv`
|
||||
// can be set as NULL.
|
||||
ASSERT(pEnv != NULL);
|
||||
|
||||
// check the DB name
|
||||
dbNameLen = 0;
|
||||
if (dbname) {
|
||||
dbNameLen = strlen(dbname);
|
||||
if (dbNameLen >= TDB_MAX_DBNAME_LEN) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
memcpy(pDb->dbname, dbname, dbNameLen);
|
||||
}
|
||||
|
||||
pDb->dbname[dbNameLen] = '\0';
|
||||
|
||||
// get page file from the env, if not opened yet, open it
|
||||
pPgFile = NULL;
|
||||
snprintf(dbfname, 128, "%s/%s", tdbEnvGetRootDir(pEnv), fname);
|
||||
fileExist = (tdbCheckFileAccess(fname, TDB_F_OK) == 0);
|
||||
if (fileExist) {
|
||||
tdbGnrtFileID(dbfname, fileid, false);
|
||||
pPgFile = tdbEnvGetPageFile(pEnv, fileid);
|
||||
}
|
||||
|
||||
if (pPgFile == NULL) {
|
||||
ret = pgFileOpen(&pPgFile, dbfname, pEnv);
|
||||
if (ret != 0) {
|
||||
// TODO: handle error
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: get the root page number from the master DB of the page file
|
||||
// tdbGet(&dbRootPgno);
|
||||
if (dbRootPgno == 0) {
|
||||
// DB not exist, create one
|
||||
ret = pgFileAllocatePage(pPgFile, &dbRootPgno);
|
||||
if (ret != 0) {
|
||||
// TODO: handle error
|
||||
|
||||
// tdbInsert(pPgFile->pMasterDB, dbname, strlen(dbname), &dbRootPgno, sizeof(dbRootPgno));
|
||||
}
|
||||
|
||||
ASSERT(dbRootPgno > 1);
|
||||
|
||||
// pDb->pBt->root = dbRootPgno;
|
||||
|
||||
// register
|
||||
pDb->pPgFile = pPgFile;
|
||||
tdbEnvRgstDB(pEnv, pDb);
|
||||
pDb->pEnv = pEnv;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbClose(TDB *pDb) {
|
||||
if (pDb == NULL) return 0;
|
||||
return tdbDestroy(pDb);
|
||||
}
|
||||
|
||||
int tdbDrop(TDB *pDb) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbSetKeyLen(TDB *pDb, int klen) {
|
||||
// TODO: check `klen`
|
||||
pDb->klen = klen;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbSetValLen(TDB *pDb, int vlen) {
|
||||
// TODO: check `vlen`
|
||||
pDb->vlen = vlen;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbSetDup(TDB *pDb, int dup) {
|
||||
if (dup) {
|
||||
pDb->dup = true;
|
||||
} else {
|
||||
pDb->dup = false;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbSetCmprFunc(TDB *pDb, TdbKeyCmprFn fn) {
|
||||
if (fn == NULL) {
|
||||
return -1;
|
||||
} else {
|
||||
pDb->cFn = fn;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int tdbGetKeyLen(TDB *pDb) { return pDb->klen; }
|
||||
|
||||
int tdbGetValLen(TDB *pDb) { return pDb->vlen; }
|
||||
|
||||
int tdbGetDup(TDB *pDb) {
|
||||
if (pDb->dup) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int tdbInsert(TDB *pDb, const void *pKey, int nKey, const void *pData, int nData) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
}
|
Loading…
Reference in New Issue