fix(tdb): subtract payload size with cell header size
This commit is contained in:
parent
de3e886188
commit
4a64803278
|
@ -1003,14 +1003,14 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const
|
|||
int nLeft = nPayload;
|
||||
int bytes;
|
||||
int lastPage = 0;
|
||||
if (nLocal >= kLen + 4) {
|
||||
if (nLocal >= nHeader + kLen + sizeof(SPgno)) {
|
||||
// pack key to local
|
||||
memcpy(pCell + nHeader, pKey, kLen);
|
||||
nLeft -= kLen;
|
||||
// pack partial val to local if any space left
|
||||
if (nLocal > kLen + 4) {
|
||||
memcpy(pCell + nHeader + kLen, pVal, nLocal - kLen - sizeof(SPgno));
|
||||
nLeft -= nLocal - kLen - sizeof(SPgno);
|
||||
if (nLocal > nHeader + kLen + sizeof(SPgno)) {
|
||||
memcpy(pCell + nHeader + kLen, pVal, nLocal - nHeader - kLen - sizeof(SPgno));
|
||||
nLeft -= nLocal - nHeader - kLen - sizeof(SPgno);
|
||||
}
|
||||
|
||||
// pack nextPgno
|
||||
|
@ -1150,9 +1150,7 @@ static int tdbBtreeEncodePayload(SPage *pPage, SCell *pCell, int nHeader, const
|
|||
// free local buffer
|
||||
tdbFree(pBuf);
|
||||
|
||||
*szPayload = nLocal;
|
||||
|
||||
// ASSERT(0);
|
||||
*szPayload = nLocal - nHeader;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -1246,10 +1244,10 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader,
|
|||
int bytes;
|
||||
int lastPage = 0;
|
||||
|
||||
if (nLocal >= pDecoder->kLen + 4) {
|
||||
if (nLocal >= pDecoder->kLen + nHeader + sizeof(SPgno)) {
|
||||
pDecoder->pKey = (SCell *)pCell + nHeader;
|
||||
nLeft -= kLen;
|
||||
if (nLocal > kLen + 4) {
|
||||
if (nLocal > kLen + nHeader + sizeof(SPgno)) {
|
||||
// read partial val to local
|
||||
pDecoder->pVal = tdbRealloc(pDecoder->pVal, vLen);
|
||||
if (pDecoder->pVal == NULL) {
|
||||
|
@ -1259,9 +1257,9 @@ static int tdbBtreeDecodePayload(SPage *pPage, const SCell *pCell, int nHeader,
|
|||
|
||||
tdbDebug("tdb btc decoder: %p/0x%x pVal: %p ", pDecoder, pDecoder->freeKV, pDecoder->pVal);
|
||||
|
||||
memcpy(pDecoder->pVal, pCell + nHeader + kLen, nLocal - kLen - sizeof(SPgno));
|
||||
memcpy(pDecoder->pVal, pCell + nHeader + kLen, nLocal - nHeader - kLen - sizeof(SPgno));
|
||||
|
||||
nLeft -= nLocal - kLen - sizeof(SPgno);
|
||||
nLeft -= nLocal - nHeader - kLen - sizeof(SPgno);
|
||||
}
|
||||
|
||||
memcpy(&pgno, pCell + nHeader + nPayload - nLeft, sizeof(pgno));
|
||||
|
@ -1474,7 +1472,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN *
|
|||
|
||||
int nPayload = kLen + vLen;
|
||||
if (nHeader + nPayload <= pPage->maxLocal) {
|
||||
return nHeader + kLen + vLen;
|
||||
return nHeader + nPayload;
|
||||
} else {
|
||||
int maxLocal = pPage->maxLocal;
|
||||
|
||||
|
@ -1486,7 +1484,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN *
|
|||
// free ofp pages' cells
|
||||
if (dropOfp) {
|
||||
int ret = 0;
|
||||
SPgno pgno = *(SPgno *)(pCell + nHeader + nLocal - sizeof(SPgno));
|
||||
SPgno pgno = *(SPgno *)(pCell + nLocal - sizeof(SPgno));
|
||||
int nLeft = nPayload - nLocal + sizeof(SPgno);
|
||||
SPage *ofp;
|
||||
int bytes;
|
||||
|
@ -1513,7 +1511,7 @@ static int tdbBtreeCellSize(const SPage *pPage, SCell *pCell, int dropOfp, TXN *
|
|||
}
|
||||
}
|
||||
|
||||
return nHeader + nLocal;
|
||||
return nLocal;
|
||||
}
|
||||
}
|
||||
// TDB_BTREE_CELL
|
||||
|
|
Loading…
Reference in New Issue