From e408edac1636c656f7044616ef0e37890612d233 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 24 Aug 2009 01:35:25 +0000 Subject: [PATCH 1/2] Run the column cache in a new context when generating code for trigger programs. Fix for ticket [efc02f9779]. FossilOrigin-Name: dee1b8eb402f47c6d5ee60aac28f8e3dcf98167f --- doc/report1.txt | 121 ---------------------------------------------- manifest | 27 +++++++---- manifest.uuid | 2 +- src/trigger.c | 2 + test/tkt3201.test | 29 +++++++++++ 5 files changed, 50 insertions(+), 131 deletions(-) delete mode 100644 doc/report1.txt diff --git a/doc/report1.txt b/doc/report1.txt deleted file mode 100644 index a236e7cedf..0000000000 --- a/doc/report1.txt +++ /dev/null @@ -1,121 +0,0 @@ -An SQLite (version 1.0) database was used in a large military application -where the database contained 105 tables and indices. The following is -a breakdown on the sizes of keys and data within these tables and indices: - -Entries: 967089 -Size: 45896104 -Avg Size: 48 -Key Size: 11112265 -Avg Key Size: 12 -Max Key Size: 99 - - 0..8 263 0% - 9..12 5560 0% - 13..16 71394 7% - 17..24 180717 26% - 25..32 215442 48% - 33..40 151118 64% - 41..48 77479 72% - 49..56 13983 74% - 57..64 14481 75% - 65..80 41342 79% - 81..96 127098 92% - 97..112 38054 96% - 113..128 14197 98% - 129..144 8208 99% - 145..160 3326 99% - 161..176 1242 99% - 177..192 604 99% - 193..208 222 99% - 209..224 213 99% - 225..240 132 99% - 241..256 58 99% - 257..288 515 99% - 289..320 64 99% - 321..352 39 99% - 353..384 44 99% - 385..416 25 99% - 417..448 24 99% - 449..480 26 99% - 481..512 27 99% - 513..1024 470 99% - 1025..2048 396 99% - 2049..4096 187 99% - 4097..8192 78 99% - 8193..16384 35 99% -16385..32768 17 99% -32769..65536 6 99% -65537..65541 3 100% - -If the indices are omitted, the statistics for the 49 tables -become the following: - -Entries: 451103 -Size: 30930282 -Avg Size: 69 -Key Size: 1804412 -Avg Key Size: 4 -Max Key Size: 4 - - 0..24 89 0% - 25..32 9417 2% - 33..40 119162 28% - 41..48 68710 43% - 49..56 9539 45% - 57..64 12435 48% - 65..80 38650 57% - 81..96 126877 85% - 97..112 38030 93% - 113..128 14183 96% - 129..144 7668 98% - 145..160 3302 99% - 161..176 1238 99% - 177..192 597 99% - 193..208 217 99% - 209..224 211 99% - 225..240 130 99% - 241..256 57 99% - 257..288 100 99% - 289..320 62 99% - 321..352 34 99% - 353..384 43 99% - 385..416 24 99% - 417..448 24 99% - 449..480 25 99% - 481..512 27 99% - 513..1024 153 99% - 1025..2048 92 99% - 2049..4096 7 100% - -The 56 indices have these statistics: - -Entries: 512422 -Size: 14879828 -Avg Size: 30 -Key Size: 9253204 -Avg Key Size: 19 -Max Key Size: 99 - - 0..8 246 0% - 9..12 5486 1% - 13..16 70717 14% - 17..24 178246 49% - 25..32 205722 89% - 33..40 31951 96% - 41..48 8768 97% - 49..56 4444 98% - 57..64 2046 99% - 65..80 2691 99% - 81..96 202 99% - 97..112 11 99% - 113..144 527 99% - 145..160 20 99% - 161..288 406 99% - 289..1024 316 99% - 1025..2048 304 99% - 2049..4096 180 99% - 4097..8192 78 99% - 8193..16384 35 99% -16385..32768 17 99% -32769..65536 6 99% -65537..65541 3 100% diff --git a/manifest b/manifest index 33fdd10b13..edf9fdd5a3 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,8 @@ -C When\sa\sdatabase\sfile\sis\sopened,\stry\sto\sfind\san\sunused\sfile\sdescriptor\sto\sreuse.\s\sThis\schange\saffects\sunix\s(and\sother\ssystems\sthat\suse\sos_unix.c)\sonly.\sFix\sfor\scvstrac\sticket\s[http://www.sqlite.org/cvstrac/tktview?tn=4018|#4018]. -D 2009-08-21T17:18:03 +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +C Run\sthe\scolumn\scache\sin\sa\snew\scontext\swhen\sgenerating\scode\sfor\strigger\nprograms.\s\sFix\sfor\sticket\s[efc02f9779]. +D 2009-08-24T01:35:25 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 73ddeec9dd10b85876c5c2ce1fdce627e1dcc7f8 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -22,7 +25,6 @@ F configure 486c870218ec915bd8edfece7109b6c864e82a5a F configure.ac 14740970ddb674d92a9f5da89083dff1179014ff F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538 -F doc/report1.txt a031aaf37b185e4fa540223cb516d3bccec7eeac F ext/README.txt 913a7bd3f4837ab14d7e063304181787658b14e1 F ext/async/README.txt 0c541f418b14b415212264cbaaf51c924ec62e5b F ext/async/sqlite3async.c ec97d85cdb56dda9312cce39dd3cd9d62a747ec6 @@ -200,7 +202,7 @@ F src/test_tclvar.c 9e42fa59d3d2f064b7ab8628e7ab2dc8a9fe93d4 F src/test_thread.c b8a1ab7ca1a632f18e8a361880d5d65eeea08eac F src/test_wsd.c 3ae5101de6cbfda2720152ab659ea84079719241 F src/tokenize.c af8a56e6a50c5042fc305bfa796275e9bf26ff2b -F src/trigger.c 9bc5278d509d81ff0f9b52f0ce7239563d188e32 +F src/trigger.c 545f3b8354001577a82c44fc6c4beac598b45b86 F src/update.c 4da327f706c0d0dfedf4d92154b1b5688bdea0ac F src/utf.c 3ca2c9461b8e942c68da28bfccd448663f536a6f F src/util.c efb5f8e533d4beef545cf765cab5f7920b4c75f9 @@ -621,7 +623,7 @@ F test/tkt2942.test c5c87d179799ca6d1fbe83c815510b87cd5ec7ce F test/tkt3080.test 1bca7579260920a66b4dd7e196e807c0f25ff804 F test/tkt3093.test fbdbc5b4969244ad11f540759003e361fcaf391f F test/tkt3121.test 536df66a02838c26a12fe98639354ca1290ca68b -F test/tkt3201.test 607d433ad2c1f6a8cb1af55aaca427f63c83191b +F test/tkt3201.test 7aac9921c187de4baad138060802a96956c7fe5d F test/tkt3292.test 962465a0984a3b8c757efe59c2c59144871ee1dd F test/tkt3298.test 20fd8773b825cb602e033aa04f8602e1ebdcd93c F test/tkt3334.test ea13a53cb176e90571a76c86605b14a09efe366d @@ -748,7 +750,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746 -P 75f596a04a74eb3a538c7be5b41756c970a21a1b -R a2800e2c5932867798528426b058f0c9 -U dan -Z 0551703c5a252ef4437a61cdae64c5ea +P 9b4d9ab62d687289837b13b07885e72cc3abe8a9 +R 8c0a86d1dda3ad47818cafa2a01a76cc +U drh +Z a8886aa9c2f39a29c2eeac74183b7a19 +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.6 (GNU/Linux) + +iD8DBQFKke5hoxKgR168RlERAlsiAJ99uio4dN8iQWmrdPv34d66O3Nb/wCdEt6E +0TzPUVqtgGFOj3LSxkTm7fQ= +=7r/8 +-----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index 9e75b69c40..c6f1f2e6c9 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -9b4d9ab62d687289837b13b07885e72cc3abe8a9 \ No newline at end of file +dee1b8eb402f47c6d5ee60aac28f8e3dcf98167f \ No newline at end of file diff --git a/src/trigger.c b/src/trigger.c index 893ebcb30a..eb84d9b433 100644 --- a/src/trigger.c +++ b/src/trigger.c @@ -856,7 +856,9 @@ int sqlite3CodeRowTrigger( sqlite3ExprIfFalse(pParse, whenExpr, endTrigger, SQLITE_JUMPIFNULL); sqlite3ExprDelete(db, whenExpr); + sqlite3ExprCachePush(pParse); codeTriggerProgram(pParse, p->step_list, orconf); + sqlite3ExprCachePop(pParse, 1); /* Pop the entry off the trigger stack */ pParse->trigStack = trigStackEntry.pNext; diff --git a/test/tkt3201.test b/test/tkt3201.test index 446fd32479..9bdda1af28 100644 --- a/test/tkt3201.test +++ b/test/tkt3201.test @@ -70,5 +70,34 @@ do_test tkt3201-7 { execsql { SELECT a, b, c, d FROM t1, t3 WHERE a < c } } {1 one 2 two} +# Ticket [efc02f977919] +# +do_test tkt3201-4.0 { + db eval { + CREATE TABLE t4(x); + CREATE TABLE t4_log(x); + CREATE TRIGGER r4_1 AFTER INSERT ON t4 WHEN new.x=1 BEGIN + INSERT INTO t4_log(x) VALUES(new.x); + END; + CREATE TRIGGER r4_2 AFTER INSERT ON t4 WHEN new.x=2 BEGIN + INSERT INTO t4_log(x) VALUES(new.x); + END; + CREATE TRIGGER r4_3 AFTER INSERT ON t4 WHEN new.x=3 BEGIN + INSERT INTO t4_log(x) VALUES(new.x); + END; + CREATE TRIGGER r4_4 AFTER INSERT ON t4 WHEN new.x=4 BEGIN + INSERT INTO t4_log(x) VALUES(new.x); + END; + INSERT INTO t4 VALUES(1); + INSERT INTO t4 VALUES(2); + INSERT INTO t4 VALUES(3); + INSERT INTO t4 VALUES(4); + SELECT * FROM t4_log; + } +} {1 2 3 4} + + + + finish_test From cee4c937713301ab655efebbd3c4465d55849444 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 24 Aug 2009 19:37:20 +0000 Subject: [PATCH 2/2] Update the version number to 3.6.18, even though the actual release of that version is still a few weeks away. FossilOrigin-Name: c0ea4e9a7dcd66c079f917af47157f6ab7d79401 --- VERSION | 2 +- configure | 20 ++++++++++---------- manifest | 20 ++++++++++---------- manifest.uuid | 2 +- 4 files changed, 22 insertions(+), 22 deletions(-) mode change 100644 => 100755 configure diff --git a/VERSION b/VERSION index 601c643270..c241e9602d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -3.6.17 +3.6.18 diff --git a/configure b/configure old mode 100644 new mode 100755 index 533ede8f60..505e0a3cf8 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.62 for sqlite 3.6.17. +# Generated by GNU Autoconf 2.62 for sqlite 3.6.18. # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. @@ -743,8 +743,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='sqlite' PACKAGE_TARNAME='sqlite' -PACKAGE_VERSION='3.6.17' -PACKAGE_STRING='sqlite 3.6.17' +PACKAGE_VERSION='3.6.18' +PACKAGE_STRING='sqlite 3.6.18' PACKAGE_BUGREPORT='' # Factoring default headers for most tests. @@ -1487,7 +1487,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures sqlite 3.6.17 to adapt to many kinds of systems. +\`configure' configures sqlite 3.6.18 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1552,7 +1552,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of sqlite 3.6.17:";; + short | recursive ) echo "Configuration of sqlite 3.6.18:";; esac cat <<\_ACEOF @@ -1670,7 +1670,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -sqlite configure 3.6.17 +sqlite configure 3.6.18 generated by GNU Autoconf 2.62 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1684,7 +1684,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by sqlite $as_me 3.6.17, which was +It was created by sqlite $as_me 3.6.18, which was generated by GNU Autoconf 2.62. Invocation command line was $ $0 $@ @@ -2065,7 +2065,7 @@ please regen with autoconf" >&2;} fi # The following RCS revision string applies to configure.in -# $Revision: 1.74 $ +# $Revision: 1.56 $ ######### # Programs needed @@ -13972,7 +13972,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by sqlite $as_me 3.6.17, which was +This file was extended by sqlite $as_me 3.6.18, which was generated by GNU Autoconf 2.62. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -14025,7 +14025,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -sqlite config.status 3.6.17 +sqlite config.status 3.6.18 configured by $0, generated by GNU Autoconf 2.62, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/manifest b/manifest index edf9fdd5a3..6212330420 100644 --- a/manifest +++ b/manifest @@ -1,14 +1,14 @@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 -C Run\sthe\scolumn\scache\sin\sa\snew\scontext\swhen\sgenerating\scode\sfor\strigger\nprograms.\s\sFix\sfor\sticket\s[efc02f9779]. -D 2009-08-24T01:35:25 +C Update\sthe\sversion\snumber\sto\s3.6.18,\seven\sthough\sthe\sactual\srelease\sof\nthat\sversion\sis\sstill\sa\sfew\sweeks\saway. +D 2009-08-24T19:37:21 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 73ddeec9dd10b85876c5c2ce1fdce627e1dcc7f8 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 F Makefile.vxworks 10010ddbf52e2503c7c49c7c0b7c7a096f8638a6 F README b974cdc3f9f12b87e851b04e75996d720ebf81ac -F VERSION 8fd162479ea9d3932d4492a889db80634742fe90 +F VERSION 7260e7baf934051dee42458206e915b75570f41d F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F addopcodes.awk 215333be9d99c260e076c3080a81dba3ae928c45 F art/2005osaward.gif 0d1851b2a7c1c9d0ccce545f3e14bca42d7fd248 @@ -21,7 +21,7 @@ F art/powered_by_sqlite.gif 7fbcd7d3675391fd3d21672c14c05f5999eb60d1 F config.guess 226d9a188c6196f3033ffc651cbc9dcee1a42977 F config.h.in 868fdb48c028421a203470e15c69ada15b9ba673 F config.sub 9ebe4c3b3dab6431ece34f16828b594fb420da55 -F configure 486c870218ec915bd8edfece7109b6c864e82a5a +F configure bccfdabb9982b7e88a33470741f1d6ba14a6b684 x F configure.ac 14740970ddb674d92a9f5da89083dff1179014ff F contrib/sqlitecon.tcl 210a913ad63f9f991070821e599d600bd913e0ad F doc/lemon.html f0f682f50210928c07e562621c3b7e8ab912a538 @@ -750,14 +750,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746 -P 9b4d9ab62d687289837b13b07885e72cc3abe8a9 -R 8c0a86d1dda3ad47818cafa2a01a76cc +P dee1b8eb402f47c6d5ee60aac28f8e3dcf98167f +R 18469d49f3e5ceb1a5be57bfca3721d7 U drh -Z a8886aa9c2f39a29c2eeac74183b7a19 +Z d9590dbc39db73d8a7cd1e77630302e6 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) -iD8DBQFKke5hoxKgR168RlERAlsiAJ99uio4dN8iQWmrdPv34d66O3Nb/wCdEt6E -0TzPUVqtgGFOj3LSxkTm7fQ= -=7r/8 +iD8DBQFKkuv0oxKgR168RlERAnbOAJ9GNnuKpMVMY0YMDaLOX/CLH3yVHQCfbq7u +jxVu7AXStYZw/1h03vBMaiw= +=8t8V -----END PGP SIGNATURE----- diff --git a/manifest.uuid b/manifest.uuid index c6f1f2e6c9..e64728f97a 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -dee1b8eb402f47c6d5ee60aac28f8e3dcf98167f \ No newline at end of file +c0ea4e9a7dcd66c079f917af47157f6ab7d79401 \ No newline at end of file