提交 d7a8b093 编写于 作者: H Hongze Cheng 提交者: cpwu

refact encode cell

上级 fa98cc76
...@@ -93,9 +93,9 @@ int tdbBtreeOpen(int keyLen, int valLen, SPager *pPager, FKeyComparator kcmpr, S ...@@ -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) { ...@@ -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 ...@@ -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 ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册