more TDB
This commit is contained in:
parent
24e51adb53
commit
cebef7b2b3
|
@ -40,9 +40,11 @@ static int tdbBtCursorMoveToRoot(SBtCursor *pCur);
|
||||||
static int tdbInitBtPage(SPage *pPage, SBtPage **ppBtPage);
|
static int tdbInitBtPage(SPage *pPage, SBtPage **ppBtPage);
|
||||||
static int tdbCompareKeyAndCell(const void *pKey, int kLen, const void *pCell);
|
static int tdbCompareKeyAndCell(const void *pKey, int kLen, const void *pCell);
|
||||||
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);
|
||||||
|
|
||||||
int tdbBtreeOpen(SPgno rtPgno, int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, SBTree **ppBt) {
|
||||||
SBTree *pBt;
|
SBTree *pBt;
|
||||||
|
int ret;
|
||||||
|
|
||||||
*ppBt = NULL;
|
*ppBt = NULL;
|
||||||
|
|
||||||
|
@ -51,8 +53,6 @@ int tdbBtreeOpen(SPgno rtPgno, int keyLen, int valLen, SPager *pPager, FKeyCompa
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pBt->root
|
|
||||||
pBt->root = rtPgno;
|
|
||||||
// pBt->keyLen
|
// pBt->keyLen
|
||||||
pBt->keyLen = keyLen;
|
pBt->keyLen = keyLen;
|
||||||
// pBt->valLen
|
// pBt->valLen
|
||||||
|
@ -79,6 +79,13 @@ int tdbBtreeOpen(SPgno rtPgno, int keyLen, int valLen, SPager *pPager, FKeyCompa
|
||||||
// pBt->minLeaf
|
// pBt->minLeaf
|
||||||
pBt->minLeaf = pBt->minLocal;
|
pBt->minLeaf = pBt->minLocal;
|
||||||
|
|
||||||
|
// TODO: pBt->root
|
||||||
|
ret = tdbBtreeOpenImpl(pBt);
|
||||||
|
if (ret < 0) {
|
||||||
|
free(pBt);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
*ppBt = pBt;
|
*ppBt = pBt;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -269,3 +276,32 @@ static int tdbDefaultKeyCmprFn(const void *pKey1, int keyLen1, const void *pKey2
|
||||||
}
|
}
|
||||||
return cret;
|
return cret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tdbBtreeOpenImpl(SBTree *pBt) {
|
||||||
|
// Try to get the root page of the an existing btree
|
||||||
|
|
||||||
|
SPgno pgno;
|
||||||
|
SPage *pPage;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
{
|
||||||
|
// TODO: Search the main DB to check if the DB exists
|
||||||
|
pgno = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pgno != 0) {
|
||||||
|
pBt->root = pgno;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to create a new database
|
||||||
|
ret = tdbPagerNewPage(pBt->pPager, &pgno, &pPage);
|
||||||
|
if (ret < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
ASSERT(pgno != 0);
|
||||||
|
pBt->root = pgno;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -50,7 +50,7 @@ int tdbDbOpen(const char *fname, int keyLen, int valLen, FKeyComparator keyCmprF
|
||||||
ASSERT(pPager != NULL);
|
ASSERT(pPager != NULL);
|
||||||
|
|
||||||
// pDb->pBt
|
// pDb->pBt
|
||||||
ret = tdbBtreeOpen(pgno, keyLen, valLen, pPager, keyCmprFn, &(pDb->pBt));
|
ret = tdbBtreeOpen(keyLen, valLen, pPager, keyCmprFn, &(pDb->pBt));
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,24 +187,6 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// int tdbPagerAllocPage(SPager *pPager, SPage **ppPage, SPgno *ppgno) {
|
|
||||||
// SPage *pPage;
|
|
||||||
// SPgno pgno;
|
|
||||||
|
|
||||||
// if (1 /*TODO: no free page*/) {
|
|
||||||
// pgno = ++pPager->dbFileSize;
|
|
||||||
// pPage = tdbPagerGet(pPager, pgno, false);
|
|
||||||
// ASSERT(pPage != NULL);
|
|
||||||
// } else {
|
|
||||||
// /* TODO: allocate from the free list */
|
|
||||||
// ASSERT(0);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// *ppPage = pPage;
|
|
||||||
// *ppgno = pgno;
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
int tdbPagerBegin(SPager *pPager) {
|
int tdbPagerBegin(SPager *pPager) {
|
||||||
if (pPager->inTran) {
|
if (pPager->inTran) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -34,7 +34,7 @@ struct SBtCursor {
|
||||||
void * pBuf;
|
void * pBuf;
|
||||||
};
|
};
|
||||||
|
|
||||||
int tdbBtreeOpen(SPgno rtPgno, int keyLen, int valLen, SPager *pFile, FKeyComparator kcmpr, SBTree **ppBt);
|
int tdbBtreeOpen(int keyLen, int valLen, SPager *pFile, FKeyComparator kcmpr, SBTree **ppBt);
|
||||||
int tdbBtreeClose(SBTree *pBt);
|
int tdbBtreeClose(SBTree *pBt);
|
||||||
int tdbBtreeCursor(SBtCursor *pCur, SBTree *pBt);
|
int tdbBtreeCursor(SBtCursor *pCur, SBTree *pBt);
|
||||||
int tdbBtCursorInsert(SBtCursor *pCur, const void *pKey, int kLen, const void *pVal, int vLen);
|
int tdbBtCursorInsert(SBtCursor *pCur, const void *pKey, int kLen, const void *pVal, int vLen);
|
||||||
|
|
|
@ -28,6 +28,8 @@ int tdbPagerWrite(SPager *pPager, SPage *pPage);
|
||||||
int tdbPagerBegin(SPager *pPager);
|
int tdbPagerBegin(SPager *pPager);
|
||||||
int tdbPagerCommit(SPager *pPager);
|
int tdbPagerCommit(SPager *pPager);
|
||||||
int tdbPagerGetPageSize(SPager *pPager);
|
int tdbPagerGetPageSize(SPager *pPager);
|
||||||
|
int tdbPagerFetchPage(SPager *pPager, SPgno pgno, SPage **ppPage);
|
||||||
|
int tdbPagerNewPage(SPager *pPager, SPgno *ppgno, SPage **ppPage);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue