sqlite3changegroup grp
grp schema db main
eval $script
- do_test 3.1.$tn {
+ do_test 3.1.$tn.1 {
list [catch { grp change_finish false } msg] $msg
} [list 1 $error]
grp delete
+
+ sqlite3changegroup grp
+ grp schema db main
+ eval $script
+ do_test 3.1.$tn.2 {
+ list [catch { grp change_finishne false } msg] $msg
+ } [list 1 [lindex $error 0]]
+ grp delete
}
do_test 3.2.1 {
char **pzErr
){
int rc = SQLITE_OK;
+ char *zErr = 0;
if( pGrp->cd.pTab ){
SessionBuffer *aBuf = pGrp->cd.aBuf;
int ii;
for(ii=0; ii<nBuf; ii++){
if( pGrp->cd.pTab->abPK[ii] ){
if( aBuf[ii].nBuf<=1 ){
- *pzErr = sqlite3_mprintf(
+ zErr = sqlite3_mprintf(
"invalid change: %s value in PK of old.* record",
aBuf[ii].nBuf==1 ? "null" : "undefined"
);
rc = SQLITE_ERROR;
break;
}else if( aBuf[ii + nBuf].nBuf>0 ){
- *pzErr = sqlite3_mprintf(
+ zErr = sqlite3_mprintf(
"invalid change: defined value in PK of new.* record"
);
rc = SQLITE_ERROR;
}
}else
if( pGrp->bPatch==0 && (aBuf[ii].nBuf>0)!=(aBuf[ii+nBuf].nBuf>0) ){
- *pzErr = sqlite3_mprintf(
+ zErr = sqlite3_mprintf(
"invalid change: column %d "
"- old.* value is %sdefined but new.* is %sdefined",
ii, aBuf[ii].nBuf ? "" : "un", aBuf[ii+nBuf].nBuf ? "" : "un"
if( (pGrp->cd.eOp==SQLITE_INSERT || pGrp->bPatch==0 || isPK)
&& aBuf[ii].nBuf==0
){
- *pzErr = sqlite3_mprintf(
+ zErr = sqlite3_mprintf(
"invalid change: column %d is undefined", ii
);
rc = SQLITE_ERROR;
break;
}
if( aBuf[ii].nBuf==1 && isPK ){
- *pzErr = sqlite3_mprintf(
+ zErr = sqlite3_mprintf(
"invalid change: null value in PK"
);
rc = SQLITE_ERROR;
pGrp->cd.pTab = 0;
}
+ if( pzErr ){
+ *pzErr = zErr;
+ }else{
+ sqlite3_free(zErr);
+ }
return rc;
}
{ "change_text", 3, "[new|old] ICOL VALUE" }, /* 9 */
{ "change_blob", 3, "[new|old] ICOL VALUE" }, /* 10 */
{ "change_finish", 1, "BDISCARD" }, /* 11 */
+ { "change_finishne", 1, "BDISCARD" }, /* 12 */
- { "config", 2, "OPTION INTVAL" }, /* 12 */
- { "change_text-1", 3, "[new|old] ICOL VALUE" }, /* 13 */
- { "change_begin_ne", 3, "TYPE TABLE INDIRECT" }, /* 14 */
+ { "config", 2, "OPTION INTVAL" }, /* 13 */
+ { "change_text-1", 3, "[new|old] ICOL VALUE" }, /* 14 */
+ { "change_begin_ne", 3, "TYPE TABLE INDIRECT" }, /* 15 */
{ 0, 0, 0 }
};
int rc = TCL_OK;
break;
};
- case 14: /* change_beginne */
+ case 15: /* change_beginne */
case 5: { /* change_begin */
struct ChangeType {
const char *zType;
break;
}
+ case 12: /* change_finishne */
case 11: { /* change_finish */
int bDiscard = 0;
if( TCL_OK!=Tcl_GetBooleanFromObj(interp, objv[2], &bDiscard) ){
rc = TCL_ERROR;
}else{
char *zErr = 0;
- rc = sqlite3changegroup_change_finish(p->pGrp, bDiscard, &zErr);
+ char **pz = &zErr;
+ if( iSub==12 ) pz = 0;
+ rc = sqlite3changegroup_change_finish(p->pGrp, bDiscard, pz);
if( rc!=SQLITE_OK ){
rc = test_session_error(interp, rc, zErr);
}
break;
}
- case 12: { /* config */
+ case 13: { /* config */
struct OptionName {
const char *zOpt;
int op;
break;
}
- case 13: { /* change_text-1 */
+ case 14: { /* change_text-1 */
int bNew = 0;
int iCol = 0;
if( TCL_OK!=testGetNewOrOld(interp, objv[2], &bNew)
-C Additional\schanges\sto\sthe\sWindows\sVFS\sto\stry\sto\sget\sthe\ssystem\sto\sa\spoint\nwhere\sit\swill\scompile\sfor\sUWP.
-D 2026-05-13T20:06:08.009
+C Fix\sthe\ssqlite3changegroup_change_finish()\sAPI\sso\sthat\sit\scorrectly\shandles\sNULL\sbeing\spassed\sfor\sthe\spzErr\sparameter.
+D 2026-05-13T20:37:30.527
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/session/sessionbig.test 47c381e7acfabeef17d98519a3080d69151723354d220afa2053852182ca7adf
F ext/session/sessionblob.test 87faf667870b72f08e91969abd9f52a383ab7b514506ee194d64a39d8faff00a
F ext/session/sessionchange.test 6618cb1c1338a4b6df173b6ac42d09623fb71269962abf23ebb7617fe9f45a50
-F ext/session/sessionchange2.test 6b5b7e3d1cc4ede43817f7fb68e3771aac4aa6500adb21a458b3e5a9fd841f83
+F ext/session/sessionchange2.test 8f59185216882adc8b34bb5ba63887459acf3df58493bcffa12e4d05ab6a6b85
F ext/session/sessionconflict.test 19e4a53795c4c930bfec49e809311e09b2a9e202d9446e56d7a8b139046a0c07 x
F ext/session/sessiondiff.test e89f7aedcdd89e5ebac3a455224eb553a171e9586fc3e1e6a7b3388d2648ba8d
F ext/session/sessionfault.test c2b43d01213b389a3f518e90775fca2120812ba51e50444c4066962263e45c11
F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795
F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544a806421b85dc2dec
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
-F ext/session/sqlite3session.c a75ef1e361ad857518d75184366936beb752f3c2522895dc529c368642eab5a6
+F ext/session/sqlite3session.c a23436c2ecaddf0b0301460aa3ff2986f151eb36e7510509521467ce669e9d45
F ext/session/sqlite3session.h 063e7bf7be2fff874456f452a224b5b3013b25682d108933b0351c93a1279b9c
-F ext/session/test_session.c 2a02a68b522e2f3d4a64b2a4733af54b0f3e500769aeccd5bcbdd440103db069
+F ext/session/test_session.c 21524e86610986c8296ad08e71a1af1804b823b5830ed1189623b15ceb886c7c
F ext/wasm/GNUmakefile 65feef4ec48e62249f90278c4c08a3fe3c69e2461ff560b61c03cd73606e0949
F ext/wasm/README-dist.txt f01081a850ce38a56706af6b481e3a7878e24e42b314cfcd4b129f0f8427066a
F ext/wasm/README.md 2e87804e12c98f1d194b7a06162a88441d33bb443efcfe00dc6565a780d2f259
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P b167c4c96e6a753952eb4be95d6283b50a9c59f4ecf59d60cf10d8de9cb115d8
-R f066d4eda59be22d296a3e1a1cf73d03
-U drh
-Z 5430e3ed6629c616c0df3c5d9bb8cb87
+P 3ddc07110dacef98c14b852dcdc4f11d1c0f4061008bf3a61e2df707b0dc6c6b
+R 1dab4a7992096fd33a1b7a8bbcb2d58c
+U dan
+Z 369ba48121df91d9d1fcfb40348f03a0
# Remove this line to create a well-formed Fossil manifest.
-3ddc07110dacef98c14b852dcdc4f11d1c0f4061008bf3a61e2df707b0dc6c6b
+f81d6d7bc8943729f678a3b62921a96764b15b9cc11d8a5753e48210a1b59617