Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | About a 3% improvement in the performance of OP_Column. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | experimental |
Files: | files | file ages | folders |
SHA1: |
edff9d4a995095e555fcc9aec4c56f4b |
User & Date: | drh 2011-08-28 02:15:34.550 |
Context
2011-08-29
| ||
02:16 | Small performance improvement to OP_Column. (check-in: b6b73a747a user: drh tags: experimental) | |
2011-08-28
| ||
02:15 | About a 3% improvement in the performance of OP_Column. (check-in: edff9d4a99 user: drh tags: experimental) | |
00:19 | Correctly display P4_ADVANCE values on opcode traces. Mark an always-taken branch in OP_Column as such. (check-in: 087dc96086 user: drh tags: experimental) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
2125 2126 2127 2128 2129 2130 2131 | p2 = pOp->p2; pC = 0; memset(&sMem, 0, sizeof(sMem)); assert( p1<p->nCursor ); assert( pOp->p3>0 && pOp->p3<=p->nMem ); pDest = &aMem[pOp->p3]; memAboutToChange(p, pDest); | < | 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 | p2 = pOp->p2; pC = 0; memset(&sMem, 0, sizeof(sMem)); assert( p1<p->nCursor ); assert( pOp->p3>0 && pOp->p3<=p->nMem ); pDest = &aMem[pOp->p3]; memAboutToChange(p, pDest); zRec = 0; /* This block sets the variable payloadSize to be the total number of ** bytes in the record. ** ** zRec is set to be the complete text of the record if it is available. ** The complete record text is always available for pseudo-tables |
︙ | ︙ | |||
2182 2183 2184 2185 2186 2187 2188 | pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr; assert( payloadSize==0 || zRec!=0 ); }else{ /* Consider the row to be NULL */ payloadSize = 0; } | | > | | 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 | pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr; assert( payloadSize==0 || zRec!=0 ); }else{ /* Consider the row to be NULL */ payloadSize = 0; } /* If payloadSize is 0, then just store a NULL. This can happen because of ** nullRow or because of a corrupt database. */ if( payloadSize==0 ){ MemSetTypeFlag(pDest, MEM_Null); goto op_column_out; } assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 ); if( payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){ goto too_big; } |
︙ | ︙ | |||
2350 2351 2352 2353 2354 2355 2356 | sqlite3VdbeSerialGet((u8*)zData, aType[p2], pDest); } pDest->enc = encoding; }else{ if( pOp->p4type==P4_MEM ){ sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static); }else{ | | | 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 | sqlite3VdbeSerialGet((u8*)zData, aType[p2], pDest); } pDest->enc = encoding; }else{ if( pOp->p4type==P4_MEM ){ sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static); }else{ MemSetTypeFlag(pDest, MEM_Null); } } /* If we dynamically allocated space to hold the data (in the ** sqlite3VdbeMemFromBtree() call above) then transfer control of that ** dynamically allocated space over to the pDest structure. ** This prevents a memory copy. |
︙ | ︙ |