From: drh Date: Wed, 30 Mar 2011 17:25:35 +0000 (+0000) Subject: Disable the truncate optimization if there is a preupdate hook. X-Git-Tag: version-3.13.0~148^2~298 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67c495ac207665a2ac0becee02f067487bf75918;p=thirdparty%2Fsqlite.git Disable the truncate optimization if there is a preupdate hook. FossilOrigin-Name: d051694e024c590e4687cae1368f900799b7442d --- diff --git a/manifest b/manifest index 35fb6c6035..6ebb88896d 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Add\sdocumentation\sto\sthe\ssqlite3_preupdate_hook()\sinterface\sand\sits\srelatives. -D 2011-03-30T17:07:47.319 +C Disable\sthe\struncate\soptimization\sif\sthere\sis\sa\spreupdate\shook. +D 2011-03-30T17:25:35.303 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 27701a1653595a1f2187dc61c8117e00a6c1d50f F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -138,7 +138,7 @@ F src/callback.c 5069f224882cbdccd559f591271d28d7f37745bc F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 52ff72f966cee3087e0138a3ec69371c22be3c01 F src/date.c 1548fdac51377e4e7833251de878b4058c148e1b -F src/delete.c c55748a1628b54c8785de0ff4bd9cbe27fe111cb +F src/delete.c 4aebb9ccea435701c137bf25e07fe93ad8e9346d F src/expr.c 00817c672af554321fd67c44325afd7cef0e4648 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 418b840007c873975fd0d071746d952f8bca20ce @@ -485,7 +485,7 @@ F test/fuzz2.test 207d0f9d06db3eaf47a6b7bfc835b8e2fc397167 F test/fuzz3.test aec64345184d1662bd30e6a17851ff659d596dc5 F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b F test/fuzz_malloc.test dd7001ac86d09c154a7dff064f4739c60e2b312c -F test/hook.test 14b2439b878c9aae03a3684cba717be4bfdcc1c1 +F test/hook.test 29a0b6a18111835bdca827f62a7975a8e30a1dd5 F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4 F test/in.test 19b642bb134308980a92249750ea4ce3f6c75c2d F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75 @@ -929,7 +929,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f -P b11d941e92897663da46160185e6e305d4e28fe6 -R e37cfb6574f4ec186f2c67ceafeda97a +P 8180f2881fa970429e28d4f3258a56cfaabbcabd +R 7bdc0a7971e68baabbe152ea44f74530 U drh -Z ede135d544f338afa66b4a4b2184647f +Z a923e72061e5acce879b548f79bb9c49 diff --git a/manifest.uuid b/manifest.uuid index 9a70869e00..15b385f496 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -8180f2881fa970429e28d4f3258a56cfaabbcabd \ No newline at end of file +d051694e024c590e4687cae1368f900799b7442d \ No newline at end of file diff --git a/src/delete.c b/src/delete.c index a5d00263b5..71a243d5a6 100644 --- a/src/delete.c +++ b/src/delete.c @@ -338,8 +338,13 @@ void sqlite3DeleteFrom( /* Special case: A DELETE without a WHERE clause deletes everything. ** It is easier just to erase the whole table. Prior to version 3.6.5, ** this optimization caused the row change count (the value returned by - ** API function sqlite3_count_changes) to be set incorrectly. */ - if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab) + ** API function sqlite3_count_changes) to be set incorrectly. + */ + if( rcauth==SQLITE_OK + && pWhere==0 + && !pTrigger + && !IsVirtual(pTab) + && db->xPreUpdateCallback==0 && 0==sqlite3FkRequired(pParse, pTab, 0, 0) ){ assert( !isView ); diff --git a/test/hook.test b/test/hook.test index 016569f0ae..5cceaf9abf 100644 --- a/test/hook.test +++ b/test/hook.test @@ -481,10 +481,10 @@ do_preupdate_test 7.2.1 { do_preupdate_test 7.2.2 { DELETE FROM t1 } { - DELETE main t3 1 1 1 1 - DELETE main t3 2 2 b a - DELETE main t3 4 4 a b - DELETE main t3 5 5 c d + DELETE main t1 1 1 1 1 + DELETE main t1 2 2 b a + DELETE main t1 4 4 a b + DELETE main t1 5 5 c d } do_execsql_test 7.3.0 { @@ -765,4 +765,3 @@ do_preupdate_test 7.6.4 { } finish_test -