]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Properly fix temp triggers created as part of FK processing to their schemas. Otherwi...
authordan <Dan Kennedy>
Mon, 16 Mar 2026 11:14:26 +0000 (11:14 +0000)
committerdan <Dan Kennedy>
Mon, 16 Mar 2026 11:14:26 +0000 (11:14 +0000)
FossilOrigin-Name: 80bc5bc07e221f837c28066f0a438f11c8ab6be4c8ba93615439eb1667967003

manifest
manifest.uuid
src/fkey.c
test/fkey8.test

index 42660b0aab26502d98e92123e5bf0d3bea5ab444..86a1bf4c10719e61e58ea52fe0ea7966bc699cf0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\sa\smissing\sreturn\sfor\sthe\sinvalid\sarguments\serror\scase\sin\ssqlite3_test_control_fault_install.\sNo\scurrent\sscripts\strigger\sthis\serror.
-D 2026-03-14T16:30:13.321
+C Properly\sfix\stemp\striggers\screated\sas\spart\sof\sFK\sprocessing\sto\stheir\sschemas.\sOtherwise\sthey\smay\sbecome\sconfused\sby\ssimilarly\snamed\schild\stables\sin\sother\sattached\sdatabases.\sFix\sfor\sforum\spost\s[forum:636bd0180a\s|\s636bd0180a].
+D 2026-03-16T11:14:26.814
 F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -685,7 +685,7 @@ F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
 F src/delete.c 901499bed747c3b4b2be45be1abe912ba50a3f6a40ba88cc006ccf279f2d0e97
 F src/expr.c 51e9c77ff5d9a21439e611fe6571a3cd50387e526e13c5614fd407e5b8571930
 F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
-F src/fkey.c fb0f74c57d19a2d3f113f3476826919d68feda7ff334abfdb479a9a6353b9fcd
+F src/fkey.c 9a5b5b56af9f8fd5ddff8f83816de3e6d9b91ff392eeaefe707a59623e55aae7
 F src/func.c 6e7de3551ae0f8205006e5109f025223246edd20186d54d90746dee7c1c5c093
 F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
 F src/hash.c 03c8c0f4be9e8bcb6de65aa26d34a61d48a9430747084a69f9469fbb00ea52ca
@@ -1119,7 +1119,7 @@ F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
 F test/fkey5.test 6727452e163a427147e84e739da18713da553d79f9783559b04fdcd36d5c7421
 F test/fkey6.test 668a7299e75899b0a3342c36df655be57f76a05aca3544bda939a6e676e2f000
 F test/fkey7.test 64fb28da03da5dfe3cdef5967aa7e832c2507bf7fb8f0780cacbca1f2338d031
-F test/fkey8.test 51deda7f1a1448bca95875e4a6e1a3a75b4bd7215e924e845bd60de60e4d84bf
+F test/fkey8.test 00ecfcaba529d4d9ef608551714e6a4d1e9d7083406f65e2f108c539aff6e8e3
 F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
 F test/fordelete.test ba98f14446b310f9c9d935b97ec748753d0144a28b356ba30d1f4f6958fdde5c
 F test/fork-test.c 9ac2e6423a1d38df3d6be0e8ac15608b545de21e2b19d9d876254c5931b63edb
@@ -2192,8 +2192,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
 F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
 F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 4c54f22f7abbf5403e554fbf3dd70ddee97352d7de1f7fe19f540bdf681f4e75
-R 9a46f2704968b9ff8483cbaac9c355df
-U stephan
-Z 7e9e58dae5593d350ceb379161db40c2
+P dc78d258745a1350685b37da56f0a2ac2e437b422415d634522dc61d340d06eb
+R f4cdffcb37cefef0e7ac6ef7ca48fea4
+U dan
+Z d215803567bcaa7157c0e213d8c093a7
 # Remove this line to create a well-formed Fossil manifest.
index 24ac648beecbba9e55d6328f589d70528f7df539..35c327cc26abd16f9954782bce99332f0a461f05 100644 (file)
@@ -1 +1 @@
-dc78d258745a1350685b37da56f0a2ac2e437b422415d634522dc61d340d06eb
+80bc5bc07e221f837c28066f0a438f11c8ab6be4c8ba93615439eb1667967003
index 59edd8810e03b8e56bc999eafe4d66750f1aa854..105e5734f03ff64db58b67df52ab1924c85922fd 100644 (file)
@@ -1337,10 +1337,10 @@ static Trigger *fkActionTrigger(
       }
       pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
       if( pSrc ){
-        assert( pSrc->nSrc==1 );
-        pSrc->a[0].zName = sqlite3DbStrDup(db, zFrom);
-        assert( pSrc->a[0].fg.fixedSchema==0 && pSrc->a[0].fg.isSubquery==0 );
-        pSrc->a[0].u4.zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zDbSName);
+        SrcItem *pItem = &pSrc->a[0];
+        pItem->zName = sqlite3DbStrDup(db, zFrom);
+        pItem->fg.fixedSchema = 1;
+        pItem->u4.pSchema = pTab->pSchema;
       }
       pSelect = sqlite3SelectNew(pParse, 
           sqlite3ExprListAppend(pParse, 0, pRaise),
@@ -1362,7 +1362,10 @@ static Trigger *fkActionTrigger(
       pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1];
       pStep->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
       if( pStep->pSrc ){
-        pStep->pSrc->a[0].zName = sqlite3DbStrNDup(db, zFrom, nFrom);
+        SrcItem *pItem = &pStep->pSrc->a[0];
+        pItem->zName = sqlite3DbStrNDup(db, zFrom, nFrom);
+        pItem->u4.pSchema = pTab->pSchema;
+        pItem->fg.fixedSchema = 1;
       }
       pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
       pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE);
index 2d72f6fcf0c84b4225b4535eb114b7b3411004ae..5eb97c39dd1a90aff1494748653c5a438fa81137 100644 (file)
@@ -249,5 +249,45 @@ do_execsql_test 6.3 {
   DELETE FROM aux.p1 WHERE a=123;
 }
 
+#-------------------------------------------------------------------------
+# Forum: https://sqlite.org/forum/forumpost/636bd0180a
+#
+reset_db
+do_execsql_test 7.0 {
+  PRAGMA foreign_keys = ON;
+  CREATE TABLE p1 (pid PRIMARY KEY);
+  CREATE TABLE c1 (cid PRIMARY KEY,
+      pid REFERENCES p1(pid) ON UPDATE CASCADE
+  );
+}
+
+do_execsql_test 7.1 {
+  ATTACH ':memory:' AS aux;
+  CREATE TABLE aux.p1 (pid PRIMARY KEY);
+  CREATE TABLE aux.c1 (cid PRIMARY KEY,
+      pid REFERENCES p1(pid) ON UPDATE CASCADE);
+
+  INSERT INTO aux.p1 VALUES (10);
+  INSERT INTO aux.p1 VALUES (20);
+
+  INSERT INTO aux.c1 VALUES(11, 10);
+  INSERT INTO aux.c1 VALUES(12, 10);
+  INSERT INTO aux.c1 VALUES(21, 20);
+  INSERT INTO aux.c1 VALUES(22, 20);
+}
+
+do_catchsql_test 7.2 {
+  UPDATE aux.p1 SET pid = pid * 10;
+} {0 {}}
+
+do_execsql_test 7.3 {
+  SELECT * FROM aux.p1;
+} {100 200}
+
+do_execsql_test 7.4 {
+  SELECT * FROM aux.c1;
+} {11 100 12 100 21 200 22 200}
+
+
 
 finish_test