more TDB
This commit is contained in:
parent
d5afc7240a
commit
6cd9d27034
|
@ -498,150 +498,6 @@ static int tdbBtreeBalanceDeeper(SBTree *pBt, SPage *pRoot, SPage **ppChild) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep1(SBtreeBalanceHelper *pBlh) {
|
||||
int nCells;
|
||||
int i;
|
||||
int idxStart;
|
||||
int nChild;
|
||||
int ret;
|
||||
SPage *pParent;
|
||||
SPgno pgno;
|
||||
SCell *pCell;
|
||||
SCellDecoder cd;
|
||||
SBTree *pBt;
|
||||
|
||||
pParent = pBlh->pParent;
|
||||
nCells = TDB_PAGE_TOTAL_CELLS(pParent);
|
||||
nChild = nCells + 1;
|
||||
pBt = pBlh->pBt;
|
||||
|
||||
// TODO: ASSERT below needs to be removed
|
||||
ASSERT(pParent->nOverflow == 0);
|
||||
ASSERT(pBlh->idx <= nCells);
|
||||
|
||||
if (nChild < 3) {
|
||||
idxStart = 0;
|
||||
pBlh->nOld = nChild;
|
||||
} else {
|
||||
if (pBlh->idx == 0) {
|
||||
idxStart = 0;
|
||||
} else if (pBlh->idx == nCells) {
|
||||
idxStart = pBlh->idx - 2;
|
||||
} else {
|
||||
idxStart = pBlh->idx - 1;
|
||||
}
|
||||
pBlh->nOld = 3;
|
||||
}
|
||||
|
||||
i = pBlh->nOld - 1;
|
||||
|
||||
if (idxStart + i == nCells) {
|
||||
// pgno = ((SBtPageHdr *)(pParent->pAmHdr))[0].rChild;
|
||||
} else {
|
||||
pCell = tdbPageGetCell(pParent, idxStart + i);
|
||||
// TODO: no need to decode the payload part, and even the kLen, vLen part
|
||||
// we only need the pgno part
|
||||
ret = tdbBtreeDecodeCell(pParent, pCell, &cd);
|
||||
if (ret < 0) {
|
||||
ASSERT(0);
|
||||
return -1;
|
||||
}
|
||||
pgno = cd.pgno;
|
||||
}
|
||||
for (;;) {
|
||||
ret = tdbPagerFetchPage(pBt->pPager, pgno, &(pBlh->pOldPages[i]), tdbBtreeInitPage, pBt);
|
||||
if (ret < 0) {
|
||||
ASSERT(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Loop over
|
||||
if ((i--) == 0) break;
|
||||
|
||||
{
|
||||
// TODO
|
||||
// ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep2(SBtreeBalanceHelper *pBlh) {
|
||||
#if 0
|
||||
SPage *pPage;
|
||||
int oidx;
|
||||
int cidx;
|
||||
int limit;
|
||||
SCell *pCell;
|
||||
|
||||
for (int i = 0; i < pBlh->nOld; i++) {
|
||||
pPage = pBlh->pOldPages[i];
|
||||
oidx = 0;
|
||||
cidx = 0;
|
||||
|
||||
if (oidx < pPage->nOverflow) {
|
||||
limit = pPage->aiOvfl[oidx];
|
||||
} else {
|
||||
limit = pPage->pPageHdr->nCells;
|
||||
}
|
||||
|
||||
// Loop to copy each cell pointer out
|
||||
for (;;) {
|
||||
if (oidx >= pPage->nOverflow && cidx >= pPage->pPageHdr->nCells) break;
|
||||
|
||||
if (cidx < limit) {
|
||||
// Get local cells
|
||||
pCell = tdbPageGetCell(pPage, cidx);
|
||||
} else if (cidx == limit) {
|
||||
// Get overflow cells
|
||||
pCell = pPage->apOvfl[oidx++];
|
||||
|
||||
if (oidx < pPage->nOverflow) {
|
||||
limit = pPage->aiOvfl[oidx];
|
||||
} else {
|
||||
limit = pPage->pPageHdr->nCells;
|
||||
}
|
||||
} else {
|
||||
ASSERT(0);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// TODO: Copy divider cells here
|
||||
}
|
||||
}
|
||||
|
||||
/* TODO */
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep3(SBtreeBalanceHelper *pBlh) {
|
||||
// Figure out number of pages needed after balance
|
||||
for (int i = 0; i < pBlh->nOld; i++) {
|
||||
/* TODO */
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep4(SBtreeBalanceHelper *pBlh) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep5(SBtreeBalanceHelper *pBlh) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceStep6(SBtreeBalanceHelper *pBlh) {
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
|
||||
int ret;
|
||||
|
||||
|
@ -771,11 +627,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
|
|||
}
|
||||
|
||||
{
|
||||
// TODO: Reset states
|
||||
}
|
||||
|
||||
{
|
||||
// TODO: Clear resources
|
||||
// Do the actual redistribute
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue