]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Show changes to the column cache when PRAGMA vdbe_addoptrace=ON is set.
authordrh <drh@noemail.net>
Wed, 18 Dec 2013 15:11:47 +0000 (15:11 +0000)
committerdrh <drh@noemail.net>
Wed, 18 Dec 2013 15:11:47 +0000 (15:11 +0000)
FossilOrigin-Name: 4c6a659c432e4f7c0285f58675a67f967b07bb0d

manifest
manifest.uuid
src/expr.c
src/select.c
src/vdbe.h
src/vdbeInt.h
src/vdbeaux.c
src/vdbeblob.c

index ce19a94c13ba42a0409e029abdecf58aa63e6032..628e69c1703d9c12560d7947941c6d76734bb273 100644 (file)
--- 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
index 5e71d304d7472db0f02cd97eeb74a8d456a82c9a..e92963a40e28d555189d1099320572b24ca3b8e6 100644 (file)
@@ -1 +1 @@
-93121d3097a43997af3c0de65bd9bd7663845fa2
\ No newline at end of file
+4c6a659c432e4f7c0285f58675a67f967b07bb0d
\ No newline at end of file
index 6c8a8cce775ec531d0be8573af1d3e24a926ec7e..81eb00c9680f2f54e610d2349373122ab6daa468 100644 (file)
@@ -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; i<SQLITE_N_COLCACHE; i++, p++){
     if( p->iReg && 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; i<SQLITE_N_COLCACHE; i++, p++){
     if( p->iReg ){
       cacheEntryClear(pParse, p);
index aa8e54b02fdba1372696dc37916fa1ad27011797..e0b3bde48e4f7849836e29d0accf9f47c5a0a212 100644 (file)
@@ -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);
index 62d9aa2711bc059727f44ba1629a08f55ba41ee8..51cf60b52034c041206c8307b9d5a4b744b2513e 100644 (file)
@@ -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);
index d6d71a3957c813e7f6984af047d275d16961152b..7b4fad67b0a9ef6b38b9c8935b689dc48092058d 100644 (file)
@@ -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[] */
index 6344c4c8fa0865b4ab981e27fb91f4bdeb35c3f5..068059e594da6693494e17876184050169dd8195 100644 (file)
@@ -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; jj<SQLITE_N_COLCACHE; jj++){
+      struct yColCache *x = pParse->aColCache + 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();
   }
index 7859d4a6c53c2d2e10f89c2621bf317914a24938..20841c44f920e14e3109fc0178eab60e3905ec36 100644 (file)
@@ -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;