diff --git a/source/libs/tdb/src/db/tdbDb.c b/source/libs/tdb/src/db/tdbDb.c index 00bef20b90..5fdf035f66 100644 --- a/source/libs/tdb/src/db/tdbDb.c +++ b/source/libs/tdb/src/db/tdbDb.c @@ -25,6 +25,7 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF SPFile *pFile; int ret; char fFullName[TDB_FILENAME_LEN]; + SPage * pPage; *ppDb = NULL; @@ -45,6 +46,16 @@ 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); + if (ret < 0) { + return -1; + } + } + // pDb->pBt ret = tdbBtreeOpen(&(pDb->pBt)); if (ret < 0) { diff --git a/source/libs/tdb/src/db/tdbPFile.c b/source/libs/tdb/src/db/tdbPFile.c index 16f219d95a..aa897347f1 100644 --- a/source/libs/tdb/src/db/tdbPFile.c +++ b/source/libs/tdb/src/db/tdbPFile.c @@ -103,7 +103,7 @@ SPage *tdbPFileGet(SPFile *pFile, SPgno pgno) { ASSERT(pPage->isLoad); return pPage; -} + int tdbPFileWrite(SPFile *pFile, SPage *pPage) { // TODO: if the page is not in journal, write to journal @@ -112,8 +112,18 @@ int tdbPFileWrite(SPFile *pFile, SPage *pPage) { } int tdbPFileAllocPage(SPFile *pFile, SPage **ppPage) { - // TODO - *ppPage = NULL; + SPage *pPage; + SPgno pgno; + + if (1 /*TODO: no free page*/) { + pgno = ++pFile->dbFileSize; + pPage = tdbPFileGet(pFile, pgno); + ASSERT(pPage != NULL); + } else { + ASSERT(0); + } + + *ppPage = pPage; return 0; }