{INSERT sqlite_stat1 CONFLICT {t xyz t sqlite_autoindex_xyz_1 t {100 1 1}} {t xyz t sqlite_autoindex_xyz_1 t {200 1 1}}}
}]
+#-------------------------------------------------------------------------
+set ::conflict_list [list]
+proc xConflict {args} {
+ lappend ::conflict_list $args
+ return "OMIT"
+}
+
+forcedelete test.db2
+do_execsql_test 4.0 {
+ CREATE TABLE x1(a, b, c, PRIMARY KEY(a)) WITHOUT ROWID;
+ INSERT INTO x1 VALUES(1, 'one', 'i');
+ INSERT INTO x1 VALUES(2, 'two', 'ii');
+ INSERT INTO x1 VALUES(3, 'three', 'iii');
+ VACUUM INTO 'test.db2';
+}
+
+set C [changeset_from_sql {
+ DELETE FROM x1 WHERE a=2;
+}]
+
+sqlite3 db2 test.db2
+do_execsql_test -db db2 4.1 {
+ UPDATE x1 SET b='four hundred' WHERE a=2;
+}
+
+do_test 4.2.1 {
+ set ::conflict_list [list]
+ sqlite3changeset_apply_v2 db2 $C xConflict
+ set ::conflict_list
+} [list {*}{
+ {DELETE x1 DATA {i 2 t two t ii} {i 2 t {four hundred} t ii}}
+}]
+do_test 4.2.2 {
+ set ::conflict_list [list]
+ sqlite3changeset_apply_v2 -ignorenoop db2 $C xConflict
+ set ::conflict_list
+} [list {*}{
+ {DELETE x1 DATA {i 2 t two t ii} {i 2 t {four hundred} t ii}}
+}]
finish_test
void *pCtx, /* First argument for conflict handler */
int *pbReplace /* OUT: Set to true if PK row is found */
){
- int res = 0; /* Value returned by conflict handler */
+ int res = SQLITE_CHANGESET_OMIT;/* Value returned by conflict handler */
int rc;
int nCol;
int op;
if( rc==SQLITE_ROW ){
/* There exists another row with the new.* primary key. */
- if( p->bIgnoreNoop
- && sqlite3_column_int(p->pSelect, sqlite3_column_count(p->pSelect)-1)
+ if( 0==p->bIgnoreNoop
+ || 0==sqlite3_column_int(p->pSelect, sqlite3_column_count(p->pSelect)-1)
){
- res = SQLITE_CHANGESET_OMIT;
- }else{
pIter->pConflict = p->pSelect;
res = xConflict(pCtx, eType, pIter);
pIter->pConflict = 0;
int nBlob = pIter->in.iNext - pIter->in.iCurrent;
sessionAppendBlob(&p->constraints, aBlob, nBlob, &rc);
return SQLITE_OK;
- }else{
+ }else if( p->bIgnoreNoop==0 || op!=SQLITE_DELETE ){
/* No other row with the new.* primary key. */
res = xConflict(pCtx, eType+1, pIter);
if( res==SQLITE_CHANGESET_REPLACE ) rc = SQLITE_MISUSE;
sqlite3_step(p->pDelete);
rc = sqlite3_reset(p->pDelete);
- if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 && p->bIgnoreNoop==0 ){
+ if( rc==SQLITE_OK && sqlite3_changes(p->db)==0 ){
rc = sessionConflictHandler(
SQLITE_CHANGESET_DATA, p, pIter, xConflict, pCtx, pbRetry
);
-C Add\sa\sdoc\ssentence\sabout\ssqlite3_set_clientdata()'s\sresult\svalue,\sper\srequest\sin\s[forum:bda6c22b6a\s|\sforum\spost\sbda6c22b6a].\sNo\scode\schanges.
-D 2025-08-16T10:17:04.239
+C Fix\sa\sproblem\scausing\san\sSQLITE_CHANGESET_DATA\sconflict\sof\sa\sDELETE\soperation\sto\sbe\sincorrectly\signored\sif\sthe\sSQLITE_CHANGESETAPPLY_IGNORENOOP\sis\sspecified.
+D 2025-08-19T21:35:23.154
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F ext/session/sessionmem.test f2a735db84a3e9e19f571033b725b0b2daf847f3f28b1da55a0c1a4e74f1de09
F ext/session/sessionnoact.test 4c7ae5c7d351cb5323bca62b6b095592ad24bd90a6713c178b62ab0063d23e19
F ext/session/sessionnoop.test a9366a36a95ef85f8a3687856ebef46983df399541174cb1ede2ee53b8011bc7
-F ext/session/sessionnoop2.test de4672dce88464396ec9f30ed08c6c01643a69c53ae540fadbbf6d30642d64e8
+F ext/session/sessionnoop2.test e0d70f220495f812ea61420bc6aca83f4bfcbc13635dfbe472b818f4d26fc482
F ext/session/sessionrebase.test 702378bdcb5062f1106e74457beca8797d09c113a81768734a58b197b5b334e2
F ext/session/sessionrowid.test 85187c2f1b38861a5844868126f69f9ec62223a03449a98a80600a44396f7363
F ext/session/sessionsize.test 8fcf4685993c3dbaa46a24183940ab9f5aa9ed0d23e5fb63bfffbdb56134b795
F ext/session/sessionstat1.test 5e718d5888c0c49bbb33a7a4f816366db85f59f6a4f97544a806421b85dc2dec
F ext/session/sessionwor.test 6fd9a2256442cebde5b2284936ae9e0d54bde692d0f5fd009ecef8511f4cf3fc
-F ext/session/sqlite3session.c 19e14bcca2fbc63a8022ffd708ea6e6986c4003a1e9bbca9b2989fd230362e15
+F ext/session/sqlite3session.c 8c570698b9a81a78f43635aa674c255b2dd8bee580ea5332058cea643c025686
F ext/session/sqlite3session.h b81e8536ce4b83babafd700f4ff67017804b6c1d71df963b30d3972958e7f4a7
F ext/session/test_session.c 8766b5973a6323934cb51248f621c3dc87ad2a98f023c3cc280d79e7d78d36fb
F ext/wasm/EXPORTED_FUNCTIONS.fiddle.in 27450c8b8c70875a260aca55435ec927068b34cef801a96205adb81bdcefc65c
F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
F tool/warnings.sh 1ad0169b022b280bcaaf94a7fa231591be96b514230ab5c98fbf15cd7df842dd
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 309fdd496673bf58984fb16aef3d4cc2ad8c9f6dad7687509f4d708fed5ba41b
-R a4e58dd9cd77f1cc28a06225c11258e0
-U stephan
-Z 6e7302815560bbb9e5f0e3993c9a29f3
+P c664cee321fc449283ecfc073c45057c078299be33dc0c170b156d81a6698b55
+R d2e2b61077873ad999793e9f0f5fdf47
+U dan
+Z 9282b014ea51abf55d96fd4bea24c74c
# Remove this line to create a well-formed Fossil manifest.
-c664cee321fc449283ecfc073c45057c078299be33dc0c170b156d81a6698b55
+78b543f85ac6643f3b69bf1250c6362f00e030f93f460ef7d04902682ef64ee9