diff --git a/manifest b/manifest index 83c26eaf75..442880d455 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Enhance\ssqlite3_bind_int64()\sso\sthat\sit\snever\striggers\sa\sreprepare\sif\sthe\nvalue\sdoes\snot\sactually\schange. -D 2026-08-22T19:27:30.677 +C Correctly\senforce\sa\sUNIQUE\sconstraint\son\sa\snon-PRIMARY\sKEY\scolumn\sof\sa\stable\nthat\shas\san\sINTEGER\sPRIMARY\sKEY\swith\sON\sCONFLICT\sREPLACE\sand\sthat\shas\na\sAFTER\sDELETE\strigger\sthat\sfires\swhen\sthe\sREPLACE\shappens\sand\sthat\strigger\ntries\sto\sINSERT\sa\snew\srow\sthat\sviolates\suniqueness.\n[bugs:/info/2026-08-22T23:55:15Z|Bug\s2026-08-22T23:55:15Z]. +D 2026-08-23T21:41:08.892 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea @@ -703,7 +703,7 @@ F src/hash.c 03c8c0f4be9e8bcb6de65aa26d34a61d48a9430747084a69f9469fbb00ea52ca F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf F src/hwtime.h 5cb15147c8583d0fc4748e1c12ea6f38c9deaeefa147a4d8d379fd9bc81fee9a F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71 -F src/insert.c 1c3dfe4076a4dc9a4c6890bbe5e5dbbf78d43893e175a0370cc9a56d0cc6ce90 +F src/insert.c e9c57ad2999604e739199a7aa713f49233846a2266e6e0905f74e481c9eafa27 F src/json.c 507a7be1d4c7ca435a6b22e742cc344a3f318d68b49995dadb921502b374aa18 F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa F src/loadext.c 5cd4cd7ec6e1a46416806899086363fbf95eecd3bfb9a388b436c9a77243c902 @@ -1906,7 +1906,7 @@ F test/trans.test 45f6f9ab6f66a7b5744f1caac06b558f95da62501916906cf55586a896f9f4 F test/trans2.test 62bd045bfc7a1c14c5ba83ba64d21ade31583f76 F test/trans3.test 91a100e5412b488e22a655fe423a14c26403ab94 F test/transitive1.test d6252d06ddc104d13372fce0da93af501546bf5d75cb4d2a1f83b8c27238997a -F test/trigger1.test e8c2d09342c26ab99e2e2dbef9a0f3a789e43492608637b1614b1f6cc04ce9fc +F test/trigger1.test 0a0ee1c0f28594bce653081449b87cfd5c2abc1506a8c7e77255e2236124215b F test/trigger2.test 30fcb3a6aa6782020d47968735ee6086ed795f73a7affa9406c8d5a36e7b5265 F test/trigger3.test aa640bb2bbb03edd5ff69c055117ea088f121945 F test/trigger4.test 74700b76ebf3947b2f7a92405141eb2cf2a5d359 @@ -2219,8 +2219,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c -P ad7d15323b091b6e193ee7bc4eb1bf7b088cd18aa92ac29729cd30b16e4b2981 -R ac01e68c4a7e1b59331d4a79ee4ef243 +P db0cb462aaf2014cfe8cfc90f7cddda07458a5439b2154dc2781420154bd3098 +R 3299256b56d50f1b8b3e3aadeb08dafe U drh -Z 977a9fdee769da4e94be328a0bf6bf12 +Z 2c4510849b0866e71cc7f28b326c60ec # Remove this line to create a well-formed Fossil manifest. diff --git a/manifest.uuid b/manifest.uuid index 3acfb13101..78e26d1e45 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -db0cb462aaf2014cfe8cfc90f7cddda07458a5439b2154dc2781420154bd3098 +521c9f5f282f159332101be32031568cb3f08fd937f354a282e09957dd570f53 diff --git a/src/insert.c b/src/insert.c index 6f9370d734..b2c20234c3 100644 --- a/src/insert.c +++ b/src/insert.c @@ -2661,7 +2661,7 @@ void sqlite3GenerateConstraintChecks( ** Hence, make a complete copy of the opcode, rather than using ** a pointer to the opcode. */ x = *sqlite3VdbeGetOp(v, addrConflictCk); - if( x.opcode!=OP_IdxRowid ){ + if( x.opcode!=OP_IdxRowid || isUpdate ){ int p2; /* New P2 value for copied conflict check opcode */ const char *zP4; if( sqlite3OpcodeProperty[x.opcode]&OPFLG_JUMP ){ diff --git a/test/trigger1.test b/test/trigger1.test index 43ec73d4e5..9935885fca 100644 --- a/test/trigger1.test +++ b/test/trigger1.test @@ -875,5 +875,20 @@ do_catchsql_test trigger1-25.3 { END; } {1 {trigger "r2" contains too many steps}} +# Bug 2026-08-22T23:55:15Z +# +reset_db +do_execsql_test trigger1-26.1 { + PRAGMA recursive_triggers=ON; + CREATE TABLE t(a INTEGER PRIMARY KEY ON CONFLICT REPLACE, b INT UNIQUE); + INSERT INTO t VALUES(3,3),(4,4); + CREATE TRIGGER tr AFTER DELETE ON t + BEGIN + INSERT INTO t VALUES(9,9); + END; +} {} +do_catchsql_test trigger1-26.2 { + UPDATE t SET a=a+1, b=9 WHERE a=3; +} {1 {UNIQUE constraint failed: t.b}} finish_test