fix a TDB balance bug
This commit is contained in:
parent
6888971563
commit
bf355e705a
|
@ -582,14 +582,14 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
|
||||||
SCell *pCell;
|
SCell *pCell;
|
||||||
int szLCell, szRCell;
|
int szLCell, szRCell;
|
||||||
|
|
||||||
|
// balance page (iNew) and (iNew-1)
|
||||||
for (;;) {
|
for (;;) {
|
||||||
pCell = tdbPageGetCell(pOlds[infoNews[iNew - 1].iPage], infoNews[iNew - 1].oIdx);
|
pCell = tdbPageGetCell(pOlds[infoNews[iNew - 1].iPage], infoNews[iNew - 1].oIdx);
|
||||||
|
|
||||||
if (childNotLeaf) {
|
|
||||||
szLCell = szRCell = tdbBtreeCellSize(pOlds[infoNews[iNew - 1].iPage], pCell);
|
|
||||||
} else {
|
|
||||||
szLCell = tdbBtreeCellSize(pOlds[infoNews[iNew - 1].iPage], pCell);
|
szLCell = tdbBtreeCellSize(pOlds[infoNews[iNew - 1].iPage], pCell);
|
||||||
|
if (!childNotLeaf) {
|
||||||
|
szRCell = szLCell;
|
||||||
|
} else {
|
||||||
int iPage = infoNews[iNew - 1].iPage;
|
int iPage = infoNews[iNew - 1].iPage;
|
||||||
int oIdx = infoNews[iNew - 1].oIdx + 1;
|
int oIdx = infoNews[iNew - 1].oIdx + 1;
|
||||||
SPage *pPage;
|
SPage *pPage;
|
||||||
|
|
|
@ -202,6 +202,8 @@ TEST(tdb_test, simple_test) {
|
||||||
ret = tdbDbcOpen(pDb, &pDBC, NULL);
|
ret = tdbDbcOpen(pDb, &pDBC, NULL);
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
|
tdbDbcMoveToFirst(pDBC);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
||||||
if (ret < 0) break;
|
if (ret < 0) break;
|
||||||
|
@ -283,6 +285,8 @@ TEST(tdb_test, simple_test2) {
|
||||||
ret = tdbDbcOpen(pDb, &pDBC, NULL);
|
ret = tdbDbcOpen(pDb, &pDBC, NULL);
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
|
tdbDbcMoveToFirst(pDBC);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
||||||
if (ret < 0) break;
|
if (ret < 0) break;
|
||||||
|
@ -341,7 +345,7 @@ TEST(tdb_test, simple_delete1) {
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
// open database
|
// open database
|
||||||
ret = tdbDbOpen("db.db", -1, -1, NULL, pEnv, &pDb);
|
ret = tdbDbOpen("db.db", -1, -1, tKeyCmpr, pEnv, &pDb);
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
tdbTxnOpen(&txn, 0, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED);
|
tdbTxnOpen(&txn, 0, poolMalloc, poolFree, pPool, TDB_TXN_WRITE | TDB_TXN_READ_UNCOMMITTED);
|
||||||
|
|
Loading…
Reference in New Issue