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

If a reprepare fails in sqlite3_stmt_explain(), do not leave the prepared

statement in an invalid state.
[Bugs:/info/2026-10-21T09:18:32Z|Bug 2026-10-21T09:18:32Z].
Test cases in TH3.

FossilOrigin-Name: 0ffda38c5f7f506cd14c9aedc756f2fc025fe49f0822a4ecf28451a4d2b840e0
This commit is contained in:
drh
2026-10-21 11:25:55 +00:00
parent b6b600ac29
commit 23b355fb6e
3 changed files with 13 additions and 9 deletions

View File

@@ -1,5 +1,5 @@
C Improvements\sto\svtab\shandling\sof\sSAVEPOINT.
D 2026-10-21T10:31:35.982
C If\sa\sreprepare\sfails\sin\ssqlite3_stmt_explain(),\sdo\snot\sleave\sthe\sprepared\nstatement\sin\san\sinvalid\sstate.\n[Bugs:/info/2026-10-21T09:18:32Z|Bug\s2026-10-21T09:18:32Z].\nTest\scases\sin\sTH3.
D 2026-10-21T11:25:55.280
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -877,7 +877,7 @@ F src/vacuum.c d3d35d8ae893d419ade5fa196d761a83bddcbb62137a1a157ae751ef38b26e82
F src/vdbe.c eb3380e12110b1b88dec6327fa95b59d6015ec5649a4e10f2ea8cd1334032db3
F src/vdbe.h b6ffb28da04363fd5d439b8204118fd3f2e751abe4f8e3edb089155fb90d4607
F src/vdbeInt.h 68e5ab63f184f2871780c83ce78b425d0360869611baea4c65575f91f76ac1d3
F src/vdbeapi.c aac3e0c3d7fc1da567c2b7040e14e9a30a1315c5c912d4d3c2d571d9a44523cb
F src/vdbeapi.c 5795719563b5d8b35a6737c3aecef2c45f6a4103715d64827ebb3174a2238490
F src/vdbeaux.c 7e3975222531284ff14cb1be93b5751f6a3392a56d86d6329fcaa120471f56f3
F src/vdbeblob.c b3f0640db9642fbdc88bd6ebcc83d6009514cafc98f062f675f2c8d505d82692
F src/vdbemem.c 1a4d79ef826159bee246831989df146fd135b5591553d681cdaff8065f504a8e
@@ -2295,9 +2295,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P aa36cfe5b0f944752ace7986b2bff5dcb597fc0d456da781ed5b55e47ecb3d3c 2ec6c0ff491454f25103f368a5885a6bcd0177fa1eb0bfb2060cd5a6f8c60a72
R 6bef2e92840e565434c6eeb23009ac59
T +closed 2ec6c0ff491454f25103f368a5885a6bcd0177fa1eb0bfb2060cd5a6f8c60a72
P 1d886c6abf1ed0be934d93cd7fe8d200b626a40b534e493ac15370819211bc72
R 33e83a36050dc21838dfc500a495da9d
U drh
Z 4ee88dedde2fe70f2db5843335804961
Z b1900a927d98aa5f0d7eabdc22657a96
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
1d886c6abf1ed0be934d93cd7fe8d200b626a40b534e493ac15370819211bc72
0ffda38c5f7f506cd14c9aedc756f2fc025fe49f0822a4ecf28451a4d2b840e0

View File

@@ -2170,9 +2170,14 @@ int sqlite3_stmt_explain(sqlite3_stmt *pStmt, int eMode){
v->explain = eMode;
rc = SQLITE_OK;
}else{
int savedMode = v->explain;
v->explain = eMode;
rc = sqlite3Reprepare(v);
v->haveEqpOps = eMode==2;
if( rc ){
v->explain = savedMode;
}else{
v->haveEqpOps = eMode==2;
}
}
if( v->explain ){
v->nResColumn = 12 - 4*v->explain;