From: dan Date: Mon, 10 Nov 2025 19:11:15 +0000 (+0000) Subject: Avoid dropping RETURNING triggers when the schema is reset while preparing a statement. X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f07576429e98218a955298320a5bee9aca414ce0;p=thirdparty%2Fsqlite.git Avoid dropping RETURNING triggers when the schema is reset while preparing a statement. FossilOrigin-Name: 45d820ca227eb1ade4dda498b0f94b2c5df4bab3fc5fcdd517ee125a43d16f4d --- f07576429e98218a955298320a5bee9aca414ce0 diff --cc manifest index 6f6610152b,77e1baca39..d1623a4ed0 --- a/manifest +++ 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 835eaab8b5,5bcbb58eaf..f938ffc295 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 62ad2350e368dc337ba2d0fb6847d07c40a6f79520dd6414d22b5b54983b0b12 -e26bcef7522a6f6ee8d55fa30e7fe06419566cf4e8c2df0c33c92a4c89f58c05 ++45d820ca227eb1ade4dda498b0f94b2c5df4bab3fc5fcdd517ee125a43d16f4d diff --cc src/hash.c index 8cc6c09663,1984a463c2..670df16d81 --- a/src/hash.c +++ b/src/hash.c @@@ -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 d333364c74,d333364c74..75439158c2 --- a/src/main.c +++ b/src/main.c @@@ -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);