From f6d8ab87c6d3f08622eebb258357cfbc49ea74c2 Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 12 Jan 2007 23:43:42 +0000 Subject: [PATCH] Fix a bug in sqlite3_prepare_v2() introduced by checkin (3578) and reported on the mailing list. (CVS 3592) FossilOrigin-Name: 87248470362f444f2339fee18d3624e8544f5256 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/vdbe.c | 4 +++- test/capi3c.test | 22 +++++++++++++++++++++- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/manifest b/manifest index b7944618fe..39be5b72c6 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sbug\sin\slemon.\s\sThe\scode\sin\swhich\sthe\serror\sappears\smight\swell\sbe\nunreachable.\s\sThe\schanges\sdoes\snot\seffect\sthe\scode\sthat\sis\sgenerated\sfor\nthe\sSQLite\sparser.\s\sTicket\s#2164.\s(CVS\s3591) -D 2007-01-12T23:09:23 +C Fix\sa\sbug\sin\ssqlite3_prepare_v2()\sintroduced\sby\scheckin\s(3578)\sand\sreported\non\sthe\smailing\slist.\s(CVS\s3592) +D 2007-01-12T23:43:43 F Makefile.in 7fa74bf4359aa899da5586e394d17735f221315f F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028 @@ -121,7 +121,7 @@ F src/update.c 951f95ef044cf6d28557c48dc35cb0711a0b9129 F src/utf.c 67ecb1032bc0b42c105e88d65ef9d9f626eb0e1f F src/util.c 91d4cb189476906639ae611927d939691d1365f6 F src/vacuum.c b4569b08aaa5afb141af3f76d0315745db4e9e4b -F src/vdbe.c 074cda811466f8f752c2dd71b1dcaea001f4be64 +F src/vdbe.c 4d54659b7dbb7a61570d7136a34fbde12b61c509 F src/vdbe.h 0025259af1939fb264a545816c69e4b5b8d52691 F src/vdbeInt.h 1ca07f2d7446c90230346aed7fbf990c032460bc F src/vdbeapi.c 2d1e6843af8705a1172e54a418d2a3d5febd1dd7 @@ -169,7 +169,7 @@ F test/busy.test 0271c854738e23ad76e10d4096a698e5af29d211 F test/capi2.test 7ecc9b342cc9ec27b53bbf95724cf2e5874fd496 F test/capi3.test 4063c4be79fb00704154a1e459a38364de9162a9 F test/capi3b.test 5f0bc94b104e11086b1103b20277e1910f59c7f4 -F test/capi3c.test 3d276ee4c142b9e71a867a3579906bb0876840cc +F test/capi3c.test 5961df13666c994890ffd44f0143cf92897d18dc F test/cast.test f88e7b6946e9a467cf4bb142d92bb65a83747fc2 F test/check.test e5ea0c1a06c10e81e3434ca029e2c4a562f2b673 F test/collate1.test add9454cef160677bb8b34148b8f277ce7f9f1c4 @@ -424,7 +424,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513 -P a72c950cdbb7ad14572ccdf9b94ceac8ea0a2588 -R a1da9ce500d2686501613055e18f40fb +P f4ee5d83e177e7ed9f180454c01d46a395a5715d +R 4b0815a55b922b31192db8cde97bb03b U drh -Z cff8f63e04aa969446fdc95d5a9c4056 +Z 0214b95c1f9fb06ed7af23b4d12ac47e diff --git a/manifest.uuid b/manifest.uuid index 573e59e0cf..e893ed948e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -f4ee5d83e177e7ed9f180454c01d46a395a5715d \ No newline at end of file +87248470362f444f2339fee18d3624e8544f5256 \ No newline at end of file diff --git a/src/vdbe.c b/src/vdbe.c index faa840fd86..8d66b99c73 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.585 2007/01/09 14:01:14 drh Exp $ +** $Id: vdbe.c,v 1.586 2007/01/12 23:43:43 drh Exp $ */ #include "sqliteInt.h" #include "os.h" @@ -2517,6 +2517,8 @@ case OP_VerifyCookie: { /* no-push */ } if( rc==SQLITE_OK && iMeta!=pOp->p2 ){ sqlite3SetString(&p->zErrMsg, "database schema has changed", (char*)0); + sqlite3ResetInternalSchema(db, pOp->p1); + sqlite3ExpirePreparedStatements(db); rc = SQLITE_SCHEMA; } break; diff --git a/test/capi3c.test b/test/capi3c.test index 59f89a5035..8ce0781bfc 100644 --- a/test/capi3c.test +++ b/test/capi3c.test @@ -13,7 +13,7 @@ # This is a copy of the capi3.test file that has been adapted to # test the new sqlite3_prepare_v2 interface. # -# $Id: capi3c.test,v 1.5 2007/01/09 15:06:42 drh Exp $ +# $Id: capi3c.test,v 1.6 2007/01/12 23:43:43 drh Exp $ # set testdir [file dirname $argv0] @@ -1193,4 +1193,24 @@ do_test capi3c-19.99 { sqlite3_finalize $STMT } SQLITE_OK +# Make sure a change in a separate database connection does not +# cause an SQLITE_SCHEMA return. +# +do_test capi3c-20.1 { + set STMT [sqlite3_prepare_v2 $DB {SELECT * FROM t3} -1 TAIL] + sqlite3 db2 test.db + db2 eval {CREATE TABLE t4(x)} + sqlite3_step $STMT +} SQLITE_ROW +do_test capi3c-20.2 { + sqlite3_column_int $STMT 1 +} 2 +do_test capi3c-20.3 { + sqlite3_step $STMT +} SQLITE_DONE +do_test capi3c-20.4 { + db2 close + sqlite3_finalize $STMT +} SQLITE_OK + finish_test