mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Refactor the sqlite3BtreeKey() and sqlite3BtreeData() internal interfaces
into sqlite3BtreePayload() and sqlite3BtreePayloadChecked(), respectively. This is a continuation of the optimization started by check-in [2d831074cf]. The result is a slightly smaller and faster binary. FossilOrigin-Name: 49ebc219faea30eaa61def4a3fba2817b9c58a86
This commit is contained in:
35
src/btree.c
35
src/btree.c
@@ -632,7 +632,7 @@ static int saveCursorKey(BtCursor *pCur){
|
||||
pCur->nKey = sqlite3BtreePayloadSize(pCur);
|
||||
pKey = sqlite3Malloc( pCur->nKey );
|
||||
if( pKey ){
|
||||
rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
|
||||
rc = sqlite3BtreePayload(pCur, 0, (int)pCur->nKey, pKey);
|
||||
if( rc==SQLITE_OK ){
|
||||
pCur->pKey = pKey;
|
||||
}else{
|
||||
@@ -4651,43 +4651,35 @@ static int accessPayload(
|
||||
}
|
||||
|
||||
/*
|
||||
** Read part of the key associated with cursor pCur. Exactly
|
||||
** "amt" bytes will be transferred into pBuf[]. The transfer
|
||||
** Read part of the payload for the row at which that cursor pCur is currently
|
||||
** pointing. "amt" bytes will be transferred into pBuf[]. The transfer
|
||||
** begins at "offset".
|
||||
**
|
||||
** The caller must ensure that pCur is pointing to a valid row
|
||||
** in the table.
|
||||
** pCur can be pointing to either a table or an index b-tree.
|
||||
** If pointing to a table btree, then the content section is read. If
|
||||
** pCur is pointing to an index b-tree then the key section is read.
|
||||
**
|
||||
** For sqlite3BtreePayload(), the caller must ensure that pCur is pointing
|
||||
** to a valid row in the table. For sqlite3BtreePayloadChecked(), the
|
||||
** cursor might be invalid or might need to be restored before being read.
|
||||
**
|
||||
** Return SQLITE_OK on success or an error code if anything goes
|
||||
** wrong. An error is returned if "offset+amt" is larger than
|
||||
** the available payload.
|
||||
*/
|
||||
int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
|
||||
int sqlite3BtreePayload(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
|
||||
assert( cursorHoldsMutex(pCur) );
|
||||
assert( pCur->eState==CURSOR_VALID );
|
||||
assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
|
||||
assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
|
||||
return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
** Read part of the data associated with cursor pCur. Exactly
|
||||
** "amt" bytes will be transfered into pBuf[]. The transfer
|
||||
** begins at "offset".
|
||||
**
|
||||
** Return SQLITE_OK on success or an error code if anything goes
|
||||
** wrong. An error is returned if "offset+amt" is larger than
|
||||
** the available payload.
|
||||
*/
|
||||
int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
|
||||
int rc;
|
||||
|
||||
#ifndef SQLITE_OMIT_INCRBLOB
|
||||
int sqlite3BtreePayloadChecked(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
|
||||
int rc;
|
||||
if ( pCur->eState==CURSOR_INVALID ){
|
||||
return SQLITE_ABORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
assert( cursorOwnsBtShared(pCur) );
|
||||
rc = restoreCursorPosition(pCur);
|
||||
if( rc==SQLITE_OK ){
|
||||
@@ -4698,6 +4690,7 @@ int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
#endif /* SQLITE_OMIT_INCRBLOB */
|
||||
|
||||
/*
|
||||
** Return a pointer to payload information from the entry that the
|
||||
|
Reference in New Issue
Block a user