]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Avoid dropping RETURNING triggers when the schema is reset while preparing a statement.
authordan <Dan Kennedy>
Mon, 10 Nov 2025 19:11:15 +0000 (19:11 +0000)
committerdan <Dan Kennedy>
Mon, 10 Nov 2025 19:11:15 +0000 (19:11 +0000)
FossilOrigin-Name: 45d820ca227eb1ade4dda498b0f94b2c5df4bab3fc5fcdd517ee125a43d16f4d

1  2 
manifest
manifest.uuid
src/hash.c
src/main.c

diff --cc manifest
index 6f6610152bba60ca0d20e9c1d2b6173b029beb9a,77e1baca39cf72dbce5c90f59dd70a9e5a89fe87..d1623a4ed037f8cb5f11069e28b97373f8837ab2
+++ b/manifest
@@@ -1,5 -1,5 +1,5 @@@
- C Fix\sa\smissing\sva_end()\scall\sin\sthe\sintckMprintf()\sfunction\sof\sthe\nincremental\sintegrity-check\sextension.
- D 2025-11-10T11:05:36.073
+ C Avoid\sdropping\sRETURNING\striggers\swhen\sthe\sschema\sis\sreset\swhile\spreparing\sa\sstatement.
 -D 2025-11-10T17:37:59.666
++D 2025-11-10T19:11:15.510
  F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
  F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
  F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@@ -687,15 -687,15 +687,15 @@@ F src/fault.c 460f3e55994363812d9d60844
  F src/fkey.c 928ed2517e8732113d2b9821aa37af639688d752f4ea9ac6e0e393d713eeb76f
  F src/func.c 0b802107498048d3dcac0b757720bcb8506507ce02159e213ab8161458eb293b
  F src/global.c a19e4b1ca1335f560e9560e590fc13081e21f670643367f99cb9e8f9dc7d615b
- F src/hash.c 73934a7f7ab1cb110614a9388cb516893b0cf5b7b69e4fd1a0780ac4ce166be7
- F src/hash.h 46b92795a95bfefb210f52f0c316e9d7cdbcdd7e7fcfb0d8be796d3a5767cddf
 -F src/hash.c e592527b97e99cd9046946a397d9ed63d8b466b385c8129249175a3bf22ee33c
++F src/hash.c dff10fa89d4a8280b764df9599b29342ea98cba2b868dccb5dfb3c419841a3f0
+ F src/hash.h c5f4a02aaf1dca835a68b51c8b906af265c6ca3d8d53d255e0453f0abce561be
  F src/hwtime.h d4d1b98c1afdc56986a5c0eba882786ef017e2180a320da25b4231b8e7e463e8
  F src/in-operator.md 10cd8f4bcd225a32518407c2fb2484089112fd71
  F src/insert.c dfd311b0ac2d4f6359e62013db67799757f4d2cc56cca5c10f4888acfbbfa3fd
  F src/json.c fb031340edee159c07ad37dbe668ffe945ed86f525b0eb3822e4a67cbc498a72
  F src/legacy.c d7874bc885906868cd51e6c2156698f2754f02d9eee1bae2d687323c3ca8e5aa
  F src/loadext.c a3bc9a2522dc3b960e38b7582d1818f6245a49289387c2c7b19f27bfeabf1e81
--F src/main.c 35e41b17b6355832498d4dd32b4db58dec5990190b5bc08bc210e4c6e73583be
++F src/main.c eaf5215917b7e8b34ddea013524287f6d5021ba0fc70202e7602e225ef0d16bf
  F src/malloc.c 410e570b30c26cc36e3372577df50f7a96ee3eed5b2b161c6b6b48773c650c5e
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
  F src/mem1.c 3bb59158c38e05f6270e761a9f435bf19827a264c13d1631c58b84bdc96d73b2
@@@ -2167,8 -2167,11 +2167,9 @@@ F tool/version-info.c 33d0390ef484b3b1c
  F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee87c1b31a7
  F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
  F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
- P 7a644178c8d289ca18631844b2d73b32fddc72afcc80906633dd38c14eba2ca9
- R bd6b05ffc04557a9ff7d69a81e6084d5
- U drh
- Z a1230748ab427e1519659da8a04065cb
 -P 62ad2350e368dc337ba2d0fb6847d07c40a6f79520dd6414d22b5b54983b0b12
 -R 43727fa3b19bd9f550a5daad80497dd6
 -T *branch * returning-fix
 -T *sym-returning-fix *
 -T -sym-trunk *
++P 62ad2350e368dc337ba2d0fb6847d07c40a6f79520dd6414d22b5b54983b0b12 e26bcef7522a6f6ee8d55fa30e7fe06419566cf4e8c2df0c33c92a4c89f58c05
++R 6a09bc20a679f411d2e7dd8b4866d82d
++T +closed e26bcef7522a6f6ee8d55fa30e7fe06419566cf4e8c2df0c33c92a4c89f58c05
+ U dan
 -Z 7df20ffae687bc1753586d20b75ba681
++Z 46d8d131081d65b42355f1e81a2148d3
  # Remove this line to create a well-formed Fossil manifest.
diff --cc manifest.uuid
index 835eaab8b5e3d6e6874fef70ab4e67b2d92b2154,5bcbb58eafed7071ff89cf5c9c430bb808c7da00..f938ffc295c8a3d7b362a8124b43e7002478ebab
@@@ -1,1 -1,1 +1,1 @@@
- 62ad2350e368dc337ba2d0fb6847d07c40a6f79520dd6414d22b5b54983b0b12
 -e26bcef7522a6f6ee8d55fa30e7fe06419566cf4e8c2df0c33c92a4c89f58c05
++45d820ca227eb1ade4dda498b0f94b2c5df4bab3fc5fcdd517ee125a43d16f4d
diff --cc src/hash.c
index 8cc6c09663c05beffeaa1194ffb09497323bb13e,1984a463c2081fa715b39bc4392af0f34b3e5907..670df16d8193f2ab3e24fba58038378eaba7c518
@@@ -270,3 -270,25 +270,26 @@@ void *sqlite3HashInsert(Hash *pH, cons
    insertElement(pH, pH->ht ? &pH->ht[new_elem->h % pH->htsize] : 0, new_elem);
    return 0;
  }
+ /*
+ ** Parameter pElem is currently part of hash table pFrom. Add it to hash 
+ ** table pTo. 
+ **
+ ** This procedure corrupts hash table pFrom. Specifically, it removes element
+ ** pElem from the list of all elements in the hash table, but may leave
+ ** a pointer to it in one of the hash buckets of pFrom. This is not a problem
+ ** because this function is only called if hash table pFrom will be cleared
+ ** before any further lookups or inserts are attempted.
+ */
+ void sqlite3HashTransfer(Hash *pTo, Hash *pFrom, HashElem *pElem){
+   if( pElem->prev ){
+     pElem->prev->next = pElem->next; 
+   }else{
+     assert( pFrom->first==pElem );
+     pFrom->first = pElem->next;
+   }
++  pTo->count++;
+   insertElement(pTo, pTo->ht ? &pTo->ht[pElem->h % pTo->htsize] : 0, pElem);
+ }
diff --cc src/main.c
index d333364c744e94cea4ea32d780367664e754fa42,d333364c744e94cea4ea32d780367664e754fa42..75439158c2c5f6ecbf24103fe71c989b85636229
@@@ -1394,6 -1394,6 +1394,7 @@@ void sqlite3LeaveMutexAndCloseZombie(sq
    /* Clear the TEMP schema separately and last */
    if( db->aDb[1].pSchema ){
      sqlite3SchemaClear(db->aDb[1].pSchema);
++    assert( db->aDb[1].pSchema->trigHash.count==0 );
    }
    sqlite3VtabUnlockList(db);