------BEGIN PGP SIGNED MESSAGE-----
-Hash: SHA1
-
-C Remove\san\sunreachable\scondition\sin\sthe\sWHERE\sclause\sprocessing\sof\sbound\nparameters\sand\sreplace\sit\swith\san\sassert(),\sfor\stest\scoverage.
-D 2009-10-19T22:41:06
+C Fix\scases\swhere\smodifying\sbound\svariables\susing\sthe\sclear_bindings()\sor\stransfer_bindings()\sAPIs\scan\sinvalidate\sa\squery\splan.
+D 2009-10-20T07:01:24
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 4ca3f1dd6efa2075bcb27f4dc43eef749877740d
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/vdbe.c f0d6e7dbd4515758c188c9dd7025eb9dfcf021e0
F src/vdbe.h 3fedb2121d026dd127350d33e875a49cf05df2e8
F src/vdbeInt.h 8e07f4356dd5bfe03ac5991338e59b68c9b3c717
-F src/vdbeapi.c b10052643e45b611e52f4782ebc761e01c1add75
+F src/vdbeapi.c 44b5f387459d5faa158aa8d3a26967f0c8596efd
F src/vdbeaux.c fc032b050e0500000de534b2b0f0c63642459b8f
F src/vdbeblob.c 9bfaeab22e261a6a7b6df04e7faaf7d6dfdbef5a
F src/vdbemem.c 7055a2941a7802094f4704cedc7a28cc88a23749
F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
F test/analyze.test ad5329098fe4de4a96852231d53e3e9e6283ad4b
F test/analyze2.test a2ad7b0a4e13801ee3968fe70f22aff52326569c
-F test/analyze3.test 5c87ca746d3cf52d5172cfbc4890695d526f1e90
+F test/analyze3.test 851bcc0738b87e1c1990d8dbad6ab53cdfcc19d6
F test/async.test 8c75d31b8330f8b70cf2571b014d4476a063efdb
F test/async2.test bf5e2ca2c96763b4cba3d016249ad7259a5603b6
F test/async3.test 93edaa9122f498e56ea98c36c72abc407f4fb11e
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f x
-P 651c1efb998b34f218694c45865fbe20b837a2ac
-R 2619639fd054d5cd59f66d2af80794d3
-U drh
-Z f98fcb726ba1bd0ac977580c1890d9aa
------BEGIN PGP SIGNATURE-----
-Version: GnuPG v1.4.6 (GNU/Linux)
-
-iD8DBQFK3OsGoxKgR168RlERAqjvAJ40DyYuZYyj9ebU8QCPdYgdKgW/jQCgiToy
-bbznqWlejrKWFCwUwLi9COI=
-=isjf
------END PGP SIGNATURE-----
+P 3bcd78a1d76897d1bd5ad4cea52c6a65612ce433
+R 1728941566ef8ddd5fc7b46882d4b01c
+U dan
+Z 9100d3d85f3bd8c3f556c00cc5107446
-3bcd78a1d76897d1bd5ad4cea52c6a65612ce433
\ No newline at end of file
+e6808c988c9cd7b2db23f18b5fe2177151b6f586
\ No newline at end of file
sqlite3VdbeMemRelease(&p->aVar[i]);
p->aVar[i].flags = MEM_Null;
}
+ if( p->isPrepareV2 && p->expmask ){
+ p->expired = 1;
+ }
sqlite3_mutex_leave(mutex);
return rc;
}
if( pFrom->nVar!=pTo->nVar ){
return SQLITE_ERROR;
}
+ if( pTo->isPrepareV2 && pTo->expmask ){
+ pTo->expired = 1;
+ }
+ if( pFrom->isPrepareV2 && pFrom->expmask ){
+ pFrom->expired = 1;
+ }
return sqlite3TransferBindings(pFromStmt, pToStmt);
}
#endif
# analyze3-4.*: Test that SQL or authorization callback errors occuring
# within sqlite3Reprepare() are handled correctly.
#
+# analyze3-5.*: Check that the query plans of applicable statements are
+# invalidated if the values of SQL parameter are modified
+# using the clear_bindings() or transfer_bindings() APIs.
+#
proc getvar {varname} { uplevel #0 set $varname }
db function var getvar
do_test analyze3-4.3.2 {
sqlite3_finalize $S
} {SQLITE_SCHEMA}
+db auth {}
+
+#-------------------------------------------------------------------------
+# Test that modifying bound variables using the clear_bindings() or
+# transfer_bindings() APIs works.
+#
+# analyze3-5.1.*: sqlite3_clear_bindings()
+# analyze3-5.2.*: sqlite3_transfer_bindings()
+#
+do_test analyze3-5.1.1 {
+ drop_all_tables
+ execsql {
+ CREATE TABLE t1(x TEXT COLLATE NOCASE);
+ CREATE INDEX i1 ON t1(x);
+ INSERT INTO t1 VALUES('aaa');
+ INSERT INTO t1 VALUES('abb');
+ INSERT INTO t1 VALUES('acc');
+ INSERT INTO t1 VALUES('baa');
+ INSERT INTO t1 VALUES('bbb');
+ INSERT INTO t1 VALUES('bcc');
+ }
+
+ set S [sqlite3_prepare_v2 db "SELECT * FROM t1 WHERE x LIKE ?" -1 dummy]
+ sqlite3_bind_text $S 1 "a%" 2
+ set R [list]
+ while { "SQLITE_ROW" == [sqlite3_step $S] } {
+ lappend R [sqlite3_column_text $S 0]
+ }
+ concat [sqlite3_reset $S] $R
+} {SQLITE_OK aaa abb acc}
+do_test analyze3-5.1.2 {
+ sqlite3_clear_bindings $S
+ set R [list]
+ while { "SQLITE_ROW" == [sqlite3_step $S] } {
+ lappend R [sqlite3_column_text $S 0]
+ }
+ concat [sqlite3_reset $S] $R
+} {SQLITE_OK}
+do_test analyze3-5.1.3 {
+ sqlite3_finalize $S
+} {SQLITE_OK}
+
+do_test analyze3-5.1.1 {
+ set S1 [sqlite3_prepare_v2 db "SELECT * FROM t1 WHERE x LIKE ?" -1 dummy]
+ sqlite3_bind_text $S1 1 "b%" 2
+ set R [list]
+ while { "SQLITE_ROW" == [sqlite3_step $S1] } {
+ lappend R [sqlite3_column_text $S1 0]
+ }
+ concat [sqlite3_reset $S1] $R
+} {SQLITE_OK baa bbb bcc}
+
+do_test analyze3-5.1.2 {
+ set S2 [sqlite3_prepare_v2 db "SELECT * FROM t1 WHERE x = ?" -1 dummy]
+ sqlite3_bind_text $S2 1 "a%" 2
+ sqlite3_transfer_bindings $S2 $S1
+ set R [list]
+ while { "SQLITE_ROW" == [sqlite3_step $S1] } {
+ lappend R [sqlite3_column_text $S1 0]
+ }
+ concat [sqlite3_reset $S1] $R
+} {SQLITE_OK aaa abb acc}
+do_test analyze3-5.1.3 {
+ sqlite3_finalize $S2
+ sqlite3_finalize $S1
+} {SQLITE_OK}
finish_test
+