]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Make sure the sqlite3_trace() callback is invoked, even if the prepared
authordrh <drh@noemail.net>
Tue, 19 Aug 2014 20:27:40 +0000 (20:27 +0000)
committerdrh <drh@noemail.net>
Tue, 19 Aug 2014 20:27:40 +0000 (20:27 +0000)
statement was marked "expired" before it ever entered sqlite3_step().
Ticket [11d5aa455e0d98f3c1e6a08].

FossilOrigin-Name: 0d4d3df4bc5e75ce1543b5539a1e9e279d2a062f

manifest
manifest.uuid
src/vdbeapi.c
test/trace.test

index 1735f3574021c89498a9656535683dfbf253dfdb..c307f54e8f250ebb2d2e3e6b942b053a4b31134f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Improvements\sto\soutput\sformatting\swith\sthe\s".trace"\scommand\sin\sthe\ncommand-line\sshell.
-D 2014-08-19T19:28:00.623
+C Make\ssure\sthe\ssqlite3_trace()\scallback\sis\sinvoked,\seven\sif\sthe\sprepared\nstatement\swas\smarked\s"expired"\sbefore\sit\sever\sentered\ssqlite3_step().\nTicket\s[11d5aa455e0d98f3c1e6a08].
+D 2014-08-19T20:27:40.455
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -286,7 +286,7 @@ F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
 F src/vdbe.c f7f4066e4d6e3858878d76ce9288ea603e12ddf6
 F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8
 F src/vdbeInt.h f5513f2b5ac1e2c5128996c7ea23add256a301df
-F src/vdbeapi.c 24e40422382beb774daab11fe9fe9d37e8a04949
+F src/vdbeapi.c ce75e452dfd9c6ba4f8c6c76be6399c88bce3142
 F src/vdbeaux.c 25d62ef82cf1be2a1255eacac636fa0d943d8b3d
 F src/vdbeblob.c 9205ce9d3b064d9600f8418a897fc88b5687d9ac
 F src/vdbemem.c d90a1e8acf8b63dc9d14cbbea12bfec6cec31394
@@ -1017,7 +1017,7 @@ F test/tkt3997.test a335fa41ca3985660a139df7b734a26ef53284bd
 F test/tkt4018.test 7c2c9ba4df489c676a0a7a0e809a1fb9b2185bd1
 F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
 F test/tpch01.test 04adbf8d8300fa60a222f28d901abd76e7be6dd4
-F test/trace.test 4b36a41a3e9c7842151af6da5998f5080cdad9e5
+F test/trace.test 73a5508100f7fccfbc3f8018d5f6963ed478eea0
 F test/trace2.test 93b47ca6996c66b47f57224cfb146f34e07df382
 F test/trans.test 6e1b4c6a42dba31bd65f8fa5e61a2708e08ddde6
 F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76
@@ -1186,7 +1186,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 f10a6111262ce6ee6984c64fa0e0023642eca27d
-R 257d241ab9ebe5fc3f4654d7f2e169ae
+P d09d63c07748839e9b778a769b183bdd614c6c13
+R dc4a84c1e3dbc4c500aead2f870904cc
 U drh
-Z 211a00cac8127ca939f7e6f32071c25c
+Z 8ee9013dcfb943fe42c807d90f81accd
index 1cf4ead3de4c6b0abab52914474cbeff6cbe37e9..b804f56674379b429ebc75a014f4ba71c9a38d47 100644 (file)
@@ -1 +1 @@
-d09d63c07748839e9b778a769b183bdd614c6c13
\ No newline at end of file
+0d4d3df4bc5e75ce1543b5539a1e9e279d2a062f
\ No newline at end of file
index 5e5bb813663ab776b6452651718de1eea025423a..568f67296c633be9345dfd2499800eafacc5b60a 100644 (file)
@@ -513,10 +513,12 @@ int sqlite3_step(sqlite3_stmt *pStmt){
   sqlite3_mutex_enter(db->mutex);
   v->doingRerun = 0;
   while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
-         && cnt++ < SQLITE_MAX_SCHEMA_RETRY
-         && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
+         && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
+    int savedPc = v->pc;
+    rc2 = rc = sqlite3Reprepare(v);
+    if( rc!=SQLITE_OK) break;
     sqlite3_reset(pStmt);
-    v->doingRerun = 1;
+    v->doingRerun = savedPc>=0;
     assert( v->expired==0 );
   }
   if( rc2!=SQLITE_OK ){
index ce5a2d712a4ea364bde3463262a8efa182ae1876..a64cc333fa59d483c7a7eeedeaf0f9fb2fbdba9a 100644 (file)
@@ -48,6 +48,22 @@ do_test trace-1.5 {
   db trace {}
   db trace
 } {}
+do_test trace-1.6 {
+  db eval {
+     CREATE TABLE t1b(x TEXT PRIMARY KEY, y);
+     INSERT INTO t1b VALUES('abc','def'),('ghi','jkl'),('mno','pqr');
+  }
+  set ::stmtlist {}
+  set xyzzy a*
+  db trace trace_proc
+  db eval {
+     SELECT y FROM t1b WHERE x GLOB $xyzzy
+  }
+} {def}
+do_test trace-1.7 {
+  set ::stmtlist
+} {{SELECT y FROM t1b WHERE x GLOB 'a*'}}
+db trace {}
 
 # If we prepare a statement and execute it multiple times, the trace
 # happens on each execution.