refact encode cell
This commit is contained in:
parent
263c7802e2
commit
247ff626a8
|
@ -93,9 +93,9 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, S
|
||||||
}
|
}
|
||||||
|
|
||||||
// pBt->keyLen
|
// pBt->keyLen
|
||||||
pBt->keyLen = keyLen;
|
pBt->keyLen = keyLen < 0 ? TDB_VARIANT_LEN : keyLen;
|
||||||
// pBt->valLen
|
// pBt->valLen
|
||||||
pBt->valLen = valLen;
|
pBt->valLen = valLen < 0 ? TDB_VARIANT_LEN : valLen;
|
||||||
// pBt->pPager
|
// pBt->pPager
|
||||||
pBt->pPager = pPager;
|
pBt->pPager = pPager;
|
||||||
// pBt->kcmpr
|
// pBt->kcmpr
|
||||||
|
@ -890,22 +890,16 @@ static int tdbBtreeBalance(SBTC *pBtc) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TDB_BTREE_CELL =====================
|
// TDB_BTREE_CELL =====================
|
||||||
static int tdbBtreeEncodePayload(SPage *pPage, u8 *pPayload, const void *pKey, int kLen, const void *pVal, int vLen,
|
static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const void *pKey, int kLen, const void *pVal,
|
||||||
int *szPayload) {
|
int vLen, int *szPayload) {
|
||||||
int nPayload;
|
int nPayload;
|
||||||
|
|
||||||
ASSERT(pKey != NULL);
|
|
||||||
|
|
||||||
if (pVal == NULL) {
|
|
||||||
vLen = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
nPayload = kLen + vLen;
|
nPayload = kLen + vLen;
|
||||||
if (nPayload <= pPage->maxLocal) {
|
if (nPayload + nHeader <= pPage->maxLocal) {
|
||||||
// General case without overflow
|
// no overflow page is needed
|
||||||
memcpy(pPayload, pKey, kLen);
|
memcpy(pCell + nHeader, pKey, kLen);
|
||||||
if (pVal) {
|
if (pVal) {
|
||||||
memcpy(pPayload + kLen, pVal, vLen);
|
memcpy(pCell + nHeader + kLen, pVal, vLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
*szPayload = nPayload;
|
*szPayload = nPayload;
|
||||||
|
@ -929,6 +923,7 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo
|
||||||
|
|
||||||
ASSERT(pPage->kLen == TDB_VARIANT_LEN || pPage->kLen == kLen);
|
ASSERT(pPage->kLen == TDB_VARIANT_LEN || pPage->kLen == kLen);
|
||||||
ASSERT(pPage->vLen == TDB_VARIANT_LEN || pPage->vLen == vLen);
|
ASSERT(pPage->vLen == TDB_VARIANT_LEN || pPage->vLen == vLen);
|
||||||
|
ASSERT(pKey != NULL && kLen > 0);
|
||||||
|
|
||||||
nPayload = 0;
|
nPayload = 0;
|
||||||
nHeader = 0;
|
nHeader = 0;
|
||||||
|
@ -954,14 +949,16 @@ static int tdbBtreeEncodeCell(SPage *pPage, const void *pKey, int kLen, const vo
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Encode payload part
|
// 2. Encode payload part
|
||||||
if (leaf && vLen > 0) {
|
if ((!leaf) || pPage->vLen == 0) {
|
||||||
ret = tdbBtreeEncodePayload(pPage, pCell + nHeader, pKey, kLen, pVal, vLen, &nPayload);
|
pVal = NULL;
|
||||||
} else {
|
vLen = 0;
|
||||||
ret = tdbBtreeEncodePayload(pPage, pCell + nHeader, pKey, kLen, NULL, 0, &nPayload);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = tdbBtreeEncodePayload(pPage, pCell, nHeader, pKey, kLen, pVal, vLen, &nPayload);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
// TODO: handle error
|
// TODO
|
||||||
return -1;
|
ASSERT(0);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
*szCell = nHeader + nPayload;
|
*szCell = nHeader + nPayload;
|
||||||
|
|
Loading…
Reference in New Issue