aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2011-08-29 02:16:18 +0000
committerdrh <drh@noemail.net>2011-08-29 02:16:18 +0000
commit5a077b741fbec498718c79f655c84d1e511949ad (patch)
tree30c5eb65f767137b3e3b60aa63e1aea9db071d8e /src
parente6f43fc4f88b2d640227ea65b11dcb7d149bc50d (diff)
downloadsqlite-5a077b741fbec498718c79f655c84d1e511949ad.tar.gz
sqlite-5a077b741fbec498718c79f655c84d1e511949ad.zip
Small performance improvement to OP_Column.
FossilOrigin-Name: b6b73a747ad8d0f026074e41c2a4adc529ec2674
Diffstat (limited to 'src')
-rw-r--r--src/vdbe.c11
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 */