diff options
author | drh <drh@noemail.net> | 2011-08-29 02:16:18 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2011-08-29 02:16:18 +0000 |
commit | 5a077b741fbec498718c79f655c84d1e511949ad (patch) | |
tree | 30c5eb65f767137b3e3b60aa63e1aea9db071d8e /src | |
parent | e6f43fc4f88b2d640227ea65b11dcb7d149bc50d (diff) | |
download | sqlite-5a077b741fbec498718c79f655c84d1e511949ad.tar.gz sqlite-5a077b741fbec498718c79f655c84d1e511949ad.zip |
Small performance improvement to OP_Column.
FossilOrigin-Name: b6b73a747ad8d0f026074e41c2a4adc529ec2674
Diffstat (limited to 'src')
-rw-r--r-- | src/vdbe.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/vdbe.c b/src/vdbe.c index 891071ee7..643f4b480 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -2118,6 +2118,7 @@ case OP_Column: { u32 szField; /* Number of bytes in the content of a field */ int szHdr; /* Size of the header size field at start of record */ int avail; /* Number of bytes of available data */ + u32 t; /* A type code from the record header */ Mem *pReg; /* PseudoTable input register */ @@ -2295,8 +2296,14 @@ case OP_Column: { for(i=0; i<nField; i++){ if( zIdx<zEndHdr ){ aOffset[i] = offset; - zIdx += getVarint32(zIdx, aType[i]); - szField = sqlite3VdbeSerialTypeLen(aType[i]); + if( zIdx[0]<0x80 ){ + t = zIdx[0]; + zIdx++; + }else{ + zIdx += sqlite3GetVarint32(zIdx, &t); + } + aType[i] = t; + szField = sqlite3VdbeSerialTypeLen(t); offset += szField; if( offset<szField ){ /* True if offset overflows */ zIdx = &zEndHdr[1]; /* Forces SQLITE_CORRUPT return below */ |