]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor performance enhancements to SQLITE_ENABLE_STMT_SCANSTATUS code.
authordan <dan@noemail.net>
Sat, 1 Nov 2014 21:00:04 +0000 (21:00 +0000)
committerdan <dan@noemail.net>
Sat, 1 Nov 2014 21:00:04 +0000 (21:00 +0000)
FossilOrigin-Name: f13d6ba8a72d75838c4aaf85326c1129da027f8b

manifest
manifest.uuid
src/vdbe.c
src/vdbeInt.h
src/vdbeaux.c
src/where.c

index c81e91139507f1f4e908f144a5fa4a63501d8f0d..974494b3b95217a1897c1d371643b2725e5f2494 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C If\sSQLITE_ENABLE_STMT_SCANSTATUS\sis\sdefined,\srecord\sthe\snumber\sof\stimes\seach\sVDBE\sopcode\sis\sexecuted.\sDerive\sthe\svalues\sreturned\sby\ssqlite3_stmt_scanstatus()\sfrom\sthese\srecords\son\sdemand.
-D 2014-11-01T20:38:06.833
+C Minor\sperformance\senhancements\sto\sSQLITE_ENABLE_STMT_SCANSTATUS\scode.
+D 2014-11-01T21:00:04.841
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -289,11 +289,11 @@ F src/update.c 3c4ecc282accf12d39edb8d524cf089645e55a13
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c 3b627daa45c7308c1e36e3dbaa3f9ce7e5c7fa73
 F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a
-F src/vdbe.c 69d025732d242d7c97282e6570a4e5eb768ebaff
+F src/vdbe.c ccc626d70659160596d28b4a910b6086da788695
 F src/vdbe.h 7d603b93d128e614ba2600f12a6c541435405522
-F src/vdbeInt.h ee8d44cba5998279039bcd91ebddb6d9a2d463b8
+F src/vdbeInt.h 21570e5ec8b3a385d003e6e20f3a91712b7050e5
 F src/vdbeapi.c 19e433e69fe2b27bfc9337a207b6ebf499f41d03
-F src/vdbeaux.c bad342af7cadb8d3bf2990700a78787d602dcd69
+F src/vdbeaux.c 2887d02721c540b25969d3260d0d3d5668d11583
 F src/vdbeblob.c 8b5442ff0954c44b45cbabbe2e94091a2e16fdef
 F src/vdbemem.c 31d8eabb0cd78bfeab4e5124c7363c3e9e54db9f
 F src/vdbesort.c 975aeffa99acb0991b2f288d30294756bff41438
@@ -302,7 +302,7 @@ F src/vtab.c 2a30791bbd7926b589401bd09c3abb33de563793
 F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983
 F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
 F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804
-F src/where.c fb404e3db40db61c212ffb39022e885a91252498
+F src/where.c ad4a3bca9070e013ff41e8e63835788bcc43dd1c
 F src/whereInt.h a2bc22f4e3e70eeaa57272f354c288bc3b71b80b
 F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
@@ -1211,7 +1211,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 8d8cc9608d30bb65fffcfe488e904411cbbc7f41
-R e1e809461d373caeeb0e83f126874426
+P 9ea37422a8cc2fce51bb10508e5e90f40fd4b511
+R 4191876729196c1564c4c28cce5855c1
 U dan
-Z 5d5debb04affeaeb7378f6b538c8f641
+Z 150c277a759b1b656399ef38dfe29c92
index f70d7e8aef5c7f2e2d22162648b725f7ef1b0c3a..72c2809a5328956cfade58cd99f2458f26c82d4d 100644 (file)
@@ -1 +1 @@
-9ea37422a8cc2fce51bb10508e5e90f40fd4b511
\ No newline at end of file
+f13d6ba8a72d75838c4aaf85326c1129da027f8b
\ No newline at end of file
index bc49505dd0cbcf327be0bd679efe862283dd908d..890162dddc4e951a7ac808488fbadf92021cf938 100644 (file)
@@ -609,7 +609,7 @@ int sqlite3VdbeExec(
     nVmStep++;
     pOp = &aOp[pc];
 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
-    if( p->pFrame==0 ) p->anExec[pc]++;
+    if( p->anExec ) p->anExec[pc]++;
 #endif
 
     /* Only allow tracing if SQLITE_DEBUG is defined.
@@ -5409,6 +5409,7 @@ case OP_Program: {        /* jump */
     pFrame->token = pProgram->token;
     pFrame->aOnceFlag = p->aOnceFlag;
     pFrame->nOnceFlag = p->nOnceFlag;
+    pFrame->anExec = p->anExec;
 
     pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
     for(pMem=VdbeFrameMem(pFrame); pMem!=pEnd; pMem++){
@@ -5437,6 +5438,7 @@ case OP_Program: {        /* jump */
   p->nOp = pProgram->nOp;
   p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
   p->nOnceFlag = pProgram->nOnce;
+  p->anExec = 0;
   pc = -1;
   memset(p->aOnceFlag, 0, p->nOnceFlag);
 
index 9f21ac7ebf59190a31a15954779860ff9e3e5b8b..eb2438a87c860e9d41b89e5d50bdc312b7b5d93f 100644 (file)
@@ -132,6 +132,7 @@ struct VdbeFrame {
   Vdbe *v;                /* VM this frame belongs to */
   VdbeFrame *pParent;     /* Parent of this frame, or NULL if parent is main */
   Op *aOp;                /* Program instructions for parent frame */
+  i64 *anExec;            /* Event counters from parent frame */
   Mem *aMem;              /* Array of memory cells for parent frame */
   u8 *aOnceFlag;          /* Array of OP_Once flags for parent frame */
   VdbeCursor **apCsr;     /* Array of Vdbe cursors for parent frame */
index 3f75cfee7a1d7cecb3cac578bb0398a015de874b..548ef0ac5ced8c998f4f8e3e2d5105d9a8af09b2 100644 (file)
@@ -1723,6 +1723,7 @@ void sqlite3VdbeMakeReady(
     p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
                           &zCsr, zEnd, &nByte);
     p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
+    p->anExec = allocSpace(p->anExec, p->nOp*sizeof(i64), &zCsr, zEnd, &nByte);
     if( nByte ){
       p->pFree = sqlite3DbMallocZero(db, nByte);
     }
@@ -1730,10 +1731,6 @@ void sqlite3VdbeMakeReady(
     zEnd = &zCsr[nByte];
   }while( nByte && !db->mallocFailed );
 
-#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
-    p->anExec = (i64*)sqlite3DbMallocZero(db, p->nOp*sizeof(i64));
-#endif
-
   p->nCursor = nCursor;
   p->nOnceFlag = nOnce;
   if( p->aVar ){
@@ -1794,6 +1791,7 @@ void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
 */
 int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
   Vdbe *v = pFrame->v;
+  v->anExec = pFrame->anExec;
   v->aOnceFlag = pFrame->aOnceFlag;
   v->nOnceFlag = pFrame->nOnceFlag;
   v->aOp = pFrame->aOp;
@@ -2718,7 +2716,6 @@ void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
   sqlite3DbFree(db, p->zSql);
   sqlite3DbFree(db, p->pFree);
 #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
-  sqlite3DbFree(db, p->anExec);
   for(i=0; i<p->nScan; i++){
     sqlite3DbFree(db, p->aScan[i].zName);
   }
index 8151a7057bbf84b0d220027abe9ef2ddbdd8c941..61c0ab7d3daeda65f697c95f40b907db0fd7febf 100644 (file)
@@ -2821,7 +2821,7 @@ static int explainOneScan(
   u16 wctrlFlags                  /* Flags passed to sqlite3WhereBegin() */
 ){
   int ret = 0;
-#ifndef SQLITE_DEBUG
+#if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
   if( pParse->explain==2 )
 #endif
   {