1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

Avoid ever repreparing a statement if a call to sqlite3_bind_int64() does not actually change the bound value.

FossilOrigin-Name: 4708cfe5f7fe1874870564956f0f81ba79226657c6d07ea1edffba7d5a6e4e3b
This commit is contained in:
dan
2026-10-12 14:05:08 +00:00
parent b853a8f042
commit e037ddd700
4 changed files with 19 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
C Add\stest\scase\sfor\s[bugs:/info/2026-10-11T16:09:34Z\s|\s2026-10-11T16:09:34Z].\sBug\swas\salready\sfixed\sby\s[7f154192db].
D 2026-10-12T13:44:50.244
C Avoid\sever\srepreparing\sa\sstatement\sif\sa\scall\sto\ssqlite3_bind_int64()\sdoes\snot\sactually\schange\sthe\sbound\svalue.
D 2026-10-12T14:05:08.235
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -871,7 +871,7 @@ F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
F src/vdbe.c 2954169319fef68d5119e9855637e7a44dc64f34ee474d68001a05c03072cb48
F src/vdbe.h b6ffb28da04363fd5d439b8204118fd3f2e751abe4f8e3edb089155fb90d4607
F src/vdbeInt.h 68e5ab63f184f2871780c83ce78b425d0360869611baea4c65575f91f76ac1d3
F src/vdbeapi.c 5929b6010966f1f8f5be8605323cfa004b8f68cfa056735f8f283d85fae81391
F src/vdbeapi.c 4f7ad184ca2cd3770c5da3ce707f348965f9a2677acc25dcc256237ccdd0b99f
F src/vdbeaux.c 27d92528e7953a80f64782ef75e65a6694277214082e87d125e74e52d9e7ecd5
F src/vdbeblob.c b3f0640db9642fbdc88bd6ebcc83d6009514cafc98f062f675f2c8d505d82692
F src/vdbemem.c b2113c949e2ed918294e16a5ebaacdaca6be4f820f670517e3362e94c7019432
@@ -1622,7 +1622,7 @@ F test/regexp1.sql a57e8d2777c7d62142bc802a7f18791ed5f17561ce6a1ca6ff287ba1a8c87
F test/regexp1.test 0023eae4073265641b826a70d81ba34d4dd66ad71871a5b4a1b7cf500d5c0c51
F test/regexp2.test 64f9726b2ddc71aea06725fcad53231833d038d58b936d49083ace658b370a13
F test/reindex.test cd9d6021729910ece82267b4f5e1b5ac2911a7566c43b43c176a6a4732e2118d
F test/reprepare.test c8e4c5e8ba41849c73a03e006b9e6a38c9a86002300fb07f7a806d8b73b1e0e3
F test/reprepare.test 44106ed3509dac4ad81f70bbad97aaf32e4c8d92761133f3a51883f324b150be
F test/reservebytes.test 6163640b5a5120c0dee6591481e673a0fa0bf0d12d4da7513bad692c1a49a162
F test/resetdb.test 54c06f18bc832ac6d6319e5ab23d5c8dd49fdbeec7c696d791682a8006bd5fc3
F test/resolver01.test f4022acafda7f4d40eca94dbf16bc5fc4ac30ceb
@@ -2284,8 +2284,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 7f154192db5a3a79f4666edd31dfc29fd73904ccd3630952e3b032e49fee6455
R 33c8c740bf911a86fd5b8557c1ba1cab
P 085dca9d30e5ce500e22374573b553f6bcd934549bc5b25305b0b97d6b37a104
R eb4b1159f59ceaf74db08801163c192e
U dan
Z 9e68ec7f4733a7d310b8587dda072ab5
Z 8a563abeff3722e462d3eade902cf9a5
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
085dca9d30e5ce500e22374573b553f6bcd934549bc5b25305b0b97d6b37a104
4708cfe5f7fe1874870564956f0f81ba79226657c6d07ea1edffba7d5a6e4e3b

View File

@@ -1892,7 +1892,7 @@ int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
if( sm1!=sm2 ){
p->expired = 1;
}
}else{
}else if( (pVar->flags & MEM_Int)==0 || iValue!=pVar->u.i ){
/* Always expire if the smimask bit is clear */
p->expired = 1;
}

View File

@@ -85,6 +85,16 @@ do_reprepare_test 1.3 {
{ sqlite3_bind_int64 $stmt 1 2 } 1
}
do_reprepare_test 1.4 {
SELECT * FROM t1 LIMIT ?1
} {
{ sqlite3_bind_int64 $stmt 1 12 } 1
{ sqlite3_bind_int64 $stmt 1 12 } 0
{ sqlite3_bind_int64 $stmt 1 13 } 1
{ sqlite3_bind_int64 $stmt 1 13 } 0
{ sqlite3_bind_int64 $stmt 1 14 } 1
}
#-------------------------------------------------------------------------
# Test that if a variable is used both in a context where only a change
# to or from a small integer requires a reprepare (an equality comparison)