mirror of
https://github.com/sqlite/sqlite.git
synced 2025-07-30 19:03:16 +03:00
The parser now permits very large triggers - triggers with 10000 or more
statements. (CVS 3113) FossilOrigin-Name: b4fa96d0e92182cd8792e88b4540b95912bb9f95
This commit is contained in:
15
manifest
15
manifest
@ -1,5 +1,5 @@
|
|||||||
C Detect\sstack\soverflow\sin\sthe\sparser\sand\sreport\san\serror.\s(CVS\s3112)
|
C The\sparser\snow\spermits\svery\slarge\striggers\s-\striggers\swith\s10000\sor\smore\nstatements.\s(CVS\s3113)
|
||||||
D 2006-02-27T21:58:08
|
D 2006-02-27T22:22:28
|
||||||
F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b
|
F Makefile.in 5d8dff443383918b700e495de42ec65bc1c8865b
|
||||||
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
|
F Makefile.linux-gcc 74ba0eadf88748a9ce3fd03d2a3ede2e6715baec
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@ -61,7 +61,7 @@ F src/os_win.c c67a2c46d929cf54c8f80ec5e6079cf684a141a9
|
|||||||
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
||||||
F src/pager.c f65d0b05182ff6059e9566b2eed1ec5f0cddc2f6
|
F src/pager.c f65d0b05182ff6059e9566b2eed1ec5f0cddc2f6
|
||||||
F src/pager.h 425a9e52d5404158de016799715cbc2c3d685178
|
F src/pager.h 425a9e52d5404158de016799715cbc2c3d685178
|
||||||
F src/parse.y 969fa5ddf747ba1034c9960cce49610c4b3fa617
|
F src/parse.y c2daaa24fa2c8e256af740f29d3d61ac552fbd49
|
||||||
F src/pragma.c 607b0f3b1916aa01918acd08499bd6ef21065c23
|
F src/pragma.c 607b0f3b1916aa01918acd08499bd6ef21065c23
|
||||||
F src/prepare.c cf0fc8ebaf94409955ecb09ffeb0099c9ef44693
|
F src/prepare.c cf0fc8ebaf94409955ecb09ffeb0099c9ef44693
|
||||||
F src/printf.c cda33918f602ff20bfba3ceae642ac1ed8f476d6
|
F src/printf.c cda33918f602ff20bfba3ceae642ac1ed8f476d6
|
||||||
@ -70,7 +70,7 @@ F src/select.c 46e1d5bf796696a10587e981407fd75632fc9ba3
|
|||||||
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
|
F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
|
||||||
F src/shell.c 738f55ed75fb36731e764bfdb40756ac43b90b08
|
F src/shell.c 738f55ed75fb36731e764bfdb40756ac43b90b08
|
||||||
F src/sqlite.h.in 0bf6f03f9a14dde5f3a4f87471840803acaa4497
|
F src/sqlite.h.in 0bf6f03f9a14dde5f3a4f87471840803acaa4497
|
||||||
F src/sqliteInt.h d99092c3bb510712b26461cf07cff8eca686b83d
|
F src/sqliteInt.h ccc6c2351fb454aec927b5da8d83561c7d4b48cd
|
||||||
F src/table.c f64ec4fbfe333f8df925bc6ba494f55e05b0e75e
|
F src/table.c f64ec4fbfe333f8df925bc6ba494f55e05b0e75e
|
||||||
F src/tclsqlite.c d9c26374b52cd47233ae0620d0a858a59b601f89
|
F src/tclsqlite.c d9c26374b52cd47233ae0620d0a858a59b601f89
|
||||||
F src/test1.c 9d299609a0ce35157fe15cdf8b4c663db5d40386
|
F src/test1.c 9d299609a0ce35157fe15cdf8b4c663db5d40386
|
||||||
@ -268,6 +268,7 @@ F test/trigger4.test 4bed3705c9df4aaf7a7b164a2d573410d05ca025
|
|||||||
F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83
|
F test/trigger5.test 619391a3e9fc194081d22cefd830d811e7badf83
|
||||||
F test/trigger6.test 0e411654f122552da6590f0b4e6f781048a4a9b9
|
F test/trigger6.test 0e411654f122552da6590f0b4e6f781048a4a9b9
|
||||||
F test/trigger7.test 0afa870be2ce1b132cdb85b17a4a4ef45aa8cece
|
F test/trigger7.test 0afa870be2ce1b132cdb85b17a4a4ef45aa8cece
|
||||||
|
F test/trigger8.test 3a09275aa2214fdff56f731b1e775d8dfee4408a
|
||||||
F test/types.test a74083427a73ff8af2723bae209d09cce5722c3a
|
F test/types.test a74083427a73ff8af2723bae209d09cce5722c3a
|
||||||
F test/types2.test 81dd1897be8ef4b5b73d0006e6076abe40610de3
|
F test/types2.test 81dd1897be8ef4b5b73d0006e6076abe40610de3
|
||||||
F test/types3.test ea0ddf793ad5cd17c3b029dd8f48473059f873b6
|
F test/types3.test ea0ddf793ad5cd17c3b029dd8f48473059f873b6
|
||||||
@ -354,7 +355,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
||||||
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
|
||||||
P a359b1817e85a9c5f31085817ae70e3e0b8ac7a7
|
P bd2c38f4670d1243284f2431b5e0712a6d1de1d7
|
||||||
R 9e1f3653271b124969ed2916a0c66ae2
|
R 24d0b5ace2fb2a16cf769d74dd5e70e5
|
||||||
U drh
|
U drh
|
||||||
Z b0010c3c2b756095a18a8f4b4a40541b
|
Z 6578b75ec2a8a5a9e423f996f316552a
|
||||||
|
@ -1 +1 @@
|
|||||||
bd2c38f4670d1243284f2431b5e0712a6d1de1d7
|
b4fa96d0e92182cd8792e88b4540b95912bb9f95
|
13
src/parse.y
13
src/parse.y
@ -14,7 +14,7 @@
|
|||||||
** the parser. Lemon will also generate a header file containing
|
** the parser. Lemon will also generate a header file containing
|
||||||
** numeric codes for all of the tokens.
|
** 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_"
|
// All token codes are small integers with #defines that begin with "TK_"
|
||||||
@ -950,9 +950,14 @@ when_clause(A) ::= WHEN expr(X). { A = X; }
|
|||||||
|
|
||||||
%type trigger_cmd_list {TriggerStep*}
|
%type trigger_cmd_list {TriggerStep*}
|
||||||
%destructor trigger_cmd_list {sqlite3DeleteTriggerStep($$);}
|
%destructor trigger_cmd_list {sqlite3DeleteTriggerStep($$);}
|
||||||
trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). {
|
trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. {
|
||||||
X->pNext = Y;
|
if( Y ){
|
||||||
A = X;
|
Y->pLast->pNext = X;
|
||||||
|
}else{
|
||||||
|
Y = X;
|
||||||
|
}
|
||||||
|
Y->pLast = X;
|
||||||
|
A = Y;
|
||||||
}
|
}
|
||||||
trigger_cmd_list(A) ::= . { A = 0; }
|
trigger_cmd_list(A) ::= . { A = 0; }
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
*************************************************************************
|
*************************************************************************
|
||||||
** Internal interface definitions for SQLite.
|
** 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_
|
#ifndef _SQLITEINT_H_
|
||||||
#define _SQLITEINT_H_
|
#define _SQLITEINT_H_
|
||||||
@ -1383,8 +1383,8 @@ struct TriggerStep {
|
|||||||
ExprList *pExprList; /* Valid for UPDATE statements and sometimes
|
ExprList *pExprList; /* Valid for UPDATE statements and sometimes
|
||||||
INSERT steps (when pSelect == 0) */
|
INSERT steps (when pSelect == 0) */
|
||||||
IdList *pIdList; /* Valid for INSERT statements only */
|
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 */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
42
test/trigger8.test
Normal file
42
test/trigger8.test
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# 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
|
Reference in New Issue
Block a user