refact and more
This commit is contained in:
parent
db2c31cfc4
commit
7795706506
|
@ -8,6 +8,7 @@ target_sources(tdb
|
||||||
"src/db/tdbBtree.c"
|
"src/db/tdbBtree.c"
|
||||||
"src/db/tdbDb.c"
|
"src/db/tdbDb.c"
|
||||||
"src/db/tdbEnv.c"
|
"src/db/tdbEnv.c"
|
||||||
|
"src/db/tdbTxn.c"
|
||||||
"src/page/tdbPage.c"
|
"src/page/tdbPage.c"
|
||||||
"src/page/tdbPageL.c"
|
"src/page/tdbPageL.c"
|
||||||
)
|
)
|
||||||
|
|
|
@ -67,7 +67,7 @@ typedef struct {
|
||||||
u8 *pTmpSpace;
|
u8 *pTmpSpace;
|
||||||
} SCellDecoder;
|
} SCellDecoder;
|
||||||
|
|
||||||
static int tdbBtCursorMoveTo(SBTC *pCur, const void *pKey, int kLen, int *pCRst);
|
static int tdbBtCursorMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst);
|
||||||
static int tdbDefaultKeyCmprFn(const void *pKey1, int keyLen1, const void *pKey2, int keyLen2);
|
static int tdbDefaultKeyCmprFn(const void *pKey1, int keyLen1, const void *pKey2, int keyLen2);
|
||||||
static int tdbBtreeOpenImpl(SBTree *pBt);
|
static int tdbBtreeOpenImpl(SBTree *pBt);
|
||||||
static int tdbBtreeZeroPage(SPage *pPage, void *arg);
|
static int tdbBtreeZeroPage(SPage *pPage, void *arg);
|
||||||
|
@ -75,10 +75,10 @@ static int tdbBtreeInitPage(SPage *pPage, void *arg);
|
||||||
static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const void *pVal, int vLen, SCell *pCell,
|
static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const void *pVal, int vLen, SCell *pCell,
|
||||||
int *szCell);
|
int *szCell);
|
||||||
static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pDecoder);
|
static int tdbBtreeDecodeCell(SPage *pPage, const SCell *pCell, SCellDecoder *pDecoder);
|
||||||
static int tdbBtreeBalance(SBTC *pCur);
|
static int tdbBtreeBalance(SBTC *pBtc);
|
||||||
static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell);
|
static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell);
|
||||||
static int tdbBtcMoveToNext(SBTC *pBtc);
|
static int tdbBtcMoveToNext(SBTC *pBtc);
|
||||||
static int tdbBtcMoveDownward(SBTC *pCur, SPgno pgno);
|
static int tdbBtcMoveDownward(SBTC *pBtc, SPgno pgno);
|
||||||
static int tdbBtcMoveUpward(SBTC *pBtc);
|
static int tdbBtcMoveUpward(SBTC *pBtc);
|
||||||
|
|
||||||
int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
||||||
|
@ -134,7 +134,7 @@ int tdbBtreeClose(SBTree *pBt) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int tdbBtCursorInsert(SBTC *pCur, const void *pKey, int kLen, const void *pVal, int vLen) {
|
int tdbBtCursorInsert(SBTC *pBtc, const void *pKey, int kLen, const void *pVal, int vLen) {
|
||||||
int ret;
|
int ret;
|
||||||
int idx;
|
int idx;
|
||||||
SPager *pPager;
|
SPager *pPager;
|
||||||
|
@ -143,20 +143,20 @@ int tdbBtCursorInsert(SBTC *pCur, const void *pKey, int kLen, const void *pVal,
|
||||||
int cret;
|
int cret;
|
||||||
SBTree *pBt;
|
SBTree *pBt;
|
||||||
|
|
||||||
ret = tdbBtCursorMoveTo(pCur, pKey, kLen, &cret);
|
ret = tdbBtCursorMoveTo(pBtc, pKey, kLen, &cret);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
// TODO: handle error
|
// TODO: handle error
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pCur->idx == -1) {
|
if (pBtc->idx == -1) {
|
||||||
ASSERT(TDB_PAGE_TOTAL_CELLS(pCur->pPage) == 0);
|
ASSERT(TDB_PAGE_TOTAL_CELLS(pBtc->pPage) == 0);
|
||||||
idx = 0;
|
idx = 0;
|
||||||
} else {
|
} else {
|
||||||
if (cret > 0) {
|
if (cret > 0) {
|
||||||
idx = pCur->idx + 1;
|
idx = pBtc->idx + 1;
|
||||||
} else if (cret < 0) {
|
} else if (cret < 0) {
|
||||||
idx = pCur->idx;
|
idx = pBtc->idx;
|
||||||
} else {
|
} else {
|
||||||
/* TODO */
|
/* TODO */
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
|
@ -164,7 +164,7 @@ int tdbBtCursorInsert(SBTC *pCur, const void *pKey, int kLen, const void *pVal,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: refact code here
|
// TODO: refact code here
|
||||||
pBt = pCur->pBt;
|
pBt = pBtc->pBt;
|
||||||
if (!pBt->pTmp) {
|
if (!pBt->pTmp) {
|
||||||
pBt->pTmp = (u8 *)malloc(pBt->pageSize);
|
pBt->pTmp = (u8 *)malloc(pBt->pageSize);
|
||||||
if (pBt->pTmp == NULL) {
|
if (pBt->pTmp == NULL) {
|
||||||
|
@ -175,20 +175,20 @@ int tdbBtCursorInsert(SBTC *pCur, const void *pKey, int kLen, const void *pVal,
|
||||||
pCell = pBt->pTmp;
|
pCell = pBt->pTmp;
|
||||||
|
|
||||||
// Encode the cell
|
// Encode the cell
|
||||||
ret = tdbBtreeEncodeCell(pCur->pPage, pKey, kLen, pVal, vLen, pCell, &szCell);
|
ret = tdbBtreeEncodeCell(pBtc->pPage, pKey, kLen, pVal, vLen, pCell, &szCell);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert the cell to the index
|
// Insert the cell to the index
|
||||||
ret = tdbPageInsertCell(pCur->pPage, idx, pCell, szCell, 0);
|
ret = tdbPageInsertCell(pBtc->pPage, idx, pCell, szCell, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If page is overflow, balance the tree
|
// If page is overflow, balance the tree
|
||||||
if (pCur->pPage->nOverflow > 0) {
|
if (pBtc->pPage->nOverflow > 0) {
|
||||||
ret = tdbBtreeBalance(pCur);
|
ret = tdbBtreeBalance(pBtc);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -226,30 +226,30 @@ int tdbBtreeGet(SBTree *pBt, const void *pKey, int kLen, void **ppVal, int *vLen
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbBtCursorMoveTo(SBTC *pCur, const void *pKey, int kLen, int *pCRst) {
|
static int tdbBtCursorMoveTo(SBTC *pBtc, const void *pKey, int kLen, int *pCRst) {
|
||||||
int ret;
|
int ret;
|
||||||
SBTree *pBt;
|
SBTree *pBt;
|
||||||
SPager *pPager;
|
SPager *pPager;
|
||||||
|
|
||||||
pBt = pCur->pBt;
|
pBt = pBtc->pBt;
|
||||||
pPager = pBt->pPager;
|
pPager = pBt->pPager;
|
||||||
|
|
||||||
if (pCur->iPage < 0) {
|
if (pBtc->iPage < 0) {
|
||||||
ASSERT(pCur->iPage == -1);
|
ASSERT(pBtc->iPage == -1);
|
||||||
ASSERT(pCur->idx == -1);
|
ASSERT(pBtc->idx == -1);
|
||||||
|
|
||||||
// Move from the root
|
// Move from the root
|
||||||
ret = tdbPagerFetchPage(pPager, pBt->root, &(pCur->pPage), tdbBtreeInitPage, pBt);
|
ret = tdbPagerFetchPage(pPager, pBt->root, &(pBtc->pPage), tdbBtreeInitPage, pBt);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCur->iPage = 0;
|
pBtc->iPage = 0;
|
||||||
|
|
||||||
if (TDB_PAGE_TOTAL_CELLS(pCur->pPage) == 0) {
|
if (TDB_PAGE_TOTAL_CELLS(pBtc->pPage) == 0) {
|
||||||
// Current page is empty
|
// Current page is empty
|
||||||
// ASSERT(TDB_FLAG_IS(TDB_PAGE_FLAGS(pCur->pPage), TDB_BTREE_ROOT | TDB_BTREE_LEAF));
|
// ASSERT(TDB_FLAG_IS(TDB_PAGE_FLAGS(pBtc->pPage), TDB_BTREE_ROOT | TDB_BTREE_LEAF));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -259,7 +259,7 @@ static int tdbBtCursorMoveTo(SBTC *pCur, const void *pKey, int kLen, int *pCRst)
|
||||||
SPage *pPage;
|
SPage *pPage;
|
||||||
SCellDecoder cd = {0};
|
SCellDecoder cd = {0};
|
||||||
|
|
||||||
pPage = pCur->pPage;
|
pPage = pBtc->pPage;
|
||||||
nCells = TDB_PAGE_TOTAL_CELLS(pPage);
|
nCells = TDB_PAGE_TOTAL_CELLS(pPage);
|
||||||
lidx = 0;
|
lidx = 0;
|
||||||
ridx = nCells - 1;
|
ridx = nCells - 1;
|
||||||
|
@ -297,22 +297,22 @@ static int tdbBtCursorMoveTo(SBTC *pCur, const void *pKey, int kLen, int *pCRst)
|
||||||
u8 flags = TDB_BTREE_PAGE_GET_FLAGS(pPage);
|
u8 flags = TDB_BTREE_PAGE_GET_FLAGS(pPage);
|
||||||
u8 leaf = TDB_BTREE_PAGE_IS_LEAF(flags);
|
u8 leaf = TDB_BTREE_PAGE_IS_LEAF(flags);
|
||||||
if (leaf) {
|
if (leaf) {
|
||||||
pCur->idx = midx;
|
pBtc->idx = midx;
|
||||||
*pCRst = c;
|
*pCRst = c;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
if (c <= 0) {
|
if (c <= 0) {
|
||||||
pCur->idx = midx;
|
pBtc->idx = midx;
|
||||||
tdbBtcMoveDownward(pCur, cd.pgno);
|
tdbBtcMoveDownward(pBtc, cd.pgno);
|
||||||
} else {
|
} else {
|
||||||
pCur->idx = midx + 1;
|
pBtc->idx = midx + 1;
|
||||||
if (midx == nCells - 1) {
|
if (midx == nCells - 1) {
|
||||||
/* Move to right-most child */
|
/* Move to right-most child */
|
||||||
tdbBtcMoveDownward(pCur, ((SIntHdr *)pCur->pPage->pData)->pgno);
|
tdbBtcMoveDownward(pBtc, ((SIntHdr *)pBtc->pPage->pData)->pgno);
|
||||||
} else {
|
} else {
|
||||||
pCell = tdbPageGetCell(pPage, pCur->idx);
|
pCell = tdbPageGetCell(pPage, pBtc->idx);
|
||||||
tdbBtreeDecodeCell(pPage, pCell, &cd);
|
tdbBtreeDecodeCell(pPage, pCell, &cd);
|
||||||
tdbBtcMoveDownward(pCur, cd.pgno);
|
tdbBtcMoveDownward(pBtc, cd.pgno);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -805,7 +805,7 @@ static int tdbBtreeBalanceNonRoot(SBTree *pBt, SPage *pParent, int idx) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbBtreeBalance(SBTC *pCur) {
|
static int tdbBtreeBalance(SBTC *pBtc) {
|
||||||
int iPage;
|
int iPage;
|
||||||
SPage *pParent;
|
SPage *pParent;
|
||||||
SPage *pPage;
|
SPage *pPage;
|
||||||
|
@ -816,8 +816,8 @@ static int tdbBtreeBalance(SBTC *pCur) {
|
||||||
|
|
||||||
// Main loop to balance the BTree
|
// Main loop to balance the BTree
|
||||||
for (;;) {
|
for (;;) {
|
||||||
iPage = pCur->iPage;
|
iPage = pBtc->iPage;
|
||||||
pPage = pCur->pPage;
|
pPage = pBtc->pPage;
|
||||||
flags = TDB_BTREE_PAGE_GET_FLAGS(pPage);
|
flags = TDB_BTREE_PAGE_GET_FLAGS(pPage);
|
||||||
leaf = TDB_BTREE_PAGE_IS_LEAF(flags);
|
leaf = TDB_BTREE_PAGE_IS_LEAF(flags);
|
||||||
root = TDB_BTREE_PAGE_IS_ROOT(flags);
|
root = TDB_BTREE_PAGE_IS_ROOT(flags);
|
||||||
|
@ -833,27 +833,27 @@ static int tdbBtreeBalance(SBTC *pCur) {
|
||||||
// ignore the case of empty
|
// ignore the case of empty
|
||||||
if (pPage->nOverflow == 0) break;
|
if (pPage->nOverflow == 0) break;
|
||||||
|
|
||||||
ret = tdbBtreeBalanceDeeper(pCur->pBt, pPage, &(pCur->pgStack[1]));
|
ret = tdbBtreeBalanceDeeper(pBtc->pBt, pPage, &(pBtc->pgStack[1]));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCur->idx = 0;
|
pBtc->idx = 0;
|
||||||
pCur->idxStack[0] = 0;
|
pBtc->idxStack[0] = 0;
|
||||||
pCur->pgStack[0] = pCur->pPage;
|
pBtc->pgStack[0] = pBtc->pPage;
|
||||||
pCur->iPage = 1;
|
pBtc->iPage = 1;
|
||||||
pCur->pPage = pCur->pgStack[1];
|
pBtc->pPage = pBtc->pgStack[1];
|
||||||
} else {
|
} else {
|
||||||
// Generalized balance step
|
// Generalized balance step
|
||||||
pParent = pCur->pgStack[iPage - 1];
|
pParent = pBtc->pgStack[iPage - 1];
|
||||||
|
|
||||||
ret = tdbBtreeBalanceNonRoot(pCur->pBt, pParent, pCur->idxStack[pCur->iPage - 1]);
|
ret = tdbBtreeBalanceNonRoot(pBtc->pBt, pParent, pBtc->idxStack[pBtc->iPage - 1]);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
pCur->iPage--;
|
pBtc->iPage--;
|
||||||
pCur->pPage = pCur->pgStack[pCur->iPage];
|
pBtc->pPage = pBtc->pgStack[pBtc->iPage];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1050,11 +1050,11 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int tdbBtcOpen(SBTC *pCur, SBTree *pBt) {
|
int tdbBtcOpen(SBTC *pBtc, SBTree *pBt) {
|
||||||
pCur->pBt = pBt;
|
pBtc->pBt = pBt;
|
||||||
pCur->iPage = -1;
|
pBtc->iPage = -1;
|
||||||
pCur->pPage = NULL;
|
pBtc->pPage = NULL;
|
||||||
pCur->idx = -1;
|
pBtc->idx = -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1262,16 +1262,16 @@ int tdbBtcClose(SBTC *pBtc) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int tdbBtcMoveDownward(SBTC *pCur, SPgno pgno) {
|
static int tdbBtcMoveDownward(SBTC *pBtc, SPgno pgno) {
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
pCur->pgStack[pCur->iPage] = pCur->pPage;
|
pBtc->pgStack[pBtc->iPage] = pBtc->pPage;
|
||||||
pCur->idxStack[pCur->iPage] = pCur->idx;
|
pBtc->idxStack[pBtc->iPage] = pBtc->idx;
|
||||||
pCur->iPage++;
|
pBtc->iPage++;
|
||||||
pCur->pPage = NULL;
|
pBtc->pPage = NULL;
|
||||||
pCur->idx = -1;
|
pBtc->idx = -1;
|
||||||
|
|
||||||
ret = tdbPagerFetchPage(pCur->pBt->pPager, pgno, &pCur->pPage, tdbBtreeInitPage, pCur->pBt);
|
ret = tdbPagerFetchPage(pBtc->pBt->pPager, pgno, &pBtc->pPage, tdbBtreeInitPage, pBtc->pBt);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
ASSERT(0);
|
ASSERT(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tdbInt.h"
|
||||||
|
|
||||||
|
int tdbTxnBegin(STEnv *pEnv) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tdbTxnCommit(STEnv *pEnv) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int tdbTxnRollback(STEnv *pEnv) {
|
||||||
|
// TODO
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -162,6 +162,8 @@ typedef struct SPage SPage;
|
||||||
|
|
||||||
#include "tdbPage.h"
|
#include "tdbPage.h"
|
||||||
|
|
||||||
|
#include "tdbTxn.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TDB_TXN_H_
|
||||||
|
#define _TDB_TXN_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct STxn STXN;
|
||||||
|
|
||||||
|
struct STxn {
|
||||||
|
u64 txnId;
|
||||||
|
void *(*xMalloc)(void *, int);
|
||||||
|
void *xArg;
|
||||||
|
};
|
||||||
|
|
||||||
|
int tdbTxnBegin(STEnv *pEnv);
|
||||||
|
int tdbTxnCommit(STEnv *pEnv);
|
||||||
|
int tdbTxnRollback(STEnv *pEnv);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /*_TDB_TXN_H_*/
|
|
@ -39,6 +39,8 @@ static void closePool(SPoolMem *pPool) {
|
||||||
free(pPool);
|
free(pPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define clearPool closePool
|
||||||
|
|
||||||
static void *poolMalloc(void *arg, int size) {
|
static void *poolMalloc(void *arg, int size) {
|
||||||
void *ptr = NULL;
|
void *ptr = NULL;
|
||||||
SPoolMem *pPool = (SPoolMem *)arg;
|
SPoolMem *pPool = (SPoolMem *)arg;
|
||||||
|
@ -116,7 +118,7 @@ TEST(tdb_test, simple_test) {
|
||||||
STEnv *pEnv;
|
STEnv *pEnv;
|
||||||
STDB *pDb;
|
STDB *pDb;
|
||||||
FKeyComparator compFunc;
|
FKeyComparator compFunc;
|
||||||
int nData = 10000000;
|
int nData = 1000000;
|
||||||
|
|
||||||
// Open Env
|
// Open Env
|
||||||
ret = tdbEnvOpen("tdb", 4096, 256000, &pEnv);
|
ret = tdbEnvOpen("tdb", 4096, 256000, &pEnv);
|
||||||
|
@ -132,13 +134,34 @@ TEST(tdb_test, simple_test) {
|
||||||
char val[64];
|
char val[64];
|
||||||
|
|
||||||
{ // Insert some data
|
{ // Insert some data
|
||||||
|
int i = 1;
|
||||||
|
SPoolMem *pPool;
|
||||||
|
int memPoolCapacity = 16 * 1024;
|
||||||
|
|
||||||
|
pPool = openPool();
|
||||||
|
|
||||||
|
tdbTxnBegin(pEnv);
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
if (i > nData) break;
|
||||||
|
|
||||||
for (int i = 1; i <= nData; i++) {
|
|
||||||
sprintf(key, "key%d", i);
|
sprintf(key, "key%d", i);
|
||||||
sprintf(val, "value%d", i);
|
sprintf(val, "value%d", i);
|
||||||
ret = tdbDbInsert(pDb, key, strlen(key), val, strlen(val));
|
ret = tdbDbInsert(pDb, key, strlen(key), val, strlen(val));
|
||||||
GTEST_ASSERT_EQ(ret, 0);
|
GTEST_ASSERT_EQ(ret, 0);
|
||||||
|
|
||||||
|
if (pPool->size >= memPoolCapacity) {
|
||||||
|
tdbTxnCommit(pEnv);
|
||||||
|
|
||||||
|
clearPool(pPool);
|
||||||
|
|
||||||
|
tdbTxnBegin(pEnv);
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
closePool(pPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // Query the data
|
{ // Query the data
|
||||||
|
|
Loading…
Reference in New Issue