more TDB
This commit is contained in:
parent
baf5ceed55
commit
fb0b534074
|
@ -86,7 +86,7 @@ int tdbOpen(TDB *pDb, const char *fname, const char *dbname, TENV *pEnv) {
|
||||||
|
|
||||||
pDb->dbname[dbNameLen] = '\0';
|
pDb->dbname[dbNameLen] = '\0';
|
||||||
|
|
||||||
// open pPgFile or get from the env
|
// get page file from the env, if not opened yet, open it
|
||||||
pPgFile = NULL;
|
pPgFile = NULL;
|
||||||
snprintf(dbfname, 128, "%s/%s", tdbEnvGetRootDir(pEnv), fname);
|
snprintf(dbfname, 128, "%s/%s", tdbEnvGetRootDir(pEnv), fname);
|
||||||
fileExist = (tdbCheckFileAccess(fname, TDB_F_OK) == 0);
|
fileExist = (tdbCheckFileAccess(fname, TDB_F_OK) == 0);
|
||||||
|
@ -103,39 +103,11 @@ int tdbOpen(TDB *pDb, const char *fname, const char *dbname, TENV *pEnv) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
// TODO: open the database (an existing or a new one)
|
||||||
pDb->pEnv = pEnv;
|
|
||||||
|
|
||||||
// register DB to ENV
|
|
||||||
|
|
||||||
ASSERT(fname != NULL);
|
|
||||||
|
|
||||||
// Check if file exists
|
|
||||||
if (tdbCheckFileAccess(fname, TDB_F_OK) != 0) {
|
|
||||||
if (1) {
|
|
||||||
// create the file
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if the SPgFile already opened
|
|
||||||
tdbGnrtFileID(fname, fileid, false);
|
|
||||||
pPgFile = tdbEnvGetPageFile(pEnv, fileid);
|
|
||||||
if (pPgFile == NULL) {
|
|
||||||
pPgCache = tdbEnvGetPgCache(pEnv);
|
|
||||||
if ((ret = pgFileOpen(&pPgFile, fname, pPgCache)) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pDb->pPgFile = pPgFile;
|
pDb->pPgFile = pPgFile;
|
||||||
|
tdbEnvRgstDB(pEnv, pDb);
|
||||||
// open the access method (TODO)
|
pDb->pEnv = pEnv;
|
||||||
if (btreeOpen(&pBt, pPgFile) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pDb->pBt = pBt;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,12 @@ struct STDbEnv {
|
||||||
SJournal *pJournal;
|
SJournal *pJournal;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define TDB_ENV_PGF_HASH(fileid) \
|
||||||
|
({ \
|
||||||
|
uint8_t *tmp = (uint8_t *)(fileid); \
|
||||||
|
tmp[0] + tmp[1] + tmp[2]; \
|
||||||
|
})
|
||||||
|
|
||||||
static int tdbEnvDestroy(TENV *pEnv);
|
static int tdbEnvDestroy(TENV *pEnv);
|
||||||
|
|
||||||
int tdbEnvCreate(TENV **ppEnv, const char *rootDir) {
|
int tdbEnvCreate(TENV **ppEnv, const char *rootDir) {
|
||||||
|
@ -108,8 +114,15 @@ pgsz_t tdbEnvGetPageSize(TENV *pEnv) { return pEnv->pgSize; }
|
||||||
cachesz_t tdbEnvGetCacheSize(TENV *pEnv) { return pEnv->cacheSize; }
|
cachesz_t tdbEnvGetCacheSize(TENV *pEnv) { return pEnv->cacheSize; }
|
||||||
|
|
||||||
SPgFile *tdbEnvGetPageFile(TENV *pEnv, const uint8_t fileid[]) {
|
SPgFile *tdbEnvGetPageFile(TENV *pEnv, const uint8_t fileid[]) {
|
||||||
// TODO
|
SPgFileList *pBucket;
|
||||||
return NULL;
|
SPgFile * pPgFile;
|
||||||
|
|
||||||
|
pBucket = pEnv->pgfht.buckets + (TDB_ENV_PGF_HASH(fileid) % TDB_ENV_PGF_HASH_BUCKETS); // TODO
|
||||||
|
for (pPgFile = TD_DLIST_HEAD(pBucket); pPgFile != NULL; pPgFile = TD_DLIST_NODE_NEXT_WITH_FIELD(pPgFile, envHash)) {
|
||||||
|
if (memcmp(fileid, pPgFile->fileid, TDB_FILE_ID_LEN) == 0) break;
|
||||||
|
};
|
||||||
|
|
||||||
|
return pPgFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
SPgCache *tdbEnvGetPgCache(TENV *pEnv) { return pEnv->pPgCache; }
|
SPgCache *tdbEnvGetPgCache(TENV *pEnv) { return pEnv->pPgCache; }
|
||||||
|
@ -131,12 +144,6 @@ int tdbEnvCommit(TENV *pEnv) {
|
||||||
|
|
||||||
const char *tdbEnvGetRootDir(TENV *pEnv) { return pEnv->rootDir; }
|
const char *tdbEnvGetRootDir(TENV *pEnv) { return pEnv->rootDir; }
|
||||||
|
|
||||||
#define TDB_ENV_PGF_HASH(fileid) \
|
|
||||||
({ \
|
|
||||||
uint8_t *tmp = (uint8_t *)(fileid); \
|
|
||||||
tmp[0] + tmp[1] + tmp[2]; \
|
|
||||||
})
|
|
||||||
|
|
||||||
int tdbEnvRgstPageFile(TENV *pEnv, SPgFile *pPgFile) {
|
int tdbEnvRgstPageFile(TENV *pEnv, SPgFile *pPgFile) {
|
||||||
SPgFileList *pBucket;
|
SPgFileList *pBucket;
|
||||||
|
|
||||||
|
@ -145,5 +152,10 @@ int tdbEnvRgstPageFile(TENV *pEnv, SPgFile *pPgFile) {
|
||||||
pBucket = pEnv->pgfht.buckets + (TDB_ENV_PGF_HASH(pPgFile->fileid) % TDB_ENV_PGF_HASH_BUCKETS); // TODO
|
pBucket = pEnv->pgfht.buckets + (TDB_ENV_PGF_HASH(pPgFile->fileid) % TDB_ENV_PGF_HASH_BUCKETS); // TODO
|
||||||
TD_DLIST_APPEND_WITH_FIELD(pBucket, pPgFile, envHash);
|
TD_DLIST_APPEND_WITH_FIELD(pBucket, pPgFile, envHash);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tdbEnvRgstDB(TENV *pEnv, TDB *pDb) {
|
||||||
|
// TODO
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
|
@ -24,6 +24,7 @@ const char* tdbEnvGetRootDir(TENV* pEnv);
|
||||||
SPgFile* tdbEnvGetPageFile(TENV* pEnv, const uint8_t fileid[]);
|
SPgFile* tdbEnvGetPageFile(TENV* pEnv, const uint8_t fileid[]);
|
||||||
SPgCache* tdbEnvGetPgCache(TENV* pEnv);
|
SPgCache* tdbEnvGetPgCache(TENV* pEnv);
|
||||||
int tdbEnvRgstPageFile(TENV* pEnv, SPgFile* pPgFile);
|
int tdbEnvRgstPageFile(TENV* pEnv, SPgFile* pPgFile);
|
||||||
|
int tdbEnvRgstDB(TENV* pEnv, TDB* pDb);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue