From: drh Date: Wed, 18 Dec 2013 15:11:47 +0000 (+0000) Subject: Show changes to the column cache when PRAGMA vdbe_addoptrace=ON is set. X-Git-Tag: version-3.8.3~91^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ac7962acea518754b1f5a7a2748164cdb053b52;p=thirdparty%2Fsqlite.git Show changes to the column cache when PRAGMA vdbe_addoptrace=ON is set. FossilOrigin-Name: 4c6a659c432e4f7c0285f58675a67f967b07bb0d --- diff --git a/manifest b/manifest index ce19a94c13..628e69c170 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sevidence\smarks\sand\sadditional\stest\scases\sfor\sthe\sprintf()\sSQL\sfunction. -D 2013-12-17T16:32:56.710 +C Show\schanges\sto\sthe\scolumn\scache\swhen\sPRAGMA\svdbe_addoptrace=ON\sis\sset. +D 2013-12-18T15:11:47.634 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -175,7 +175,7 @@ F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 77779efbe78dd678d84bfb4fc2e87b6b6ad8dccd F src/date.c 593c744b2623971e45affd0bde347631bdfa4625 F src/delete.c b36db1f79ee50eaca979660c9dd36437f5410b93 -F src/expr.c 31a2b65339f6c3795d4cfa5e99798cd72f9fdfdf +F src/expr.c 962c29881bcee9e1d7b556020c1d29dc8bd8b906 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 2ab0f5384b70594468ef3ac5c7ed8ca24bfd17d5 F src/func.c 6325ac2ec10833ccf4d5c36d323709221d37ea19 @@ -219,7 +219,7 @@ F src/printf.c 85d07756e45d7496d19439dcae3e6e9e0090f269 F src/random.c 0b2dbc37fdfbfa6bd455b091dfcef5bdb32dba68 F src/resolve.c 7eda9097b29fcf3d2b42fdc17d1de672134e09b6 F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0 -F src/select.c d41381d80a22d3a83352aeca274cccf264ac277a +F src/select.c c1cd470c699ad55beb762022b2ea820cdfe12895 F src/shell.c 18924f6ccfa70da98bf9e388bab512c0fd1e792e F src/sqlite.h.in 4ef56464aeaa3785a2c5ca37fb3a0fb229d68b2e F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e @@ -281,11 +281,11 @@ F src/utf.c 6fc6c88d50448c469c5c196acf21617a24f90269 F src/util.c e71f19b272f05c8695cf747b4bac1732685f9e5c F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 F src/vdbe.c 919422843c859a1db08db0c88189912dbf625fc7 -F src/vdbe.h c06f0813f853566457ce9cfb1a4a4bc39a5da644 -F src/vdbeInt.h a7bc268f844d75be48bb7ae16f77b418fd3c641c +F src/vdbe.h c3278ab2b410f17acf61faf91be7bce3fd466e8b +F src/vdbeInt.h 8a4d2d69955570bb74a092c3cdbab04afb554963 F src/vdbeapi.c ce4e68ea4842cc6081046f533d088dcf01d247ad -F src/vdbeaux.c a22cbd91b24503b82690cb03324ffec9f4ef63f6 -F src/vdbeblob.c 8cd05a5630e6d5563ad017bf82edaf812b28acde +F src/vdbeaux.c 70aa77f7db7b9b627bbc44a4546deef8ba56c51b +F src/vdbeblob.c bc40f98f256f0b34116d6a44b114da4a81a15d33 F src/vdbemem.c 0e69351b2c6ff7d8b638688c0ae336a26befa6b2 F src/vdbesort.c 9d83601f9d6243fe70dd0169a2820c5ddfd48147 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 @@ -1147,7 +1147,10 @@ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff -P a1bb62f91a85af0584100c3ad77877a949c30cca -R 69f0b68d0886123f335b52e69a6c748f +P 93121d3097a43997af3c0de65bd9bd7663845fa2 +R 509cbb701cd3c7ed8d65fb3eb1823d74 +T *branch * column-cache-debug +T *sym-column-cache-debug * +T -sym-trunk * U drh -Z 3ce3ba9d696aa32fcf98b10717e459c0 +Z ece27495bc3ec8587c593a30b1f41a23 diff --git a/manifest.uuid b/manifest.uuid index 5e71d304d7..e92963a40e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -93121d3097a43997af3c0de65bd9bd7663845fa2 \ No newline at end of file +4c6a659c432e4f7c0285f58675a67f967b07bb0d \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 6c8a8cce77..81eb00c968 100644 --- a/src/expr.c +++ b/src/expr.c @@ -2170,6 +2170,11 @@ void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){ */ void sqlite3ExprCachePush(Parse *pParse){ pParse->iCacheLevel++; +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("PUSH to %d\n", pParse->iCacheLevel); + } +#endif } /* @@ -2183,6 +2188,11 @@ void sqlite3ExprCachePop(Parse *pParse, int N){ assert( N>0 ); assert( pParse->iCacheLevel>=N ); pParse->iCacheLevel -= N; +#ifdef SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("POP to %d\n", pParse->iCacheLevel); + } +#endif for(i=0, p=pParse->aColCache; iiReg && p->iLevel>pParse->iCacheLevel ){ cacheEntryClear(pParse, p); @@ -2277,6 +2287,11 @@ void sqlite3ExprCacheClear(Parse *pParse){ int i; struct yColCache *p; +#if SQLITE_DEBUG + if( pParse->db->flags & SQLITE_VdbeAddopTrace ){ + printf("CLEAR\n"); + } +#endif for(i=0, p=pParse->aColCache; iiReg ){ cacheEntryClear(pParse, p); diff --git a/src/select.c b/src/select.c index aa8e54b02f..e0b3bde48e 100644 --- a/src/select.c +++ b/src/select.c @@ -1565,7 +1565,7 @@ Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){ Vdbe *sqlite3GetVdbe(Parse *pParse){ Vdbe *v = pParse->pVdbe; if( v==0 ){ - v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db); + v = pParse->pVdbe = sqlite3VdbeCreate(pParse); #ifndef SQLITE_OMIT_TRACE if( v ){ sqlite3VdbeAddOp0(v, OP_Trace); diff --git a/src/vdbe.h b/src/vdbe.h index 62d9aa2711..51cf60b520 100644 --- a/src/vdbe.h +++ b/src/vdbe.h @@ -160,7 +160,7 @@ typedef struct VdbeOpList VdbeOpList; ** Prototypes for the VDBE interface. See comments on the implementation ** for a description of what each of these routines does. */ -Vdbe *sqlite3VdbeCreate(sqlite3*); +Vdbe *sqlite3VdbeCreate(Parse*); int sqlite3VdbeAddOp0(Vdbe*,int); int sqlite3VdbeAddOp1(Vdbe*,int,int); int sqlite3VdbeAddOp2(Vdbe*,int,int,int); diff --git a/src/vdbeInt.h b/src/vdbeInt.h index d6d71a3957..7b4fad67b0 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -312,6 +312,9 @@ struct Vdbe { Mem **apArg; /* Arguments to currently executing user function */ Mem *aColName; /* Column names to return */ Mem *pResultSet; /* Pointer to an array of results */ +#ifdef SQLITE_DEBUG + Parse *pParse; /* Parsing context used to create this Vdbe */ +#endif int nMem; /* Number of memory locations currently allocated */ int nOp; /* Number of instructions in the program */ int nOpAlloc; /* Number of slots allocated for aOp[] */ diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 6344c4c8fa..068059e594 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -20,7 +20,8 @@ /* ** Create a new virtual database engine. */ -Vdbe *sqlite3VdbeCreate(sqlite3 *db){ +Vdbe *sqlite3VdbeCreate(Parse *pParse){ + sqlite3 *db = pParse->db; Vdbe *p; p = sqlite3DbMallocZero(db, sizeof(Vdbe) ); if( p==0 ) return 0; @@ -32,6 +33,9 @@ Vdbe *sqlite3VdbeCreate(sqlite3 *db){ p->pPrev = 0; db->pVdbe = p; p->magic = VDBE_MAGIC_INIT; +#if SQLITE_DEBUG + p->pParse = pParse; +#endif return p; } @@ -151,6 +155,15 @@ int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){ #endif #ifdef SQLITE_DEBUG if( p->db->flags & SQLITE_VdbeAddopTrace ){ + int jj, kk; + Parse *pParse = p->pParse; + for(jj=kk=0; jjaColCache + jj; + if( x->iLevel>pParse->iCacheLevel || x->iReg==0 ) continue; + printf(" r[%d]={%d:%d}", x->iReg, x->iTable, x->iColumn); + kk++; + } + if( kk ) printf("\n"); sqlite3VdbePrintOp(0, i, &p->aOp[i]); test_addop_breakpoint(); } diff --git a/src/vdbeblob.c b/src/vdbeblob.c index 7859d4a6c5..20841c44f9 100644 --- a/src/vdbeblob.c +++ b/src/vdbeblob.c @@ -255,7 +255,7 @@ int sqlite3_blob_open( } } - pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db); + pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(pParse); assert( pBlob->pStmt || db->mallocFailed ); if( pBlob->pStmt ){ Vdbe *v = (Vdbe *)pBlob->pStmt;