more TDB
This commit is contained in:
parent
9b8a8f1287
commit
15fa64ebaa
|
@ -679,146 +679,65 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
|
||||||
// TODO: sort the page according to the page number
|
// TODO: sort the page according to the page number
|
||||||
}
|
}
|
||||||
|
|
||||||
// { // Do the real cell distribution
|
{ // Do the real cell distribution
|
||||||
|
SPage *pOldsCopy[3];
|
||||||
|
SCell *pCell;
|
||||||
|
int szCell;
|
||||||
|
SBtreeInitPageArg iarg;
|
||||||
|
int iNew, nNewCells;
|
||||||
|
|
||||||
// SPage *pTPage[2];
|
iarg.pBt = pBt;
|
||||||
// int tPage, tIdx, iOld;
|
iarg.flags = TDB_BTREE_PAGE_GET_FLAGS(pOlds[0]);
|
||||||
// SCell *pCell;
|
for (int i = 0; i < nOlds; i++) {
|
||||||
// int szCell;
|
tdbPageCreate(pOlds[0]->pageSize, pOldsCopy + i, NULL, NULL);
|
||||||
// int nCells;
|
tdbBtreeZeroPage(pOldsCopy[i], &iarg);
|
||||||
// SCellDecoder cd;
|
tdbPageCopy(pOlds[i], pOldsCopy[i]);
|
||||||
// SBtreeInitPageArg iarg = {.flags = TDB_BTREE_PAGE_GET_FLAGS(pOlds[0]), .pBt = pBt};
|
}
|
||||||
|
iNew = 0;
|
||||||
|
nNewCells = 0;
|
||||||
|
|
||||||
// for (int i = 0; i < 2; i++) {
|
for (int iOld = 0; iOld < nOlds; iOld++) {
|
||||||
// ret = tdbPageCreate(pOlds[0]->pageSize, &pTPage[i], NULL, NULL);
|
SPage *pPage;
|
||||||
// if (ret < 0) {
|
|
||||||
// ASSERT(0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// tPage = 0;
|
pPage = pOldsCopy[iOld];
|
||||||
// tIdx = 0;
|
|
||||||
// iOld = 0;
|
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
|
||||||
// if (childNotLeaf) {
|
|
||||||
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// for (int iNew = 0; iNew < nNews; iNew++) {
|
for (int oIdx = 0; oIdx < TDB_PAGE_TOTAL_CELLS(pPage); oIdx++) {
|
||||||
// // fill the iNew page
|
pCell = tdbPageGetCell(pPage, oIdx);
|
||||||
// // TODO: copy current page to tmp space
|
szCell = tdbBtreeCellSize(pPage, pCell);
|
||||||
// tdbBtreeZeroPage(pNews[iNew], &iarg);
|
|
||||||
|
|
||||||
// for (int iCell = 0; iCell < infoNews[iNew].cnt; iCell++) {
|
ASSERT(nNewCells <= infoNews[iNew].cnt);
|
||||||
// for (;;) { // loop to find the next available cell
|
|
||||||
// if (tIdx < nCells) {
|
|
||||||
// pCell = tdbPageGetCell(pTPage[tPage], tIdx);
|
|
||||||
// szCell = tdbBtreeCellSize(pTPage[tPage], pCell);
|
|
||||||
// tIdx++;
|
|
||||||
// break;
|
|
||||||
// } else {
|
|
||||||
// if (childNotLeaf) {
|
|
||||||
// if (iOld < nOlds - 1) {
|
|
||||||
// pCell = pDivCell[iOld];
|
|
||||||
// szCell = szDivCell[iOld];
|
|
||||||
// ((SPgno *)pCell)[0] = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
|
|
||||||
// iOld++;
|
if (nNewCells < infoNews[iNew].cnt) {
|
||||||
// tPage = (tPage + 1) % 2;
|
tdbPageInsertCell(pNews[iNew], nNewCells, pCell, szCell, 0);
|
||||||
// tIdx = 0;
|
nNewCells++;
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
} else {
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
if (childNotLeaf) {
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
// set current new page right-most child
|
||||||
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
// break;
|
|
||||||
// } else {
|
|
||||||
// iOld++;
|
|
||||||
// tPage = (tPage + 1) % 2;
|
|
||||||
// tIdx = 0;
|
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
|
||||||
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// iOld++;
|
|
||||||
// tPage = (tPage + 1) % 2;
|
|
||||||
// tIdx = 0;
|
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// tdbPageInsertCell(pNews[iNew], iCell, pCell, szCell, 0);
|
// move to next new page
|
||||||
// }
|
} else {
|
||||||
|
// move to next new page
|
||||||
|
|
||||||
// // fill right-most child pgno if internal page
|
// insert the cell to the new page
|
||||||
// if (childNotLeaf) {
|
}
|
||||||
// if (tIdx < nCells) {
|
}
|
||||||
// pCell = tdbPageGetCell(pTPage[tPage], tIdx);
|
|
||||||
// szCell = tdbBtreeCellSize(pTPage[tPage], pCell);
|
|
||||||
// tIdx++;
|
|
||||||
// break;
|
|
||||||
// } else {
|
|
||||||
// if (!childNotLeaf) {
|
|
||||||
// if (iOld < nOlds - 1) {
|
|
||||||
// pCell = pDivCell[iOld];
|
|
||||||
// szCell = szDivCell[iOld];
|
|
||||||
// ((SPgno *)pCell)[0] = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
|
|
||||||
// iOld++;
|
if (nNewCells == infoNews[iNew].cnt) {
|
||||||
// tPage = (tPage + 1) % 2;
|
if (childNotLeaf) {
|
||||||
// tIdx = 0;
|
// TODO
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
} else {
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
// TODO
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
}
|
||||||
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
}
|
||||||
// break;
|
}
|
||||||
// } else {
|
}
|
||||||
// iOld++;
|
|
||||||
// tPage = (tPage + 1) % 2;
|
|
||||||
// tIdx = 0;
|
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
|
||||||
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// iOld++;
|
|
||||||
// tPage = (tPage + 1) % 2;
|
|
||||||
// tIdx = 0;
|
|
||||||
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]);
|
|
||||||
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
|
|
||||||
// tdbPageCopy(pOlds[iOld], pTPage[tPage]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// ((SIntHdr *)pNews[iNew]->pData)->pgno = ((SPgno *)pCell)[0];
|
for (int i = 0; i < nOlds; i++) {
|
||||||
// }
|
tdbPageDestroy(pOldsCopy[i], NULL, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// // insert divider cell into the parent page
|
return 0;
|
||||||
// SIntHdr *pIntHdr = (SIntHdr *)pParent->pData;
|
|
||||||
// if (iNew == nNews - 1 && pIntHdr->pgno == 0) {
|
|
||||||
// pIntHdr->pgno = TDB_PAGE_PGNO(pNews[iNew]);
|
|
||||||
// } else {
|
|
||||||
// tdbBtreeDecodeCell(pNews[iNew], tdbPageGetCell(pNews[iNew], TDB_PAGE_TOTAL_CELLS(pNews[iNew]) - 1), &cd);
|
|
||||||
// tdbBtreeEncodeCell(pParent, cd.pKey, cd.kLen, (void *)&TDB_PAGE_PGNO(pNews[iNew]), sizeof(SPgno), pCell,
|
|
||||||
// &szCell);
|
|
||||||
// // TODO: the cell here may be used by pParent as an overflow cell
|
|
||||||
// tdbPageInsertCell(pParent, sIdx++, pCell, szCell, 0);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// for (int i = 0; i < 2; i++) {
|
|
||||||
// tdbPageDestroy(pTPage[i], NULL, NULL);
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbBtreeBalance(SBtCursor *pCur) {
|
static int tdbBtreeBalance(SBtCursor *pCur) {
|
||||||
|
|
Loading…
Reference in New Issue