This commit is contained in:
Hongze Cheng 2022-03-18 09:07:52 +00:00
parent ac620c0dc2
commit 6a8424b671
3 changed files with 39 additions and 37 deletions

View File

@ -49,13 +49,9 @@ int tdbPageCreate(int pageSize, SPage **ppPage, void *(*xMalloc)(void *, size_t)
pPage->pData = ptr; pPage->pData = ptr;
pPage->pageSize = pageSize; pPage->pageSize = pageSize;
if (pageSize < 65536) { if (pageSize < 65536) {
pPage->szOffset = 2; pPage->pPageMethods = &pageMethods;
pPage->szPageHdr = sizeof(SPageHdr);
pPage->szFreeCell = sizeof(SFreeCell);
} else { } else {
pPage->szOffset = 3; pPage->pPageMethods = &pageLargeMethods;
pPage->szPageHdr = sizeof(SPageHdrL);
pPage->szFreeCell = sizeof(SFreeCellL);
} }
TDB_INIT_PAGE_LOCK(pPage); TDB_INIT_PAGE_LOCK(pPage);
@ -249,6 +245,9 @@ static inline void setPageCellOffset(SPage *pPage, int idx, int offset) {
} }
SPageMethods pageMethods = { SPageMethods pageMethods = {
2, // szOffset
sizeof(SPageHdr), // szPageHdr
sizeof(SFreeCell), // szFreeCell
getPageFlags, // getPageFlags getPageFlags, // getPageFlags
setPageFlags, // setFlagsp setPageFlags, // setFlagsp
getPageCellNum, // getCellNum getPageCellNum, // getCellNum

View File

@ -24,6 +24,9 @@ typedef u8 SCell;
// PAGE APIS implemented // PAGE APIS implemented
typedef struct { typedef struct {
int szOffset;
int szPageHdr;
int szFreeCell;
// flags // flags
u16 (*getFlags)(SPage *); u16 (*getFlags)(SPage *);
void (*setFlags)(SPage *, u16); void (*setFlags)(SPage *, u16);
@ -56,9 +59,7 @@ struct SPage {
pthread_spinlock_t lock; pthread_spinlock_t lock;
u8 *pData; u8 *pData;
int pageSize; int pageSize;
u8 szOffset; SPageMethods *pPageMethods;
u8 szPageHdr;
u8 szFreeCell;
// Fields below used by pager and am // Fields below used by pager and am
u8 szAmHdr; u8 szAmHdr;
u8 *pPageHdr; u8 *pPageHdr;
@ -75,7 +76,6 @@ struct SPage {
int nOverflow; int nOverflow;
SCell *apOvfl[4]; SCell *apOvfl[4];
int aiOvfl[4]; int aiOvfl[4];
SPageMethods *pPageMethods;
// Fields used by SPCache // Fields used by SPCache
TDB_PCACHE_PAGE TDB_PCACHE_PAGE
}; };

View File

@ -67,6 +67,9 @@ static inline void setPageCellOffset(SPage *pPage, int idx, int offset) {
} }
SPageMethods pageLargeMethods = { SPageMethods pageLargeMethods = {
3, // szOffset
sizeof(SPageHdrL), // szPageHdr
sizeof(SFreeCellL), // szFreeCell
getPageFlags, // getPageFlags getPageFlags, // getPageFlags
setPageFlags, // setFlagsp setPageFlags, // setFlagsp
getPageCellNum, // getCellNum getPageCellNum, // getCellNum