diff --git a/source/libs/tdb/src/db/pgcache.c b/source/libs/tdb/src/db/pgcache.c index bb4d81dd61fef963c8bca2a68fc8bff51601153d..1d7fe0c32f33e298844738412de5c1a398d2f746 100644 --- a/source/libs/tdb/src/db/pgcache.c +++ b/source/libs/tdb/src/db/pgcache.c @@ -14,16 +14,6 @@ */ #include "tdbInt.h" -typedef TD_DLIST_NODE(SPage) SPgListNode; -struct SPage { - pgid_t pgid; // page id - frame_id_t frameid; // frame id - SPgListNode freeNode; // for SPgCache.freeList - SPgListNode pghtNode; // for pght - SPgListNode lruNode; // for LRU - uint8_t * pData; // real data -}; - typedef TD_DLIST(SPage) SPgList; struct SPgCache { diff --git a/source/libs/tdb/src/db/pgfile.c b/source/libs/tdb/src/db/pgfile.c index 2de0dd9cc5f6f579b617b9a0475d7d3c71d32cb7..9e4795dc084cc07014421aa0343bbae80757d1ee 100644 --- a/source/libs/tdb/src/db/pgfile.c +++ b/source/libs/tdb/src/db/pgfile.c @@ -15,6 +15,8 @@ #include "tdbInt.h" +static int pgFileRead(SPgFile *pPgFile, pgno_t pgno, uint8_t *pData); + int pgFileOpen(const char *fname, SPgCache *pPgCache, SPgFile **ppPgFile) { SPgFile *pPgFile; @@ -80,6 +82,14 @@ SPage *pgFileFetch(SPgFile *pPgFile, pgno_t pgno) { // TODO } else { pPage = pgCacheFetch(pPgCache, pgid); + if (1 /*Page is cached, no need to load from file*/) { + return pPage; + } else { + if (pgFileRead(pPgFile, pgno, pPage->pData) < 0) { + // todoerr + } + return pPage; + } } return pPage; @@ -93,4 +103,9 @@ int pgFileRelease(SPage *pPage) { int pgFileWrite(SPage *pPage) { // TODO return 0; +} + +static int pgFileRead(SPgFile *pPgFile, pgno_t pgno, uint8_t *pData) { + // TODO + return 0; } \ No newline at end of file diff --git a/source/libs/tdb/src/inc/pgcache.h b/source/libs/tdb/src/inc/pgcache.h index 139cece15368c9043d6823bfc2a68d21ef80c417..d25877e8ffe14bc77cc5e4c1fcc7034c96be02e2 100644 --- a/source/libs/tdb/src/inc/pgcache.h +++ b/source/libs/tdb/src/inc/pgcache.h @@ -34,6 +34,16 @@ int pgCacheRelease(SPage *pPage); // SPage +typedef TD_DLIST_NODE(SPage) SPgListNode; +struct SPage { + pgid_t pgid; // page id + frame_id_t frameid; // frame id + SPgListNode freeNode; // for SPgCache.freeList + SPgListNode pghtNode; // for pght + SPgListNode lruNode; // for LRU + uint8_t * pData; // real data +}; + #ifdef __cplusplus } #endif