diff --git a/source/libs/tdb/src/db/tdbDb.c b/source/libs/tdb/src/db/tdbDb.c index 5fdf035f661fefb334c0db0b694d596ab57e7b27..d8978b7608065d633d4e4f8428e729cc0f3acabd 100644 --- a/source/libs/tdb/src/db/tdbDb.c +++ b/source/libs/tdb/src/db/tdbDb.c @@ -26,6 +26,7 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF int ret; char fFullName[TDB_FILENAME_LEN]; SPage * pPage; + SPgno pgno; *ppDb = NULL; @@ -50,7 +51,12 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF // TODO: Search if the DB already in the file if (1 /*todo: db should be created*/) { - ret = tdbPFileAllocPage(pFile, &pPage); + ret = tdbPFileAllocPage(pFile, &pPage, &pgno); + if (ret < 0) { + return -1; + } + + ret = tdbPFileWrite(pFile, pPage); if (ret < 0) { return -1; } diff --git a/source/libs/tdb/src/db/tdbPFile.c b/source/libs/tdb/src/db/tdbPFile.c index 18db0b9d363277da0e85522947e72c9af53dbf12..42ea7769e7208fecd5895cec6a9825c4a2de8624 100644 --- a/source/libs/tdb/src/db/tdbPFile.c +++ b/source/libs/tdb/src/db/tdbPFile.c @@ -109,14 +109,13 @@ SPage *tdbPFileGet(SPFile *pFile, SPgno pgno) { return pPage; } - int tdbPFileWrite(SPFile *pFile, SPage *pPage) { // TODO: if the page is not in journal, write to journal // mark the page as dirty return 0; } -int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage) { +int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage, SPgno *ppgno) { SPage *pPage; SPgno pgno; @@ -125,10 +124,12 @@ int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage) { pPage = tdbPFileGet(pFile, pgno); ASSERT(pPage != NULL); } else { + /* TODO: allocate from the free list */ ASSERT(0); } *ppPage = pPage; + *ppgno = pgno; return 0; } diff --git a/source/libs/tdb/src/inc/tdbInt.h b/source/libs/tdb/src/inc/tdbInt.h index a11e6d830ff41307baa0a5df6ff45162240c0efc..8f4e32bcd90066e6cd56782fd31a9a65f1525b77 100644 --- a/source/libs/tdb/src/inc/tdbInt.h +++ b/source/libs/tdb/src/inc/tdbInt.h @@ -124,8 +124,11 @@ typedef TD_DLIST_NODE(SPgFile) SPgFileListNode; typedef int (*FKeyComparator)(const void *pKey1, int kLen1, const void *pKey2, int kLen2); #define TDB_JOURNAL_NAME "tdb.journal" + #define TDB_FILENAME_LEN 128 +#define TDB_DEFAULT_FANOUT 6 + #include "tdbUtil.h" #include "tdbBtree.h" diff --git a/source/libs/tdb/src/inc/tdbPFile.h b/source/libs/tdb/src/inc/tdbPFile.h index 83f18fdca0a9a15604006dd962bff51416fe6d0c..b892ccffb91b34cdf29a4602b9b3d2f86ae935d5 100644 --- a/source/libs/tdb/src/inc/tdbPFile.h +++ b/source/libs/tdb/src/inc/tdbPFile.h @@ -26,7 +26,7 @@ int tdbPFileOpen(SPCache *pCache, const char *fileName, SPFile **ppFile); int tdbPFileClose(SPFile *pFile); SPage *tdbPFileGet(SPFile *pFile, SPgno pgno); int tdbPFileWrite(SPFile *pFile, SPage *pPage); -int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage); +int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage, SPgno *ppgno); int tdbPFileBegin(SPFile *pFile); int tdbPFileCommit(SPFile *pFile); int tdbPFileRollback(SPFile *pFile);