diff --git a/source/libs/tdb/src/db/tdbBtree.c b/source/libs/tdb/src/db/tdbBtree.c index 7fac8ee6ef..06d600301e 100644 --- a/source/libs/tdb/src/db/tdbBtree.c +++ b/source/libs/tdb/src/db/tdbBtree.c @@ -22,11 +22,11 @@ struct SBTree { SPager * pPager; FKeyComparator kcmpr; u8 fanout; + int pageSize; int maxLocal; int minLocal; int maxLeaf; int minLeaf; - int nPayload; }; typedef struct SPgHdr { @@ -85,6 +85,16 @@ int tdbBtreeOpen(SPgno rtPgno, int keyLen, int valLen, SPager *pPager, FKeyCompa ASSERT(0); // TODO: pBt->fanout = 0; } + // pBt->pageSize + pBt->pageSize = tdbPagerGetPageSize(pPager); + // pBt->maxLocal + pBt->maxLocal = (pBt->pageSize - sizeof(SPageHdr)) / pBt->fanout; + // pBt->minLocal + pBt->minLocal = (pBt->pageSize - sizeof(SPageHdr)) / pBt->fanout / 2; + // pBt->maxLeaf + pBt->maxLeaf = pBt->pageSize - sizeof(SPageHdr); + // pBt->minLeaf + pBt->minLeaf = pBt->minLocal; *ppBt = pBt; return 0; @@ -277,11 +287,11 @@ static int tdbDefaultKeyCmprFn(const void *pKey1, int keyLen1, const void *pKey2 return cret; } -static void tdbBtreeZeroPage(SPageHandle *pPage, int flags) { +static void tdbBtreeZeroPage(SMemPage *pPage, int flags) { // TODO } -static int tdbBtreeInitPage(SPageHandle *pPage) { +static int tdbBtreeInitPage(SMemPage *pPage) { // TODO return 0; } \ No newline at end of file diff --git a/source/libs/tdb/src/db/tdbEnv.c b/source/libs/tdb/src/db/tdbEnv.c index 595a90a5ad..e85956b82d 100644 --- a/source/libs/tdb/src/db/tdbEnv.c +++ b/source/libs/tdb/src/db/tdbEnv.c @@ -48,7 +48,7 @@ int tdbEnvOpen(const char *rootDir, int pageSize, int cacheSize, STEnv **ppEnv) pEnv->jfd = -1; - ret = tdbPCacheOpen(pageSize, cacheSize, sizeof(SPageHandle), &(pEnv->pCache)); + ret = tdbPCacheOpen(pageSize, cacheSize, sizeof(SMemPage), &(pEnv->pCache)); if (ret < 0) { return -1; } diff --git a/source/libs/tdb/src/db/tdbPCache.c b/source/libs/tdb/src/db/tdbPCache.c index fc0d2d40e8..cd7888ae00 100644 --- a/source/libs/tdb/src/db/tdbPCache.c +++ b/source/libs/tdb/src/db/tdbPCache.c @@ -267,4 +267,6 @@ static int tdbPCacheOpenImpl(SPCache *pCache) { pCache->lru.pLruPrev = &(pCache->lru); return 0; -} \ No newline at end of file +} + +int tdbPCacheGetPageSize(SPCache *pCache) { return pCache->pageSize; } \ No newline at end of file diff --git a/source/libs/tdb/src/db/tdbPager.c b/source/libs/tdb/src/db/tdbPager.c index 91427d004c..22107e67c3 100644 --- a/source/libs/tdb/src/db/tdbPager.c +++ b/source/libs/tdb/src/db/tdbPager.c @@ -87,6 +87,7 @@ int tdbPagerOpen(SPCache *pCache, const char *fileName, SPager **ppPager) { } pPager->jfd = -1; + pPager->pageSize = tdbPCacheGetPageSize(pCache); *ppPager = pPager; return 0; @@ -238,4 +239,6 @@ static int tdbPagerReadPage(SPager *pPager, SPage *pPage) { return -1; } return 0; -} \ No newline at end of file +} + +int tdbPagerGetPageSize(SPager *pPager) { return pPager->pageSize; } \ No newline at end of file diff --git a/source/libs/tdb/src/inc/tdbPCache.h b/source/libs/tdb/src/inc/tdbPCache.h index f9cf589941..ba07b8cb5d 100644 --- a/source/libs/tdb/src/inc/tdbPCache.h +++ b/source/libs/tdb/src/inc/tdbPCache.h @@ -45,6 +45,7 @@ int tdbPCacheClose(SPCache *pCache); SPage *tdbPCacheFetch(SPCache *pCache, const SPgid *pPgid, bool alcNewPage); void tdbPCacheFetchFinish(SPCache *pCache, SPage *pPage); void tdbPCacheRelease(SPage *pPage); +int tdbPCacheGetPageSize(SPCache *pCache); #ifdef __cplusplus } diff --git a/source/libs/tdb/src/inc/tdbPage.h b/source/libs/tdb/src/inc/tdbPage.h index b925d1361e..164d1c8812 100644 --- a/source/libs/tdb/src/inc/tdbPage.h +++ b/source/libs/tdb/src/inc/tdbPage.h @@ -21,17 +21,13 @@ extern "C" { #endif typedef struct __attribute__((__packed__)) { - u8 flags; + u16 flags; u16 nCells; u16 cellCont; u16 freeCell; u16 nFree; } SPageHdr; -typedef struct __attribute__((__packed__)) { - SPgno nPgno; -} SOfPageHdr; - typedef struct { void * pData; SPageHdr *pPageHdr; @@ -41,7 +37,7 @@ typedef struct { int vLen; int maxLocal; int minLocal; -} SPageHandle; +} SMemPage; #ifdef __cplusplus } diff --git a/source/libs/tdb/src/inc/tdbPager.h b/source/libs/tdb/src/inc/tdbPager.h index 361ae8dc49..a9999eb609 100644 --- a/source/libs/tdb/src/inc/tdbPager.h +++ b/source/libs/tdb/src/inc/tdbPager.h @@ -28,6 +28,7 @@ int tdbPagerWrite(SPager *pFile, SPage *pPage); int tdbPagerAllocPage(SPager *pFile, SPage **ppPage, SPgno *ppgno); int tdbPagerBegin(SPager *pFile); int tdbPagerCommit(SPager *pFile); +int tdbPagerGetPageSize(SPager *pPager); #ifdef __cplusplus }