提交 15fa64eb 编写于 作者: H Hongze Cheng

more TDB

上级 9b8a8f12
...@@ -679,146 +679,65 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) { ...@@ -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];
// SPage *pTPage[2]; SCell *pCell;
// int tPage, tIdx, iOld; int szCell;
// SCell *pCell; SBtreeInitPageArg iarg;
// int szCell; int iNew, nNewCells;
// int nCells;
// SCellDecoder cd; iarg.pBt = pBt;
// SBtreeInitPageArg iarg = {.flags = TDB_BTREE_PAGE_GET_FLAGS(pOlds[0]), .pBt = pBt}; iarg.flags = TDB_BTREE_PAGE_GET_FLAGS(pOlds[0]);
for (int i = 0; i < nOlds; i++) {
// for (int i = 0; i < 2; i++) { tdbPageCreate(pOlds[0]->pageSize, pOldsCopy + i, NULL, NULL);
// ret = tdbPageCreate(pOlds[0]->pageSize, &pTPage[i], NULL, NULL); tdbBtreeZeroPage(pOldsCopy[i], &iarg);
// if (ret < 0) { tdbPageCopy(pOlds[i], pOldsCopy[i]);
// ASSERT(0); }
// } iNew = 0;
// } nNewCells = 0;
// tPage = 0; for (int iOld = 0; iOld < nOlds; iOld++) {
// tIdx = 0; SPage *pPage;
// iOld = 0;
// nCells = TDB_PAGE_TOTAL_CELLS(pOlds[iOld]); pPage = pOldsCopy[iOld];
// tdbBtreeZeroPage(pTPage[tPage], &iarg);
// tdbPageCopy(pOlds[iOld], pTPage[tPage]); for (int oIdx = 0; oIdx < TDB_PAGE_TOTAL_CELLS(pPage); oIdx++) {
// if (childNotLeaf) { pCell = tdbPageGetCell(pPage, oIdx);
// ((SIntHdr *)pTPage[tPage]->pData)->pgno = ((SIntHdr *)pOlds[iOld]->pData)->pgno; szCell = tdbBtreeCellSize(pPage, pCell);
// }
ASSERT(nNewCells <= infoNews[iNew].cnt);
// for (int iNew = 0; iNew < nNews; iNew++) {
// // fill the iNew page if (nNewCells < infoNews[iNew].cnt) {
// // TODO: copy current page to tmp space tdbPageInsertCell(pNews[iNew], nNewCells, pCell, szCell, 0);
// tdbBtreeZeroPage(pNews[iNew], &iarg); nNewCells++;
} else {
// for (int iCell = 0; iCell < infoNews[iNew].cnt; iCell++) { if (childNotLeaf) {
// for (;;) { // loop to find the next available cell // set current new page right-most child
// if (tIdx < nCells) {
// pCell = tdbPageGetCell(pTPage[tPage], tIdx); // move to next new page
// szCell = tdbBtreeCellSize(pTPage[tPage], pCell); } else {
// tIdx++; // move to next new page
// break;
// } else {
// if (childNotLeaf) {
// if (iOld < nOlds - 1) {
// pCell = pDivCell[iOld];
// szCell = szDivCell[iOld];
// ((SPgno *)pCell)[0] = ((SIntHdr *)pOlds[iOld]->pData)->pgno;
// 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;
// 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);
// }
// // fill right-most child pgno if internal 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++;
// 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;
// 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];
// }
// // insert divider cell into the parent page
// 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; // insert the cell to the new page
}
}
if (nNewCells == infoNews[iNew].cnt) {
if (childNotLeaf) {
// TODO
} else {
// TODO
}
}
}
}
for (int i = 0; i < nOlds; i++) {
tdbPageDestroy(pOldsCopy[i], NULL, NULL);
}
}
return 0;
} }
static int tdbBtreeBalance(SBtCursor *pCur) { static int tdbBtreeBalance(SBtCursor *pCur) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册