more TDB
This commit is contained in:
parent
8becb54211
commit
b8954ae1c5
|
@ -462,29 +462,6 @@ typedef struct {
|
||||||
SPage *pNewPages[5];
|
SPage *pNewPages[5];
|
||||||
} SBtreeBalanceHelper;
|
} SBtreeBalanceHelper;
|
||||||
|
|
||||||
static int tdbBtreeCopyPageContent(SPage *pFrom, SPage *pTo) {
|
|
||||||
#if 0
|
|
||||||
int nCells = TDB_PAGE_TOTAL_CELLS(pFrom);
|
|
||||||
int cCells = TDB_PAGE_CCELLS(pFrom);
|
|
||||||
int fCell = TDB_PAGE_FCELL(pFrom);
|
|
||||||
int nFree = TDB_PAGE_NFREE(pFrom);
|
|
||||||
|
|
||||||
pTo->pFreeStart = pTo->pCellIdx + nCells * pFrom->pPageMethods->szOffset;
|
|
||||||
memcpy(pTo->pCellIdx, pFrom->pCellIdx, nCells * pFrom->pPageMethods->szOffset);
|
|
||||||
pTo->pFreeEnd = (u8 *)pTo->pPageFtr - (u8 *)(pFrom->pPageFtr) + pFrom->pFreeEnd;
|
|
||||||
memcpy(pTo->pFreeEnd, pFrom->pFreeEnd, (u8 *)pFrom->pPageFtr - pFrom->pFreeEnd);
|
|
||||||
|
|
||||||
TDB_PAGE_NCELLS_SET(pTo, nCells);
|
|
||||||
TDB_PAGE_CCELLS_SET(pTo, cCells);
|
|
||||||
TDB_PAGE_FCELL_SET(pTo, fCell);
|
|
||||||
TDB_PAGE_NFREE_SET(pTo, nFree);
|
|
||||||
|
|
||||||
// TODO: update other fields
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) {
|
static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) {
|
||||||
SPager *pPager;
|
SPager *pPager;
|
||||||
SPage *pChild;
|
SPage *pChild;
|
||||||
|
@ -503,10 +480,7 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the root page content to the child page
|
// Copy the root page content to the child page
|
||||||
ret = tdbBtreeCopyPageContent(pRoot, pChild);
|
tdbPageCopy(pRoot, pChild);
|
||||||
if (ret < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
pChild->nOverflow = pRoot->nOverflow;
|
pChild->nOverflow = pRoot->nOverflow;
|
||||||
for (int i = 0; i < pChild->nOverflow; i++) {
|
for (int i = 0; i < pChild->nOverflow; i++) {
|
||||||
|
|
|
@ -208,6 +208,8 @@ int tdbPageDropCell(SPage *pPage, int idx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void tdbPageCopy(SPage *pFromPage, SPage *pToPage) {
|
void tdbPageCopy(SPage *pFromPage, SPage *pToPage) {
|
||||||
|
int delta, nFree;
|
||||||
|
|
||||||
pToPage->pFreeStart = pToPage->pPageHdr + (pFromPage->pFreeStart - pFromPage->pPageHdr);
|
pToPage->pFreeStart = pToPage->pPageHdr + (pFromPage->pFreeStart - pFromPage->pPageHdr);
|
||||||
pToPage->pFreeEnd = (u8 *)(pToPage->pPageFtr) - ((u8 *)pFromPage->pPageFtr - pFromPage->pFreeEnd);
|
pToPage->pFreeEnd = (u8 *)(pToPage->pPageFtr) - ((u8 *)pFromPage->pPageFtr - pFromPage->pFreeEnd);
|
||||||
|
|
||||||
|
@ -215,6 +217,16 @@ void tdbPageCopy(SPage *pFromPage, SPage *pToPage) {
|
||||||
|
|
||||||
memcpy(pToPage->pPageHdr, pFromPage->pPageHdr, pFromPage->pFreeStart - pFromPage->pPageHdr);
|
memcpy(pToPage->pPageHdr, pFromPage->pPageHdr, pFromPage->pFreeStart - pFromPage->pPageHdr);
|
||||||
memcpy(pToPage->pFreeEnd, pFromPage->pFreeEnd, (u8 *)pFromPage->pPageFtr - pFromPage->pFreeEnd);
|
memcpy(pToPage->pFreeEnd, pFromPage->pFreeEnd, (u8 *)pFromPage->pPageFtr - pFromPage->pFreeEnd);
|
||||||
|
|
||||||
|
ASSERT(TDB_PAGE_CCELLS(pToPage) == pToPage->pFreeEnd - pToPage->pData);
|
||||||
|
|
||||||
|
delta = (pToPage->pPageHdr - pToPage->pAmHdr) - (pFromPage->pPageHdr - pFromPage->pAmHdr);
|
||||||
|
if (delta != 0) {
|
||||||
|
nFree = TDB_PAGE_NFREE(pFromPage);
|
||||||
|
TDB_PAGE_NFREE_SET(pToPage, nFree - delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: do we need to copy the overflow part ???
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
|
static int tdbPageAllocate(SPage *pPage, int szCell, SCell **ppCell) {
|
||||||
|
|
Loading…
Reference in New Issue