3 # The author disclaims copyright to this source code. In place of
4 # a legal notice, here is a blessing:
6 # May you do good and not evil.
7 # May you find forgiveness for yourself and forgive others.
8 # May you share freely, never taking more than you give.
10 #***********************************************************************
12 # This file is to test that ticket #2767 has been fixed.
13 # Ticket #2767 is for a VDBE stack overflow on BEFORE
14 # triggers that run RAISE(IGNORE).
16 # $Id: tkt2767.test,v 1.3 2009/04/07 14:14:23 danielk1977 Exp $
19 set testdir [file dirname $argv0]
20 source $testdir/tester.tcl
22 ifcapable !trigger { finish_test ; return }
26 -- Construct a table with many rows of data
28 INSERT INTO t1 VALUES(1);
29 INSERT INTO t1 VALUES(2);
30 INSERT INTO t1 SELECT x+2 FROM t1;
31 INSERT INTO t1 SELECT x+4 FROM t1;
32 INSERT INTO t1 SELECT x+8 FROM t1;
33 INSERT INTO t1 SELECT x+16 FROM t1;
35 -- BEFORE triggers that invoke raise(ignore). The effect of
36 -- these triggers should be to make INSERTs, UPDATEs, and DELETEs
38 CREATE TRIGGER r1 BEFORE UPDATE ON t1 BEGIN
41 CREATE TRIGGER r2 BEFORE DELETE ON t1 BEGIN
44 CREATE TRIGGER r3 BEFORE INSERT ON t1 BEGIN
48 -- Verify the table content
49 SELECT count(*), sum(x) FROM t1;
53 # Try to delete all elements of the table. This will invoke the
54 # DELETE trigger 32 times, which should overflow the VDBE stack if
55 # the problem of #2767 is not fixed. If the problem is fixed, all
56 # the deletes should be no-ops so the table should remain unchanged.
60 DELETE FROM t1 WHERE x>0;
61 SELECT count(*), sum(x) FROM t1;
65 # Try to update all elements of the table. This will invoke the
66 # UPDATE trigger 32 times, which should overflow the VDBE stack if
67 # the problem of #2767 is not fixed. If the problem is fixed, all
68 # the updates should be no-ops so the table should remain unchanged.
73 SELECT count(*), sum(x) FROM t1;
77 # Invoke the insert trigger. The insert trigger was working
78 # even prior to the fix of #2767. But it seems good to go ahead
79 # and verify that it works.
83 INSERT INTO t1 SELECT x+32 FROM t1;
84 SELECT count(*), sum(x) FROM t1;