more TDB
This commit is contained in:
parent
ac620c0dc2
commit
6a8424b671
|
@ -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
|
||||||
|
|
|
@ -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,26 +59,23 @@ 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;
|
||||||
u8 *pAmHdr;
|
u8 *pAmHdr;
|
||||||
u8 *pCellIdx;
|
u8 *pCellIdx;
|
||||||
u8 *pFreeStart;
|
u8 *pFreeStart;
|
||||||
u8 *pFreeEnd;
|
u8 *pFreeEnd;
|
||||||
SPageFtr *pPageFtr;
|
SPageFtr *pPageFtr;
|
||||||
int kLen; // key length of the page, -1 for unknown
|
int kLen; // key length of the page, -1 for unknown
|
||||||
int vLen; // value length of the page, -1 for unknown
|
int vLen; // value length of the page, -1 for unknown
|
||||||
int nFree;
|
int nFree;
|
||||||
int maxLocal;
|
int maxLocal;
|
||||||
int minLocal;
|
int minLocal;
|
||||||
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
|
||||||
};
|
};
|
||||||
|
|
|
@ -67,16 +67,19 @@ static inline void setPageCellOffset(SPage *pPage, int idx, int offset) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SPageMethods pageLargeMethods = {
|
SPageMethods pageLargeMethods = {
|
||||||
getPageFlags, // getPageFlags
|
3, // szOffset
|
||||||
setPageFlags, // setFlagsp
|
sizeof(SPageHdrL), // szPageHdr
|
||||||
getPageCellNum, // getCellNum
|
sizeof(SFreeCellL), // szFreeCell
|
||||||
setPageCellNum, // setCellNum
|
getPageFlags, // getPageFlags
|
||||||
getPageCellBody, // getCellBody
|
setPageFlags, // setFlagsp
|
||||||
setPageCellBody, // setCellBody
|
getPageCellNum, // getCellNum
|
||||||
getPageCellFree, // getCellFree
|
setPageCellNum, // setCellNum
|
||||||
setPageCellFree, // setCellFree
|
getPageCellBody, // getCellBody
|
||||||
getPageNFree, // getFreeBytes
|
setPageCellBody, // setCellBody
|
||||||
setPageNFree, // setFreeBytes
|
getPageCellFree, // getCellFree
|
||||||
getPageCellOffset, // getCellOffset
|
setPageCellFree, // setCellFree
|
||||||
setPageCellOffset // setCellOffset
|
getPageNFree, // getFreeBytes
|
||||||
|
setPageNFree, // setFreeBytes
|
||||||
|
getPageCellOffset, // getCellOffset
|
||||||
|
setPageCellOffset // setCellOffset
|
||||||
};
|
};
|
Loading…
Reference in New Issue