From 5fdfb808558b268b20d8209a18a03d7887d53cea Mon Sep 17 00:00:00 2001 From: Hongze Cheng Date: Tue, 1 Mar 2022 03:26:26 +0000 Subject: [PATCH] more TDB --- source/libs/tdb/src/db/tdbDb.c | 16 +++------------ source/libs/tdb/src/db/tdbPFile.c | 31 ++++++++++++++++++++++++++++++ source/libs/tdb/src/inc/tdbPFile.h | 1 + 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/source/libs/tdb/src/db/tdbDb.c b/source/libs/tdb/src/db/tdbDb.c index d702b809fd..0887971dd3 100644 --- a/source/libs/tdb/src/db/tdbDb.c +++ b/source/libs/tdb/src/db/tdbDb.c @@ -49,19 +49,9 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF ASSERT(pFile != NULL); - // TODO: Search if the DB already in the file - if (1 /*todo: db should be created*/) { - ret = tdbPFileAllocPage(pFile, &pPage, &pgno); - if (ret < 0) { - return -1; - } - - ret = tdbPFileWrite(pFile, pPage); - if (ret < 0) { - return -1; - } - } else { - ASSERT(0); + ret = tdbPFileOpenDB(pFile, &pgno, true); + if (ret < 0) { + return -1; } // pDb->pBt diff --git a/source/libs/tdb/src/db/tdbPFile.c b/source/libs/tdb/src/db/tdbPFile.c index 5ddf5d6629..d8607646c1 100644 --- a/source/libs/tdb/src/db/tdbPFile.c +++ b/source/libs/tdb/src/db/tdbPFile.c @@ -31,6 +31,10 @@ struct SPFile { u8 inTran; }; +typedef struct { + /* TODO */ +} SFileHdr; + static int tdbPFileReadPage(SPFile *pFile, SPage *pPage); int tdbPFileOpen(SPCache *pCache, const char *fileName, SPFile **ppFile) { @@ -87,6 +91,33 @@ int tdbPFileClose(SPFile *pFile) { return 0; } +int tdbPFileOpenDB(SPFile *pFile, SPgno *ppgno, bool toCreate) { + SPgno pgno; + SPage *pPage; + int ret; + + { + // TODO: try to search the main DB to get the page number + pgno = 0; + } + + if (pgno == 0 && toCreate) { + ret = tdbPFileAllocPage(pFile, &pPage, &pgno); + if (ret < 0) { + return -1; + } + + // tdbPFileZeroPage(pPage); + ret = tdbPFileWrite(pFile, pPage); + if (ret < 0) { + return -1; + } + } + + *ppgno = pgno; + return 0; +} + SPage *tdbPFileGet(SPFile *pFile, SPgno pgno) { SPgid pgid; SPage *pPage; diff --git a/source/libs/tdb/src/inc/tdbPFile.h b/source/libs/tdb/src/inc/tdbPFile.h index b892ccffb9..55a4d36741 100644 --- a/source/libs/tdb/src/inc/tdbPFile.h +++ b/source/libs/tdb/src/inc/tdbPFile.h @@ -24,6 +24,7 @@ typedef struct SPFile SPFile; int tdbPFileOpen(SPCache *pCache, const char *fileName, SPFile **ppFile); int tdbPFileClose(SPFile *pFile); +int tdbPFileOpenDB(SPFile *pFile, SPgno *ppgno, bool toCreate); SPage *tdbPFileGet(SPFile *pFile, SPgno pgno); int tdbPFileWrite(SPFile *pFile, SPage *pPage); int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage, SPgno *ppgno);