TDB impl delete
This commit is contained in:
parent
bf355e705a
commit
d3487c88c2
|
@ -766,6 +766,13 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx, TXN *pTx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (TDB_BTREE_PAGE_IS_ROOT(pParent) && TDB_PAGE_TOTAL_CELLS(pParent) == 0) {
|
||||||
|
i8 flags = TDB_BTREE_ROOT | TDB_BTREE_PAGE_IS_LEAF(pNews[0]);
|
||||||
|
// copy content to the parent page
|
||||||
|
tdbBtreeInitPage(pParent, &(SBtreeInitPageArg){.flags = flags, .pBt = pBt}, 0);
|
||||||
|
tdbPageCopy(pNews[0], pParent);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++) {
|
for (int i = 0; i < 3; i++) {
|
||||||
if (pDivCell[i]) {
|
if (pDivCell[i]) {
|
||||||
tdbOsFree(pDivCell[i]);
|
tdbOsFree(pDivCell[i]);
|
||||||
|
@ -1454,9 +1461,14 @@ int tdbBtcDelete(SBTC *pBtc) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// delete the leaf page and do balance (TODO)
|
// delete the leaf page and do balance
|
||||||
ASSERT(TDB_PAGE_TOTAL_CELLS(pBtc->pPage) == 0);
|
ASSERT(TDB_PAGE_TOTAL_CELLS(pBtc->pPage) == 0);
|
||||||
ASSERT(0);
|
|
||||||
|
ret = tdbBtreeBalance(pBtc);
|
||||||
|
if (ret < 0) {
|
||||||
|
ASSERT(0);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -120,7 +120,7 @@ TEST(tdb_test, simple_test) {
|
||||||
TENV *pEnv;
|
TENV *pEnv;
|
||||||
TDB *pDb;
|
TDB *pDb;
|
||||||
tdb_cmpr_fn_t compFunc;
|
tdb_cmpr_fn_t compFunc;
|
||||||
int nData = 10000000;
|
int nData = 1000000;
|
||||||
TXN txn;
|
TXN txn;
|
||||||
|
|
||||||
taosRemoveDir("tdb");
|
taosRemoveDir("tdb");
|
||||||
|
@ -291,9 +291,9 @@ TEST(tdb_test, simple_test2) {
|
||||||
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
ret = tdbDbcNext(pDBC, &pKey, &kLen, &pVal, &vLen);
|
||||||
if (ret < 0) break;
|
if (ret < 0) break;
|
||||||
|
|
||||||
std::cout.write((char *)pKey, kLen) /* << " " << kLen */ << " ";
|
// std::cout.write((char *)pKey, kLen) /* << " " << kLen */ << " ";
|
||||||
std::cout.write((char *)pVal, vLen) /* << " " << vLen */;
|
// std::cout.write((char *)pVal, vLen) /* << " " << vLen */;
|
||||||
std::cout << std::endl;
|
// std::cout << std::endl;
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -333,15 +333,16 @@ TEST(tdb_test, simple_delete1) {
|
||||||
void *pKey = NULL;
|
void *pKey = NULL;
|
||||||
void *pData = NULL;
|
void *pData = NULL;
|
||||||
int nKey;
|
int nKey;
|
||||||
|
TDBC *pDbc;
|
||||||
int nData;
|
int nData;
|
||||||
int nKV = 254;
|
int nKV = 69;
|
||||||
|
|
||||||
taosRemoveDir("tdb");
|
taosRemoveDir("tdb");
|
||||||
|
|
||||||
pPool = openPool();
|
pPool = openPool();
|
||||||
|
|
||||||
// open env
|
// open env
|
||||||
ret = tdbEnvOpen("tdb", 4096, 256, &pEnv);
|
ret = tdbEnvOpen("tdb", 1024, 256, &pEnv);
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
// open database
|
// open database
|
||||||
|
@ -370,7 +371,7 @@ TEST(tdb_test, simple_delete1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// loop to delete some data
|
// loop to delete some data
|
||||||
for (int iData = nKV - 1; iData >= 0; iData--) {
|
for (int iData = nKV - 1; iData > 30; iData--) {
|
||||||
sprintf(key, "key%d", iData);
|
sprintf(key, "key%d", iData);
|
||||||
|
|
||||||
ret = tdbDbDelete(pDb, key, strlen(key), &txn);
|
ret = tdbDbDelete(pDb, key, strlen(key), &txn);
|
||||||
|
@ -378,6 +379,35 @@ TEST(tdb_test, simple_delete1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// query the data
|
// query the data
|
||||||
|
for (int iData = 0; iData < nKV; iData++) {
|
||||||
|
sprintf(key, "key%d", iData);
|
||||||
|
|
||||||
|
ret = tdbDbGet(pDb, key, strlen(key), &pData, &nData);
|
||||||
|
if (iData <= 30) {
|
||||||
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
} else {
|
||||||
|
GTEST_ASSERT_EQ(ret, -1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// loop to iterate the data
|
||||||
|
tdbDbcOpen(pDb, &pDbc, NULL);
|
||||||
|
|
||||||
|
ret = tdbDbcMoveToFirst(pDbc);
|
||||||
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
|
pKey = NULL;
|
||||||
|
pData = NULL;
|
||||||
|
for (;;) {
|
||||||
|
ret = tdbDbcNext(pDbc, &pKey, &nKey, &pData, &nData);
|
||||||
|
if (ret < 0) break;
|
||||||
|
|
||||||
|
std::cout.write((char *)pKey, nKey) /* << " " << kLen */ << " ";
|
||||||
|
std::cout.write((char *)pData, nData) /* << " " << vLen */;
|
||||||
|
std::cout << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
tdbDbcClose(pDbc);
|
||||||
|
|
||||||
tdbCommit(pEnv, &txn);
|
tdbCommit(pEnv, &txn);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue