mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-07 02:42:48 +03:00
Small size and performance in the OP_Column opcode.
FossilOrigin-Name: 2cf3f3de8a48465bd6b0af7763bfe905f3bb0151488f63c9ecc3147bcb345094
This commit is contained in:
16
src/vdbe.c
16
src/vdbe.c
@@ -2388,7 +2388,6 @@ case OP_Column: {
|
||||
const u8 *zEndHdr; /* Pointer to first byte after the header */
|
||||
u32 offset; /* Offset into the data */
|
||||
u64 offset64; /* 64-bit offset */
|
||||
u32 avail; /* Number of bytes of available data */
|
||||
u32 t; /* A type code from the record header */
|
||||
Mem *pReg; /* PseudoTable input register */
|
||||
|
||||
@@ -2419,7 +2418,7 @@ case OP_Column: {
|
||||
pReg = &aMem[pC->uc.pseudoTableReg];
|
||||
assert( pReg->flags & MEM_Blob );
|
||||
assert( memIsValid(pReg) );
|
||||
pC->payloadSize = pC->szRow = avail = pReg->n;
|
||||
pC->payloadSize = pC->szRow = pReg->n;
|
||||
pC->aRow = (u8*)pReg->z;
|
||||
}else{
|
||||
sqlite3VdbeMemSetNull(pDest);
|
||||
@@ -2431,14 +2430,11 @@ case OP_Column: {
|
||||
assert( pCrsr );
|
||||
assert( sqlite3BtreeCursorIsValid(pCrsr) );
|
||||
pC->payloadSize = sqlite3BtreePayloadSize(pCrsr);
|
||||
pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &avail);
|
||||
assert( avail<=65536 ); /* Maximum page size is 64KiB */
|
||||
if( pC->payloadSize <= (u32)avail ){
|
||||
pC->szRow = pC->payloadSize;
|
||||
}else if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
|
||||
pC->aRow = sqlite3BtreePayloadFetch(pCrsr, &pC->szRow);
|
||||
assert( pC->szRow<=pC->payloadSize );
|
||||
assert( pC->szRow<=65536 ); /* Maximum page size is 64KiB */
|
||||
if( pC->payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
|
||||
goto too_big;
|
||||
}else{
|
||||
pC->szRow = avail;
|
||||
}
|
||||
}
|
||||
pC->cacheStatus = p->cacheCtr;
|
||||
@@ -2447,7 +2443,7 @@ case OP_Column: {
|
||||
aOffset[0] = offset;
|
||||
|
||||
|
||||
if( avail<offset ){ /*OPTIMIZATION-IF-FALSE*/
|
||||
if( pC->szRow<offset ){ /*OPTIMIZATION-IF-FALSE*/
|
||||
/* pC->aRow does not have to hold the entire row, but it does at least
|
||||
** need to cover the header of the record. If pC->aRow does not contain
|
||||
** the complete header, then set it to zero, forcing the header to be
|
||||
|
Reference in New Issue
Block a user