-C Detect\sstack\soverflow\sin\sthe\sparser\sand\sreport\san\serror.\s(CVS\s3112)
-D 2006-02-27T21:58:08
+C The\sparser\snow\spermits\svery\slarge\striggers\s-\striggers\swith\s10000\sor\smore\nstatements.\s(CVS\s3113)
+D 2006-02-27T22:22:28
F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
F src/pager.c f65d0b05182ff6059e9566b2eed1ec5f0cddc2f6
F src/pager.h 425a9e52d5404158de016799715cbc2c3d685178
-F src/parse.y 969fa5ddf747ba1034c9960cce49610c4b3fa617
+F src/parse.y c2daaa24fa2c8e256af740f29d3d61ac552fbd49
F src/pragma.c 607b0f3b1916aa01918acd08499bd6ef21065c23
F src/prepare.c cf0fc8ebaf94409955ecb09ffeb0099c9ef44693
F src/printf.c cda33918f602ff20bfba3ceae642ac1ed8f476d6
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
F src/shell.c 738f55ed75fb36731e764bfdb40756ac43b90b08
F src/sqlite.h.in 0bf6f03f9a14dde5f3a4f87471840803acaa4497
-F src/sqliteInt.h d99092c3bb510712b26461cf07cff8eca686b83d
+F src/sqliteInt.h ccc6c2351fb454aec927b5da8d83561c7d4b48cd
F src/table.c f64ec4fbfe333f8df925bc6ba494f55e05b0e75e
F src/tclsqlite.c d9c26374b52cd47233ae0620d0a858a59b601f89
F src/test1.c 9d299609a0ce35157fe15cdf8b4c663db5d40386
F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83
F test/trigger6.test 0e411654f122552da6590f0b4e6f781048a4a9b9
F test/trigger7.test 0afa870be2ce1b132cdb85b17a4a4ef45aa8cece
+F test/trigger8.test 3a09275aa2214fdff56f731b1e775d8dfee4408a
F test/types.test a74083427a73ff8af2723bae209d09cce5722c3a
F test/types2.test 81dd1897be8ef4b5b73d0006e6076abe40610de3
F test/types3.test ea0ddf793ad5cd17c3b029dd8f48473059f873b6
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P a359b1817e85a9c5f31085817ae70e3e0b8ac7a7
-R 9e1f3653271b124969ed2916a0c66ae2
+P bd2c38f4670d1243284f2431b5e0712a6d1de1d7
+R 24d0b5ace2fb2a16cf769d74dd5e70e5
U drh
-Z b0010c3c2b756095a18a8f4b4a40541b
+Z 6578b75ec2a8a5a9e423f996f316552a
-bd2c38f4670d1243284f2431b5e0712a6d1de1d7
\ No newline at end of file
+b4fa96d0e92182cd8792e88b4540b95912bb9f95
\ No newline at end of file
** the parser. Lemon will also generate a header file containing
** numeric codes for all of the tokens.
**
-** @(#) $Id: parse.y,v 1.197 2006/02/27 21:58:08 drh Exp $
+** @(#) $Id: parse.y,v 1.198 2006/02/27 22:22:28 drh Exp $
*/
// All token codes are small integers with #defines that begin with "TK_"
%type trigger_cmd_list {TriggerStep*}
%destructor trigger_cmd_list {sqlite3DeleteTriggerStep($$);}
-trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). {
- X->pNext = Y;
- A = X;
+trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. {
+ if( Y ){
+ Y->pLast->pNext = X;
+ }else{
+ Y = X;
+ }
+ Y->pLast = X;
+ A = Y;
}
trigger_cmd_list(A) ::= . { A = 0; }
*************************************************************************
** Internal interface definitions for SQLite.
**
-** @(#) $Id: sqliteInt.h,v 1.487 2006/02/24 02:53:50 drh Exp $
+** @(#) $Id: sqliteInt.h,v 1.488 2006/02/27 22:22:29 drh Exp $
*/
#ifndef _SQLITEINT_H_
#define _SQLITEINT_H_
ExprList *pExprList; /* Valid for UPDATE statements and sometimes
INSERT steps (when pSelect == 0) */
IdList *pIdList; /* Valid for INSERT statements only */
-
- TriggerStep * pNext; /* Next in the link-list */
+ TriggerStep *pNext; /* Next in the link-list */
+ TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */
};
/*
--- /dev/null
+# 2006 February 27
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+# This file implements regression tests for SQLite library.
+#
+# This file implements tests to make sure abusively large triggers
+# (triggers with 100s or 1000s of statements) work.
+#
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+ifcapable {!trigger} {
+ finish_test
+ return
+}
+
+
+do_test trigger8-1.1 {
+ execsql {
+ CREATE TABLE t1(x);
+ CREATE TABLE t2(y);
+ }
+ set sql "CREATE TRIGGER r10000 AFTER INSERT ON t1 BEGIN\n"
+ for {set i 0} {$i<10000} {incr i} {
+ append sql " INSERT INTO t2 VALUES($i);\n"
+ }
+ append sql "END;"
+ execsql $sql
+ execsql {
+ INSERT INTO t1 VALUES(5);
+ SELECT count(*) FROM t2;
+ }
+} {10000}
+
+finish_test