]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Simplify the OP_Column logic slightly. One very small performance
authordrh <drh@noemail.net>
Fri, 16 Oct 2015 13:50:08 +0000 (13:50 +0000)
committerdrh <drh@noemail.net>
Fri, 16 Oct 2015 13:50:08 +0000 (13:50 +0000)
improvement added.

FossilOrigin-Name: 0114b45dc286c13db0d640f0486d8a5bef9ff078

manifest
manifest.uuid
src/vdbe.c

index 8bc0e34adb5be11030d4547dfc2b5fd794dd0128..330945612557b33769e2abe49c9e8446277916dc 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C OP_Column\soptimization:\s\sDo\snot\scheck\sfor\san\soversize\srow\sheader\sunless\sthe\nrow\sheader\ssize\sis\slarger\sthan\sthe\scontent\savailable\son\sthe\slocal\spage.
-D 2015-10-16T12:53:47.105
+C Simplify\sthe\sOP_Column\slogic\sslightly.\s\sOne\svery\ssmall\sperformance\s\nimprovement\sadded.
+D 2015-10-16T13:50:08.508
 F Makefile.in 2ea961bc09e441874eb3d1bf7398e04feb24f3ee
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 8e42cb55739cd8c12e1fd25401956e2019448f6a
@@ -401,7 +401,7 @@ F src/update.c aa10336a2719bd1b9f89004f3d7ba6d566623a49
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c fc612367108b74573c5fd13a85d0a23027f438bd
 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c ece04358f56c3c0209e184b994b0e657b78db336
+F src/vdbe.c 612bf3ee27cefb61ec9abf11c6499b57432cbc07
 F src/vdbe.h 4bc88bd0e06f8046ee6ab7487c0015e85ad949ad
 F src/vdbeInt.h 8b867eac234e28627ffcace3cd4b4b79bbec664b
 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
@@ -1391,7 +1391,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P b17ad8fc046ebc9529d1c146437a383e72217b01
-R a35b1b9c4fd8438c90eb28bd97a70f35
+P 8125b74cb46c372b9a319f6270f1c396767accd7
+R f13372f71b8052ca27ec6a7d639132e9
 U drh
-Z 6f8b13e7e2f3dcf3242bb4888fee1f34
+Z 5438899bf7e61a76c862a84a5f7b0608
index 3228493580447fa2d29a7931f22e507cfd52c01c..420bc28a51727b35d0f451f16396c00252e46a74 100644 (file)
@@ -1 +1 @@
-8125b74cb46c372b9a319f6270f1c396767accd7
\ No newline at end of file
+0114b45dc286c13db0d640f0486d8a5bef9ff078
\ No newline at end of file
index 7b20b6359886ec992005d37ffecad4d7fd20f322..2eab49c0bad8b41c517156b8207c31ebba6b90e8 100644 (file)
@@ -2484,11 +2484,8 @@ case OP_Column: {
       /* Make sure zData points to enough of the record to cover the header. */
       if( pC->aRow==0 ){
         memset(&sMem, 0, sizeof(sMem));
-        rc = sqlite3VdbeMemFromBtree(pCrsr, 0, aOffset[0], 
-                                     !pC->isTable, &sMem);
-        if( rc!=SQLITE_OK ){
-          goto op_column_error;
-        }
+        rc = sqlite3VdbeMemFromBtree(pCrsr, 0, aOffset[0], !pC->isTable, &sMem);
+        if( rc!=SQLITE_OK ) goto op_column_error;
         zData = (u8*)sMem.z;
       }else{
         zData = pC->aRow;
@@ -2501,8 +2498,7 @@ case OP_Column: {
       zEndHdr = zData + aOffset[0];
       assert( i<=p2 && zHdr<zEndHdr );
       do{
-        if( zHdr[0]<0x80 ){
-          t = zHdr[0];
+        if( (t = zHdr[0])<0x80 ){
           zHdr++;
         }else{
           zHdr += sqlite3GetVarint32(zHdr, &t);
@@ -2515,18 +2511,12 @@ case OP_Column: {
       }while( i<=p2 && zHdr<zEndHdr );
       pC->nHdrParsed = i;
       pC->iHdrOffset = (u32)(zHdr - zData);
-      if( pC->aRow==0 ){
-        sqlite3VdbeMemRelease(&sMem);
-        sMem.flags = MEM_Null;
-      }
+      if( pC->aRow==0 ) sqlite3VdbeMemRelease(&sMem);
   
       /* The record is corrupt if any of the following are true:
       ** (1) the bytes of the header extend past the declared header size
-      **          (zHdr>zEndHdr)
       ** (2) the entire header was used but not all data was used
-      **          (zHdr==zEndHdr && offset64!=pC->payloadSize)
       ** (3) the end of the data extends beyond the end of the record.
-      **          (offset64 > pC->payloadSize)
       */
       if( (zHdr>=zEndHdr && (zHdr>zEndHdr || offset64!=pC->payloadSize))
        || (offset64 > pC->payloadSize)
@@ -2548,6 +2538,8 @@ case OP_Column: {
       }
       goto op_column_out;
     }
+  }else{
+    t = pC->aType[p2];
   }
 
   /* Extract the content for the p2+1-th column.  Control can only
@@ -2558,7 +2550,7 @@ case OP_Column: {
   assert( rc==SQLITE_OK );
   assert( sqlite3VdbeCheckMemInvariants(pDest) );
   if( VdbeMemDynamic(pDest) ) sqlite3VdbeMemSetNull(pDest);
-  t = pC->aType[p2];
+  assert( t==pC->aType[p2] );
   if( pC->szRow>=aOffset[p2+1] ){
     /* This is the common case where the desired content fits on the original
     ** page - where the content is not on an overflow page */