From: drh Date: Tue, 15 Aug 2017 14:14:36 +0000 (+0000) Subject: Small size and performance in the OP_Column opcode. X-Git-Tag: version-3.21.0~157 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6cd8c8c57a249feac637ea97f21a8d3de7670de3;p=thirdparty%2Fsqlite.git Small size and performance in the OP_Column opcode. FossilOrigin-Name: 2cf3f3de8a48465bd6b0af7763bfe905f3bb0151488f63c9ecc3147bcb345094 --- diff --git a/manifest b/manifest index 3ee6a346e3..43be9dbc63 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Btree\soptimization:\s\sNew\sfield\sBtCursor.pPage\sthat\spoints\sto\sthe\scurrent\spage,\nsaving\sa\ssingle\spointer\sdereference\son\seach\saccess. -D 2017-08-15T03:46:47.011 +C Small\ssize\sand\sperformance\sin\sthe\sOP_Column\sopcode. +D 2017-08-15T14:14:36.511 F Makefile.in d9873c9925917cca9990ee24be17eb9613a668012c85a343aef7e5536ae266e8 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc 02b469e9dcd5b7ee63fc1fb05babc174260ee4cfa4e0ef2e48c3c6801567a016 @@ -522,7 +522,7 @@ F src/update.c 5404be9e840717323a69209190cdbc9d0d34adaedaaf1d1a1069babf2c4171c0 F src/utf.c 810fbfebe12359f10bc2a011520a6e10879ab2a163bcb26c74768eab82ea62a5 F src/util.c fc081ec6f63448dcd80d3dfad35baecfa104823254a815b081a4d9fe76e1db23 F src/vacuum.c 90839322fd5f00df9617eb21b68beda9b6e2a2937576b0d65985e4aeb1c53739 -F src/vdbe.c 821b3edde2d17ec60da0617db1018a88f38634c359d22f3c8f7be10336c82636 +F src/vdbe.c ebfc41ca25465888b2dc2969a0059d0d563c2a36e31696352573198cdec51fad F src/vdbe.h d50cadf12bcf9fb99117ef392ce1ea283aa429270481426b6e8b0280c101fd97 F src/vdbeInt.h ff2b7db0968d20e6184aee256d2e535d565f5a172e3588a78adb166a41fc4911 F src/vdbeapi.c 05d6b14ab73952db0d73f6452d6960216997bd966a710266b2fe051f25326abc @@ -1647,7 +1647,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 16969338841734d00ab906a94b82480c7e1e426eb0ddf7b9e6aed722aee5d91f -R 3d6cdbe8a873abb5b839027115a07163 +P 373b71d19cad785922d5a80828f2fee0cbe7dff6594743e625bbdfa31b1ca131 +R 36da37536a24b366658dfab60814a38c U drh -Z 53459ac0c08285b40b84acbd692920bc +Z 16cc8098bdc3d63f9bef627e24ebd270 diff --git a/manifest.uuid b/manifest.uuid index d331463c6a..f58cbd3506 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -373b71d19cad785922d5a80828f2fee0cbe7dff6594743e625bbdfa31b1ca131 \ No newline at end of file +2cf3f3de8a48465bd6b0af7763bfe905f3bb0151488f63c9ecc3147bcb345094 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index d04a4f2c91..e44f06f3c9 100644 --- a/src/vdbe.c +++ b/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( availszRowaRow 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